Vi sono vari modi per controllare i dati che riceviamo da un form html: se stiamo utilizzando PHP possiamo servirci di alcune funzioni messe a disposizione dal motore PHP ( come ad esempio empty() ), ma possiamo anche sceglire un’altra strada, Javascript.

Il controllo di campi numeri e testuali è abbastanza banale, e in rete di trovano migliaia di esempi: ciò che non si trova molto spesso è il controllo delle mail, e soprattutto il controllo da effettuare per verificare la validità di una mail.

Supponiamo di avere un form fatto in questo modo:

<form name=”emailForm” method=”post” action=”">
<p>Inserisci il tuo nome:<br>
<input name=”name” type=”text”>
<br>
<span>Inserisci il tuo indirizzo e-mail:</span><br>
<input name=”email” type=”text”>
<br>

ecc.
<input name=”Submit” type=”submit” value=”Invia” onclick=”return validateForm();”>
</form>

Questo form ha diversi campi, a noi interessa il campo email e il campo Submit : quest’ultimo, una volta cliccato, chiama una funzione Javascript, validateForm(); che si occupa appunto di validare il form. Come abbiamo detto precedentemente, concentriamoci sul controllo e sulla validazione della mail. Le righe di codice da inserire nella funzione di cui sopra per raggiungere il notro obiettivo sono:

/*
Se il valore del campo email del form emailForm è vuoto, salviamo nella variabile errmsg, oltre a possibili errori per controlli precedenti, un messaggio che specifichi la mancanza della mail
*/
if ( !document.emailForm.email.value ) {
errmsg += ‘\nDovete immettere la MAIL’;

} else {

/*
Se il campo mail è stato effettivamente completato, controlliamo però la validità di tale campo: per fare questo utilizziamo le espressioni regolari e alcune funzioni native di Javascript. Quindi creiamo un oggetto “espressione regolare” che salviamo nella varibile “espressione“, recuperiamo il valore della mail inviato tramite il form e lo salviamo nella variabile stringa ; infine facciamo il confronto tra questi due valori.
Se stringa contiente un valore che non rispetta le regole imposte dall’espressione regolare, allora inseriamo un messaggio appropriato, altrimenti non si verificaheranno problemi e la computazione potra proseguire tranquillamente.
*/
var espressione = new RegExp(“^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+[\.]([a-z0-9-]+)*([a-z]{2,3})$”);
var stringa = document.emailForm.email.value;
if ( !espressione.test(stringa) )
errmsg += ‘\nDovete immettere una MAIL VALIDA’;
}

Le espressioni regolari vengono usate particolarmente per manipolare stringhe, e quindi in linguaggi come Perl, che bene si adattano alla gestione e configurazioni di alcune caratteristiche particolari dei server.
L’argomento delle espressioni regolari è molto vasto, e lo rimandiamo ad ulteriori chiarimenti futuri: per chi volesse iniziare ad approfondire questo affascinante studio può dare un’occhiata a questo indirizzo qui.


Segue l’elenco dei comandi principali per gestire uno tra gli editor più importanti presenti praticamente in ogni versioni di Linux: attraverso questo editor si possono gestire tutti i tipi di file del sistema, e per chi gestisce da remoto un server Linux diventa di vitale importanza conoscere almeno le basi di VI.

Premessa

L’editor VI ha due modalità di funziomento: una per inserire il testo e l’altra per inserire i comandi. Quando apriamoun file con il comando “vi nomefile” la modalità di default è quella di comando: per poter modificare il file inserendo testo dobbiamo passare alla modalità testo premendo il tasto “ i ” : da questo momento in poi qualsiasi carattere o tasto premiamo verrà inserito nel file con il suo valore “testuale”. Per tornare alla modalità comando è sufficiente premere il tasto di “ESC“, digitare il comando che si desidera e premere “invio“.

Comandi Principali : Uscita & Salvataggio

  1. ZZ salvare e uscire
  2. :w salvare
  3. :w <file> salvare in altro file con il nome desiderato
  4. :wq salvare e uscire
  5. :q se non sono state effettuate modifche usce senza salvare
  6. :q! uscita incondizionata

Comandi di copia e incolla

  1. yy copia la riga corrente
  2. y2 <giu> copia 2 righe sotto la posizione in cui si trova il cursore
  3. p incolla il testo nel punto dove si trova il cursore

Cancellare righe o caratteri

  1. x cancella il carattere in cui si trova il cursore
  2. X cancella il carattere alla sinistra del cursore
  3. D cancella tutto quello che si trova alla sinistra del cursore fino alla fine della riga
  4. dd cancella la riga in cui si trova il cursore
  5. 3dd cancella 3 righe partendo dalla quella in cui si trova il cursore
  6. dG cancella dalla posizione in cui si trova il cursore fino alla fine del file
  7. d1G cancella dalla posizione in cui si trova il cursore fino all’inizio del file

Spostarsi nel file

  1. ^ inizio della riga corrente
  2. $ fine della riga corrente
  3. G fine del file
  4. 1G inizio del file

Ricerca e sostituzione del testo

  1. /<testo> cerca il testo dalla posizione corrente verso il basso
  2. ?<testo> cerca il testo dalla posizione corrente verso l’alto
  3. u annulla l’ultima modifica effettuata
  4. U annulla l’ultimo annullamento
  5. . ripete l’ultimo comando


Supponiamo di voler salvare in un array i nomi delle immagini contenute in una determinata directory, in modo da, ad esempio, utilizzarea tale array per la gestione di una gallery.

Vediamo come al solito un esempio pratico commentato per spiegare al meglio tutti i passi necessari:

/*
Creiamo un array $images per contenere i nomi delle immagini che sono salvate nella directory in questione
*/
$images = Array();

/*
mydir è il percorso fisico della directory in cui si trovano le immagini
*/
$dir = ‘mydir’;

/*
photodir è il percorso virtuale della directory in cui si trovano le immagini
*/
$virtual = “photodir”;

/*
Se la direcotry esiste…
*/
if ( file_exists($dir) ) {

/*
Apriamo l’handle della directory
*/
$handle = opendir ( $dir );

/*
readdir restituisce il nomefile del file successivo della directory: in pratica facciamo un ciclo (while) sulla directory finchè ci sono file da leggere, e per ogni iterazione salviamo il nome del file nella variabile $file
*/
while ( false !== ( $file = readdir($handle) ) ) {

/*
Se $dir.$file è un file esistente nel nostro filesystem….
*/
if ( is_file($dir.$file) ) {

/*
..inseriamo il file nell’array images, attraverso il metodo array_push()
*/
array_push($images,$file);

}
}

/*Chiudiamo l’handle precedentemente aperto*/
$handle = closedir($handle);

/*
Se la directory è inesistente, stampiamo un avviso come feedback..
*/
} else echo “Directory Inesistente!”;

