Java ed RMI

maggio 8, 2007

Questa non è una piccola guida, piuttosto è un consiglio.

Se dovete sviluppare un’applicazione Java con la tecnologia RMI ed utilizzate Eclipse, allora vi consiglio di scaricare l’RMI Plug-in.
Si tratta di un plug-in utilissimo che vi permette di far partire semplicemente l’RMIRegistry e vi evita le inevitabili grane con le security.policy.

Non mi dilungo oltre, il sito fornisce ottime dimostrazioni sull’utilizzo, demo e tutorials.

[La Vida Es Un Carnaval]

Digg! | | | del.icio.us | ste-site – visit my website

Annunci

Un pensiero e una piccola guida – gestire i campi blob in MySQL con CS

aprile 12, 2007

In questi giorni sto lavorando parecchio sul versante tesi. In realtà combino poco dal punto di vista pratico ma sto sperimentando molto (tra poco racconterò qualcosa) e mi sto informando parecchio. In particolare sto cercando di immaginare un mondo taggato fisicamente con gli RFID tag. Una sorta di web2.1, il web2.0 fisico (se ne parla un po’ in questo periodo, c’è anche un video in giro in questi giorni, se lo trovo lo posto) in cui non si condividono notizie, commenti, post…presenti sul web ma si condividono commenti, giudizi, pensieri…sul mondo fisico, su oggetti fisici. Per ora è un pensiero un po’ nebuloso, se avrò tempo di metterlo su carta sul blog ve ne parlerò.

blobIntanto vi racconto un po’ dei campi BLOB (non il fluido mortale) in un database MySQL.
Per prima cosa, cosa sono i cambi BLOB.

(da Wikipedia)
A binary large object, also known as a blob, is a collection of binary data stored as a single entity in a database management system. Blobs are typically images, audio or other multimedia objects, though sometimes binary executable code is stored as a blob.

In sostanza all’interno di un campo di tipo blob di un database sarà possibile memorizzare un intero file in formato binario. In questo modo si hanno notevoli vantaggi. Il più importante tra tutti è legato alla necessità di spostare i dati memorizzati. Con questo tipo di campi sarà sufficiente effettuare il dump del DB per spostare tutti i file.

Veniamo ora ad un esempio di utilizzo combinato MySQL – C#.
Per prima cosa sarà necessario creare il database, per il nostro esempio sarà sufficiente una singola tabella blob con un campo file di tipo LONGBLOB in cui si memorizzerà il file in formato binario, un campo extension di tipo TEXT in cui verrà memorizzata l’estensione del file e infine un campo file_size per memorizzare la dimensione del file.

Per dialogare con il DB sarà invece necessario scaricare il Connector/NET, scompattarlo ed importarlo nel proprio progetto con la chiamata:

using MySql.Data;

dopo aver aggiunto la libreria tra le reference.

Vediamo ora come inserire e come andare a leggere in/da un campo blob.

Inserimento:
Dopo aver aperto la connessione col DB ecco il codice necessario per inserire un nuovo file:

//prendo il file e creo un array di byte
fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
FileSize = (UInt32)fs.Length;

rawData = new byte[FileSize];
fs.Read(rawData, 0, (int)FileSize);
fs.Close();

//apro la connessione
conn.Open();

//preparo la query e la eseguo
SQL = “INSERT INTO `file`(file,extension,file_size) VALUES (?file,?extension,?file_size)”;

cmd.Connection = conn;
cmd.CommandText = SQL;
cmd.Parameters.Add(“?file”, rawData);
cmd.Parameters.Add(“?extension”, ext);
cmd.Parameters.Add(“?fileSize”, FileSize);

cmd.ExecuteNonQuery();

conn.Close();

Dove il file e l’estensione sono passati dall’esterno. Ad esempio da un componente OpenFileDialog.
Il passaggio un po’ più delicato è indubbiamente rappresentato dalla creazione di uno stream partendo dal file. Questo flusso di dati viene poi letto e memorizzato all’interno di un array di byte.

Lettura:
Passiamo ora alla lettura di un file.

//faccio la select
SQL = “SELECT file,extension,file_size FROM file WHERE ID=’5′”;
//connessione
conn.Open();
cmd.Connection = conn;
cmd.CommandText = SQL;

//preparo ed eseguo la query
myData = cmd.ExecuteReader();

myData.Read();

Extension = myData.GetString(“extension”);
FileSize = myData.GetUInt32(myData.GetOrdinal(“file_size”));
rawData = new byte[FileSize];

myData.GetBytes(myData.GetOrdinal(“file”), 0, rawData, 0, (int)FileSize);

//creo lo stream ed il file
fs = new FileStream(@”C:\newfile.”+extension, FileMode.OpenOrCreate, FileAccess.Write);
fs.Write(rawData, 0, (int)FileSize);
fs.Close();

