Visualizzazione post con etichetta Programmazione. Mostra tutti i post
Visualizzazione post con etichetta Programmazione. Mostra tutti i post

15 ottobre 2009

L'importanza dell'interfaccia

Quando sviluppi un'applicazione e devi mostrarla all'utente, non aspettare di aver finito tutto quanto!

Parti dall'interfaccia e fagliela vedere: anche se sotto non funziona niente o funziona male, se l'interfaccia sarà gradevole e ben usabile, il cliente sarà più che soddisfatto in corso d'opera!

Puoi sfruttare questo trucchetto anche con il tuo capo in ufficio, se il tuo capo non è così sveglio o non ha tempo di controllare che sotto funzioni tutto a dovere!

Del resto, non ti lasci anche tu ammaliare da due belle gambe di una donna? L'occhio si lascia attrarre da ciò di bello che vede... perchè dunque non usare questo trucco anche in programmazione?

8 ottobre 2009

Cos'è un layer web?

Un layer non è altro che uno strato.

Esattamente come questa torta al cacao, così può essere composta una pagina web, ovvero può essere stratificata e composta di più livelli.

Non tutti i livelli sono visibili ed utilizzati subito dall'utente che da fuori ha una visione parziale del contenuto della pagina - esattamente come le tre linee di cioccolato della torta che, se non viene tagliata ed osservata nel suo interno, non se ne conosce la composizione - potrebbe pure contenere marmellata o miele anzichè cioccolata!

All'interno di una pagina web non si perdono informazioni o contenuti bensì, attraverso un utilizzo ponderato ed oculato, si possono ottenere vari stratagemmi per "dialogare" con l'utente ed indirizzarlo verso le operazioni giuste da compiere.

Tecnicamente niente di complesso, il layer si realizza effettivamente utilizzando il tag div del linguaggio HTML che con l'aiuto di qualche linea di Javascript mostra e nasconde gli oggetti all'interno della pagina.

6 ottobre 2009

Lavorare una volta per lavorare più volte

La parte più interessante del lavoro del programmatore è la sperimentazione di nuove tecnologie, l'utilizzo di nuovi linguaggi di programmazione, la ricerca di nuove soluzioni più performanti e pratiche utili per risolvere alcuni problemi.

Ma purtroppo, ahimè, non tutti i giorni è domenica, ovvero non tutti i giorni noi programmatori ci imbattiamo in novità interessanti, sfide professionali da affrontare, possibilità di ampliare le nostre conoscenza. Purtroppo, il lavoro del programmatore può essere talvolta ripetitivo e poco interessante.

Un aspetto brutto è la ripetitività del codice, ovvero il dover affrontare spesso lo stesso tipo di problema più volte. Se da un punto di vista questo fatto favorisca il lavoro di un informatico - se il problema è già stato risolto, ho già la soluzione in tasca da offrire al cliente! - dal punto di vista realizzativo, riscrivere lo stesso codice è dannatamente stancante e decisamente poco divertente, poco appassionante.

Dunque, per ovviare a questo, una buona cosa che può fare un programmatore, sempre che ne abbia il tempo, è costruirsi una piccola libreria/biblioteca di codici da riutilizzare nel momento opportuno. In questo modo un programmatore può lavorare una volta per lavorare più volte.

Questo approccio permette anche di velocizzare notevolmente i tempi di scrittura del codice e di garantire che il codice funzioni con tempi di rilascio più brevi. Infatti, se un pezzo di codice della nostra biblioteca atto a risolvere un certo tipo di problema - per esempio la connessione del sistema al database - sappiamo che funziona correttamente, se utilizzato nel modo corretto, con parametri corretti, funzionerà dovunque lo utilizziamo. In fase di debug, quando dobbiamo scovare gli eventuali errori, possiamo porre da subito la nostra attenzione su altri problemi del sistema, riducendo i tempi di reworking e correzione del codice.

Un buon "copia e incolla" ben controllato e rielaborato, qualche colpo di martello a destra e a sinistra, una stiratina al codice... e voilà, pronto il codice che risolve i problemi al cliente! Beh non sempre è così facile, ma quando si può fare... perchè no?

30 settembre 2009

Vantaggi dell’utilizzo dei layer


Utilizzare i layer nel web comporta notevoli ed interessanti vantaggi:


1. l'utente vede solo ciò che deve vedere al momento:
       1.1 possiamo facilmente indirizzarlo a compiere solo quelle operazioni che effettivamente può compiere nel contesto nel quale si trova all'interno dell'applicativo;
        1.2 possiamo dare all'utente l'idea che l'applicazione sia molto veloce: ogni qual volta egli clicca su qualche voce di menu, l'operazione da lui richiesta è istantanea;

