Chi trova un amico …

Ciao a tutti,
potrei sperticarmi in elogi elencando le sue doti, ricordare i momenti felici passati lavorando insieme o lanciare un appello all’azienda che lo ha assunto perché ce lo restituisca senza riscatto… Ma sarebbe un saluto come tanti, prevedibile e noioso.
Invece io voglio dirti, caro Salva, che non ci rassegneremo alla tua assenza e che in un modo o nell’altro tu ci sarai sempre.
Ti auguriamo tutto il bene che ti meriti, come professionista e come uomo.
Luca, Renato e la Digitex srl

TikiSwing: il pattern MVC per le applicazioni desktop

TikiSwing,
è un framework open source che permette di implementare il pattern MVC nelle applicazioni desktop che fanno uso della libreria grafica Swing. Il framework semplifica e velocizza lo sviluppo permettendo una “copia” diretta dei dati dal model alla view e viceversa.

  • la componente view la si ottiene da classi TikiSwing che non sono altro che estensioni delle classiche Swing, precedute da una Y invece della classica J delle classi Swing
  • la componente model la si ottiene con delle classi che estendono YModel, mappano i dati presenti sulle view utilizzando il framework BeanUtils purchè si rispetti lo standard JavaBean
  • la componente controller la si ottiene con una classe che estende YController

In fine, il collante fra tutti i componenti del MVC è svolto da un metodo statico di una classe di utilità (YUIToolkit), basta farvi vedere il prototype del metodo che parla da se.

YUIToolkit.setUpMVC(YModel model, YComponent view, YController controller);

Eccovi un riferimento: TikiSwing

Driver liberi per tutti

Avete mai consigliato a qualcuno di passare a Linux? Io sì. Partizionano, installano, avviano e poi iniziano: “non ha riconosciuto la mia scheda audio ultraperformante… Beh, però non riesce a stampare… Ma la risoluzione è 320×240… Però non posso usare il mio scaldapiedi USB… etc etc”. Insomma, buona parte delle grane che si hanno è dovuta alla mancanza di driver per Linux per le miriadi di periferiche esistenti.
Finalmente le cose potrebbero cambiare perché Greg Kroah-Hartman, uno dei maggiori esperti di sviluppo del kernel, ha annunciato in questo post che la comunità di circa 1500 sviluppatori che lavorano al kernel è disposta a lavorare gratuitamente per lo sviluppo di driver open source per qualunque periferica. Tutto quello che chiedono alle aziende produttrici è un minimo di documentazione e un contatto con un esperto. Tutto il resto lo curano loro.
Avrà successo l’iniziativa? E’ giusto che la comunità si accolli l’onere di creare driver che useranno una manciata di persone? Speriamo bene.

JBI 1.0

Salve a tutti. Vi ringrazio per avermi accolto il questa community! Scrivo per segnalarvi un “nuovo” standard nel modo Java: Java Business Integration (JBI). In questo messaggio mi limiterò a fare un’introduzione alle motivazioni che hanno portato alla nascita di JBI nei prossimi cerchierò di entrare nei dettagli.

L’integrazione delle applicazioni Enterprise (EAI) e le soluzioni d’integrazione Business-to-Business (B2B) hanno tradizionalmante richiesto l’uso di tecnologie non standard. Questo ha obbligato gli utenti finali ad essere ”lock in” ad un singolo venditore di tali tecnologie, o creare le proprie. Ogni approccio ha i suoi svantaggi. Un singolo venditore non è in grado di coprire il vasto campo delle funzioni delle ”EAI” e ”B2B” (considerate le migliaia di applicazioni e protocolli che devono essere supportati). Questo lascia gli utenti delle tecnologie d’integrazione in una posizione scomoda: selezionano soluzioni non ideali e costose per i loro problemi d’integrazione.
Java Business Integration (JBI) cerca di risolvere questo problema creando un’architettura standard per soluzioni d’integrazione. Questa infrastuttura pemette a componenti di parti terze di essere ”plagged in” in una infrastruttura standard, consentendo a questi d’interoperare in un modo prevedibile ed affidabile, nonostante siano stati prodotti da venditori differenti. Ci si aspetta che questa capacità d’interoperare creerà un ”ecosistema” di multivenditori, che darà vita ad un vasto pool di tecnologie d’integrazione che potranno essere utilizzate dagli utenti finali.

