Informazioni su Antonio Volpon

Ho un'esperienza di più di 25 anni come consulente User Experience e Project Management, in particolare nei settori fashion e luxury, sport ed editoria. [Profilo]

AllTheWeb tutto Css e Xhtml, o no?

AllTheWeb, popolare motore di ricerca, è stato convertito ad un design Xhtml il cui layout è gestito completamente dai Css.

Questo, come nota Jeffrey Zeldman, ha il vantaggio da un lato di rendere le pagine più veloci, dall’altro di aumentare il grado di personalizzazione.

Se provate però a vedere la Home Page con Netscape, noterete che il codice restituito al browser non è Xhtml, ma il buon vecchio Html.

Evidentemente i progettisti ritengono ancora non propizio il momento di “fregarsene” delle vecchie versioni dei browser e rilevano lato server il client, spedendogli una versione appropriata della pagina.

Avrebbero potuto però correggere in questa versione alcuni piccoli problemi nel codice (tra cui un target=”_new”) e aggiungere tutti gli attributi obbligatori (per un checkbox).

Usable Forms for the Web

Le form rappresentano uno dei momenti di interattività più intensi con l’utente e per questo la loro progettazione e costruzione devono essere studiati fin nei minimi particolari.

Questo testo, dal titolo un po’ ingannevole, vi aiuta a:

  • capire il ruolo delle form (cosa ottenere e in che modo)
  • saper scegliere tra i diversi elementi di una form (radio button, check box, select, ecc.) per capire quale usare in quale contesto
  • realizzare programmi in Php e Asp, nonché animazioni Flash che fanno uso di form
  • controllare l’input dell’utente, sia lato client, sia lato server

Accessibilità

Un capitolo del testo, dal titolo “Designing Usable Forms“, si concentra sull’accessibilità delle form ed indica i tag in aiuto allo sviluppatore, come fieldset, legend e label.

Sono anche presentati alcuni approcci che consentono di migliorare il layout e renderlo allo stesso tempo più accessibile. Un esempio è dato dall’inclusione di parti Javascript così da selezionare un radio button non solo cliccando sul piccolo cerchio, ma anche sul testo che lo accompagna.

Peccato che quanto detto in queste pagine non venga poi applicato agli esempi degli altri capitoli.

Le form e le applicazioni web

Come piattaforme per lo sviluppo di form sono prediletti Asp e Php, di cui sono presentate delle piccole, ma complete applicazioni.

Particolarmente interessante lo studio dei diversi approcci che consentono di suddividere una form in più pagine e di mantenere lo stato.

Nel testo si parla anche di ASP.NET, ma si vede chiaramente come si tratti di un’aggiunta dell’ultimo momento.

Controllo dell’input

Tra i capitoli meglio riusciti c’è quello che illustra le tecniche per convalidare l’input dell’utente.

Il capitolo è diviso in due parti:

  • lato client: come utilizzare Javascript per verificare che tutti i campi obbligatori siano stati compilati e come utilizzare le espressioni regolari per verificare che l’input soddisfi certe caratteristiche
  • lato server: in che modo è possibile verificare i dati inseriti con Php e Asp

Apprezzabile l’approccio degli autori: tutti gli esempi funzionano non solo con le versioni 5+ dei browser, ma anche con le versioni più datate.

Le funzioni presentate sono molto generali e funzioneranno senza troppe modifiche anche nei vostri programmi.

Capitolo gratuito

Un intero capitolo, non presente nel manuale e che parla di applicazioni Javascript realizzate impiegando le form, è disponibile online e scaricabile gratuitamente [Pdf – 620 Kbyte].

Pro

  • il codice funziona con tutti i browser dalle versioni 4+
  • gli esempi realizzati sono completi e molto generali: sono richieste poche modifiche e possono già essere utilizzati
  • buono l’approccio adottato, che prevede la suddivisione delle form in più pagine di cui viene mantenuto lo stato

Contro

  • l’accessibilità web è il tema di in un intero capitolo, ma viene dimenticata in tutti gli altri

Informazioni

Usable Form for the Web ¤ di Andy Beaumont, Jon James, Jon Stephens, Chris Ullman ¤ 380 pagine ¤ prezzo 24.99 dollari ¤ lingua inglese ¤ edito da glasshaus

ASP.NET: Politiche di Caching

Corso ASP.NET: tredicesima puntata

Esempio funzionante | Sorgente | Scarica il sorgente (zip)

La ripetitività e l’intensità nell’uso delle applicazioni Internet fa sì che sia teoricamente possibile prevedere dei meccanismi di salvataggio e recupero di pagine od oggetti dalla memoria, ai fini di aumentare le prestazioni.

Per questo motivo, a differenza di Asp, Asp .Net rende disponibili delle sofisticate tecniche di caching che, adottate correttamente, consentono allo sviluppatore di ridurre l’uso intensivo di alcune risorse, come la Cpu e le connessioni a database.

Con Asp.Net è possibile utilizzare due tipi di caching:

  • Output caching – utilizzato per memorizzare pagine o porzioni di pagine in memoria, così da ridurre l’esecuzione del codice che le compongono
  • Data caching – utilizzato per memorizzare qualunque tipo di oggetto, soprattutto Dataset o risultati di trasformazioni Xml