2. ci sono molteplicità di situazioni e obiettivi in cui possono essere impiegati:
       2.1 nei menu per far comparire/scomparire vari sotto-menu;
       2.4 per informare l'utente dello stato del caricamento delle pagine o di alcune funzionalità
       2.5 per quanto altro vi possa venire in mente...

3. se utilizzati bene, possono rendere l'applicativo elegante e allo stesso tempo molto funzionale, navigabile e molto gradevole per l'utente;

4. l'implementazione è banale.

Dunque poco dispendio di inutili energie per il programmatore e ottimi effetti per l'utente che utilizza l'applicativo. Provare per credere.

23 settembre 2009

Oracle SQL Performance Tuning - aumentale!

Quando ci troviamo dinanzi ad un sistema informatico composto da più tecnologie organizzate in diversi sotto-sistemi è importante capire dove e come agire per aumentarne le performance.


Ogni sistema informatico è composto principalmente da due parti, back-end e front-end, la prima spesso composta da database (ad esempio Oracle) mentre la seconda da qualche interfaccia che presenta i dati all'utente e gli permette di interagire col sistema stesso (ad esempio interfacce web).


Il tempo di risposta del sistema ad ogni input dell'utente è un dato da non sottovalutare quando si sviluppa un software in quanto, oltre che dall'efficienza e dall'efficacia delle operazioni che il software ci permette di fare, non meno importante è il tempo con cui il sistema ci permette di farle. Per intendersi, nessuno spenderebbe anche soltanto un euro per un cellulare che, nonostante offra una conversazione audio perfetta ed sia fornito di uno schermo touch-screen di ultima generazione, impiegasse ad esempio 5 minuti per far partire una telefonata (ma nemmeno 1 minuto, nemmeno 30 secondi!): anche in questo caso il tempo di risposta del cellulare, in base all'input dell'utente di far partire una chiamata, è fondamentale affinchè l'utente sia soddisfatto e compiaciuto del proprio terminale.


Il front-end utilizza delle query per interrogare il database, ovvero il back-end. L'ottimizzazione delle query è un passo fondamentale per ottimizzare il sistema informativo e migliorarne notevolmente le prestazioni.

Ecco una piccola scaletta di accortezze da poter seguire per fare un po' di tuning di query SQL:
  1. mettere nelle join la tabella con meno cardinalità a sinistra;
  2. creare indici appositi sui campi che sono chiavi esterne, sui quali si fanno join;
  3. utilizzare, se necessario, degli hint nelle query, anche per forzare l’utilizzo di indici custom che potrebbero, altrimenti, erroneamente non essere usati;
  4. utilizzare l’explain plan per eliminare loop e table full scan;
  5. intercettare le query effettivamente eseguite dal sistema attraverso strumenti appositi (come ad esempio il browser session di Toad) e poter performare ciò che realmente viene lanciato dall'utente.
Quest'ultimo trucchetto può essere utile nel caso che qualche software (utilizzato generalmente lato front-end) modifichi le query lanciate dalle operazioni compiute dall'utente apportando dei piccoli, ma talvolta spiacevoli, arrangiamenti. A causa di questi "arrangiamenti", le query che effettivamente vengono lanciate potrebbero non essere quelle che ci aspettiamo ed è utile intercettarle a run-time (sebbene talvolta possa essere complesso!) per togliersi questo dubbio ed eventualmente ovviare a tale situazione per esempio utilizzando qualche functional index.

1 settembre 2009

Array in Oracle PL-SQL

Gli array sono strumenti davvero comodi e pratici ed in certe occasioni direi quasi indispensabili. Ecco come utilizzarli nel PL-SQL.

1. dichiarare l'array nella sezione del DECLARE della Stored Procedure;

type my_array is table of varchar2(20);
array_di_prova my_array := my_array();

In questo caso ho dichiarato l'array array_di_prova di VARCHAR2 (stringhe di testo) ed ogni elemento dell'array può avere lunghezza massima di 20 caratteri.

2. all'interno del BEGIN della Stored Procedure specificare la lunghezza dell'array ovvero di quanti elementi è composto il vettore;

array_di_prova.EXTEND(12);

3. all'interno del BEGIN della Stored Procedure, richiamare ed utilizzare l'i-esimo elemento dell'array all'interno di un ciclo (for o while o altro) che ha come indice la variabile "i";

array_di_prova(i);

26 agosto 2009

Mostra / nascondi Div (layer)

Ecco alcune semplici ma utilissime funzioni javascript utilizzate nei post sul messaggio di "caricamento in corso" ed in quello sui messaggi di notifica per l'utente:

1. funzione HideContent(d) che nasconde il div passato in input

function HideContent(d) {
  if(d.length < 1) { return; }
  document.getElementById(d).style.display = "none";
}

