Il nuovo blog lo potete trovare su melodycode.com, questo sito è stato mantenuto solo per storicità e potrebbe contenere informazioni non più valide.
Important

Mozilla Firefox 1.5 Beta 1

Scarica Firefox 1.5 beta1Volevo segnalarvi che da poco è uscita l’ennesima versione di firefox con alcuni aggiornamenti e correzioni che rendono questo browser sempre più vicino alla perfezione.
Essendo una versione beta può essere instabile o comunque non consigliata per un utilizzo “intensivo” ma solamente per scopo di testing; comunque se siete curiosi di provarlo vi consiglio di scaricarlo.

Nota: Avete mai provato a scrivere “about:config” al posto di inserire un indirizzo web? Fatelo e vi si aprirà un mondo ;)

Autenticazione e autorizzazione usando .htaccess di Apache

Requisiti

  • Soltanto un po’ di pazienza

Differenza tra autenticazione e autorizzazione

Nel momento in cui noi proteggiamo una directory possiamo vedere come l’utente deve passare obbligatoriamente in due passaggi:

  1. Autenticazione: Il web server non conoscendo l’identità dell’utente ne chiede le credenziali (login e password) e dopo averle ricevute le confronta con il proprio database per vedere se può ottenere l’accesso.
  2. Autorizzazione: Una volta convinto il server che siamo veramente noi deve controllare se abbiamo o meno i permessi (e se si quali).

Entrambi questi passaggi in caso di errore restituiscono il codice 401 corrispondente al unauthorized.

Cos’è il file .htaccess

Questo file ci permette di modificare delle direttive di configurazione del webserver Apache senza riavviarlo: ciò risulta molto utile nel caso di server affollati dove ogni utente ha richieste particolari.
Se non ci fosse l’.htaccess dovremmo chiedere al gestore del server di proteggerci una determinata cartella, di dove redirezionare l’errore 404, quali regole usare per il rewrite, ecc… quindi in tal caso ogni richiesta da parte dell’utente corrisponderebbe al riavvio del webserver e all’allergia che proverà il gestore del webserver ogni volta che sentirà la nostra voce :P.
Quindi il vantaggio risulta essere l’estrema flessibilità ma dall’altra parte della medaglia vedremo una diminuzione delle performance generali visto che questo file viene letto ad ogni richiesta (e in modo ricorsivo seguendo tutta la path).
Il file .htaccess di esempio (che metteremo nella directory da proteggere) che studieremo è il seguente:

  1. AuthName "Pagina riservata"
  2. AuthType Basic
  3. AuthUserFile /WWW/simonin/riservato/.htpassword
  4. Require valid-user

Ora esaminiamolo riga per riga.

AuthName (nome)

Essa ci permette di indicare praticamente il titolo della finestra che apparirà all’utente, con l’unica precauzione di racchiudere la stringa tra le virgolette doppie nel caso in cui contenga degli spazi.

AuthType (tipo)

Questa direttiva ci permette di specificare che tipo di controllo verrà utilizzato per l’esame delle credenziali.
Esistono 2 tipi di controlli:

  • Basic: Risulta essere la forma di controllo più semplice è più insicura visto che applica una codifica 64bit sulle credenziali e l’invio di quest’ultime avvengono in chiaro nell’header. Le credenziali possono venire immagazzinate in un semplice file di testo oppure in una vasta varietà di databases quali MySQL, Oracle, ecc… con la possibilità di trasferirle semplicemente da un server all’altro. Per la creazione delle password Apache mette a disposizione htpasswd.
  • Digest: La differenza principale con il primo metodo riguarda il fatto che nessuna credenziale viene passata in chiaro rendendo quindi molto difficile il cracking di quest’ultime. Nativamente Apache permette di memorizzare le credenziali solo in un file di testo poggiandosi quindi su moduli di terze parti per la memorizzazione in databases, inoltre c’è da specificare come non tutti i browser siano compatibili con questa tipologia di autenticazione. Per la creazione delle password Apache mette a disposizione htdigest.

AuthUserFile (nomefile)

La seguente direttiva ci permette di indicare la posizione del file (con il path assoluto) contenente le varie coppie username/password.
Per creare questo file Apache (nel caso dell’autenticazione Basic) ci mette a disposizione il tool htpasswd.
Vediamone alcuni esempi:

htpasswd -c credenziali daniele
In questo caso viene creato un file di nome credenziali nella quale viene inserito l’username daniele. La password verrà richiesta in seguito.

