Piccole Guide

In questa pagina suggerirò alcune piccole guide, senza alcuna pretesa di essere esaustivo, solo alcuni suggerimenti.
Prima di tutto riporterò quelle già presenti sul vecchio blog, e successivamente provvederò ad incrementarne il numero…

Ant+Joram
FeedReader Java
Flash in C#
Blob in MySQL

Ant+Joram

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!

FeedReader Java

Dopo circa una settimana ho cominciato a buttare giù qualche idea per il lettore di feed in Java.
Per prima cosa, il mio intento è quello di arrivare a creare una piccola applicazione che risolva una delle lacune presenti nei feedReader in circolazione. Questi infatti presentano gli articoli in ordine cronologico senza indicare correlazioni tra le notizie. Devo ammettere che la parte più difficile sarà indubbiamente capire come correlare le notizie. Sto valutando alcune ipotesi, nelle prossime settimane vi aggiornerò.

Nel frattempo, passando ad un punto di vista più tecnico, ho cominciato a buttare giù un po’ di righe di codice. L’applicazione dovrebbe mostrarsi all’utente con una finestra in cui visualizzare un elenco di feed sulla sinistra e a lato gli articoli corrispondenti al feed selezionato. In fondo all’articolo poi sarà presente l’indicazione degli articoli correlati. Tutte le impostazioni saranno gestite attraverso file xml.

In questi giorni sono riuscito a realizzare un primo lettore, privo di grafica, che permette di visualizzare le informazioni principali degli articoli di un feed.
L’ho realizzato sfruttando due librerie che ho trovato in rete:

che permettono la lettura di feed sia RSS che ATOM.
Il loro utilizzo è semplice:

Ad esempio per leggere i feed di questo blog il codice è il seguente:

String feedUrl = new String(”http://stenet.wordpress.com/feed/”);try{

java.net.URL url = new java.net.URL(feedUrl);

com.sun.syndication.io.SyndFeedInput input = new com.sun.syndication.io.SyndFeedInput();

//il comando successivo è quello fondamentale
//si genera un oggetto SynFeed utilizzando come sorgente
//l’url del documento RSS o ATOM da usare

com.sun.syndication.feed.synd.SyndFeed feed = input.build(new java.io.InputStreamReader(url.openStream()));

//si prendono le entries e le si memorizzano in un array

List entries;
entries = feed.getEntries();
com.sun.syndication.feed.synd.SyndEntryImpl[] entriesArray = new com.sun.syndication.feed.synd.SyndEntryImpl[entries.size()];
entriesArray = (com.sun.syndication.feed.synd.SyndEntryImpl[])entries.toArray(entriesArray);

//a questo punto semplicemente si scorre l’array
//e si stampano le informazioni necessarie

for(int i=0; i<entriesArray.length; i++)
{

System.out.println(entriesArray[i].getTitle());

}

}catch(Exception e)
{

//si gestisce l’eccezione

}

Il passo successivo del mio progettino sarà realizzare una piccola interfaccia grafica. Ma qui entra in gioco una mia mancanza. Devo studiare come funzionano le awt e le swing… :-(

Al termine (se terminerò) realizzerò una piccola guida con i passaggi più significativi del progetto.

Flash in C#

La tesi prosegue a ritmo direi lento (oggi è la giornata della lentezza) ma inesorabile. Siamo ancora in fase di studio ma le idee cominciano a chiarirsi e comincio ad immaginare il prodotto definitivo.

Partiamo dall’inizio. Senza entrare troppo nei particolari, la mia tesi dovrebbe portarmi a realizzare una caccia al tesoro multimediale per bambini da svolgersi all’interno di un museo. Il tutto con il supporto della tecnologia RFID e, forse, di una Smartboard.

Come già detto in post precedenti le applicazioni per il lettore RFID che ho a disposizione devo svilupparle nel linguaggio C# (o VB ma ho deciso per il primo). Di contro in questo modo, avrei ottenuto delle interfacce poco “appetibili” per i bambini che dovranno usare l’applicazione. Ho deciso quindi di inserire alcune animazioni in Flash. Ebbene oggi dopo due giorni sono riuscito a capire come inserire animazioni Flash in una form. Di per se è molto semplice, tra poco mostrerò i pochi passaggi necessari, le problematiche erano legate alla comunicazione con l’ActiveX del lettore RFID.

Per inserire un componente Flash sarà necessario inserire tra i references due dll: AxInterop.ShockwaveFlashObjects.dll e Interop.ShockwaveFlashObjects.dll.
Successivamente dopo aver inserito il componente nella form per richiamare il filmato Flash sono necessarie poche righe da inserire dopo la chiamata ad InitializeComponent():

path = System.Environment.CurrentDirectory;
path += @”\nomefile.swf”;

axShockwaveFlash1.LoadMovie(0, path);
axShockwaveFlash1.Play();

e il gioco è fatto.

Blob MySQL

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.

Popularity: 1% [?]

Technorati Tags: , , , , , , , , , , , , ,

Chiudi
Invia e-mail