Attraverso queste semplici linee di codice, alla fine del ciclo avremo disponibili nell’array $images tutti i nomi dei dile contenuti nella directory mydir .

Per chi sviluppa piattaforme web, spesse volte capita la situazione di lavorare ad un aggiornamento del sistema che ovviamente non è online e che magari risiede su una diversa macchina della versione originale che continua a “girare” normalmente.

Ovviamente durante lo sviluppo di una piattaforma da aggiornare, la versione precedente deve continuare ad essere online finchè la nuova versione non è pronta, ma d’altro canto anche chi lavora alla nuova implementazione deve poter testare il nuovo software e quindi mettelo in rete per avere un feedback.

La cosa più veloce da fare in questi casi per chi utilizza come sistema operativo Windows, è quella di aprire il seguente file:

C:\WINDOWS\system32\drivers\etc\hosts

 

Questo file permette di forzare la mappatura degli indirizzi IP: vediamo un esempio. Supponiamo di stare lavorando alla nuova versione del sito www.mysite.com : ovviamente potremmo posizionare la nuova versione in una sottocartella e risolvere il problema, ma se l’applicativo è di una certa dimensione o se la nuova versione risiede su un’altra macchina più nuova e performante ma che è mappata con lo stesso dominio, allora si presenta il problema. Ovviamente finchè non facciamo un reindirizzamento quando scriveremo sul nostro browser www.mysite.com continuerà ad vedersi la vecchia versione, ma allo stesso tempo non possiamo fare il reindirizzamento finchè la nuova versione non è pronta.

Allora possiamo forzare, attraverso alcune mofiche al file di cui sopra, la mappatura del sito, e quando digitiamo nel browser www.mysite.com vedere la versione in sviluppo residente nella macchina che indichiamo: ovviamente questa modifica varrà solo in locale, saremo gli unici a vedere sotto il dominio www.mysite.com la nuova versione, gli altri continueranno a non vedere modifiche.

Vediamo un esempio pratico, supponendo che la versione attuale del dominio www.mysite.com risieda su xxx.xxx.xxx.xxx mentre quella nuova risiede su yyy.yyy.yyy.yyy . Per effettuare la forzatura è sufficiente aggiungere al file hosts la seguente riga:

yyy.yyy.yyy.yyy                www.mysite.com

Una volta salvato il file e aperto il browser, quando andremo a scrivere www.mysite.com ora vedremo la versione in sviluppo, e potremmo lavorare e testare tranquilli. Una volta finito, possiamo o commentare ( aggiungendo davanti alla riga il simbolo # ) o cancellare la riga, e tutto tornerà come prima.

In ogni OS (Operating System) basato su Linux, i comandi da console sono fondamentali, per diverse attività che caratterizzano l’utilizzo stesso del sistema. Anche se ultimamente sono stare rilasciate versioni decisamente user-friendly ( v. Ubuntu ), che facilitano l’installazione ma anche l’utilizzo del OS, tuttavia i comandi da console rimangono fondamentali su un sistema Linux, soprattutto per chi intende approfondire le proprie conoscenze.

Per questo motivo, abbiamo deciso di raccogliere quelli che sono i principali comandi che spesse volte diventa necessario utilizzare per amminstrare al meglio il proprio sistama operativo Linux. Abbiamo scelto come OS d’esempio OpenSuse 10.3, che riteniamo una delle ultime release veramente interessanti, sia per la completezza e la robustezza del kernel sia per la facilità e la comodità di utilizzo anche per chi si avvicina per la prima volta al fantastico mondo Linux. La maggior parte dei comandi che vedremo funzionano su tutti i sistemi basati su Linux, quindi non vi preoccupate: se avete un altro OS, questa guida vi sarà comunque utilissima!! ;)

CHMOD

Il primo comando che vediamo è uno dei più famosi nei sistemi Linux: chmod. Questo comando server per gestire i permessi e gli accessi a tutte le risorse del sistema (file, directory, ecc.) . Quindi attraverso questo comando decidiamo chi può fare che cosa: ma vediamo in dettaglio il suo funzionamento.

chmod (-R) 0777 /risorsa

  1. -R è un attributo opzionale: indica la ricorsività;
  2. /risorsa è il contenuto o l’oggetto a cui intendiamo applicare le restrizioni;
  3. 0777 rappresenta la codifica dei permessi. Vi sono diverse possibilità, che seguono uno schema preciso. chmod ci permette di assegnare permessi in scrittura, lettura ed esecuzione, elementi che ci riferiamo attraverso rispettivamente i valori 4, 2, 1: quindi assegnare 7 (4+2+1) significa assegnare i permessi in scrittura, in lettura e anche in esecuzione, ovvero non assegnare restrizioni. Ma perchè ripetiamo allora tre volte il 7? Perchè il primo si riferisce all’utente, il secondo a quelli del gruppo di appartenenza e il terzo agli “altri”.

Quindi, se ad esempio scriviamo nella shell: chmod -R 744 /myDir, assegnamo alla directory myDir e a tutti gli elementi che essa contiene (ricorsivamente) i permessi in lettura, scrittura, esecuzione, per il proprietario, e in sola lettura per gli utenti dello stesso gruppo e per gli altri utenti che non rientrano nelle categorie precedenti.

CHOWN

Questo comando principalmente permette di assegnare utente e un gruppo ad una determinata risorsa (purchè l’utente e il gruppo siano esistenti). Il comando da digitare è il seguente:

chown (-R) user:group /risorsa

in cui -R ha la stessa funzione della precedente, user e group sono rispettivamente il nuovo utente e il nuovo gruppo che vogliamo assegnare alla risorsa /risorsa .

LS

Con questo comando possiamo elencare tutte le risorse di una determinata directory, visualizzando per ogni elemento alcune importanti proprietà, come ad esempio i permessi settati attraverso il comando chmod. Il comando da digitare è il seguente:

ls -al

Con questo comando elenchiamo tutte le risorse contenute nella directory corrente, e per ogni risorsa ne visualizziamo le caratteristiche principali. Nel caso di directory con molti elementi al suo interno, è possibile utilizzare l’opzione -C, che visualizza il contenuto della directory in più colonne.