htpasswd credenziali matteo
In questo modo viene aggiunto un nuovo username (in questo caso matteo) al file credenziali. La password verrà richiesta in seguito.

htpasswd -b credenziali luca lapwddiluca
In questo modo viene aggiunto un nuovo username (in questo caso luca) al file credenziali con la password lapwddiluca corrispondente. Il flag -b indica che la password è stata passata tramite linea di comando e quindi non verrà richiesta in seguito.

Gli algoritmi che ci permette di usare sono il crypt e l’md5 a seconda delle nostre preferenze e del sistema che ospita il webserver.
La sintassi di htdigest come ci si poteva aspettare è molto simile a quella dell’htpasswd.
Bisogna notare inoltre come in Windows le password non vengano criptate ma devono essere scritte in chiaro sul file delle passwords.
Per facilitare la vita a chi deve comporre questo file (e non gli piace htpasswd) ho creato una piccola applicazione in flash che spero vi risulti utile:

Come potete vedere vi basta inserire username e password e dopo la pressione del tasto OK vi verrà creata la stringa da mettere nel vostro file delle passwords.

AuthGroupFile (nomefile)

Ci permette di indicare il nome di un file (con il path assoluto) contenente i vari gruppi di utenti e i suoi membri.
Nell’esempio non è stata utilizzata questa direttiva ma risulta molto utile quando bisogna gestire un numero di utenti elevato.
Il file che indicheremo potrà essere fatto in questo modo:

amministratori: daniele matteo
nullafacenti: luca

In questo caso abbiamo due gruppi di utenti alla quale potremmo in seguito discriminarne l’accesso a determinate directory o files.
Questa direttiva ci permette quindi di dividere logicamente un vasto numero di utenti facilitandoci di molto la vita.

Require ([user utente1 utente2] [group gruppo1 gruppo2] [valid-user] [valid-group])

Questa è la direttiva che ci permette di indicare chi può avere accesso e chi no.
Possiamo specificare in vari modi quali sono gli utenti e i gruppi che avranno accesso alla directory:

  • valid-user: Se usiamo questo parametro ogni utente (dopo l’autenticazione) contenuto nel file specificato nella direttiva AuthUserFile sarà accettato (e quindi avrà l’accesso).
  • valid-group: Ogni gruppo contenuto nel file specificato dalla direttiva AuthGroupFile otterrà l’accesso sempre se l’autenticazione ha avuto successo (ossia se gli utenti appartenenti al gruppo hanno inserito la password personale corretta).
  • user utente1 utente2: Con questi parametri noi possiamo specificare quali utenti avranno l’accesso.
  • group gruppo1 gruppo2: In questo caso specifichiamo quali sono i gruppi che potranno accedere dopo l’autenticazione alla directory protetta.

Dalla versione di Apache 1.3.20 sono stati aggiunti gli argomenti file-owner e file-group che permettono l’accesso nel caso in cui l’utente (o gruppo) che si autorizza è pure l’owner del file. Questo permette ai vari utenti (o gruppi) di accedere unicamente ai propri files che “possiede”.
L’ultima cosa da dire riguardo questi due argomenti è che in ogni caso l’utente deve essere presente nella lista degli users nel file indicato dalla direttiva AuthUserFile.

Altri esempi di utilizzo

Per vedere le varie modalità d’uso eccovi un paio di esempi:

  1. AuthName "Pagina riservata"
  2. AuthType Basic
  3. AuthUserFile /WWW/simonin/riservato/.htpassword
  4. Require user daniele matteo

L’esempio appena citato può essere scritto anche in questo modo (considerando i gruppi formati prima):

  1. AuthName "Pagina riservata"
  2. AuthType Basic
  3. AuthUserFile /WWW/simonin/riservato/.htpassword
  4. AuthGroupFile /WWW/simonin/riservato/.htgroup
  5. Require group amministratori

Concludiamo

Bene ora sapete come si fa a proteggere facilmente una directory usando l’.htaccess dell’Apache; ovviamente ci sono altre direttive e altri tipi di controllo che si possono fare in modo incrociato per aumentare considerevolmente la sicurezza ma per approfondimenti vi rimando al sito Apache.org.

Fonti

Libri:

  • Apache The Definitive Guide
  • Apache CookBook

Il minimalismo

Quando la semplicità di una UI può migliorare la User Experience di un sito?