La cache viene normalmente riempita al primo caricamento della pagina o dell’oggetto da parte dell’utente. Le successive richieste vengono invece servite impiegando la copia compilata e precedentemente memorizzata nella cache, evitando la ri-esecuzione del codice.

Con Asp.Net è anche possibile definire dei discriminanti che possono invalidare la copia cache non valida e richiedere quindi la sua ricostruzione. Tipici eventi sono rappresentati dallo scadere di un intervallo di tempo o la modifica di file di dipendenza.

Output caching

L’output caching consente di ridurre il carico applicativo perché, dopo la prima richiesta della pagina, questa viene memorizzata nella cache.

Questa funzionalità si ottiene specificando in testa alla pagina qualcosa del tipo:

<%@ OutputCache Duration=”30″ VaryByParam=”None” %>

L’esempio sopra riportato mantiene la pagina nella cache per 30 minuti, allo scadere dei quali una nuova versione viene compilata e memorizzata.

I discriminanti con i quali è possibile confrontare la pagina sono:

  • Duration – la durata (in minuti) della pagina nella cache
  • VaryByParam – i parametri che provengono da una QueryString (get) o dal post di un form
  • VaryByHeader – l’header Http associato ad una pagina
  • VaryByCustom – un parametro configurabile, normalmente il tipo di browser utilizzato

Supponiamo ad esempio di avere una pagina che riceve come parametro l’anno di pubblicazione di un libro. E’ possibile inserire nella cache una versione di pagina per ogni anno di ricerca. La direttiva assume in questo caso una forma del tipo:

<%@ OutputCache Duration=”30″ VaryByParam=”AnnoPubblicazione” %>

Data caching

Il data caching consente un controllo più raffinato, perché opera a livello di oggetti invece che a livello di pagina.

Per inserire e rimuovere oggetti dalla cache è in questo caso possibile utilizzare la classe Cache, ospitata dal namespace System.Web.Caching.

Nel caso più semplice, per inserire un oggetto nella cache si usa una struttura del tipo:

Cache(“chiave”) = valore

Per rimuovere un elemento, si usa invece:

Cache.Remove(“chiave”)

Un elemento può essere inserito nella cache anche con il metodo Insert, tramite il quale è possibile specificare i discriminanti che portano alla “scadenza” dell’oggetto.

C’è ad esempio la possibilità di legare la cache ad un file presente sul server o ad un altro oggetto presente nella cache, e di invalidarla al modificarsi del documento. Per farlo si utilizza la classe CacheDependency.

Nell’esempio che segue viene realizzata una trasformazione tra un documento Xml e un documento Xsl. Il risultato viene memorizzato in cache e lì rimane fino a quando il file Xml non subisce un aggiornamento.

La prima volta che viene caricata la pagina, viene eseguita la trasformazione e l’oggetto è salvato in cache:

Tabella di libri con la scritta: Elemento non presente in cache... lo carico

Successivamente viene riportata una scritta che indica come il caricamento venga eseguito dalla cache:

Tabella di libri con la scritta: Elemento già presente in cache

La funzione PopolaCache (riportata qui sotto), si preoccupa di trasformare il documento Xml con il foglio Xslt e di memorizzare il risultato nella cache, con il metodo Insert. Viene utilizzata la classe CacheDependency per creare una dipendenza tra l’elemento in cache e il file fisico del documento Xml.

 42 Public Sub PopolaCache(strFileXml As String)
 43 
 44  Dim objXml As New XmlDocument
 45 
 46  objXml.Load(Server.MapPath(strFileXml))
 47 
 48  Dim objCDep as new CacheDependency(Server.MapPath(strFileXml))
 49 
 50  Cache.Insert(strFileXml, objXml, objCDep)

Se la cache è vuota viene richiamata la funzione PopolaCache:

 26   If (IsNothing(Cache("xml.xml"))) Then
 27     risposta.innerText = "Elemento non presente in cache…lo carico"
 28     PopolaCache("xml.xml")
 29   Else
 30     risposta.innerText = "Elemento già presente in cache"
 31   End If

In entrambi i casi, l’oggetto viene caricato prelevandolo dalla cache:

 33   objXsl.Load(Server.MapPath("xsl.xsl"))
 34 
 35   objXml = CType(Cache("xml.xml"), XmlDocument)
 36 
 37   libri.Document = objXml
 38   libri.Transform = objXsl

Se a questo punto modifichiamo (ad esempio con un editor di testo) il documento Xml, Asp.Net esegue nuovamente la trasformazione eliminando il precedente contenuto dalla cache.

Session, Application e Cache

Nel memorizzare un oggetto, lo sviluppatore ha a disposizione 3 strade: utilizzare le sessioni, l’oggetto application o la cache

In linea generale, ecco le situazioni in cui usarle:

  • Le sessioni dovrebbero essere impiegate quando è necessario registrare l’attività dell’utente nel sito, come ad esempio un carrello di commercio elettronico
  • L’oggetto application va utilizzato per memorizzare informazioni puntuali e comuni a tutto il progetto, come ad esempio la stringa di connessione ad un database. E’ un oggetto che andrebbe usato con parsimonia
  • La cache si presta ad ospitare pagine od oggetti di cui è possibile prevedere l’obsolescenza (al passare del tempo e al verificarsi di una certa condizione). Va impiegata nelle situazioni in cui c’è un effettivo guadagno in termini prestazionali o di risparmio delle risorse.