Deprecated: Assigning the return value of new by reference is deprecated in /web/htdocs/www.nikosimo.it/home/nikoblog/wp-includes/cache.php on line 36 Deprecated: Assigning the return value of new by reference is deprecated in /web/htdocs/www.nikosimo.it/home/nikoblog/wp-includes/query.php on line 21 Deprecated: Assigning the return value of new by reference is deprecated in /web/htdocs/www.nikosimo.it/home/nikoblog/wp-includes/theme.php on line 540 NikoSimo » jug

Archivio della Categoria 'jug'

Nuovo consiglio per il JUG Sardegna

Venerdì 19 Settembre 2008

Lo Java User Group della Sardegna ha da ieri (ndr: 18-09-08) un nuovo consiglio direttivo. Una risicata assemblea composta dai soliti volti noti ha deliberato di incrementare il numero dei consiglieri da 6 a 7 ed ha proceduto con l’elezione del nuovo consiglio direttivo con voto unanime per ciascuno dei candidati.

Alla vecchia guardia composta da Fabrizio Gianneschi, Massimiliano Dessì, Nicola Mura, Nicola Asuni e Sandro Pinna si sono aggiunti Antonio Pintus e Luca Porcu. Al ringraziamento per il lavoro svolto al “vecchio” consiglio oltre che al consigliere uscente Walter Ambu che non ha presentato la propria candidatura, si aggiungono i miei migliori auguri per un buon lavoro e un grosso in bocca al lupo!

Iniettare List e Map in applicazioni Spring based

Venerdì 22 Agosto 2008

In applicazioni Spring based é possibile iniettare degli oggetti di tipo lista o mappe attraverso i file di configurazione, utilizzando delle classi factory di Spring.

E’ sufficiente iniettare degli oggetti di tipo ListFactoryBean per i List e MapFactoryBean per i Map, le chiavi e i valori che nel mio esempio sono costituiti da String possono essere costituiti da altri bean. I valori sono dichiarati tramite le properties sourceMap e sourceList

Per iniettare le mappe si procede in questo modo:

<bean id=myMap
class=org.springframework.beans.factory.co nfig.MapFactoryBean>
  <property name=sourceMap>
    <props>
      <prop key=chiave1>valore1</prop>
      <prop key=chiave2>valore2</prop>
      <prop key=chiave3>valore3</prop>
      <prop key=chiave4>valore4</prop>
      <prop key=chiave5>valore5</prop>
      <prop key=chiave6″>valore6</prop>
    </props>
  </property>
</bean>

Mentre  per le liste:

<bean id=myList
class=org.springframework.beans.factory.co nfig.ListFactoryBean>
  <property name=sourceList>
    <list>
      <value>valore1</value>
      <value>valore2</value>
      <value>valore3</value>
      <value>valore4</value>
      <value>valore5</value>
      <value>valore6</value>
    </list>
  </property>
</bean>

Spring AbstractWizardFormController

Venerdì 4 Luglio 2008

Mi è capitato di dover implementare un controller di Spring molto particolare che estendesse l’AbstractWizardFormController.
La peculiarità di questo controller è costituita dalla capacità di “spalmare” i dati inseriti in un form su più viste, utilizzando un unico oggetto come contenitore (command) che viene popolato di vista in vista.
Ho trovato un modo per validare i dati alla bisogna durante il passaggio da una pagina all’altra della mia web application ma ho avuto un problema, tali validazioni venivano eseguite anche alla pressione del tasto “indietro” generando un errore che mi faceva perdere i dati precedentemente inseriti; ho risolto facendo l’override del metodo suppressValidation nella mia classe controller.
Di seguito illustro come ho configurato i validatori e implementato i metodi del controller.
Questa è la dichiarazione del mio bean in Spring:

<bean name=mioWizard
 class=it.nikosimo.applicazionediprova.controllers.
WizardController>
 <property name=validators>
  <list>
   <ref bean=validatore0/>
   <ref bean=validatore1/>
  </list>
 </property>
</bean>

Qui dichiaro i miei validatori:

<bean name=validatore0
class=it.nikosimo.applicazionediprova.validators.Validatore0/>
<bean name=validatore1
class=it.nikosimo.applicazionediprova.validators.Validatore1/>