MAN

Questo è forse il comando più importante: infatti digitando

man comando

verrà visualizzato un manuale che raccoglie tutte le informazioni sul comando passato come parametro. In sostanza, attraverso il comando man si possono conoscere e studiare tutti gli altri comandi. Nel caso in cui le istruzioni visualizzate siano particolarmente lunghe, allora si può premere “invio” per preseguire nella lettura: per uscire dal manuale è sufficiente digitare la combinazione di tasti “:q” .

SU

Il comando su permette di cambiare utente. Per questioni di sicurezza, non bisognerebbe mai lavorare con l’account di root: bisognerebbe sempre creare un proprio user con il quale si completa l’attività di tutti i giorni. A volte, però, quando ad esempio diventa necessario aggiornare alcune determinate configurazioni del sistema, viene richiesta la password di root. In alcuni casi estremi, invece, è proprio neessario fare l’accesso come utente root: ma per far questo non è necessario fare il logout.
Nel terminale, è sufficiente digitare su , premere “invio“, inserire la password di root, ed ecco che siamo diventati gli amministratori del sistema.

PHP -V

Il comando php -v permette di visualizzare nella shell le informazioni base circa il motore PHP installato sul proprio server o sistema Linux, informazioni come la versione, il copyright e la data dell’ultimo aggiornamento.

TOUCH

Questo comando permette la creazione di file. La sintassi è semplicissima: touch nomefile se vogliamo creare il file nella directory corrente, altrimenti touch /percorso/nomefile per creare il file nella directory desiderata.

( Questo elenco verrà constantemente aggiornato, quindi se ora non trovi quello che ti serve…torna a trovarci!! :P )

Supponiamo di dover gestire un portale web con alcune directory ad accesso controllato, e supponiamo anche che il server web a disposizione sia Apache. Se volessimo che l’accesso ad una determinata direcotory avvenga esclusivamente con la richiesta di un username e una password, come possiamo fare?

Vi sono molti modi per proteggere il proprio sito web. Il modo più semplice è utilizzare il file .htaccess per richiedere l’accesso ad una risorsa attraverso l’inserimento di una password e di un username. Per fare questo, è sufficiente seguire questi pochi passi:

  1. Creiamo un file .htaccess
  2. Includiamo le seguenti righe di codice:
    AuthName “Il mio sito, richiesti Username e Password”
    AuthType Basic
    AuthUserFile /miopercorso/.htpass
    Require valid-user
  3. Creiamo file .htpass per la password. Per fare questo possiamo scegliere due vie: se abbiamo a disposizione la shell, è sufficiente eseguire il seguente comando htpasswd -c .htpass username password , dove username e password sono ovviamente a nostra scelta.
    Attenzione: il percorso del file .htpass deve essere quello completo.
    Se invece non abbiamo a disposizione una shell, allora possiamo utilizzare questo link per creare la password. A questo punto non ci rimane che creare un file chiamato “.htpass” , uplodarlo nella directory specificata nel file .htaccess e copiarci i dati che abbiamo appena generato, che saranno simile alla riga seguente: blogrammazione:YmqQ5rgEtWe8c .
  4. Ovviamente l’ultimo passo da fare è riavviare il server web, affinchè le modifiche abbiamo effetto.

Se ora proviamo ad accedere alla directory che abbiamo indicato nel file .htaccess vedremo che ci vengono richiesti username e password.

La promozione e lo studio del posizionamento di un sito Joomla non è un’operazione facile. Questo articolo traccia alcune linee guida per presentare tecniche generali SEO (Search Engine Optimization): questo è un campo vastissimo, con migliaia di tecniche differenti da adottare a seconda dello scopo che si vuole raggiungere. Con questa guida, restringiamo il campo a chi intende migliorare il posizionamento dei propri siti in Joomla: sarebbe impensabile esaurire un tal argomento in un solo articolo.

Con il termine SEO si intendono tutte quelle attività che servono a migliorare il posizionamento di una pagina web nei risultati forniti dai motori di ricerca. Per chi non ha conoscenze approfondite di un server web, come apache, ma utilizza Joomla come piattaforma, può appoggiarsi ad alcuni componenti che fanno molto del lavoro che bisognerebbe fare “a mano”. La cosa migliore sarebbe imparare ad utilizzare i server web ed in particolare apache, uno tra i migliori prodotti della sua categoria: ma ci rendiamo conto che lo studio di questo prodotto può risultare per molti davvero ostico, ed allora…ecco due dritte su come superare questo ostacolo!

Innanzitutto è fondamentale seguire questi semplici passi:

  1. Ogni pagina del sito deve avere un campo <title> diverso. In più, il titolo della pagina dovrebbe contenere le parole chiave relative al contenuto della pagina stessa.
  2. Il titolo del contenuto della pagina deve essere lo stesso del campo <title>: bisogna solo fare attenzione a non ripetere troppe volte le keywords.
  3. E’ di fondamentale importanza linkare sempre le parole chiave o più rilevanti del contenuto a risorse esterne o interne. La maggior parte dei motori di ricerca, tra cui ovviamente Google, premia le risorse valide e permette di salire nei risultati di ricerca.
  4. Ogni volta che inseriamo un contenuto Joomla abbiamo la possibilità di compilare i metatag description e keyword in modo da differenziarli e specificarli per ogni articolo che inseriamo. Questo è uno degli elementi più importanti.
  5. Bisogna curare anche il contenuto, prestando attenzione che il tema trattato sia originale e in relazione alle tematiche principali trattate dal sito.
  6. Comunicare con il mondo esterno, cercare collaborazioni e scambi di link testuali nelle homepage di siti con i quali si hanno partnership: questo permette di aumentare il page rank, e di consegueza le posizioni nei risultati di una ricerca.

Vi sono diversi componenti e moduli Joomla che aiutano a completare questi passi: come precedentemente suggerito, sarebbe di gran lunga consigliato gestire il tutto “a mano”, per avere più controllo e coscienza di ciò che succede. Tuttavia il componente “sh404SEF” è sicuramente il migliore per quel che riguarda l’URL Rewriting. Questa tecnica consiste nell’utilizzare URL modificati prima di reperire le risorse che gli stessi identificano, per una varietà di scopi, come appunto migliorare il posizionamento, oppure prevenire link indesiderati o controllare alcune delle principali funzionalità fornite dal protocollo HTTP per i server web.