Bene…prima di approfondire l’argomento bisogna specificare il significato di “semplicità di una UI”.
La semplicità che intendo io riguarda sia la grafica che la struttura della UI.
Questo è il minimalismo ossia un modo di fare “arte” (infatti esiste il minimalismo musicale, artistico, ecc…) nato dal fatto che l’universo Web è già di per se complesso.
Ci sono mille modi di fare le cose, uno di questi è sicuramente essere semplici nella grafica e nella struttura “generale” del sito.

Minimalismo Web…la nuova frontiera del “fare web”

La selezione naturale dei contenuti

Il Minimalismo come abbiamo capito è sinonimo di semplicità.
Sembrerà un controsenso…ma essere semplici è molto difficile, infatti bisogna saper “gestire ed applicare” correttamente questa semplicità.
Come dicevo nel paragrafo precedente, un sito minimalistico deve avere una struttura molto “easy” o comunque non eccessivamente complicata.
Tanto per capirci la struttura di una UI è strettamente collegata all’usabilità, infatti più un menu è strutturalmente complesso (in genere) meno è usabile l’UI.
Questo ci fa capire che chi fa un sito minimale non dà molta importanza a “come” vengono visualizzati i contenuti, ma alla loro facile “estrapolazione”, appunto perché l’utente non è distratto da alcun elemento secondario.

In questo contesto possiamo immaginare la struttura del sito come un elemento secondario se troppo ricercata.
Infatti se noi ipotizziamo di avere un sito con una struttura (ad esempio di un menu) molto complessa, possiamo notare come i tempi di risposta dell’utente aumentino proporzionalmente alla difficoltà del menu stesso.

L’importanza quindi si concentra sul rendere il sito il più “familiare” possibile all’utente, che avvolto da questa semplicità, avrà tutto sotto controllo nel minor tempo possibile (come è noto il cervello fa più fatica ad elaborare concetti complessi che quelli semplici).

Maggiore è la capacità del flash designer di eliminare le cose superflue, maggiore sarà l’attenzione dell’utente sui contenuti del sito, ecco il perché fare del minimalismo non è così facile come sembra.

Come avrete notato, il flash designer deve quindi avere la capacità di selezionare i contenuti più importanti e metterli subito in evidenza.
Se ci mettiamo a riempire il sito di jpeg, news caricate esternamente, informazioni meteo ecc… rischieremo di far “deviare” la mente del user verso contenuti “secondari”, e questo non è sicuramente il nostro scopo (quindi, ahimè, scordatevi le foto delle ragazze in bikini :P).

Quindi il sito minimale deve avere uno scopo ben preciso, dando rilevanza ai contenuti “primari” eliminando tutto ciò che è un plus, in poche parole dobbiamo prestare molta attenzione alla selezione dei contenuti (una sorta di selezione naturale, il mondo è andato avanti grazie a questo).
Questa selezione deve tenere conto dell’argomento principale del sito, rendendolo il più possibile monotematico (o comunque più argomenti correlati tra loro).
In teoria abbiamo approfondito tutto ciò che riguarda il modo in cui i contenuti devono essere presentati in modo ottimale.

La multimedialità essenziale

Come sappiamo, qualsiasi interazione odierna di rispetto ha bisogno di una sorta di multimedialità (ossia per dirla in parole povere, l’incontro tra esperienze audio e video).
La forma “storica” di interazione è quella testuale, ossia il dialogo tra l’utente e il software veniva instaurato utilizzando forme puramente testuali (e viene tutt’ora stabilito ad esempio nella bash di linux).

Man mano che il tempo è passato si è cercato di rendere l’interazione dal punto di vista visuale più “creativa”.
Questa “modernizzazione” grafica è dovuta al fatto che l’hardware è ora a pari passo con il oftware, e di conseguenza i grafici e i programmatori si sentono più liberi di sperimentare ed osare.

Se inseriamo questo concetto nel mondo web, possiamo notare come la parola “osare” non vada d’accordo con l’usabilità e i tempi di caricamento.
In parole povere, il minimalismo non vuole stupire l’utente con effetti grafici alla Matrix o alla Terminator 3…questo perché vuole i contenuti nel minor tempo possibile.
Se un utente entra nel nostro sito e trova pochi elementi grafici e ben disposti…in pochi decimi di secondo avrà già tutto il sito sotto controllo e questo è sicuramente una cosa positiva. L’avere il sito “sotto controllo” è molto importante; infatti andare in un web site e stare li a cercare dove sono le news oppure la sezione contact, farebbe solo imbestialire l’utente (magari dopo minuti e minuti di caricamento con un modem a 56K).

