Vortexmind: free your mind Tu ne cede malis sed contra audentior ito

10Oct/061

Java Threads – Runnable – Issues – Newbie Tips

Since I'm getting back on programming, I'm currently re-skilling myself on this duty. Having not programmed Java in a while, I've found myself on trouble on this simple topic: Java concurrency and threads. I will insert on the blog some "quick tutorials" about various subjects. I've found that programmers sometimes need a fast solution on a given problem. They could surely get it by looking at the API's and so on, but it costs valuable time. So I will go straight to the problem.

  • Problem: I need to do a fixed job on some data in a parallel fashion.
  • Solution: using a multi-threaded model, I have two classes Controller and Worker. Worker is essentially a thread that does the fixed job and reports the data to the Controller
  • Main issues: is it better to "extends Thread" or to" implements Runnable"? How to accessing shared variables concurrently and avoid race conditions? How to pass data from Worker to Controller?
Print this post Print this post
26Apr/060

F-Shaped Pattern

F patternLo dice Jakob Nielsen, il "re dell'usabilità". Ma cosa dice precisamente? Secondo uno studio da lui realizzato, F è la forma del percorso che l'occhio è più portato a compiere su una pagina web (se opportunamente "guidato" da un layout intelligente). Lo studio, compiuto su 232 soggetti grazie a tecniche di eyetracking (una tecnica video che permette di seguire i movimenti dell'occhio relativamente all'immagine rappresentata), ha infatti evidenziato questa peculiare forma su migliaia di pagine web. In generale, un utente:

  • Scansiona orizzontalmente la testata della pagina
  • Sposta lo sguardo poco più in basso, ed effettua una seconda veloce scansione orizzontale
  • Infine, viene visualizzata la barra laterale (supposta a sinistra), in un modo più o meno rapido a seconda dell'utente

La configurazione che si forma assomiglia parecchio alla lettera dell'alfabeto citata. Grazie a questo studio si è capito che l'utente in media non legge dettagliatamente i testi presentati nella pagina, parola per parola. L'importante è quindi inserire nei primi due paragrafi le informazioni essenziali, in modo da catturare l'attenzione del lettore ed eventualmente indurlo a proseguire la lettura. Inoltre si è visto che è molto utile inserire nelle intestazioni due parole significative, soprattutto nel menù: questo perchè difficilmente l'utente leggerà oltre, ma preferirà continuare a scansionare le voci delle liste e delle intestazioni. Uno studio che trae conclusioni ovvie? Beh, può darsi ... però è pur sempre un'osservazione concreta del comportamento degli utenti ...

Print this post Print this post
25Mar/061

COMET – Andare oltre AJAX

Ajax vs Comet - Modelli di comunicazione a confrontoIn principio era AJAX: Asynchronous JavaScript And XML. Ovvero rendere le applicazioni web più "interattive" e flessibili utilizzando richieste asincrone prese in carico dal browser e gestite tramite chiamate XML al server. Tutto molto bello, ma ci sono dei problemi: pur introducendo l'asincronia, il meccanismo rimane fondamentalmente basato sul paradigma "request-response" (o client-server, se preferite): è sempre il client a fare le richieste, e a "innescare" una computazione lato server (anche se effettuata in maniera asincrona, a differenza del meccanismo sincrono tradizionale). Questa limitazione si evidenzia in particolar modo per applicazioni multi-utente e collaborative: con AJAX infatti non è possibile "forzare" un update da server (ad esempio quando i dati visualizzati dal client diventano inconsistenti perchè vengono modificati, ad esempio, da un altro utente). In genere si cerca di mascherare questa limitazione utilizzando meccanismi di polling, ma la soluzione non è soddisfacente nè efficiente.

COMET
cerca di andare oltre, introducendo uno stile di comunicazione "event-driven, server-push data streaming". In questo paradigma, i dati possono essere inviati al client anche in assenza di un evento di richiesta (da qui la denominazione server-push). Basandosi inoltre su canali http persistenti, si riesce anche a ridurre drasticamente la latenza di comunicazione.

Le informazioni presenti in questo articolo le ho tratte da questo articolo in inglese, che offre ulteriori spunti di riflessione e che vi consiglio di leggere se vi interessa la cosa.

Print this post Print this post
   
Creative Commons Licence
This work by Paolo Tagliaferri is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.