martedì 24 marzo 2009

JasperServer e iReport: Tabelle a nome variabile nei dataset

Oggi ho avuto una nuova problematica da affrontare nell'utilizzo di JasperServer e iReport.

Avevo necessità che l'utente potesse in qualche modo parametrizzare tutto o in parte in nome di una tabella sulla quale far girare il report. Nel caso specifico sul lavor creiamo delle tabelle giornaliere che hanno un nome formato come segue:
DataBase.Piattaforma _090324
Quindi il problema era passare la data al report in modo che l'utente potesse con un singolo report, e senza create procedure particolari al livello di db, interrogare più di una tabella a secondo del giorno di interesse.
La cosa più ovvia era che la parte variabile venisse passata tramite un parametro al report e quindi gioco forza il primo tentativo è stato quello di provare la seguente sintassi, dove il parametro veniva passato come stringa:
SELECT * FROM DataBase.Piattaforma _$P{DataTabella}
Ovviamente l'esperimento ha prodotto un errore, ma devo dire che la soluzione era a portata di mano. Il trucco sta nell'aggiungere un "!" dopo $P:
SELECT * FROM DataBase.Piattaforma _$P!{DataTabella}
Così facendo il tutto funziona perchè il motore effettua la sostituzione del parametro con il suo valore inserito dall'utente prima di inviare la query.

Spero di avervi aiutato anche questa volta.

Wsc

mercoledì 18 marzo 2009

MySQL: Generare numeri casuali in un intervallo

L'altro giorno mi sono imbattuto nella necessità di rielaborare dei dati creando un dataset simile ma rielaborando secondo funzioni statistiche dei campi numerici.

Avendo precedentemente calcolato Media e Varianza di questo set di dati (funzioni AVG() e STD()) quello che si desiderava fare era:
Media + (NumeroRandom * Varianza)
così facendo si sarebbe lavorato sulla media dei valori aggiungendogli una deviazione fornita dal numero randomico (compreso tra -0,8 e 0,8) moltiplicato la varianza.

L'inica funzione MySQL che genera numeri casuali è RAND(), però questa funzione produce numeri in virgola mobile compresi tra 0 e 1.
La sola funzione non riusciva a risolvere la problematica, quindi andava ulteriormente elaborata.
Googlando ho trovato per ottenere un numero intero variabile in un intervallo, mettiamo 1 e 3, si può applicare la seguente formula dove 1=i e 3=j:
FLOOR(i + RAND() * (j – i))
La formula di venta:
FLOOR(1 + RAND() * 2)
A questo punto non è stato necessario altro che effettuare una sostituzione per ottenere la formula finale dell'intervallo a cui ero interessato:
CEILING(Media + (-0.8 + (RAND() * 1.6)) * Varianza)
Ho usato il CEILING() in quanto a mi serviva arrotondare all'intero superiore contrariamente al FLOOR().
Spero che questo piccolo promemoria possa essere utile ad altri. Continuate a seguirmi.

Wsc

lunedì 16 marzo 2009

JasperServer e iReport: linkare i report tra di loro

Utilizzando Google Analytics ho notato che all'interno del mio blog gli articoli più interessanti per il pubblico siano quelli incentratti sull'argomento Jasper Server e iReport.

Altra funzione che ho usato ultimamente è la possibilità di poter linkare tra loro diversi report.
iReport ci permette di inserire dei link legati ai vari oggetti che compongono il nostro template. Si possono precificare delle URL e quindi possiamo linkare tra loro report già realizzati.