Bisogna un po’ considerare l’utente medio come una persona frettolosa che non si può permettere di perdere tempo, ma vuole subito i contenuti fregandosene altamente del layout grafico (che ovviamente deve essere almeno gradevole).
Come ho detto tra parentesi, il layout ovviamente pur essendo semplice deve essere a livelli sufficienti perché come sappiamo l’occhio vuole sempre la sua parte (e noi gli diamo solo la minima parte di cui ha bisogno).

Sono sicuro del fatto che un user normale costretto a scegliere tra “grafica da sballo” e “velocità di caricamento” scelga senz’altro l’ultima (ovviamente non chi si collega ad Internet tramite fibra ottica).

La multimedia oltre ad essere formata da esperienza video, ha in se pure l’audio.
Qualsiasi interfaccia utente può fare a meno dell’audio perché , come sappiamo, per comunicare basta la grafica, infatti un click alla pressione di un bottone, una loop di sottofondo, a livello comunicativo è paragonabile allora zero (ovviamente non sempre è così nel senso che i suoni servono molto spesso a dare del feedback all’utente).

L’aggiunta dell’audio corrisponderebbe ad “osare” e di conseguenza non andrebbe d’accordo con il principio del minimalismo (inoltre un loop musicale molte volte va ad attaccare i gusti musicali dell’utente).

Se il nostro scopo primario è quello dei contenuti, i suoni sono praticamente inutili. Aggiungere Kb “inutili” al sito finale non è sicuramente una buona mossa.
Bisogna inoltre considerare il fatto che la maggior parte degli utenti (tra cui io), mentre navigano, ascoltano musica…e di conseguenza i suoni verrebbero sovrapposti creando un effetto molto sgradevole e fastidioso.

Minimalismo pure nei Kb?

Il fatto di avere una grafica minimale e un numero di effetti ridotto (magari creata tramite un buon uso di ActionScript) rende il peso del movie molto piccolo.
Questo sicuramente è un punto a favore perché l’utente potrà accedere subito ai contenuti del sito senza attendere delle lunghe pause, di conseguenza l’User Experience sarà notevole perché l’utente si sentirà appagato dai contenuti e dal tempo ridotto di caricamento.

E vissero felici e contenti…

Come avete capito…questo è solo uno dei possibili modi di “fare web” e di conseguenza è del tutto soggettivo, ad alcuni può piacere, ad altri no.
Questo articolo non vuole attaccare chi fa i siti ad alto impatto grafico pesanti parecchi Kb, vuole solo rendere visibile l’altra faccia della medaglia.

Modifica errore 404

Siccome ho visto che Google si ricorda ancora i tutorial vecchi (con i relativi url deprecati) ho fatto in modo che nella pagina d’errore venga esaminata la PATH proponendo delle news o tutorials (per il massimo di 10 articoli totali) che possono interessare.
Se volete provarlo vi propongo alcuni di questi vecchi indirizzi:

  • http://read.melodycode.com/tutorials/dtd_rss.html
  • http://read.melodycode.com/tutorials/asfunction.html
  • http://read.melodycode.com/tutorials/strut_controllo.html
  • http://read.melodycode.com/tutorials/minimalismo.html

Tutto ciò per migliorare l’usabilità del sito visto che ho notato che molti utenti dopo aver sbattuto la testa contro la pagina d’errore, non usano la funzione di ricerca, bensì chiudono il browser e tanti saluti :P

Costrutti echo(), print() e stringhe heredoc

Requisiti

  • Minima conoscenza del PHP

Visione generale

Partiamo subito dal dire che echo() e print() non sono funzioni bensì costrutti di linguaggio quindi con le seguenti conseguenze:

  • Non sono richieste le parentesi per inserire una lista di argomenti;
  • Non esiste il concetto di funzione variabile (ossia se ad una variabile aggiungiamo la parentesi aperta e chiusa alla fine, PHP non cercherà la funzione con il medesimo nome);

La funzione importante che svolgono questi due costrutti riguarda la possibilità di visualizzare stringhe di testo sulla pagina Web (oppure tramite linea di comando con il risultato nello standard output della console).

Il costrutto echo()

Partiamo subito esaminando un esempio semplice semplice:

  1. < ?php
  2. $nome='Daniele';
  3. $cognome='Simonin';
  4.  
  5. echo "Nome:$nome<br/>Cognome:$cognome";
  6. /*
  7. Nome:Daniele
  8. Cognome:Simonin
  9. */
  10. ?>