E’ importante ricordare l’ordine in cui i validatori sono stati iniettati nel bean, essi vengono inseriti in un array e possono essere richiamati esclusivamente tramite l’indice (0 based).

Tralasciando l’implementazione dei validatori passo a illustrare il metodo validatePage del mio controller, al submit di ogni pagina viene richiamato il validatore corrispondente:

@Override
protected void validatePage(Object command, Errors errors, int pageN) {
 switch(pageN){
 case 0:
  getValidators()[0].validate(command, errors);
  break;
 case 1:
  getValidators()[1].validate(command, errors);
  break;
 }
}

Per concludere ecco l’implementazione di suppressValidation.

@Override
protected boolean suppressValidation(HttpServletRequest request,
  Object command) {
 boolean suppress = false;
 if (getCurrentPage(request) > getTargetPage(request, getCurrentPage(request))){
  suppress = true;
  TerraCivica terraCivica =(TerraCivica)command;
  System.out.println(terraCivica.getProvincia());
 }
 return suppress;
}

In questo modo la validazione viene eseguita solo durante le transizioni in avanti e ignorata durante le transizioni verso pagine precedenti.

Sun Technology Day a Cagliari

Lunedì 16 Giugno 2008

Max-imiliano e Max-iaDopo gli appuntamenti di Napoli, Roma e Pisa, il Sun Technology Day ha fatto tappa a Cagliari venerdì 13 giugno.
L’incontro/seminario si è tenuto presso il DIEE dell’Università di Cagliari, i suo obiettivo consisteva nel promuovere  la diffusione della conoscenza e dell’utilizzo di tecnologie innovative legate ai servizi digitali sul web. In questa occasione si è dedicata l’attenzione  a Solaris, all’Open Source, a MySQL, progetto recentemente acquisito da Sun e ai sensori programmabili in Java SunSPOT.

Sun Academic Initiative: welcome Università di Cagliari
L’incontro è cominciato con una breve presentazione di Emanuela Giannetta - Software Pruduct Marketing Manager per Sun Microsystems Italia - che ha annunciato sinteticamente gli argomenti trattati, sostanzialmente “cosa si può fare con java” e “cosa è MySQL”.

Qualità del SW – jMetrics: come controllare l’andamento di un progetto SW con misure oggettive
Il primo relatore è stato Giulio Concas di DIEE/FlossLab che ha presentato il Dipartimento di Ingegneria Elettrica ed Elettronica (DIEE) nato nel 1995 dalle ceneri del vecchio dipartimento di elettrotecnica. Il DIEE promuove in Sardegna il  settore di ricerca informatica, FlossLab è il primo spin off dell’Università di Cagliari al quale sono susseguiti anche altri. Gli obbiettivi principali sono rappresentati dall’industrializzazione dei risultati delle ricerche e la produzione do Open Source.
Giulio ha illustrato brevemente le attività di FlossLab per poi dedicarsli a Jmetrics, uno strumento Open Source che misura la qualità dei progetti e, in particolar modo, valuta la buona qualità del software all’evolvere della sua complessità. Le metriche applicate danno visibilità agli sviluppatori ma soprattutto ai “capi” di quando sia necessario fare del refactoring del software prodotto e, soprattutto, dove intervenire.

