Introduzione

Eclipse Project

Che cos'è Eclipse: Eclipse è una community open source dove tutti i progetti sono focalizzati sulla costruzione di una piattaforma di sviluppo estensibile, che è la piattaforma che molti di noi utilizzano per creare software principalmente in linguaggio Java. Questa piattaforma grazie a vari frameworks permette di costruire, sviluppare e gestire il software durante l'intera fase del ciclo di vita di un software. Molti conoscono Eclipse solo come un IDE Java ma invece esso è molto di più. Basti pensare che la community Eclipse ha 60 progetti open source, questi progetti possono essere divisi in sette diverse categorie:

1. Enterprise Development

2. Embedded and Device Development

3. Rich Client Platform

4. Rich Internet Applications

5. Application Frameworks

6. Application Lifecycle Management (ALM)

7. Service Oriented Architecture (SOA)

Usare Eclipse: Ci sono quattro tipi di utenti utilizzatori di Eclipse, a seconda di ciò che si vuole fare/sviluppare un utente potrà scaricare l'apposita versione di Eclipse con i relativi plugins.

1. Se si vuole sviluppare software Java allora si va a questo indirizzo: [1]

2. Se si vuole sviluppare software Java EE allora si va a quest'altro indirizzo: [2]

3. Se si vuole sviluppare software C/C++ si va a questo indirizzo: [3]

4. Se invece si vogliono sviluppare plugins e/o applicazioni RCP si va a questo indirizzo: [4]

Dare o avere aiuto su Eclipse: Ognuno è libero di aprire nuovi problemi sulla piattaforma Eclipse e ognuno è libero di fare qualsiasi domanda su Eclipse grazie ai newsgroups della Community Eclipse.


Riferimenti utili e approfondimenti: Sito ufficiale di Eclipse FAQ su Eclipse Eclipse newsgroups Bugs di Eclipse Articoli di membri della community di Eclipse


RCP (Rich Client Platform)

Che cos'è RCP: Eclipse oltre ad essere un IDE di sviluppo è una piattaforma con Open Tools, cioè è cotruita in modo tale che le sue componenti possono essere riutilizzate per cotruire qualsiasi applicazione client. Questo viene fatto tramite plugins. L'insieme minimo di plugins utili perchè un applicazione possa definirsi Rich Client viene chiamato Rich Client Platform. Quando si parla di Rich Client Platform come l'insieme minimo di plugins per la costruzione di un applicazione con un interfaccia utente, si intendono due plug-ins in particolare, cioè org.eclipse.ui e org.eclipse.core.runtime ed ovviamente i loro prerequisiti.

Casi studio: Per capire i benefici che porta l'utilizzo di applicazioni basate su piattaforma Rich Client possiamo elencare varie applicazioni (di uso commerciale e non) che sono basate appunto su RCP. Tra le applicazioni Open Source troviamo ad esempio: Azureus, Bioclipse, J3DWorkbench, Kalypso e molti altri [5]. Tra le applicazioni invece commerciali troviamo: BigBlogZoo, Crypto Intelligence - CodeSigner, IBM Lotus Expeditor, e molti altri [6].

Perchè usare RCP: Grazie ad RCP lo sviluppatore non deve preoccuparsi più dell'interfaccia grafica della sua applicazione e di molte altre cose che sono già integrate nei plug-ins che Eclipse mette a disposizione. Con pochi semplici passi, grazie ad un Wizard, è possibile creare un'applicazione con UI, Help, ActionBar con Azioni, ecc..., il tutto scrivendo pochissime righe di codice per personalizzare il tutto. In questo modo lo sviluppatore si preoccuperà solamente del cuore vero e proprio della sua applicazione.

Componenti principali di RCP: RCP è formata da vari componenti, essenziali per una semplice applicazione RCP: Eclipse Runtime (fornisce supporto ai plug-ins, alle extensions ed agli extension points), SWT (è lo Standard Widget Toolkit, che fornisce l'accesso alle strutture per l'interfaccia utente del Sistema Operativo sul quale è implementato), JFace (è un framework al di sopra di SWT che fornisce aiuto per dei processi comuni che coinvolgono la UI), Workbench (forse il più importante componente di RCP in quanto fornisce la gestione di tutte le finestre, le views, le actions, le perspectives ed altro) e altri prerequisiti per il Workbench.