Come si può notare definisco due variabile di tipo stringa con il mio nome e cognome per poi visualizzarlo con l’echo().
Nel costrutto echo() la specificazione delle stringhe può avvenire in due modi:

  • Utilizzando le virgolette doppie “”;
  • Utilizzando le virgolette singole ”;

La scelta non è per niente casuale visto che utilizzando le virgolette doppie ho diritto al seguente trattamento:

  • Qualunque variabile viene espansa (come nell’esempio);
  • Possibilità di usare un buon numero di sequenze di escape quali:
    • n Per il ritorno a capo;
    • r Il cursore salta all’inizio della riga corrente;
    • t Tabulazione;
    • \ Visualizza la barra rovesciata;
    • $ Visualizza il dollaro;
    • Visualizza le doppie virgolette;
    • [0-7] Carattere specificato in forma ottale in conformità con lo standard ASCII;
    • x[0-9A-Fa-f] Carattere specificato in forma esadecimale in conformità con lo standard ASCII (ad esempio scrivendo x4C viene visualizzato il carattere L);

Se invece usavamo le virgolette singole:

  • Nessuna variabile viene espansa;
  • Sequenze escape dei caratteri ridotta a:
    • \ Visualizza la barra rovesciata;
    • Visualizza la virgoletta singola;

Proviamo quindi a verificare ciò modificando l’esempio precedente:

  1. < ?php
  2. $nome='Daniele';
  3. $cognome='Simonin';
  4.  
  5. echo 'Nome:$nome<br/>Cognome:$cognome';
  6. /*
  7. Nome:$nome
  8. Cognome:$cognome
  9. */
  10. ?>

Come possiamo notare le variabili non vengono espanse ma scritte così come sono, ciò rende questa modalità più veloce di quella a virgolette doppie (ovviamente nel caso in cui non dobbiamo espandere alcuna variabile).

Ora esaminiamo un altro piccolo esempio:

  1. < ?php
  2. $uno='uno';
  3.  
  4. echo "Se voglio che venga fuori "unodue" non scrivo $unodue
  5. ma ${uno}due";
  6. ?>

Se eseguite questo script riceverete un errore che dice “Notice: Undefined variable: unodue in c:… on line 4” perchè PHP è andato alla ricerca della variabile $unodue non facendo ciò che ci aspettavamo (oddio non esageriamo :P).
Per risolvere il problema abbiamo racchiuso il nome della variabile tra le parentesi graffe mettendoci quindi il cuore in pace.
Un altra cosa da notare è come sia possibile suddividere una stringa su più righe magari rendendo il codice più leggibile (verrà comunque visualizzato su un unica riga a meno che non usiate il codice escape corrispondente al ritorno a capo oppure per il web il tag <br/>).
Ma se io ora voglio concatenare più stringhe come faccio?
Non è poi così difficile:

  1. < ?php
  2. $nome='Daniele';
  3. $cognome='Simonin';
  4.  
  5. echo 'Nome completo:'.$nome.' '.$cognome;
  6. echo "Nome completo: $nome $cognome";
  7. /*
  8. Nome completo: Daniele Simonin
  9. Nome completo: Daniele Simonin
  10. */
  11. ?>

Come noterete l’output è uguale in tutti i due casi, con la sola differenza che nel primo metodo abbiamo usato l’operatore punto per unire le stringhe.

Print()

Il costrutto print() si comporta in maniera molto simile a quella dell’echo() tant’è vero che molte persone li considerano uguali, però ci sono delle differenze minimali quali:

  • Print() ha un comportamento simile a quello di una funzione, infatti restituisce sempre 1;
  • Echo() risulta leggermente più veloce del print() (si dice da un 3% al 4%) probabilmente dovuto al fatto che non restituisce alcun valore;

Soprattutto l’ultimo motivo porta molte persone a utilizzare l’echo().

Stringhe heredoc

Come sappiamo il costrutto echo() (o print()) stampa delle stringhe che PHP permette di identificare usando anche la sintassi heredoc.
Per delimitare le stringhe useremo “<<<” seguito da un identificatore per poi chiudere la stringa con lo stesso identificatore seguito da un punto e virgola “;” (che deve essere presente nella prima colonna della riga).
Ecco un esempio:

  1. < ?php
  2. $nome='Daniele';
  3. $cognome='Simonin';
  4.  
  5. echo <<<dati
  6. Nome: $nome
  7. <br/>
  8. Cognome: $cognome
  9. DATI;
  10. /*
  11. Nome: Daniele
  12. Cognome: Simonin
  13. */
  14. ?>