Solaris 10: Solaris, OpenSolaris e Progetto Indiana
Il secondo argomento è stato presentato da  Domenico Minchella, Sun Solaris Ambassador.
Ha illustrato brevemente Solaris, sistema operativo di Sun da sempre orientato ai grossi sistemi, per portare l’attenzione su Open Solaris, un nuovo sistema operativo per il grande pubblico nato dall’esperienza dei programmatori di Sun e dalla community in poco più di sei mesi e giunto alla versione 2008.05. La qualità del sistema è garantito dal fatto che i programmatori di Sun fanno tutti parte da tempo della community che sviluppa distro linux quali Ubuntu  o Debian, sia a titolo personale che per esplicito mandato di Sun. Openm Solaris è formato in parte da Solaris più una gran parte di ciò che Domenico ha definito una “accozzaglia di roba” quali ad esempio KDE l’interfaccia grafica o i tool di sviluppo o lo stesso open office. Il sistema è orientato in particolar modo agli sviluppatori.
La presentazione è proseguita con l’illustrazione del nuovo file system ZDF, cio che Domenico definisce un “contenitore di dati” dicendo che chi partiziona le unità disco fa “roba vecchia”.
Alcune delle caratteristiche di ZDF sono:
memorizzazione di dati checkati tramite codice di hash, la presenza di una sola linea di amministrazione, l’uso di file system a 128 bit, sfruttamento della meccanica del disco in maniera “parallela”.
Alla presentazione è seguita una breve dimostrazione interattiva: Domenico ha clonato dei Solaris Containers e ZFS tramite chiavette USB. In pratica ha collegato molte chiavi USB al proprio PC (che secondo alcuni “girava sopra Mac” in quanto appoggiato sopra il Mac portatile di Stefano Sanna) installando Diversi ZDF in RAID. Scollegando alcune chiavette “a caldo” o mischiandole non vi è sata perdita di dati e il sistema era in grado di ricostruire la catena raid in base all’hash dei file in essi contenuti. In pratica non solo non vi è stata perdita di dati ma neppure rallentamento quando le chiavette sono state scollegate “a caldo”.

Sun SPOT (Small Programmable Object Technology): Come si utilizzano, Concorso Sun SPOTs Projects
Il sempreverde Stefano Sanna del  JUG Sardegna, anche se esportato a Roma per motivi di lavoro, ha presentato questi nuovi aggeggi di Sun. Avendo ricevuto l’autorizzazione della moglie a “giocare” con i robottini della Lego adesso si è allargato e si dedica anche a questi piccoli gioiellini i Sun SPOT della Sun.
Gli SPOT servono per realizzare piccole reti di sensori programmabili, ciascuno di essi possiede sensori di temperatura, luminosità, accelerometri (vedi Nintendo wii) che consendono di spaziare in una gran quantità di possibili applicazioni. Sun fornisce il software per la vgestione degli SPOT in open source, ma non solo: anche gli schemi hardware e l’elenco dei componenti sono distribuiti sul sito della Sun. E’ inoltre scaricabile il software per simularne il comportamento ed anche un plugin per Netbeans.
Dentro ogni SPOT non c’è un vero sistema operativo ma bens’ una Java Virtual Machine arricchita con funzionalità di Sistema Operativo. Gli SPOT sono distribuiti in un kit, il Sun SPOT developer kit, che comprende due SPOT a batteria più uno SPOT da collegare al PC tramite USB. Gli SPOT comunicano fra di loro via radio anche se non via bluetooth o wireless.
La presentazionesi è conclusa con una piccola demo durante la quale Stefano ha pilotato l’immancabile robottino Lego posto su un supporto mobile dotato di ruote tramite uno SPOT . Il robot reagiva al movimento dello SPOT tenuto in mano da Stefano spostandosi in avanti, indietro e girando a destra e sinistra. Complimentissimi a Stefano che ha pilotato con abilità il robottino che non è caduto dalla cattedra.

Java e Spring: tutte le novità per il 2008
Giochiamo ancora in casa con la presentazione di Massimiliano Dessì e Fabrizio Gianneschi, definiti da Giulio Concas “lo zoccolo duro” del JUG Sardegna.
I relatori ci hanno presentato il nuovo JRE beta di Java il 1.6u10 che presenta la novità del download incrementale, per poter usare applet nel nostro browser non sarà più necessario scaricare svariati MB di librerie java ma solo lo stretto necessario, eventuali classi non presenti nel sistema saranno scaricate automaticamente all’occorrenza. Altra novità: trascinando un’applet dal browser nel desktop, essa sarà automaticamente trasformata in una applicazione Web Start.
Fabrizio ci ha parlato anche della nuova tecnologia Java FX, in competizione con Flash e Silverlight, che seconfo Fabrizio, risulta però essere un pò in ritardo nei tempi e rischia di arrivare sul mercato quando non più competitiva, il momento giusto sarebbe adesso. Massimiliano ha presentato alla platea OSGI che consente di modularizzare gli oggetti. Le librerie di classi possono essere caricate dall’applicazione che le usa anche se in conflitto con altre per tipo o per versioni di libreria, tramite un file di configurazione è possibile dire, per esempio, a tomcat quali applicazioni web hanno bisogno di quali librerie presenti nella cartella lib. Dopo una breve introduzione di Massimiliano sulla giornata di domani, lo Spring Day, Fabrizio ci presenta un oggetto interessante.
Fabrizio ha partecipato all’ultimo Java One e non è tornato a mani vuote, ha acquistato una LiveScribe per circa 130 dollari.
Una penna da 130 dollari deve avere qualcosa di speciale, nel nostro caso si tratta di un computer, inserito nella penna, la cpu è la stessa dei Sun SPOT ma non finisce qui, la penna è dotata di microfono, casse e di una piccola microcamera ad infrarossi, oltre ad auricolari con microfono. Consente di prendere appunti, rigorosamente su fogli retinati il cui schema sarà presto rilasciato in PDF per la stampa con una normale stampante laser.
La penna consente di prendere appunti mentre si parla o si ascolta e, ottenere l’audio sincronizzato appoggiando la penna sulle scritte. E’ possibile inventarsi gli usi più disparati, per esempio disegnando otto rettangoli affiancati, seguendo la guida audio fornita dalla penna, è possibile usare il disegno come un piccolo pianoforte.
Decisamente avrei voluto averla durante le lezioni di elettronica dello stato solido…