Usare RCP: Iniziare a capire RCP è molto semplice vista l'enorme documentazione che troviamo on-line e gli innumerevoli articoli, tutorials e esempi di cui troverete i link alla fine di questa sezione. Per creare la prima vera e semplice applicazione Rich Client (tipo la famo sa 'Hello World') è sufficiente prima di tutto scaricare la versione corretta di Eclipse [7] e poi seguire questi semplici passi:

1. Selezionare dal menù File la voce New e poi Project

2. Selezionare Plug-in Project e cliccare Next

3. Scegliere un nome per il progetto in Project Name e cliccare su Next

4. Nello step successivo selezionare Yes alla domanda 'Would you like to create a rich client application' e cliccare su Next

5. Spuntare Create a plug-in using one of the templates, selezionare Hello RCP nell'elenco e premere su Finish.

A questo punto si sarà creato un nuovo progetto e si aprirà una View molto importante che è il MANIFEST.MF dove ci sono tutte le informazioni sul plug-in che stiamo creando tra cui i plug-ins da cui dipende (Dependencies), gli Extension Points e così via. Se ci si sofferma sulla scheda Overview si noterà un paragrafo col titolo "Testing", se si preme su 'Launch an Eclipse Application' ci apparirà una finestra, quella è un'applicazione RCP.


Riferimenti utili e approfondimenti: Sito ufficiale di RCP Applicazioni Open Source RCP Applicazioni Commerciali RCP FAQ su RCP Primo Tutorial da seguire Descrizione del codice di una applicazione Rich Client Guida a RCP Guida ad SWT Un applicazione RCP in 10 minuti


ECF (Eclipse Communication Framework)

Che cos'è ECF: Un altro progetto molto importante proveniente dalla Community Eclipse è ECF (Eclipse Communication Framework). Come dice il nome, ECF è un framework che da supporto alla costruzione di strumenti per Eclipse ed applicazioni. Questo framework può essere utilizzato per creare nuovi plugins, strumenti oppure intere applicazioni RCP che richiedono un qualche tipo di messaggistica. Una delle prime funzionalità che entra subito nelle grazie dello sviluppatore è il fatto che grazie a questo Framework il programmatore avrà la possibilità di collaborare in tempo reale con altri sviluppatori grazie all'utilizzo di messagistica, di codice condiviso, di debugging condiviso ed altro ancora.

Installare ECF: Installare ECF è molto semplice, basta aprire Eclipse e selezionare dal menù "help" la voce "Software Updates" e poi su "Find and Install". In seguito si seleziona "Search for new features to install" e si clicca su "Next", alla schermata successiva si crea un nuovo Remote Site, con l'indirizzo http://download.eclipse.org/technology/ecf/2.0/updateSite e si cercano aggiornamenti da questo sito. Dopo aver fatto questo Eclipse troverà ECF Framework e lo installerà. A questo punto si riavvia Eclipse e avremo una nuova Perspective da utilizzare (insieme a Debug, Java, Plug-in Development,ecc...) che si chiamerà Communications. Selezionandola si scopriranno nuove Views e nuovi bottoni con i quali sarà possibile comunicare con providers conosciuti (IRC, MSN, YAHOO, XMPP, e altri) o anche connettersi a server ecf creati da noi o da nostri collaboratori.

Client ECF: Per capire come sviluppare un client con ECF basta apprendere alcune nozioni importanti su alcune principali API che devono essere utilizzate.L'API principale di un'applicazione client ECF è sicuramente IContainer (org.eclipse.ecf.core.IContainer), un client per connettersi ad un provider deve generare un IContainer in questo modo:

 IContainer container = ContainerFactory.getDefault().createContainer("ecf.generic.client");

e poi connettersi ad esso con:

 container.connect(...);

dove vengono impostati i parametri, tra cui l'indirizzo al quale connettersi. L'API ContainerFactory (org.eclipse.ecf.ContainerFactory) quindi ci aiuta nella creazione di un IContainer generico. Quindi per la connessione ad un server ECF servono anche altre API, una di queste è sicuramente l'ID (org.eclipse.ecf.core.identity.ID), infatti un IContainer deve connettersi all'ID del server:

 container.connect(ID,...);

Per generare un ID con ECF si utilizza l'IDFactory:

 ID targetID = IDFactory.getDefault().createID(container.getConnectNamespace(), "ecftcp://localhost:3282/server");