La stringa heredoc si comporta esattamente come quella con virgolette doppie quindi non c’è alcun motivo particolare per discriminare l’una o l’altra.
Alcuni possono preferire questo tipo di stringhe perchè l’identificatore (se scelto in modo opportuno) permette di capire quasi subito il contenuto della stringa.

floAt's Mobile Agent

floAt’s Mobile Agent permette per chiunque abbia un cellulare SonyEricsson di gestire sms, immagini, suoni e molto altro del suo cellulare.
Io uso questo software da quando ho preso il SonyEricsson T610 lasciandolo al primo piano e collegandolo al pc (via bluetooth) che si trova al piano interrato, così posso:

  • Controllare se mi arrivano sms
  • Vedere chi mi chiama (ed eventualmente rispondere)
  • Gestire immagini, suoni e temi del cellulare
  • Vederne il consumo elettrico
  • …molto e molto altro…

Tutto questo comodamente seduto al pc mentre navigo, ascolto musica e scrivo questo articolo ;)

Modifiche sito

Ho corretto un piccolo bug del sito e aggiunto nella sidebar gli annunci di google: su quest’ultimo argomento vorrei sottolineare il fatto che alla fine è si pubblicità ma essendo mirata offre una sorta di servizio utile a chi naviga.
Ovviamente non nascondo il fatto che ad ogni click nel banner il gestore del sito che lo espone (in questo caso io :P) guadagna qualcosina che si aggira solitamente dai 7 ai 20 cents.
Non escludo la possibilità che in questi giorni vengano corretti altri piccoli errori di gioventù del sito ;)

Buona domenica a tutti

Strutture di controllo

Requisiti

  • Malleabilità mentale :)
  • 10 minuti di tempo disponibili :)
  • Conoscenze minime di programmazione (se conoscete un termine più riduttivo di minimo, sostituitelo pure ;)

Introduzione

Quello che stò per scrivere è una panoramica generale comune a tutti i linguaggi di programmazione (tipo ActionScript, PHP, Java, ecc…); in questo caso l’argomento verrà trattato con esempi scritti in ActionScript ( che si può considerare il nipotino di Java ;).

If…Else (e operatori condizionali)

Questa istruzione di selezione è la più “utilizzata” di tutte visto che ci permette di cambiare “percorso” al nostro programma ( e quindi di renderlo “ramificato”).

  1. condizione=true;
  2. if (condizione) {
  3.     trace("La condizione è vera");
  4. } else {
  5.     trace("La condizione è falsa");
  6. }

Come potete notare questo ci permette di esaminare la condizione e di comportarci di conseguenza. Infatti se la condizione è vera, nella nostra finestra di debug comparirà la scritta “La condizione è vera” (è il nostro caso) altrimenti se la condizione è falsa comparirà “La condizione è falsa”.
Un applicazione utile può essere quella di mettere in una variabile il massimo valore di due variabili (supponiamo che i due valori siano diversi), ad esempio:

  1. numero1=10;
  2. numero2=5;
  3. if (numero1>numero2) {
  4.     max=numero1;
  5. } else {
  6.     max=numero2;
  7. }

Come possiamo notare la variabile max conterrà la variabile più grande, quindi il massimo tra numero1 e numero2. Ovviamente possiamo annidare più if…else a nostra discrezione. Un altro modo per eseguire la stessa operazione dello scriptino di prima stà nell’usare un operatore condizionale di questo tipo:

  1. numero1=10;
  2. numero2=5;
  3. max=numero1>numero2?(numero1):(numero2);

Ovviamente la possibilità di scelta tra questi due metodi stà a voi (in questa applicazione io preferisco usare l’operatore condizionale).
Come ho accennato prima si possono annidare più if o else if, questo per algoritmi leggermente più “contorti”. Volendo migliorare il programma di prima (che non funzionava correttamente se i due numeri erano uguali) possiamo scrivere il seguente codice:

  1. numero1=10;
  2. numero2=5;
  3. if (numero1==numero2) {
  4.     trace("I due numeri sono uguali");
  5. } else if (numero1>numero2) {
  6.     max=numero1;
  7. } else {
  8.     max=numero2;
  9. }