Un altro elemento fondamentale, ma non legato a Joomla, è rappresentato dalle sitemap: ogni motore di ricerca principale ( Google, Yahoo, ecc ) mette a disposizione non solo strumenti per la gestione, ma addirittura strumenti che generano la sitemap automaticamente in base all’URL che passiamo al generator. Una sitemap è semplicemente una pagina web che in qualche modo riassume tutto il contenuto del sito, che oltre a facilitare la navigazione del sito permette di facilitare la scansione del sito da parte dei crawler dei motori di ricerca.

Una volta generata la sitemap ed inserita nella cartella del nostro sito, è convenitente a questo punto segnalarla ai motori di ricerca attraverso la pagina appropriata, in modo da velocizzare il riconoscimento e l’eventuale correzione di errori. La pagina in questioneè norlmalmente raggiungibiledagli strumenti gestione che il motore mette a disposizione per le sitmap.

Eseguendo questi piccoli accorgimenti, si potranno iniziare a vedere dei miglioramenti: bisogna sempre tenere presente che le tecniche SEO sono caratterizzate dalla grande difficoltà per cui i risultati di tali applicazioni non sono visibili nell’immediato, ma richiedono tempo, costanza e applicazione. Bisogna avere pazienza per ottenere dei risultati soddisfacenti, lavorando costantemente per tempi che sono nell’ordine di mesi. Quindi non ci dobbiamo aspettare dei miglioramenti improvvisi: pazientate, e seguite sempre le linee guida o le tecniche ufficiali fornite dai motori di ricera, perchè così come i miglioramenti si vedono nel tempo, anche le catastrofi hanno la medesima caratteristica! ;)

Nell’utilizzare sistemi di commenti o post, a volte diventa necessario mettere un limite al numero di caratteri che è possibile inserire nella textarea dedicata, per evitare la copiatura di articoli o l’inserimento di commenti che diventano più lunghi dell’articolo stesso.

Questo esempio è utilie a tale scopo: in pochi passi si configura un contatore javascript che blocca l’inserimento dei caratteri all’interno della textarea controllata una volta che viene superato il limite imposto. L’esempio è scaricabile qui.

In un file javascript .js salviamo il seguente codice:

function getObject(obj) {
  var theObj;
  if(document.all) {
    if(typeof obj=="string") {
      return document.all(obj);
    } else {
      return obj.style;
    }
  }
  if(document.getElementById) {
    if(typeof obj=="string") {
      return document.getElementById(obj);
    } else {
      return obj.style;
    }
  }
  return null;
}

function Count(entrada,salida,texto,caracteres) {
  var entradaObj=getObject(entrada);
  var salidaObj=getObject(salida);
  var longitud=caracteres - entradaObj.value.length;
  if(longitud <= 0) {
    longitud=0;
    texto='<span class="disable"> '+texto+' </span>';
    entradaObj.value=entradaObj.value.substr(0,caracteres);
  }
  salidaObj.innerHTML = texto.replace("{CHAR}",longitud);
}

A questo punto non ci resta che richiamare con il solito tag ‘<script src”..”></string>’ il file javacript appena creata, ed infine configurare la texarea che vogliamo controllare:

<textarea id="text" name="text" 
onkeyup="Count('text','counter','{CHAR} caratteri rimanenti',2000);"
maxlength="2000">
</textarea><br />
<span id="counter" class="minitext"><i>2000 caratteri rimanenti</i></span>

Il valore “2000″ è configurabile, e rappresenta il massimo numero di caratteri che è possibile inserire: lo “span” invece è dove verrà visualizzato il numero di caratteri rimanenti, calcolati a mano a mano che vengno inseriti.

Nel post di qualche giorno fa abbiamo introdotto JQuery con un esempio pratico, implementando un div a comparsa con un effetto davvero elegante e graficamente accattivante.

L’esempio che vedremo in questo articolo è quello di una gallery di immagini da aggiungere sul vostro sito, una gallery però veramente accattivamente, con un incredibile effetto 3D per “sfogliare” le foto e l’effetto lightbox per l’ingrandimento dell’immagine. Una demo dell’esempio che andremo a completare è disponibile qui.

L’esempio si basa sull’utilizzo del framework JQuery in collaborazione con un plugin per JQuery , il plugin Interface. Per lavorare,dunque, dobbiamo scaricare il framework e il plugin che potete trovare rispettivamente qui e qui.

Una volta inclusi i file .js scaricati, è sufficiente sostituire nel div ‘<div id=”carousel”>’ le immagini che intendete includere nella vostra gallery. Nel caso in cui fossero molte, potreste pensare di fare un ciclio o un array, che sicuramente semplificato di parecchio la vita.

Potete scegliere se le immagini devono aprire un lik o l’ingradimento della stessa con un effetto davvero molto accattivante: nell’esempio, l’immagine di Alonso, quella che una volta caricata la pagina si trova nel centro, si apre con l’effetto lightbox, mentre le altre puntano a pagine dedicate ad alcune squadre di calcio del nostro quotidiano sportivo preferito, Realsports.it .La differenza sta nel come impostiamo il link, vediamo un esempio:

1. <a href=”link1.jpg” title=”Alonso” rel=”imagebox”><img src=”link” width=”50%” /></a>

2. <a href=”link2.php” title=”Alonso”><img src=”link” width=”50%” /></a>

Il link al punto 1. è quello che utilizza l’effetto lightbox per aprire ed ingrandire l’mmagine, mentre nel punto 2. viene utilizzato il link ad una pagina, nel nostro esempio link2.php .

L’ultimo passo che ci rimane da fare è inserire lo script che richiama le funzioni di gestione della gallery. Analizziamo lo script:

<script type=”text/javascript”>
window.onload =
function()
{
$(‘#carousel’).Carousel(
{

/*
I comandi seguenti rappresentano le direttive che configurano la gallery: la larghezza, l’altezza, la larghezza delle immagini che compaiono dietro alle altre per dare l’effetto 3D, l’elemento html utilizzato per riconoscere gli oggetti della gallery ( nel nostro caso il tag <a> ) , il livello di riflessione e di velocità di rotazione.
*/
itemWidth: 110,
itemHeight: 62,
itemMinWidth: 50,
items: ‘a’,
reflections: .5,
rotationSpeed: 2.7
}
);
$.ImageBox.init(
{

/*
Link all’immagine di Loading che verrà utilizzata durante il caricamento della foto ingrandita usando link del tipo 1. nell’esempio precedente
*/
loaderSRC: ‘images/imagebox/loading.gif’,

/*Link all’immagine di Chiusura su cui cliccare per chiudere la foto ingrandita usando link del tipo 1. nell’esempio precedente
*/
closeHTML: ‘<img src=”http://www.realsports.it/resources/tRealSportsTemplate/arrow_realsports.gif” />’
}
);
};
</script>