2. funzione ShowContent(d) che mostra il div passato in input

function ShowContent(d) {
  if(d.length < 1) { return; }
  document.getElementById(d).style.display = "block";
}

3. funzione ReverseContentDisplay(d) che inverte lo stato del div rendendolo visibile se non lo era o nascondendolo se veniva mostrato all'utente

function ReverseContentDisplay(d) {
  if(d.length < 1) { return; }
  if(document.getElementById(d).style.display == "none") {
    document.getElementById(d).style.display = "block";
  }
  else { document.getElementById(d).style.display = "none"; }
}

Ecco un esempio pratico riassuntivo (↗) che mostra in azione queste funzioni.

25 agosto 2009

Rassicurare l’utente nelle applicazioni web-based - Messaggi di notifica

Oltre ad informare l'utente del caricamento in corso della pagina richiesta, è possibile utilizzare lo stesso sistema illustrato nel post precedente per dare altri avvisi a chi sta utilizzando la nostra applicazione web-based.

In particolare possono essere dati:
1. messaggi di notifica di operazioni effettuate;
2. messaggi di errore.

Per esempio, dopo che è stata effettuato un aggiornamento di qualche dato a sistema, è possibile far comparire un messaggio per notificare all'utente l'avvenuta modifica oppure, nel caso sia occorso un errore, un messaggio del tipo "Errore: riscontrato il problema tal dei tali...".

Se per il caricamento in corso avevamo utilizzato il rosso come sfondo del messaggio, per la notifica di un'operazione eseguita con successo potremmo utilizzare un colore rassicurante come un verde o un giallo chiaro, o comunque un colore che al primo impatto dia l'idea che tutto è andato bene.

Tecnicamente si tratta solo di modificare, all'interno della pagina di esempio (↗) mostrata nel post precedente, le caratteristiche del box div che contiene il messaggio (colore, testo, posizione e misure...) e farlo mostrare al momento opportuno, dando qualche piccolo colpo di javascript qua e là all'interno delle nostre pagine web... ed il gioco è fatto!

24 agosto 2009

Rassicurare l’utente nelle applicazioni web-based - Caricamento in corso

Una delle cose che mi aveva colpito qualche tempo fa, era il piccolo riquadro rosso che compariva in alto a destra nelle pagine di Gmail e che informava l'utente dell'avviato caricamento della pagina richiesta cliccando su qualche link (presente sia alla login sia sfogliando le varie email o compiendo altre operazioni).

Niente di complesso, niente di trascendentale dal punto di vista tecnologico, ma l'idea di Google, che non avevo visto fino a quel momento in nessun'altra pagina era perfetta: dare all'utente l'idea che tutto fosse sotto controllo.

E questo era l'effetto che ne ricevevo: un senso di sicurezza!

Quel semplice messaggio, al posto di qualcosa di indefinito, mi parlava di un'attesa non casuale ma normale, programmata, controllata. Rispetto al resto delle pagine web dove non mi veniva mostrato nessun messaggio, nessun "Caricamento in corso...", quell'attenzione di Google subito dopo il mio click mi eliminava quell'imbarazzo dell'aspettare senza sapere quanto e senza capire a volte cosa stesse veramente accadendo o, peggio ancora, senza capire se stava accadendo qualcosa o se fossi incappato in qualche errore. In pratica, quel piccolo accorgimento non faceva più scattare nella mia testa le classiche domande che partono automaticamente quando il caricamento di una pagina, dopo un nostro click, risulta particolarmente lento - "ma la rete va? Funziona?".

Oggi molti servizi web-based hanno seguito la stessa scia e non solo Gmail utilizza questo semplice sistema per informare l'utente che la sua richiesta è in elaborazione.

Dunque, come poter implementare qualcosa di simile da sfruttare nelle nostre applicazioni web-based?

Riprodurre un effetto simile a questo non è affatto difficile: con un semplice javascript ed un div nascosto, si può eguagliare - o anche personalizzare a nostro piacimento - il messaggio di notifica dell'elaborazione in corso rendendo la nostra pagina web - o la nostra applicazione web-based, che dir si voglia - molto piacevole per la navigazione e fornendogli un tocco in più di professionalità che può fare la differenza agli occhi di chi la utilizza.

Ecco un semplice esempio (↗). Analizzando l'HTML notiamo al suo interno:

➜ la funzione javascript che mostra il messaggio nel momento opportuno (ShowContent());
➜ l'elemento div all'interno della pagina che contiene il messaggio da mostrare fin quando non viene caricata la pagina successiva;
➜ un link che richiama la funzione prima di ridirezionare verso la pagina desiderata.

Con poche mosse abbiamo creato qualcosa di efficace e funzionante, di sicuro gradimento.