si possono poi generare GUID che sono del tipo 'AF430D2189AFB8D' oppure possono essere generati a partire da stringhe qualsiasi. Nell'esempio di sopra questo è il generico ID da utilizzare per connettersi al server ECF con indirizzo ecftcp://localhost:3282/server. Per lo scambio di dati (ad esempio per scambio di messaggi) è importante la creazione di un IChannel, questo viene fatto grazie al ChannelContainer (org.eclipse.ecf.datashare.IChannelContainer) in questo modo:

 IChannelContainer channelContainer = (IChannelContainer) container.getAdapter(IChannelContainer.class);
 IChannel channel = channelContainer.createChannel(id,listener,props);

Poi per inviare un messaggio all'IChannel basta scrivere questo:

 channel.sendMessage(“hello”.getBytes());

Ci saranno quindi altre API per personalizzare sempre di più la nostra applicazione, queste spiegate sopra servono soprattutto per un client ECF generico.

Server ECF: Un generico server ECF ha un URI che comincia con ecftcp:// seguito dall'indirizzo, dalla porta, dal groupname e infine il KeepAlive. E' possibile, tramite il Framework ECF, connettersi ad un server generico fornito da Eclipse che ha questa URI: ecftcp://ecf.eclipse.org:3282/server. Connessi a questo server Eclipse ci aprirà la view "collaboration" dove si possono inviare messaggi agli altri utenti connessi a questo server. E' possibile anche lanciare il server generico direttamente sulla propria macchina andando nel prompt dei comandi e scrivendo questa riga:

 eclipse.exe -console -application org.eclipse.ecf.provider.AppGenericServer.

In questo modo si aprirà una nuova shell dove comparirà:

 Putting server localhost:3282 on the air..
 Creating container with id=ecftcp://localhost:3282/server keepAlive=30000
 GenericServer localhost:3282 on the air.

e per ogni Client che si collegherà al nostro server comparirà una riga del tipo:

 CLIENT CONNECT: From Address=... ;fromID=....;targetGroup=...

La riga di comando sopra può essere, ovviamente, modificata per far in modo che cambi il nome del server, la porta, il gruppo ed il keepAlive, ad esempio:

 eclipse.exe -console -application org.eclipse.ecf.provider.AppGenericServer 3285 mygroup
 ecf.eclipse.org 20000

avvierà un server con id: ecftcp://ecf.eclipse.org:3285/mygroup e KeepAlive=20000.

Esempi e Tutorials ECF: Il modo migliore per accedere agli esempi ed ai tutorials forniti da Eclipse per ECF è attraverso la creazione di progetti CVS, cioè scaricati automaticamente da Eclipse attraverso dei repository. Per fare questo va creato un nuovo progetto CVS con host=dev.eclipse.org, repository=/cvsroot/technology/org.eclipse.ecf e user=anonymous.


Riferimenti utili e approfondimenti: Sito ufficiale di ECF Progetto ECF Risorse per sviluppatori ECF Servers ECF Wiki su ECF


Quest3D e realtà virtuale

Introduzione:

Un mondo virtuale (o ambiente virtuale) è un ambiente simulato basato sui computer creato affinchè gli utenti possano abitarlo ed interagire attraverso avatar. Questa esperienza di solito è rappresentata sottoforma di umanoidi bi o tridimensionali (o altri avatars grafici o testuali) (Wikipedia.org)

Negli ultimi anni, la grafica 3D dei computer ha raggiunto dei livelli altissimi. Ormai dappertutto si utilizzano visualizzazioni 3D ricostruite al computer, anche nella realizzazione di film, ormai la grafica 3D svolge un ruolo predominante. I videogiochi offrono caratteristiche 3D sempre più dettagliate e mondi virtuali da esplorare sempre più vasti e perfetti. Sono ben lontani, quindi, gli anni in cui iniziò a nascere il tema della realtà virtuale. Già negli anni cinquanta infatti, Morton Heilig parlava di Cinema Esperienza, che era un qualcosa che poteva coinvolgere tutti i sensi, immergendo lo spettatore in ciò che avveniva sullo schermo. Fu proprio lui a creare un oggetto (che funziona ancora oggi) chiamato Sensorama, che proiettava dei film e coinvolgeva lo spettatore, quindi chi utilizzava questo strumento, in molti sensi (olfatto, vista, tatto e udito). Dopo di lui, a fine anni '60 cominciarono a nascere altri strumenti simili al Sensorama ma che andavano sempre più verso la simulazione di una vera e propria realtà virtuale. Poi in seguito si progredì sempre di più, ma ancora oggi, con le più potenti tecnologie, non è possibile creare una realtà simulata totalmente indistinguibile da quella reale, alcuni sensi infatti sono poco sfruttati (pensiamo all'olfatto e al tatto).