Programmazione creativa con MySQL: come programmare il database indipendentemente dal linguaggio di programmazione scelto
L’ultimo talk della giornata è stato presentato da Giuseppe Maxia, MySQL Community Leader. Il concetto di creative programming può essere riassunto in “idee messe assieme che diventano hacking”, Giuseppe si definisce un hacker.
Constatata la poca disposizione dei programmatori a programmare database, Giuseppe ha presentato l’idea di usare i database programmando. L’idea è quella di usare un oggetto proxy che faccia da intermediario fra le applicazioni, scritte in qualunque linguaggio, e il database MySQL, (è la visione opposta di quello che faccio io che uso un ORM per utilizzare con il mio programma scritto in java qualunque tipo RDBMS) il MyQSQL proxy.
Nella sua presentazione Giiuseppe ci ha parlato di tabelle “federated”, che sono utilizzate per avere un riferimento nel db locale ad un db posto su server remoto, e delle tabelle “blackhole”, dei veri e propri mangiatori di dati che non contengono niente ma che possono essere utilmente usati in collaborazione con i “trigger”. Un accenno al linguaggio utilizzato per sviluppare le funzionalità del proxy: Lua (luna in portoghese), dotato di un’API piccola e leggera (<200 KB) ma estremamente potente usato anche nel campo dei video games.

Link
Il Blog di Giuseppe Maxia
Le foto di Giuseppe Maxia

Testing di controller Spring-Acegi

Lunedì 9 Giugno 2008

Inserisco di seguito il codice che ho implementato per testare uno dei miei controller. In esso, per elaborazioni che dovevo eseguire sui dati di un DB, ho dovuto prelevare dal SecurityContext di Acegi un identificativo utente usando il codice seguente:

Long idUser = ((MioUser)SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getId();

Per testare il controller insendo nel SecurityContext l’utente da prelevare ho scritto il codice seguente:

public void test_handleRequest() throws Exception{
  HttpServletRequest request = new MockHttpServletRequest(GET, mia_pagina.htm);
  ((MockHttpServletRequest)request).setParameter(nome, valore);
  HttpServletResponse response = new MockHttpServletResponse();
  MioController mioController = (MioController) get_ctx().getBean(mioController);
  ModelAndView mav = null;
  AuthenticationProvider provider = (AuthenticationProvider) get_ctx().getBean(daoAuthenticationProvider);
    Authentication auth = provider.authenticate( new UsernamePasswordAuthenticationToken(username, password));
    SecurityContextHolder.getContext().setAuthentication(auth);
    try{
  mav=mioController.handleRequest(request, response);
  }catch (ServletException se){
   se.printStackTrace();
   System.out.println(ServletException);
  }catch(IOException ioe) {
   ioe.printStackTrace();
   System.out.println(IOException);
  }
 }

nel setUp ho dichiarato il context di spring che viene acceduto tramite get_ctx():

_ctx = SpringFactory.getXmlWebApplicationContext();

nel tearDown invece ho ripristinato il SecurityContext di Acegi e rilasciato il context di Spring:

SecurityContextHolder.setContext(new SecurityContextImpl());
_ctx = null;

Tutto funziona!

Javameeting e una chiacchierata

Lunedì 28 Aprile 2008

Martedì scorso sono andato al java meeting (bravissimi Fabrizio e Alessio), durante una delle presentazioni discutevo con Sandro circa l’uso dell’attributo language della direttiva page dei JSP:  non ci è mai capitato di usarlo o vederlo valorizzato se non con il valore java. Abbiamo concluso che il tag era probabilmente presente per compatibilità o per fornire funzionalità non implementate, ebbene è “quasi” così.
Mi sono documentato, e in effetti l’attributo language è supportato per consentire all’architettura JSP di essere estesa per supportare scriptlet lato server.
Tutti gli engine compatibili con la versione JSP 1.1 e ss. devono supportare il valore java dell’attributo. I singoli engine possono però implementare il supporto di altri linguaggi, è il caso, per esempio, di JRun che, dalla versione 3.0, supporta i valori java e javascript.
Nel caso si usi il linguaggio java JRun provvede a compilare il JSP generando il servlet relativo, nel caso si utilizzi il linguaggio javascript JRun, inizializza un’engine per script all’interno del servlet generato. Tale engine è specifica di JRun.
Resto comunque dell’opinione che non si debbano mischiare i linguaggi e che javascript stia benissimo dove si trova, se usato, lato client!

L’Italietta dei disonesti

Lunedì 21 Gennaio 2008

Riporto di seguito una notizia presa da www.centomovimenti.com che mi ha lasciato esterrefatto!
In pratica i nostri governanti sono liberi di delinquere e non pagano! Questo si ritiene soddisfatto per essere stato condannato a cinque anni di carcere, vabbè in primo grado, vabbè poi ci saranno le attenuanti generiche, poi le attenuanti non generiche, poi la buona condotta, poi il cane si sentirebbe solo, in pratica questo qua non sconterà niente ma continuerà anzi a sedersi sulla sua bella e comoda poltrona!
Negli altri stati le leggi non consentono a chi abbia dei carichi pendenti con la giustizia o processi in corso di accedere alle cariche pubbliche, da noi in Italia pare invece che se non hai la fedina penale sporca, possibilmente con reati a stampo mafioso, non ti viene data la “patente” per entrare in politica.

Svegliamoci, questi vecchi sono tutti uguali, bisonga che ci svegliamo, prendiamoci in mano la nostra Italia, è il nostro turno di governare, via i vecchi e rimbocchiamioci le maniche. Per chi volesse ecco due siti da cui prendere spunto per approfondire il discorso: www.forumnazionalegiovani.it e www.benecomune.net

WWW.CENTOMOVIMENTI.COM - 19 GENNAIO 2008
Condannato a cinque anni di carcere il Governatore Cuffaro 

Il Governatore della Regione Sicilia Salvatore Cuffaro - del partito del centrodestra Udc - è stato condannato a cinque anni di carcere dal Tribunale di Palermo. Il presidente è stato giudicato colpevole per aver rivelato ad alcuni mafiosi segreti investigativi. Ció nonostante, il Tribunale ha punito Cuffaro solo per aver favorito i singoli mafiosi, e non Cosa Nostra in generale (per questo la pena è risultata essere piú leggere di quanto ci si aspettava).
Incredibile, ma vero, Cuffaro ha festeggiato la sua condanna come se si trattasse di una assoluzione.
“Mi sento confortato - ha dichiarato - la Corte ha riconosciuto che non ho favorito Cosa Nostra - quindi non mi dimetto, resto Governatore della Sicilia”.
Dello stesso tono i commenti del partito Udc. Salvatore Cesa si è detto “compiaciuto” per il verdetto. E l’ex presidente della Repubblica Francesco Cossiga ha telefonato a Cuffaro per esprimergli la sua soddisfazione per il fatto che il Tribunale ha stabilito che “non è colluso con la mafia”.
Il procuratore nazionale antimafia Pietro Grasso ha riportato tutti alla realtá: “La sentenza prova il favoreggiamento di Salvatore Cuffaro di singoli mafiosi come Giuseppe Guttadauro, Salvatore Aragona, Vincenzo Greco, Michele Aiello e Domenico Miceli”.
(www.centomovimenti.com)