A questo punto dovrebbe essere chiaro il funzionamento di questa gallery: aggiungiamo solo una precisazione. Per chi intesse personalizzare lo stile, può tranquillamente modificare a piacimento gli stili presenti nella pagine di esempio, l’importante è ovviamente non modificare gli identificati di classe (es. #ImageBoxCaption) .

L’ RSS ( Really Simple Syndication ) è diventanto ormai uno dei più popolari formati per lo scambio di contenuti sul Web. E’ basato su XML, da cui non solo ha ereditato la semplicità e la flessibilità, ma anche la possibilità di portersi adattare a qualsiasi piattaforma ( Windows, Linux, ecc. ) .

Per questi motivi sul Web sono molte le guide che spiegano come “scrivere” RSS e mettere a disposizione di tutti i propri contenuti: d’altra parte sono poche quelle che spiegano come utilizzare questi fogli XML per arrichire il contenuto dei propri portali. L’esempio che vedremo spiega come sia possibile, utilizzando il PHP, adattare, leggere e integrare nel proprio sito contenuti distribuiti attraverso questo formato.

Questo articolo non si occupa della generazione di RSS, ma del loro utilizzo, perciò daremo per scontanto l’utilizzo di un codice RSS corretto. Il codice PHP che ci interessa è il seguente:

<table>
<?
/*
Con questa istruzione assegnamo alla variabile $feedUrl il link dell’RSS che per ipotesi supponiamo corretto
*/
$feedUrl = ‘http://dominio.com/link_rss.xml’;

/*
file_get_contents è una funzione php che legge il file all’interno di una stringa, in sostanza “raccoglie” tutto il contenuto del file in una stringa

*/
$rawFeed = file_get_contents($feedUrl);

/*
Questo è il passo principale del nostro frammento di codice:
SimpleXmlElement fornisce un metodo semplice e facilmente utilizzabile per convertire un XML in un oggeto che può essere processato con le normali proprietà degli iteratori e degli array.
*/

$xml = new SimpleXmlElement($rawFeed);

/*
Itero sull’oggetto creato: ora posso semplicemente utilizzare i valori di ogni “elemento” di contenuto dell’RSS. Nel nostro esempio supponiamo che l’RSS metta a disposizione l’URL di una immagine, un link, un titolo, una descrizione per ogni riga di contenuto del Feed.
*/
foreach ($xml->channel->item as $item) {
echo “<tr>
<td>
<img src=’”.$item->image.”‘ />
</td>
<td >
<strong><a href=’”.$item->link.”‘>”.htmlspecialchars_decode($item->title).”</a></strong>
<br />”.$item->description.”
</td>
</tr>
<tr><td> </td></tr>
“;
}
?>
</table>

Come è ormai nostra abitudine, abbiamo ampiamente commentato direttamente il codice, in modo da facilitarne l’appredimento. In pochissimi passi, abbiamo recuperato e integrato completamente nel nostro portale contenuto multimediale (testo, immagini, ecc.) provenite da una fonte esterna. Proprio questa è la forza di questa tecnologia: la semplicità e la leggerezza. In pochi passi, abbiamo creato una tabella, in cui ad ogni riga corrisponde un elemento del nostro RSS di esempio.

Per aggiugere l’effetto scorrevole, è sufficiente utilizzare il tag <marquee>, che permette tra le altre cose anche di modificare la velocità di scorrimento. Vediamo un esempio:

<marquee behavior=”scroll” direction=”up” scrollAmount=”1″ scrollDelay=”75″

onMouseOver=”this.stop()” onMouseOut=”this.start()”>/marquee>

Con questa riga di codice creiamo l’effetto a scorrimento: possiamo utilizzare l’attributo “direction” per specificare la direzione, l’attributo “scrollDelay” per specificare la velocità (valori più bassi = velocità maggiore) e gli attributi “onMouseOver” e “onMouseOut” con le realtive funzioni “stop()” e “start()” per far sì che lo scrolling si fermi quando il mouse è sopra l’elemento ma riprenda non appena il mouse esce dall’elenco degli elementi.

Per chi volesse scaricare il codice, può comodamente cliccare qui.

Ajax ( Asynchronous JavaScript and XML ) è una tecnica di sviluppo web che ha lo scopo di proporre interattivà senza tuttavia dover ricaricare la pagina ad ogni interazione con l’utente. In sostanza, Ajax permette attività in backgroud rispetto ad eventi principali: un esempio tipico di utilizzo di questa tecnica è l’aggiornamento dinamico di elenchi, per esempio utilizzato ultimamente nei social networks. Mentre l’utente può scorrere le notizie e qundi interagire con la pagina, l’elenco delle news inserite si autoaggiorna senza tuttavia dover attedere che sia l’utente stesso ad effettuare l’aggiornamento della pagina.

Questa tecnica ha ormai aperto le porte a nuove tipologie di applicazioni, sempre più interattive e sempre più accattivanti. Ma come funziona Ajax? Ecco un esempio passo-passo di utilizzo di queste tecnologie: i commenti si possono leggere direttamente sul codice, in modo da facilitare la comprensione e velocizzare l’apprendimento. Supponiamo che questo codice sia contenuto in un file
ajax1.js” :

/*
Questa è la funzione principale di creazione: si crea la variabile obj che conterrà il riferimento all’oggetto XMLHttpRequest l’oggetto principale su cui si agisce. Per garantire la compatibilità viene eseguito un controllo sul tipo di browser, visto che a seconda della tipologia l’oggetto obj viene creato in modi diversi. Se il browser è “non – Internet Explorer”, allora si utilizza la funzione XMLHttpRequest altrimenti se il browser è Internet Explorer si utilizza ActiveXObject(“Microsoft.XMLHTTP”). Questa differenza ha una base teorica, che non trattiamo in questa sede, occupandoci qui di “pura pratica”. Se volete approfondimenti scriveteci, e provvederemo ad esaudire le vostre richieste! ;)

*/
function createXHR() {
var obj;
if (window.XMLHttpRequest) { // Non Internet Explorer
obj = new XMLHttpRequest();
} else if (window.ActiveXObject) { // Internet Explorer
obj = new ActiveXObject(“Microsoft.XMLHTTP”);
}
return obj;
}

obj=createXHR();

/*Questa è la funzione che gestisce e analizza lo stato dell’applicazione: si procede innanzittutto con dei controlli, che possiamo fare analizzando lo stato dell’oggetto obj precedentemente istanziato. Se durante il cambiamento si stato dell’oggetto obj non si sono verificati errori, allora le funzioni readyState e status ritorneranno rispettivamente i valori 4 e 200, valori che indicano appunto l’avvenuto caricamento con successo. A questo punto possiamo scrivere il codice che deve eseguire l’appilcazione per raggiungere il suo obiettivo. Nel nostro caso, una volta ricevuta la richiesta, la nostra piccola applicazione Ajax provvedrà a creare una select caricando il contenuto dinamicamente, cioè una select che cambia le opzioni in base ad una scelta fatta dall’utente ma senza il bisogno di ricaricare l’intera pagina.
*/
function onStateChange() { // Cambiamento Stato
if (obj.readyState == 4) { // Caricamento Avvenuto
if (obj.status == 200) { // con successo

var div = document.getElementById(‘risultato’);
if ( document.uniqueID ) {
var select = document.createElement(“<select id=’district’ name=’district’ ></select>”);
} else {
var select = document.createElement(“select”);
}
select.setAttribute(“name”,”district”);
select.setAttribute(“id”,”district”);
select.setAttribute(“onchange”,”invia2();”);

list = new Array();
list1 = new Array();
list2 = new Array();

/*IMPORTANTE: tramite la proprietà responseText dell’oggetto obj è possibile recuperare valori prodotti dal file che si occupa di gestire la richiesta al server, per esempio il file che effettua una query e che nel nostro caso è xmlHttpRequest.php*/
string = obj.responseText;

list = string.split(“;”);
list1 = list[0].split(“\n”);
list2 = list[1].split(“\n”);

for ( i=0; i < list1.length; i++ ) {
op = new Option(list2[i], list1[i]);
select.options[i] = op;
}
document.getElementById(“risultato”).innerHTML=”";
div.appendChild(select);

} else {
document.getElementById(“risultato”).innerHTML=”?”;
alert(“Errore: “+obj.statusText);
}
}

}

/*La funzione invia() è quella da cui inizia l’attività: infatti questa funzione non fa altro che inviare alla funzione inviaXHR() il riferimento all’oggetto obj e il link del file di gestione
*/
function invia() {

inviaXHR(obj,”http://link_pagina/xmlHttpRequest.php”);
}

/*Questo è il cuore dell’applicazione: attraverso una richiesta POST, inviamo con la funzione send() i dati al file xmlHttpRequest.php, che potrà svolgere il suo compito indipendentemente dalle altre interazioni che l’utente potrà avere con la pagina. Nel nostro caso, supponiamo che in questo file ci sia il codice per effettuare una query al database, e che con i risultati ottenuti si crei l’insieme delle opzioni che andranno a “riempire” la select di cui sopra. Supponiamo di aver creato una stringa in cui ogni attributo value dell’opzione è separato dal valore visibile dal carattere “|”, cioè:

value|Valore visibile ->>> <option value=’value’>Valore visibile</option>

*/
function inviaXHR(obj,url) {
try {
// Preparazione comunicazione
obj.open(“POST”, url, true);

// caricamento in corso…fornisce il feedback all’utente
document.getElementById(“risultato”).innerHTML=”caricamento in corso…”;
obj.setRequestHeader(‘Content-Type’, ‘application/x-www-form-urlencoded’);

//richiamiamo la funzione onStateChange analizzata precedentemente
obj.onreadystatechange = onStateChange;

/*IMPORTANTE: a seconda del valore country possiamo gestire la select
che vogliamo creare, e quindi possiamo aggiornarla in base a determinati valori che vengono assegnati a country
*/
country=escape(document.myform.country.value);

//Inviamo al file di gestione .php alcuni parametri, attraverso il metodo POST
obj.send(“country=”+country); // Trasferimento

} catch (e) {

/*
Se si verificano problemi, l’elemento HTML che doveva diventare una select verrà sostituiro con un ?, che indica appunto il verificarsi di errori o problemi
*/
document.getElementById(“risultato”).innerHTML=”?”;
alert(“Errore: “+e);
}

}

Per chi avesse le idee ancora confuse, riassumiamo brevemente ciò che succede.

  1. Creaimo l’oggetto obj.
  2. Supponiamo di cliccare su un pulsante che richiama la funzione javascript “invia()”; attiviamo così una richiesta al server.
  3. Tramite la funzione inviaXHR gestiamo effettivamente la richiesta: il metodo utiliaazto è il POST (con cui possiamo inviare dati al file di gestione) e il file di gestione è xmlHttpRequest.php, che nel nostro caso è scritto in PHP ma che potrebbe essere scritto in un qualsiasi linguaggio di programmazione. La funzione send() ci permette di inviare parametri al file di gestione, parametri che vengono inviati attraverso il metodo POST, appunto.
  4. Il file di gestione può fare qualsiasi cosa per svolgere il suo compito: supponiamo nel nostro caso che il file effettui una query al database e restituisca una stringa.
  5. Viene richiamata la gestione di stato dell’oggetto, onStateChange, che analizza l’andamento della richiesta che abbiamo effettuato. Se tutto è andato bene, recuperiamo attraverso la proprietà responseText dell’oggetto obj la stringa prodotta dal file di gestione. Possiamo lavorare sulla stringa restituita, creando ad esempio una select con delle option che dipendono dal valore di un parametro scelto dall’utente, nel nostro caso country.

Tutto questo lavoro viene svolto in background, senza che l’utente di accorga di nulla, ma soprattutto permettendo all’utente di continuare ad interagire con la pagina liberamente e come se nulla stia accadendo.

Joomla è oramai uno dei CMS (Content Management System) più affermati e utilizzati, sia per la sua facilità d’utilizzo sia per la sua modularità, che permette di installare estensioni con pochi passi.

Ma Joomla è anche molto apprezzato dagli addetti ai lavori, da chi ogni giorno si trova a configurare e integrare con la struttura del CMS elementi software personalmente sviluppati: nell’articolo presente a questo indirizzo è possibile leggere una guida che spiega chiaramente la distinzioni tra quelli che rappresentano gli elementi principali della struttura di questo CMS: i componenti, i mambots e i moduli.

Qui trattiamo esclusivamente l’implementazione e lo sviluppo dei moduli: questi possono essere visti come delle entità ausiliarie rispetto ai componenti, entità che vengono visualizzate esclusivamente all’interno delle sezioni definite nel template ( e qui richiamamibili attraverso la funzione MosLoadModules() ).

Lo sviluppo di un modulo richiede almeno la creazione di due file:

  • il file mod_nomemodulo.php rappresenta il file PHP che contiente il codice principale del modulo;
  • il file mod_nomemodulo.xml che rappresenta il file di installazione del modulo: qui sono contenute tutte le informazioni necessarie all’installazione, come i parametri, le immagini, e il nome di questo file, come per il precedente deve avere un nome preciso perchè rappresenta l’ “oggetto” che stiamo creando.

Ad esempio, supponiamo di implementare un modulo che estenda un componente di nostra creazione, in modo che il modulo recuperi e permetta la visualizzazione di alcuni record del nostro componente secondo parametri che possono essere configurati attraverso il modulo stesso (ordine, tipologia di lemento, ecc..). Allora potremmo chiamare i file del nostro modulo in questo modo:

  • mod_list_myelements.php
  • mod_list_myelements.xml


Una volta creati questi file è sufficiente comprimerli in un pacchetto .ZIP o TGZ e installarli attreverso l’installer-moduli di Joomla (Installazioni—>Moduli) raggiungibile dal pannello di amministrazione.

File di installazione del modulo

Vediamo un esempio commentato di file di installazione del modulo, nel nostro caso il file mod_list_myelements.xml.

/**INTESTAZIONE FILE XML**/
<?xml version=”1.0″ encoding=”iso-8859-1″?>
<mosinstall type=”module” version=”1.0.0″>
/**FINE INTESTAZIONE FILE XML**/

/**DATI DELL’AUTORE DEL MODULO E DESCRIZIONE**/
<name>List Elements</name>
<author>Marco Lecce</author>
<creationDate>January 2008</creationDate>
<copyright>(C) 2008 Marco Lecce. All rights reserved.</copyright>
<license></license>
<authorEmail>yourmail@
yourmail.com</authorEmail>
<authorUrl>www.yoursite.com</authorUrl>
<version>1.0.0</version>
<description>Questo modulo elenca gli elementi in base a parametri di configurazione.</description>
/**FINE DATI DELL’AUTORE DEL MODULO E DESCRIZIONE**/

/**
ALL’INTERNO DEL TAG files VANNO INSERITI TUTTI I FILE CHE COMPONGONO IL MODULO: AD ESEMPIO SE IL MODULO UTILIZZA IMMAGINI PARTICOLARI, POSSIAMO DICHIARARLE QUI
**/

<files>
<filename module=”mod_list_myelements”>mod_list_myelements.php</filename>
(ESEMPIO DI SECONDO FILE<filename module=”mod_list_myelements”>image.jpg</filename>)

</files>

/**DICHIARAZIONE PARAMETRI MODULO: QUESTA PARTE E’ FACOLTATIVA; QUI DEFINIAMO TRE PARAMETRI**/
<params>
/**
CONFIGURAZIONE PRIMO PARAMETRO:
“count” -> nome nel database del campo del componente che vogliamo controllare con il modulo
“type” -> il tipo del parametro sarà text, cioè il parametro è una casella di testo
“default” -> valore di default
**/
<param name=”count” type=”text” default=”20″ label=”Contatore” description=”Il numero di elementi (default 20)” />
/**
CONFIGURAZIONE SECONDO PARAMETRO:
“order” -> nome nel database del campo del componente che vogliamo controllare con il modulo
“type” -> il tipo del parametro sarà list, cioè il parametro è una select da cui potremmo scegliere tre opzioni
“default” -> valore di default
**/
<param name=”order” type=”list” default=”order_list” label=”Ordinamento” description=”Stabilisce la modalità di ordinamento delle news”>
<option value=”v1″>Valore1</option>
<option value=”v2″>Valore2</option>
<option value=”v3″>Valore3</option>
</param>
/**
CONFIGURAZIONE TERZO PARAMETRO:
“type” -> nome nel database del campo del componente che vogliamo controllare con il modulo
“type” -> il tipo del parametro sarà list, cioè il parametro è un radio box da cui potremmo scegliere due opzioni
“default” -> valore di default
**/
<param name=”type” type=”radio” default=”ASC” label=”Verso dell’ordinamento” description=”Stabilisce il verso dell’ordinamento “>
<option value=”ASC”>Crescente</option>
<option value=”DESC”>Decrescente</option>
</param>
</params>
/**FINE DICHIARAZIONE PARAMETRI MODULO**/
</mosinstall>

I commenti dovrebbero essere piuttosto chiari: una volta installato il componente dal pannello di amministrazione, andando nella sezione dedicata ai moduli, e cliccando sul nostro appena installato, sarà possibile configurare il comportamento del modulo nel frontend, attraverso i parametri che abbiamo dichiarato.

Codice del modulo

Questo è il file principale, che contiene cioè tutto il codice del modulo. Ora, in questo file, in realtà, noi possiamo scrivere tutto il codice PHP che ci serve, perciò più che fare un esempio di come scrivere questo tipo di file, daremo le indicazioni su come è possibile utilizzare alcune direttive che chiariscono le potenzialità dei moduli.

  • defined( ‘_VALID_MOS’ ) or die( ‘Restricted access’ );
    E’ importantissimo inserire questa riga di codice come prima nel file del modulo: in questo modo evitiamo l’accesso diretto al file, cioè impediamo l’accesso al file dall’esterno di Joomla. Dimenticarsi questa riga non compromette il funzionamento del modulo, ma apre falle nella sicurezza del portale.
  • $ordering = $param->get(‘order’);
    Con questa riga di codice PHP non facciamo altro che assegnare alla variabile $ordering il valore del parametro ‘order‘ che abbiamo scelto nel backend, cioè dall’amministrazione del modulo: nel nostro caso, ‘order‘ l’abbiamo creato come select con tre opzioni, e quindi dall’amministrazione del modulo possiamo assegnare uno di questi tre valori al parametro, che possiamo recuperare nel frontend attraverso appunto questa riga di codice.

Ora dovrebbe essere chiaro come sia possibile intergrare funzionalità diverse a qualsiasi elemento della struttura di Joomla attraverso i moduli: la vera forza di questo CMS è proprio la versatilità che caratterizza non solo l’utilizzo, ma anche lo sviluppo di applicazioni basate su questo Content Managment System.

Ci è capitato più volte di sviluppare applicazioni web-based, collegate ad altre applicazioni web-based con le quali devono dialogare per lo scambio di dati ed informazioni. In Internet è oramai pieno di guide e articoli che spiegano, a volte chiaramente e a volte un pò meno, il funzionamento di semplici script PHP, ASP o .NET per aiutare chi è alle prime armi o per facilitare il compito degli sviluppatori che possono così contare su risorse già parzialmente scritte.

Ciò che più raramente si trova in Internet è una guida che spieghi come collegare un’applicazione che “gira” in locale con una web-base, e che quindi vive nel mondo Internet. E allora….ecco ciò che stavate cercando!

Supponiamo che, in locale, vi siate sviluppati una piccola applicazione Java che gestisce l’archivio dei film che vi siete comprati negli anni. Avete però la necessità di memorizzare i dati in un database che sia disponibile in rete, perchè volete che l’archivio sia visibile anche sul vostro sito. Come fare? Ovviamente duplicare il database remoto in locale non è una soluzione ottimale.

In poche parole, quello che vi interessa ottenere, è di far dialogare la vostra applicazione locale scritta in Java con, supponiamo, il vostro sito Joomla, e quindi scritto in PHP e basato su database MYSQL.

Supponendo che la vostra applicazione Java sia scritta correttamente, il pezzo di codice che ci interessa analizzare è il seguente:

……
try {
String driver = “com.mysql.jdbc.Driver”;
Class.forName(driver);
//stringa di connessione al database server
String url = “jdbc:mysql://ip_tuo_server:3306/”;

//esempio: connessione local server
//String url = “jdbc:mysql://”;
//Equivale a: “jdbc:mysql://127.0.0.1:3306/”

//Otteniamo una connessione con username e password
con = DriverManager.getConnection (url, “tuo_username”, “tua_password”);
System.out.println(“<Connessione riuscita>\n”);
con.setCatalog(“tuo_database”);
//Creiamo un oggetto Statement per poter interrogare il db
cmd = con.createStatement ();

//Query
String qry = “SELECT * FROM tua_tabella”;
res = cmd.executeQuery(qry);

//Stampiamone i risultati riga per riga
while (res.next()) {
//System.out.print(res.getString(“id”)+” “);
System.out.println(res.getString(“titolo_film”));
}
} catch {…}

……

I commenti presenti all’interno del codice dovrebbero già chiarire le istruzioni scritte in Java. Possiamo tuttavia aggiungere qualche riga di spiegazione:

  • String driver = “com.mysql.jdbc.Driver”;
    Class.forName(driver);

    Queste due righe di codice servono per stabilire il tipo di driver che intendiamo usare: in questo caso, abbiamo supposto che il database remoto sia un db MYSQL, e dunque dobbiamo utilizzare il driver MYSQL per connetterci al database remoto.
  • String url = “jdbc:mysql://ip_tuo_server:3306/”;

    Con questa riga di codice assegnamo alla variabile url la stringa di connessione: tutto ciò che dobbiamo fare è sostituire la dicitura ip_tuo_server con l’IP o il nome del server sul quale “gira” il database remoto. Se la connessione con il database server va a buon fine, verrà stampata la stringa “<Connessione riuscita>“;

  • con.setCatalog(“tuo_database”);

    Questa riga di codice ci permette di dichiarare il nome del database remoto che vogliamo interrogare e che ovviamente “gira” sull’IP dichiarato precedentemente; tutto ciò che dobbiamo fare è sostituire la dicitura tuo_database con il nome del database in questione.

  • String qry = “SELECT * FROM tua_tabella”;

    Nella variabile qry salviamo la query che interrogherà il database; supponendo che il databatabase remoto sia già popolato, è possibile utilizzare la query di esempio, sostituendo tua_tabella con il nome della tabella da cui ci interessa prendere i dati.

  • while (res.next())…

    Iteriamo sull’oggeto res, che possiamo vederlo come l’insieme degli elementi risultanti dall’interrogazione al database server; per ogni elemento, stampiamo il titolo ( System.out.println(res.getString(“titolo_film”)); ) supponendo che esista nella tabella interrogata il campo ‘titolo’.

Per gli sviluppatori è di vitale importanza conoscere gli eventuali problemi o errori che precludono il corretto funzionamento di ciò che stanno implementando: vi sono diversi sistemi per conoscere tali informazioni, ma più il sistema adottato è veloce, più il programmatore lavora rapidamente e bene.

Questo vale ancora di più per coloro che si trovano a sviluppare con linguaggi lato server come PHP: infatti vi sono alcuni tipi di errori che con queste tecnologie non sono facili da individuare senza un aiuto preciso e puntuale, e il più delle volte si perde tantissimo tempo alla ricerca del problema, con il conseguente ritardo nel lavoro. Ovviamente vi sono i log a disposizione, ma bisogna avere un accesso completo ( o quasi ) al server per visionarli, e non tutti i programmatori chiaramente hanno questa possibilità.

Dunque, come possiamo semplificarci l’individuazione dei problemi quando stiamo implementando una pagina .php? In realtà la risposta è molto semplice; è sufficiente scrivere in cima alla nostra pagina le due seguenti righe di codice:

ini_set(‘error_reporting’, E_ALL);
ini_set(‘display_errors’, 1);

Queste righe di codice permettono di visualizzare a video i problemi o gli errori presenti nella pagina e che vengono scritti nel file di log degli errori del server su cui risiede il dominio.

La funzione “ini_set” non fa altro che impostare il valore di una data opzione di configurazione: in questo caso, il parametro error_reporting() imposta la direttiva error_reporting a runtime. PHP ha diversi livelli d’errore, ed utilizzando questa funzione si imposta il livello per la durata (runtime) dello script.

Il parametro display_errors, invece, determina se gli errori devono essere visualizzati sullo schermo come parte dell’output o se devono essere nascosti all’utente.

Ovviamente queste impostazioni deve essere utilizzata solamente come supporto allo sviluppo, e mai nel sistema di produzione: in caso contrario si rischierebbe di fornire informazioni preziose per chi intende provocare un danno al vostro lavoro.

Nasce Blogrammazione, il primo Blog dedicato esclusivamente alla programmazione libera, alla progettazione sofware e all’informatica in generale!

In questo blog sono raccolte le nostre esperienze e i nostri consigli per imparare, migliorare o semplicemente conoscere le tecnologie di ultima generazione a supporto dei programmatori, degli sviluppatori software o di chi semplicemente si diletta con l’informatica!