myData.Close();
conn.Close();

In questo modo, dopo aver acquisito i byte, l’estensione e la dimensione del file sarà possibile salvarlo in un nuovo file in locale per, successivamente accedere al file stesso.

Prima di terminare vi segnalo un sito in cui potrete trovare le stringhe di connessione ai principali database.

[La Vida Es Un Carnaval]

Digg! | | | del.icio.us | ste-site – visit my website


zero zerello

aprile 3, 2007

stanchezzaSono a casa finalmente. Che stanchezza. Sono al PC da questa mattina alle 09.30, ho portato avanti il progetto in JMS col mio collega di avventure universitarie, ho navigato (poco), ho cercato (tanto) informazioni sui design pattern (in particolare Abstract Factory), ho fatto una bozza di ER (non i medici in prima linea ma il diagramma per descrivere un DB), ho scritto un paio di mail, ho risposto a qualche commento, ho anche mangiato ma tempo per scrivere un post…zero zerello 🙂 !!!

Tutte queste cose da fare mi stanno mettendo una certa tristezza. Poi se ci mettiamo anche un cielo scuro che non promette nulla di buono allora il gioco è fatto, ho bisogno di qualcosa per risollevarmi! E allora via con una buona dose di coccole dalla mia bella e poi cuffie in testa e via con la musica!

Intanto, visto che mi mancano idee vi racconto le ultime novità di questo blog. Prima di tutto avrete sicuramente notato la nascita di una nuova pagina in cui sono riportati i link ai post in cui trovate delle brevi guide informatiche (a presto novità), poi visto che, l’avrò ripetuto centinaia di volte, adoro la musica, ho intenzione di inserire ogni tanto un post musicale, con un video tratto da YouTube o il testo di una canzone, infine nei prossimi giorni vi indicherò alcuni possibili nuovi temi per il mio blog chiedendovi di dare un giudizio. Poi vedrò se modificare o meno il template, anche se finora i commenti che ho ricevuto mi spingono ad essere tradizionalista!

Per fortuna tra qualche giorno è Pasqua, il giorno di Pasquetta dovrei andare in Presolana con un gruppo di amici, c’è un ristorante che fa carne alla pioda, vorrei provarla e soprattutto rilassarmi per un giorno. Voi avete già programmato la gita fuori porta per il lunedì dell’Angelo?

[La Vida Es Un Carnaval]

P.S. zero zerello è un modo di dire che mi porto dietro dall’adolescenza, non ricordo come/dove/perché sia nato ma è simpatico e divertente 😉

Digg! | | | del.icio.us | ste-site – visit my website


Ant+Joram

marzo 28, 2007

Ho deciso di aprire la rassegna di soluzioni informatiche con due strumenti che hanno accompagnato le mie ultime giornate programmative. Ho scelto di farlo perchè on-line si trova poca documentazione su questi strumenti (soprattutto in italiano).
Si tratta di Ant, un tool che permette la configurazione, il build ed il deployment di progetti Java Complessi e Joram, un’interfaccia rete-applicazioni JMS/SOAP orientata alla messaggistica.

Il primo è di semplice installazione e configurazione. Dopo aver scaricato il tool e scompattato si devono impostare:

  • la ANT_HOME: per far questo spostatevi nel Pannello di Controllo, cliccate su Sistema e nel pannello Avanzate cliccate su Variabili d’ambiente. Qui create una nuova variabile d’ambiente con nome ANT_HOME e valore il percorso in cui avete installato Ant.
  • il path: nella stessa finestra si seleziona il path e lo si modifica inserendo il percorso della directory bin di Ant.

Le prime problematiche le ho riscontrate al momento dell’installazione di Joram che risulta leggermente diversa in ambiente Linux o Windows. Io sviluppo in ambiente Windows, ho scaricato dal sito l’ultima versione del server. Ho scompattato (due volte) e salvato in C:\joram-4.*.

A questo punto le operazioni dovrete configurare la JORAM_HOME: per far questo spostatevi nel Pannello di Controllo, cliccate su Sistema e nel pannello Avanzate cliccate su Variabili d’ambiente. Qui create una nuova variabile d’ambiente con nome JORAM_HOME e valore il percorso in cui avete installato joram. Nel nostro caso C:\joram-4.*.
Successivamente per cominciare ad utilizzare gli esempi presenti in sample, da linea di comando dovrete spostarvi nella directory sample\src\joram e digitare

ANT COMPILE

per compilare i sorgenti

ANT RESET SINGLE SERVER

per avviare il server Joram.
Poi da una seconda shell digitate:

ANT e il nome dell’applicazione da avviare