Con l'aumento dell'utilizzo della grafica 3D c'è stato un crescente aumento anche nella creazione di mondi virtuali, soprattutto di quelli basati su internet, che si sono un pò spostati dal loro obbiettivo iniziale di intrattenimento per sfociare in molti campi tra cui, sicuramente (grazie alla rete internet), quello della collaborazione tra gli utenti. I mondi virtuali moderni infatti sfruttano i Social Networking, sfruttano tutti gli strumenti di collaborazione attualmente esistenti in rete (che vanno dalla semplice chat fino all'uso di blog e anche del VoIP) facendo in modo che questi mondi diventino un punto di partenza anche per lo sviluppo di piattaforme di e-learning molto avanzate soprattutto dal punto di vista grafico. Senza dimenticare anche il lato economico che potrebbe venire fuori, e che già viene fuori, da queste nuove infrastrutture di collaborazione. Nasce, infatti, anche un nuovo modo di fare marketing, un nuovo modo di fare e-commerce, che ha come caratteristica a suo vantaggio sicuramente il suo lato ``nascosto di intrattenimento che, anche se passa in secondo piano, fa comunque la sua parte.

I mondi virtuali che si stanno sviluppando negli ultimi anni, quindi, non sono affatto dei semplici ambienti virtuali, dove gli utenti possono muoversi grazie ad avatars, offrono infatti sempre nuove funzionalità e sempre più vicine alla vita reale. Oltre quindi alla chat testuale e l'uso di Avatar 3D o 2D, che sono ormai le basi da cui parte il più semplice mondo virtuale, troviamo anche funzionalità che coinvolgono sempre di più l'utente, queste vanno dalla possibilità di gestire denaro e quindi del diritto di proprietà su alcune cose acquistate dall'utente all'interno di quel mondo virtuale, la possibilità poi di modificare il proprio avatar, di costruire nuovi ambienti, di e-commerce, di giochi on-line (multiplayer e non) e molto altro ancora.

Per fornire un esempio del crescente sviluppo di questo fenomeno dei mondi virtuali possiamo citarne alcuni tra i più conosciuti, precisando quindi che il numero di mondi virtuali sviluppati e le loro funzionalità sono davvero infiniti e non è possibile descriverli tutti:

Quest3D: Quest3D è un 3D Engine e una piattaforma per lo sviluppo di applicazioni 3D in real time. E' sostanzialmente un pacchetto di strumenti per il rendering 3D. Gli strumenti che possiede Quest3D sono strumenti che vengono utilizzati da quasi tutte le applicazioni di questo tipo.

Quest'applicazione viene utilizzata in moltissimi ambienti, come la grafica 3D viene utilizzata in altrettanti ambienti. Quindi lo ritroviamo nell'architettura (design e arredamenti), nello sviluppo di videogiochi, nella creazione di simulatori e spesso anche in campo educativo (e-learning). Un recente episodio che ha visto coinvolto Quest3D, che ci interessa da vicino, è stata la rappresentazione dei dati, su reti televisive RAI, sulle Elezioni 2006 in Italia.

Modalità: Una delle pecularità di Quest3D è senza dubbio la possibilità di vedere il progetto e anche di modificarlo in varie modalità. E' possibile infatti attivare la modalità "Run" per vedere il progetto in esecuzione (non è possibile modificarlo), la modalità "Edit" (è possibile modificarlo) e la modalità "Run/Edit" che permette di modificare il progetto mentre è in esecuzione.

Basi: Il concetto principale di Quest3D è il channel (canale). Il channel è il cuore di Quest3D, è un modulo che può essere un valore (quindi memorizza solo un valore), un'azione (quando viene eseguito svolge una azione, che potrebbe anche essere quella di prelevare un valore da un channel di tipo valore) oppure può essere sia una valore che contenere un'azione.

Quest3D permette di progettare graficamente, quindi i channels avranno una forma e un colore (rettangolari e azzurri). Inoltre i collegamenti tra i channels possono essere creati facilmente e naturalmente con il mouse: tirano una linea da un channel all'altro.