Si procede molto velocemente creando un capo di testo. Dalle "Proprietà" dell'oggetto si sceglie la linguetta "Link ipertestuale" e quindi è possibile inserire il link al report.
Di solito i link ai report sono di questo tipo:
http://NOME_SERVER/jasperserver/flow.html?_flowId=viewReportFlow&reportUnit=/reports/NOME_REPORT&standAlone=true&ParentFolderUri=/reports
Quindi è sufficiente dopo aver deciso la tipologia del link (nel nostro caso Blank e Reference) indicare nella linguetta "Riferimento" l'indirizzo.
Da notare che è anche possibile passare dei parametri se il report destinazione lo prevede passati del report chiamante.
Nel qualcaso un'esempio di link potrebbe essere questo:
"http://NOME_SERVER/jasperserver/flow.html?_flowId=viewReportFlow&reportUnit=/reports/NOME_SOTTOCARTELLA_REPORT/NOME_REPORT&standAlone=true&ParentFolderUri=/reports/NOME_SOTTOCARTELLA_REPORT&SelectFromDateTime="+$V{SelectFrom_STRING}+"&SelectToDateTime="+$V{SelectTo_STRING}
La parte in neretto ci consente di passare ai parametri del report chiamato SelectFromDateTime e SelectToDateTime i valori delle Variabili $V{SelectFrom_STRING} e $V{SelectTo_STRING}.
In questo caso stiamo passando delle date con ora per cui dovendo passare un text alla stringa dell'indirizzo abbiamo usato la seguente espressione per formattarle:
new java.text.SimpleDateFormat("yyyyMMddHHmmss").format($P{SelectFromDateTime})
Come potete vedere a loro volta le variabili erano state costruite da uno dei parametri immessi nel report chiamante.

Spero che anche questa spiegazione sia utile. Se qualcosa non fosse chiaro usate i commenti per porre delle domande.
Alla prossima.

Wsc

giovedì 12 marzo 2009

Scoprire chi ci visita e come: Google Analytics

Spesso e volentieri il successo di un sito o di un network è dovuto al fatto di capire chi ci visita e assecondarlo.

L'altro giorno incuriosito ho installato sul questo blog per capire quanto in profondità vada questo tipo di tools, e ovviamente sono rimasto sorpreso dalla completezza delle informazioni che garantisce.

Ricordo quasi con tenerezza i tempi dei "Contatori" con i quali ci vantavamo con gli amici per il numero di accessi che il nostro sito riusciva a raggiungere. Poi arrivò shiny stat che iniziava a darti anche informazioni geografiche (ovviamente solo a livello nazionale).

Come sempre però Google sorprende. Ci si può stupire di tutto quello che ci può dire dei nostri visitatori.
Tra le cose più sorprendenti sicuramente sono gli accessi che arrivano dai motori di ricerca in cui possiamo vedere le keywords usate dagli utenti per le ricerche.

Altre curiosità possono essere soddisfatte con la georeferenziarione degli accessi per vedere da che zona ci guardano o da che città.

Poi ovviamente ci sono parti molto utili per analizzare come il traffico sul nostro sito si muove.univocità delle utenze, quanti utenti ritornano, quanto tempo passano sul nostro sito, cosa viene visto maggiormente, etc.

Insomma buona scoperta a tutti i webmaster dei vostri lettori...

Wsc

mercoledì 11 marzo 2009

Ripartire: dal Web 1.0 al Web 2.0

Oggi vorrei rifar partire un vecchio progetto che per molto tempo è rimasto chiuso nel cassetto, anche se al tempo vi erano stati profusi sforzi non solo miei.
Far rinascere un sito, precisamente Ateleta.com, il mio paese di origine.

Quanti ricordi... si partì al tempo in 2 era il 29 Agosto 2001, Eleuterio ed io e poi un piccolo manipolo di collaboratori Laura, per le treduzioni, e Gianni, come corrispondente.

Ricordo con piacere l'entusiasmo, la proattività per far crescere questo piccolo cucciolo. Purtroppo ci si scontro con una visione miope e riuscimmo trovare in tutto il paese un solo sponsor, che ci aiutò a pagare almeno il canone del dominio.
L'attività vivacchio sino a circa il 2004 quando visti gli impegni personali e la poca risposta da parte dell'utenze lasciamo al suo destino il sito.