La stessa cosa poteva essere fatta con due operatori condizionali annidati, ma in questo caso la cosa non è molto conveniente sia per la comprensione del codice e sia per la difficoltà di annidare due operatori condizionali (con quei punti di domanda e i due punti alla fine si fa solo confusione :P), quindi consiglio di usarli solo nella applicazioni semplici (tipo calcolare il max tra due variabili).
Nella condizione hanno molta importanza gli operatori logici quali l’AND ( simbolo &&), l’OR ( simbolo || ) e il NOT ( simbolo ! ) che diventano utili quando nella condizione devono essere soddisfatte più cose (ad esempio che una variabile sia uguale a 10 e l’altra a 5, in questo caso si userà l’AND).

Switch…Case…Default

Questo blocco di istruzioni possono essere pensate come tanti if di seguito. Facciamo subito un esempio (che alla fine è alla base di tutto ;):

  1. switch (numero) {
  2.     case 1:
  3.         trace ("il numero è Uno");
  4.         break;
  5.     case 2:
  6.         trace ("il numero è Due");
  7.         break;
  8.     case 3:
  9.         trace ("il numero è Tre");
  10.         break;
  11.     default:
  12.         trace ("il numero non è nè Uno, Due, Tre")
  13. }

Questo blocco si potrebbe fare anche con una serie di if annidati:

  1. if (numero==1) trace("il numero è Uno");
  2. else if (numero==2) trace ("il numero è Due");
  3. else if (numero==3) trace("il numero è Tre");
  4. else trace("il numero non è nè Uno, Due, Tre");

In questo caso lo switch…case…default risulta più comprensibile e facilmente modificabile. L’istruzione break serve per uscire dall’istruzione di controllo (quindi si esce dallo switch). Ipotizzando che il numero sia 1, senza il break il programma controllerebbe pure le altre uguaglianze, mentre trovandosi un break esce dallo switch (velocizzando l’esecuzione del programma). Ci sono dei casi in cui il break può anche non essere utilizzato, ad esempio quando dobbiamo trattare più casi allo stesso modo.

Do…While e While

Queste istruzioni ho deciso di trattarle insieme visto che si differenziano solo per una piccola cosetta (non meno importante). Facciamo subito un esempio si While:

i=0;
while (i< =10) { trace(i++); }[/as] Questo piccolo frammento di codice conta i numeri dallo 0 al 10. Come potete vedere c'è una fase in cui inizializzo la variabile "i" e una in cui la incremento finchè è minore uguali a 10. Questo ciclo, appunto, fa assumere alla variabile "i" tutti i numeri interi tra 0 e 10 (inclusi). Se volessimo fare la stessa cosa con il Do...while faremo così: [as]i=0 do { trace(i++) } while (i<=10);[/as] Voi direte, ma praticamente sono due sintassi diverse dello stesso comando? E io vi rispondo : certo che no... adesso vi spiego il perchè. La differenza tra le due istruzioni stà nel fatto che nel Do...While la condizione viene controllata solo dopo l'esecuzione dell'istruzione (che di conseguenza viene eseguita almeno una volta), mentre nel While il discorso si inverte (ma và? :) Un utile applicazione del Do...While in Java e Co. stà nel controllo del input (da tastiera) dell'utente, tutto questo perchè l'input deve essere richiesto almeno una volta (e poi controllato). For…To

Questa è l’istruzione che io uso di più (mi stà più simpatica ed è molto più corta da scrivere ehehe) e ha lo stesso scopo delle altre due precedenti istruzioni, ossia quello di eseguire un ciclo finchè una condizione si è verificata.

for (var i=0;i< =10;i++) trace(i);[/as] Come potete notare in un unica riga ho inizializzato la variabile , ho messo la condizione, incrementato la "i" e visualizzata. L'unica attenzione stà nel fatto di non modificare la variabile "i" durante il ciclo, perchè molto probabilmente andremo ad incorrere su un ciclo infinito (che traducendo in termini pratici...si pianta tutto ehehe ;) Per accennare la funzione dell'istruzione continue facciamo un altro esempio: [as]for (var i=0;i<=10;i++) { if (i==5) continue; trace(i); }[/as] Come possiamo notare se "i" è uguale a 5 eseguiamo l'istruzione continue. Questo ci permette di uscire dall'iterazione corrispondente ma non dal ciclo (e di conseguenza si salta il conteggio di 5 facendolo poi riprendere dal 6). Se sostituiamo il continue con il break, faremo in modo che il conteggio si blocchi al numero 5 (visualizzando i numero 0 1 2 3 4). Volendo si può fare a meno di queste istruzioni e modificare opportunamente la condizione, ad esempio: [as]for (var i=0;i<=10;i++) { if (i!=5) trace(i); }[/as] Otterremo lo stesso risultato dello script precedente (quindi abbiamo sostituito il continue). Mentre se volessimo sostituire il break faremo così: [as]for (var i=0;i<=10 && i!=5;i++) { trace(i); }[/as] Come potete notare lo script che ho appena scritto non è molto "intelligente" infatti basterebbe mettere come condizione i<5, ma visto che gli esempi servono per capire... :) Tutte le cose belle finiscono prima o poi