I channels vengono collegati tra loro creando un rapporto padre-figlio ma non tutti possono essere collegati tra loro e in qualsiasi posizione. Ogni channel ha la possibilità di scegliere che tipo di children (figlio) può ricevere. Il tipo in Quest3D determina quindi i collegamenti tra i channels. Ad esempio un channel che rappresenta un colore potrà avere 3 figli di tipo "Value" che appunto contengono 3 valori (i valori RGB).

In ogni progetto ci sarà poi un channel principale, detto Start Channel, da cui partirà tutta l'animazione in caso di esecuzione.

Templates: Un altro concetto basilare in Quest3D è quello dei templates, perchè essi aiutano moltissimo lo sviluppatore a non ripetere operazioni semplici, che aveva già fatto in precedenza e che dovrà fare ancora, e ad evitare lavoro inutile cercando di creare qualcosa che Quest3D già fornisce. Infatti, i templates non sono altro che gruppi di channels collegati tra loro che rappresentano qualcosa (una telecamera, una luce, un avatar, un oggetto, e così via). Questi templates sono forniti da Quest3D e possono essere importati facilmente nel nostro progetto grazie alla finestra che mostra tutti i templates e sta nell'interfaccia principale del programma. Lo sviluppatore potrà anche decidere di creare egli stesso un template, può farlo molto facilmente inserendo i channels che desidera inserire nel template e salvando questo nuovo progetto nella cartella "Templates" presente nella directory di installazione di Quest3D.

Importing:' Altra caratteristica fondamentale è sicuramente il fatto che in Quest3D è possibile importare oggetti e progetti di moltissimi tipi. I tipi finora supportati sono .x (DirectX File), .3DS, .lwo e .mot (LightWave) e .ls (LightScape). Inoltre esistono alcuni plug-in che Quest3D fornisce per altre applicazioni (come 3D Studio Max) grazie ai quali si può esportare direttamente da queste applicazioni a Quest3D.

Estendere Quest3D: Estendere Quest3D vuol dire creare nuovi channels completamente personalizzati. Quest3D si può estendere in 2 modi: con scripting LUA oppure utilizzando l'SDK fornito da Quest3D. Con LUA è molto semplice, esiste infatti tra i channels preinstallati in Quest3D un channel che ci permetterà di scrivere codice LUA direttamente in Quest3D e questo verrà poi eseguito. Con questo tipo di estensione però non si possono fare le operazioni più semplici, come caricamento di channels tra gruppi, semplici calcoli o creare dei loop. Se vogliamo creare un channel che faccia operazioni più avanzate, come l'interfacciamento con l'hardware sottostante, abbiamo bisogno di qualcosa più potente. Per questo Quest3D ci fornisce l'SDK grazie al quale possiamo creare dei nostri channels utilizzando il linguaggio di programmazione C++ e le specifiche volute da Quest3D (ad esempio che ogni channel dovrà dipendere e sviluppare una certa interfaccia).

I prodotti finiti: Quest3D dà la possibilità di pubblicare il nostro progetto in vario modo. Possiamo pubblicarlo come una applicazione (.exe) che quindi conterrà al suo interno tutti i files necessari per essere eseguita. Possiamo creare un installer che installerà nel sistema l'applicazione creando anche un collegamento nel menu avvio e sul desktop. Possiamo creare uno screen saver o ancora una pagina web con un controllo activeX, che in sostanza è un Viewer Quest3D (per file .q3d), che visualizzerà l'applicazione direttamente nella pagina. Infine si può creare direttamente un file visualizzabile tramite il Viewer di Quest3D che è scaricabile gratuitamente dal sito web del software.


Riferimenti utili e approfondimenti: Sito web di Quest3D Sito di supporto a sviluppatori e utenti Quest3D Sito web in inglese sui mondi virtuali Sito italiano su SecondLife


Software e Librerie

Tecnologie utilizzate:

  • Eclipse v.3.3.0
  • Eclipse Rich Client Platform (SWT)
  • Eclipse Communication Framework
  • Quest3D v.3.5.2 (Quest3D SDK e DirectX)
  • CoFFEE v.3.1

Tesi: Un tool di CoFFEE per la Realtà Virtuale

Abstract

Contacts

e-mail: marfal [AT] alice [DOT] it