Per conoscere il nome delle applicazioni presenti (non corrisponde al nome delle classi) dovete andare a leggere il file Build.xml che riporta il nome di ogni applicazione. Allo stesso modo, nel momento in cui vorrete creare una nuova applicazione che utilizza Joram dovrete semplicemente copiare il Package nella cartella sample\src rilanciare ANT COMPILE, riavviare il server (ANT RESET SINGLE_SERVER), modificare il file build.xml e lanciare l’applicazione digitando ANT e il nome. La modifica è semplice: per ogni applicazione da avviare dovrete inserire qualcosa di simile a questo:

<target name=”NOME PER LANCIARE L’APPLICAZIONE” depends=”init”
description=”–> Runs chat administration”>
<java classname=”PACKAGE.CLASSE CON IL MAIN”
failonerror=”no” fork=”yes”
dir=”${run.dir}”>
<classpath path=”${project.class.path}”/>
</java>
</target>

Per applicazioni più complesse vi rimando alla documentazione sul sito.

Spero di essere stato d’aiuto a qualcuno, sono alle prime armi con spiegazioni di questo tipo, spero di migliorare in futuro!

[La Vida Es Un Carnaval]

Digg! | | | del.icio.us | ste-site – visit my website


Vi sono mancato?

marzo 27, 2007

Anche se rispondete di no, non mi offendo…

Due giorni senza post, era tanto che non accadeva. La verità è che sono impegnatissimo. Sabato progetto universitario, domenica a studiare (e stavo pure poco bene), lunedì tesi, oggi al Poli per progettare ancora e per cercare un professore (che non abbiamo trovato 😦 ) ed ora un po’ di pausa per rilassarmi, ma solo il tempo di scrivere questo post e girare un po’ su internet!

Questa mia assenza però è stata produttiva. Viste le difficoltà riscontrate in questi giorni in ambito programmativo, ho deciso che ogni tanto, quando riuscirò a trovare una soluzione a qualcosa che è poco documentato su internet, proporrò la mia soluzione che renderò disponibile per due motivi. Primo per aiutare chi si troverà nelle stesse condizioni, secondo per ricevere critiche, consigli e suggerimenti da chi ne sa di più. Sicuramente la soluzione da me proposta non sarà la migliore, quindi ogni commento (ovviamente costruttivo) sarà ben accetto.

Vorrei chiudere questo post con due segnalazioni.
Su webmasterpoint ho trovato alcune indicazioni di Tommaso Tessarolo su come realizzare una casa digitale. Mi sono immerso nella lettura di questo articolo perché…mi piace sognare. Non nascondo il fatto che una casa con tutte quei “giochini” tecnologici indicati nell’articolo sia tra i miei sogni, quindi in futuro…peccato che i costi non siano proprio per tutte le tasche.
La seconda segnalazione riguarda gli Youtube Video Awards, per chi non lo sapesse il famoso portale web2.0 per la condivisione di video auto-prodotti ha proposto questo concorso che ha visto premiati sette video per sette diverse categorie. Visto che la musica è una delle mie più grandi passioni vi riporto il video di TerraNaomi con la canzone Say It’s Possible premiata come Best Music Video.

Ed ecco il link al sito (ora non raggiungibile) al blog e allo spazio su myspace.

Il web2.0 comincia a dare i suoi frutti...

E ora torno a lavorare... :-(

[La Vida Es Un Carnaval]

Digg! | | | del.icio.us | ste-site - visit my website


Saturday morning

marzo 24, 2007

Fuori c’è il sole, è una stupenda giornata, probabilmente fa caldo, dovrei e vorrei chiarire una questione…ma devo starmene qui comodamente chiuso in uno stanzino a programmare e a domandarmi: ma chi ca**o me l’ha fatto fare?

[La Vida (non sempre) Es Un Carnaval]

Digg! | | | del.icio.us | ste-site – visit my website


Programmatori nei guai

marzo 22, 2007

programmerLa notizia del programmatore sbadato, riportata da corriere.it qualche giorno fa, è stata già commentata da Napolux ma considerando il fatto che tra poco (spero molto poco) sarò catapultato nel mondo del lavoro e potrei ritrovarmi alle prese con dati sensibili, mi sono chiesto: “come la gestisco una situazione come questa?” Insomma, alla prima lezione di Ingegneria del Software, ci hanno raccontato di altri casi tragici di programmazione errata. Navicelle spaziali esplose, macchine mediche che emettono troppe onde nocive…e tutto per errori banali! Noi ci abbiamo anche riso sopra ma un piccolo errore può capitare anche ai migliori…

Senza andare in situazioni così tragiche, a voi lavoratori dell’IT è mai capitata una situazione in cui non sapevate come tornare indietro, e dovevate tornare indietro?! Siete riusciti a rimediare al vostro errore? Quali sono state le conseguenze?

Per la serie…io speriamo che me la cavo

[La Vida Es Un Carnaval]

Digg! | | | del.icio.us | ste-site – visit my website