Bene eccoci giunti alla fine del tutorial. Come avete notato le nozioni non sono molto complicate e essendo correlate da dei semplici esempi si trasformano in nozioni quasi banali. Ovviamente saper programmare non significa sapere queste cose, ma saperle applicare nel modo più corretto ed efficace possibile.
Inoltre nel caso dell’ActionScript occorre sapere pure altre istruzioni (gotoAndPlay(),LoadVariable(),XML,ecc…) per poter fare programmi che abbiano una certa utilità. La stessa cosa vale per Java dove occorre per forza sapere le API( per fare interfacce grafiche, leggere dati su disco, interfacciarsi a protocolli di rete, ecc…).

AsFunction

Requisiti

  • Semplicemente nessuna

Introduzione

Inizio a scrivere questo tutorial spiegando prima di tutto l’utilità di questa istruzione. Asfunction ci permette di fare una chiamata ad una funzione da un campo di testo (dove è stata abilitato il parsing dei tag HTML) o dall’URL Link presente nelle proprietà del campo. Nel nostro campo dinamico troveremo una o più parole cliccabili (a nostra scelta) che ci permetterano quindi di richiamare funzioni passando loro un certo numero di parametri a nostra scelta (in realtà come vedremo potremmo passare solo un parametro ma questo “problemino” è facilmente risolvibile).

Al lavoro

Ho deciso di spiegarne il funzionamento basandomi su un esempio che vi aiuterò a costruire man mano:

  1. Create un campo di testo dinamico con istanza “testo”
  2. Ora per attivare il parsing dei tag HTML dovete andare sulle proprietà del testo e attivare il tastino “Render text as HTML”;
  3. Nello stesso frame in cui risiede il campo di testo ora scrivete questo:
    1. testo.htmlText="<a HREF="asfunction:funzione,argomento">Clicca qui per richiamare la funzione</a>"

    Così facendo avremo la scritta “Clicca qui per richiamare la funzione” che se cliccata richiamerà la funzione da noi scelta.

  4. Ora dobbiamo costruirci la funzione:
    1. funzione = function (param) {
    2.     trace(param);
    3. };

Ora siamo pronti a testare il nostro movie premendo CTRL+ENTER, noterete che se premete la scritta vi si aprirà la finestra Output con scritto “argomento”. In poche parole siamo riusciti nel nostro intento di richiamare una funzione e passargli un parametro (che nel nostro caso era la stringa “argomento”).

Ora sorge una domanda spontanea: ma se io devo passare più parametri come faccio? La risposta la vedremo con un altro esempio più utile:

testo.htmlText = “Clicca qui per richiamare la funzione somma()“;
somma = function (param) {
arg = new Array();
somma = new Number();
arg = param.split(“,”);
for (var i = 0; iUtilizzi

Di utilizzi ce ne possono essere infiniti…l’unico limite (come in altre mille cose) rimane la vostra fantasia :)

Simonin.it torna online

Logo sciarpaEccoci qua dopo un bel po di tempo che il sito è stato in fase di manutenzione.
Come avrete certamente notato non c’è alcuna traccia di un filmato in flash, questo semplicemente perchè nella vita a volte bisogna cambiare anche se comunque qualcosina in flash la farò sicuramente.
Questo sito ha come scopo quello di informare senza impegno su novità inerenti il mondo web e non.
Il sito si basa sulla piattaforma WordPress modificata da me con l’aggiunta di alcuni plug-in per l’inserimento di codice (con relativa sintassi colorata) e altre piccole migliorie.
La versione del sito è da ritenersi beta quindi chiunque trovasse problemi di qualsiasi genere è pregato di mandarmi una mail con la descrizione dell’anomalia riscontrata.
Chiudo questa prima news ringraziando tutte le persone che mi hanno supportato e sopportato durante questo lungo periodo :)