Il pattern Singleton thread safe ?

Il pattern Singleton, forse il più usato, forse il primo ad essere usato … permette di avere sempre una solo istanza di un determinato oggetto. E se volessimo raffinarlo garantendo:

  • che sia thread safe evitando inutili colli di bottiglia, quindi rendere synchronized solo la fase in cui si richiede la prima istanza dell’oggetto e non tutte le successive richieste
  • il “lazy loading”, ossia che l’oggetto venga istanziato solo quando è realmente necessario

Vi riporto un’interessante soluzione che apparentemente sembra ridondante e poco raffinata. In tale articolo, è dimostrato che la soluzione conosciuta come Double-checked locking pattern, è corretta teoricamente ma non praticamente, e che, sfruttando le specifiche del lingiaggio Java, l’uso di una inner-class static per ottenere l’istanza del singletone, sia una tecnica che garantisce sia il thread-safe che il lazy loading. Infatti … una classe static è caricata solo quando viene richiamata la prima volta e le specifiche del linguaggio, garantiscono che tale operazione è sicuramente thread-safe.

Buona lettura qui !

Com’è bello fondersi il cervello…con Fuse

Brutta battuta per introdure un progetto di cui parlammo a suo tempo: Fuse. Fuse sta per File System in User Space e finora ho sempre pensato si trattasse di un barbatrucco per consentire alle Linux/Mac Box di poter scrivere su partizioni NTFS. Ma la mia ignoranza enciclopedica mi aveva fatto sorvolare sui dettagli più appetitosi di questo strumento. In realtà Fuse consente a moduli user di offrire servizi aggiuntivi al file system. Quelli di voi che conoscono i plugin “FS” di Total Commander possono capire subito di cosa si tratta: si tratta di offrire dei servizi attraverso la classica struttura a directory ed i comandi tipici tipo copy, ln (crea link), ls (visualizza directory), move e quant’altro.

Ok ancora vi sfugge il nesso…faccio qualche esempio: supponiamo che volessi sfruttare i miei 2.7 GB di spazio disponibile su GMail per conservare i bookmark del browser, qualche file che ho bisogno di ritrovarmi spesso e altro; non faccio altro che fare un mount in una cartella /mnt/googlefs (ad esempio) usando un modulo di Fuse scritto per gestire l’account di gmail e, dentro la cartella appena menzionata potrò fare la copia dei file che mi interessano (ovviamente lavorando offline sarà impossibile accedere a questa cartella).

Altro giro altro esempio: usando DBToy, sempre per Fuse, è possibile ottenere una cartella che rappresenta una struttura a cartelle, ciascuna delle quali rappresenta una tabella di un database a cui ci si è connessi e, per ciascuna cartella/tabella il modulo ci presenta due file XML, uno per la descrizione dei campi e l’altro contenente i dati!!! Ma non è fantastico tutto ciò?!?!?!? (entusiasmi da informatico)

Altri moduli carini sono il file system criptato (Tario sei in ascolto?), il file system per dispositivi bluetooth, quello per gli iPOD…li trovate tutti qui (c’è anche un Versioned File System, ossia che mantiene una vecchia copia del file ogni volta che viene modificata; è un’altra delle tante feature di Vista che l’Open Source ha prodotto in meno tempo e con meno esborso di Miliardi; mi fanno un pò pena quelli della Microsoft…e pensare che ci tenevano così tanto al loro NUOVO sistema operativo).

Vi ho gasato anche questa volta, eh?

Zac

MVC: WebWork il sostituto di Struts ?

Ciao a tutti,