Oggi sono tornato a fare un giro... ho visto "E' in fase di testing il nuovo portale di Ateleta.com!" e incuriosito sono andato a vedere. Credo che Eleuterio abbia buttato su un csm. Da qui la nuova proposta e la speranza di rinascita. Ripartire da un web 1.0 e grazie a csm o a piattaforme come WordPress ricostruire sulle ceneri usando tutti i nuovi mezzi che 8 anni fa erano molto da venire.
Già una volta si scriveva l'HTML praticamente a mano o aiutandosi con strumenti che non andavano molto oltre.

Ho scritto ad Eleuterio, attendo sue risposte.
Rivoluzioniamo il vecchio mondo con il web 2.0. E avanti così!
Wsc

Ps: Chi ha voglia di aiutarci si faccia avanti!

lunedì 9 marzo 2009

Il social network delle buone azioni sta arrivando... la fiera del buonismo?

Stavo leggendo i miei soliti siti e mi sono imbattuto in questo articolo.

Si parla di questo nuovo social network in cui ognuno partecipa dicendo cosa farebbe se potesse comandare il mondo. Messa giù così e da come l'hanno intesa in molti non si potrà tramutare in altro che nella fiera del buonismo. Mi sembra di tornare indietro ai tempi del Catechismo e dei pensierini che andavano scritti per poi essere letti alla preghiera dei fedeli la domenica successiva.

Ma siamo ridotti così male? Esprimere comunque ora un giudizio definitivo non è facile visto che gli elementi di valutazione sono praticamente inesistenti, ma si è ottenuto sicuramente il risultato (come sempre un po' provocatorio) di farne parlare e quindi di accrescere la curiosità intorno a questo oggetto.

A questo punto più che con una domanda risponderei con un'affermazione:
STUPITECI!
Già stiamo a vedere cosa si inventeranno effettivamente e la speranza sarà quella che il tutto non diventi la fiera del buonismo ricolma di inutili utopie!

Rimaniamo in attesa.

Wsc

lunedì 2 marzo 2009

Collaborare per crescere... e sapersi valutare.

Oggi volevo parlare di uno degli aspetti per guadagnare merito all'interno delle comunità.

La forma sicuramente più attiva è la collaborazione. Questo consente di contribuire con le nostre conoscenze a rafforzare la comunità del nostro network.
Ma in che modo possiamo collaborare nei moderni network che si sviluppano sulla rete.
Di norma un network è composto da alcuni oggetti che ho composto nella mappa mentale qui sotto.



Diciamo che di norma il primo oggetto che troviamo è un blog che contiene degli articoli su ciò di cui si occuta il network, e di norma un forum per la discussioni più complesse che non possono essere condensate nei commenti degli articoli.

Almeno all'inizio la forma di contribuzione più immediata (se non si fa parte dello staff) è di certo il commento a qualche articolo messo in linea da chi gestisce o contribuisce al sito.
E' il modo più rapido per entrare in contatto con gli utenti della comunità.
Superato il primo contatto si passa a scrivere nei forum in modo tale da poter dare più ampio respiro ai dibattiti.

Alla fine si arriva al puù alto punto di contribuzione per la comunità, cioè alla stesura di un articolo in modo da dare la più alta visibilità e il maggiore contributo alla comunità.

In fondo a questo percorso può essere effettuato un momento di valutazione della propria prestazione. Ma come farlo?
Facciamo una valutazione per punteggio!
Innanzitutto dobbiamo elencare in ordine di importanza i contributi che ogni utente può dare nel network. Un esempio potrebbe essere questo, partendo dal meno importante:
  1. Commento ad un articolo
  2. Messaggio nel forum
  3. Pubblicazione di un articolo
A questo punto non ci resta che attribuire dei punteggi alle varie attività. Che ve ne pare di:
  1. 0.5 per i commenti
  2. 1 per i post
  3. 100 per gli articoli
Non resta che sviluppare un contatore... buon lavoro!

Wsc