ormai per chi sviluppa web application è d’obbigo l’adozione di una serie di bet pratice architetturali che semplificano e rendono più manutenibile il codice. Tutte queste regole possono essere sintetizzate nel pattern MVC (Model View Controller), molto utile anche per applicazioni Desktop. Tale pattern suddivide l’applicazione in tre blocchi: una parte elabora e trasforma i dati (Model), una parte presenta i risultati (View) ed una parte che funge da cabina di regia e da collante fra le due parti precedenti (Contreller). Il Controller, si occupa di scegliere quali trasformazioni/elaborazioni operare sui dati – Model – e come presentare i risultati – View -. In fine, se volessimo implementare il pattern MVC in modo più raffinato, è possibile “innestare” sul MVC, l’altrettanto famoso patter Observer. Tale pattern permette di implementare un meccanismo secondo cui, una serie di classi dette Observer si possono registrate presso una classe detta Observable e venire notificate tuttte insieme quando avvengono dei cambiamenti rilevanti (un po come avviene nella gestione degli eventi mediante Listenere nelle classi SWING). Il pattern Observer “innestato” sul MVC permette di implementare un meccanismo secondo cui è possibile permettere alla View di “osservare” il Model e di “essere osservata” dal Controller.

Per maggiori dattagli sui pattern MVC-Observer, potete dare un’occhiata ad un bel articolo in Italiano Claudio De Sio.

Per le web application, sono nati diversi framework che implementano MVC, tra i più famosi ed usati cito Struts e Volocity. In particolare, il più usato è Struts che sta per essere soppiantato da un nuovo framework MVC per J2EE molto molto interessante: WebWork. Questo interessante framework sfrutta altri due pattern molto usati Inversion of Control (IoC) e Interceprtor. Per entrambi i pattern, WebWork prevede già un’ implementazione interna, però è possibile e consigliato, nel caso del pattern IoC, utilizzare come framework il più famoso e consolidato Spring.

In fine … volete sapere quale è stata la risposta della comunità di Strust ??

Una convergenza dei due framework !! (Ecco perchè amo l’Open Sourceee ;-))

Tra poco uscirà il nuovo Struts2 che sarà la fusione del meglio di Struts e di WebWork … allora … per chi volesse … è possobile prepararsi a Struts2 utilizzando WebWork 2.2.4 … sembra che in tal modo, la migrazione al nuovo Struts sarà indolore …. staremo a vedere !

Weebly: Tool Ajax per la creazione di siti Web

Ciao ragazzi,

girovagando in rete ho scoperto di recente Weebly, un sito che offre gratuitamente la creazione e l’hosting di siti web. A guardare il video di presentazione in home page c’è da rimaner sorpresi: davvero notevole l’interfaccia Ajax-based che consente con pochi click e qualche drag ‘n’ drop di realizzare e pubblicare un sito intero con tanto di contenuti, immagini, mappe e video. C’è poi la possibilità di scegliere tra quattro template pronti e di scaricare uno zip con tutto il sito realizzato. Traduco dal sito:

Weebly è il modo più semplice per creare un sito web stupendo e condividerlo con il mondo gratuitamente. Da siti personali a professionali, Weebly ti consentirà di trascorre il tuo tempo sulla parte più importante del tuo sito: il suo contenuto.

Il codice generato, pur non usando le tabelle per il layout, è decisamente pesante e ridondante con stili inline e qualche tag font ma i risultati e soprattutto la modalità di creazione sono molto accattivanti. Naturalmente quello si crea è solo un sito di tipo statico, però molto bello!

Ciao, ed alla prossima

Replichiamo il database … senza farlo sapere al DBMS ?

E’ vero la famiglia degli sviluppatori Java è grande e quindi dispersiva … però se cerchi qualcosa, c’è sempre qualcuno che ti aiuta.

Problema: sto sviluppando un’applicativo data-driven, che tratta dati sensibili e particolarmente rilevanti … ho bisogno di un alto livello di fault tollerant, high avalaibility e data replication.

Soluzione: un approccio interessante è quello di replicare il database direttamente al livello di JDBC, consentendo l’inserimento in maniera “trasparente” sia al database che al programmatore, utilizzando HA-JDBC (high availability JDBC) si può fare in modo che le query che vengono fatte ad un singolo database vengano replicate su n diversi database, ottenendo con relativa facilità, e a livello di applicazione Java (NON di database) un sistema ad alta disponibilità.

Guardate qui !