L'obiettivo di questo articolo è introdurre e presentare un modulo sviluppato da Adobe che, pur portando nel nome il rimando alla famosa suite enterprise Adobe LiveCycle, può essere considerato a tutti gli effetti una libreria stand-alone e quindi utilizzabile dall'interno di applicazioni Flex senza particolari difficoltà. Il modulo in questione si chiama LiveCycle Collaboration Service ed offre la possibilità di creare applicazioni che beneficiano di un ambiente collaborativo condiviso mettendo a disposizione dello sviluppatore un set di API orientate allo sviluppo di chat-room, lavagne virtuali, videochat e quant'altro.
Nel corso dell'articolo esaminiamo il meccanismo operativo di questo modulo, molto semplice, per poi sperimentare in prima persona la creazione di un servizio che abbia come obiettivo la modifica condivisa di immagini del popolare servizio Flickr.
Panoramica funzionale
Adobe LiveCycle Collaboration Service, LCCS per semplicità, basa le sue funzionalità sul concetto di stanze: una stanza (Room) rappresenta una porzione circoscritta all'interno di un server remoto.
Contestualmente ad ogni room deve essere definito un oggetto 'applicazione' che non è altro che il puntatore al quale dovremo agganciare il progetto in Flex/Flash che intendiamo creare.
Ogni qualvolta un utente accede a tale progetto la sua sessione viene automaticamente aggiunta alla stanza alla quale il progetto è legato: in questo modo le informazioni che l'utente produce sono condivise tra tutti i partecipanti della stanza secondo le logiche dell'applicazione stessa.
La parte interessante di questa architettura client-server sta nel fatto che la parte server (quella che contiene le stanze) è resa disponibile da Adobe attraverso il portale http://cocomo.acrobat.com/ all'interno del quale è possibile registrarsi e fruire gratuitamente (entro alcuni limiti) di stanze da associare alle proprie applicazioni.
Registrazione e download dell'SDK
Per poter provare questo modulo per prima cosa è necessario registrarsi presso il portale sviluppatori LCCS cliccando sul bottone 'SignUp'.
Completata la brevissima procedura è possibile cominciare ad esplorare la dashboard di gestione; l'area risulta divisa in 4 settori operativi, un link di download dell'SDK e un banner che ci ricorda quanto sia facile diventare 'Premium' developers.
A tal proposito è bene ricordare che sul portale LCCS vige una tariffazione a consumo, scelta abbastanza classica per servizi di questo tipo come ad esempio Amazon AS3, Amazon EC2 o altri. L'account FREE consente di generare gratuitamente fino a 15 dollari di utilizzo al mese, cifra che seppur modesta si adatta perfettamente a necessità di test e di primo rilascio.
Passiamo ora all'analisi dei quattro pannelli operativi: i primi due svolgono la funzione di contenitori rispettivamente di oggetti 'applicazione' e di Rooms; tramite i pulsanti situati nella parte bassa di ogni pannello è possibile creare e cancellare oggetti di questo tipo.
Utilizzando il tasto create
del pannello applicazioni, la dashboard propone una semplicissima maschera di inserimento; specifichiamo FlickrModifier
nel campo Name
e premiamo Ok
per confermare la creazione. Selezioniamo quindi FlickrModifier
dall'elenco e spostiamo la nostra attenzione sulla sezione My Rooms
procedendo alla creazione di una stanza CommonRoom
attraverso il pulsante Add
.
Soprassediamo sui due pannelli restanti, dai contenuti decisamente intuitivi, e scarichiamo l'applicazione Air contenente l'SDK dall'apposito link situato sulla parte destra della dashboard.
Il software installato attraverso questa procedura funziona da aggregatore per tutte le informazioni relative a LCCS e, una volta eseguito, consente di scaricare l'SDK del modulo, esplorare alcune applicazioni di esempio, visionare la documentazione ed accedere ad alcune operatività avanzate come le librerie per la comunicazione server-to-server (utili per pilotare la creazione di stanze da remoto) e la possibilità di creare un LCCS server in locale.
Prima di proseguire sinceriamoci di avere a disposizione una versione funzionante di Flash Builder (la versione dimostrativa dalla durata di 30 giorni è disponibile a questo indirizzo); decomprimiamo quindi l'SDK all'interno della cartella plugins
dell'IDE di Adobe e prepariamoci ai primi esperimenti con questo interessante modulo.
Dalla pagina seguente infatti, iniziamo a scrivere la nostra prima applicazione per condividere le foto da Flickr.
La prima applicazione: condividere le foto da Flickr
La prima attività necessaria per poter sviluppare la nostra piccola applicazione dimostrativa consiste nel creare un nuovo progetto Flex (dal Flash Builder: File > New > Flex Project
) che possiamo chiamare 'FlickrModifier'.
Per comodità impostiamo l'applicazione come web-based selezionando la voce Web
all'interno delle scelte del gruppo Application Type
e controlliamo che il framework utilizzato sia Flex 4.0.
Mentre avanziamo nel wizard di creazione con il pulsante Next
è necessario soffermarsi nella schermata con l'elenco dei percorsi delle librerie e aggiungere il file afcs.swc
cliccando sul pulsante Add SWC
e identificando il file interessato all'interno della cartella decompressa in precedenza al percorso: plugins/com.adobe.afcs/libs/player10
.
Ora controlliamo che tutto funzioni inserendo nel file FlickrModifier.mxml
il codice:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/halo"
xmlns:rtc="AfcsNameSpace"
minHeight="768" minWidth="1024" >
<rtc:ConnectSessionContainer width="100%" height="100%" roomURL="your_room_url">
<rtc:authenticator>
<rtc:AdobeHSAuthenticator
userName="your_account_user_name"
password="your_account_password" />
</rtc:authenticator>
<mx:HBox width="100%" height="100%">
<mx:VBox width="25%" height="100%">
<rtc:Roster width="100%" height="50%"/>
<rtc:WebCamera width="100%" height="50%"/>
</mx:VBox>
<rtc:SharedWhiteBoard width="75%" height="100%"/>
</mx:HBox>
</rtc:ConnectSessionContainer>
</s:Application>
Il codice qui proposto contiene una buona panoramica dei componenti principali resi disponibili dal LCCS, notiamo infatti:
- una lavagna condivisa (
SharedWhiteBoard
) - un pannello per la condivisione della webcam (
WebCamera
) - l'elenco di tutti i partecipanti alla sessione (
Roster
)
Prima di poter eseguire il codice è necessario inserire i valori corretti negli attributi legati all'account ed alla room alla quale si vuole collegare questa applicazione. Specifichiamo quindi le informazioni relative al nostro account LCCS negli attributi userName
e password
; per quanto riguarda invece l'url della Room possiamo ottenere questa informazione accedendo all'applicazione LCCS SDK Navigator
scaricata in precedenza, selezionando l'utility Room Console
dalla linguetta Developer Tools
e infine cliccando in sequenza sull'Account, sull'Application e sulla Room per poi copiare l'indirizzo mostrato nell'area di testo in alto a destra.
Se ora eseguiamo il progetto potremo sperimentare in prima persona le potenzialità di questo modulo messo a disposizione dalla Adobe; per un vero e proprio test drive suggerisco di far puntare contemporaneamente al progetto più finestre di browser in modo da simulare una modalità multiutente. In ogni momento è possibile monitorare gli accessi alla propria applicazione collegandosi alla Room Console.
Ora facciamo in modo che la lavagna virtuale insista su di un immagine recuperata da Flickr; per le finalità di questo articolo non è necessario interfacciarsi con le FlickrApi ma, nel caso si volesse estendere l'esempio che stiamo sviluppando, la procedura diventa abbastanza semplice ed esula quasi completamente dal contesto LCCS; in ogni caso tratteremo di questo aspetto più avanti.
La tecnica utilizzata nel listato successivo è la più semplice possibile: sovrapponiamo una lavagna virtuale con sfondo trasparente ad una immagine recuperata dal famoso servizio di condivisione immagini:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/halo"
xmlns:rtc="AfcsNameSpace"
minWidth="1024" minHeight="768" >
<rtc:ConnectSessionContainer width="100%" height="100%" roomURL="your_room_url">
<rtc:authenticator>
<rtc:AdobeHSAuthenticator
userName="your_account_user_name"
password="your_account_password" />
</rtc:authenticator>
<mx:HBox width="100%" height="100%">
<rtc:Roster width="25%" height="100%"/>
<mx:Canvas height="75%" width="100%">
<mx:Image width="100%" height="100%"
source="http://farm3.static.flickr.com/2552/3989945058_7652c74511_o_d.jpg" />
<rtc:SharedWhiteBoard width="100%" height="100%"
backgroundAlpha="0.0" />
</mx:Canvas>
</mx:HBox>
</rtc:ConnectSessionContainer>
</s:Application>
Lanciando il progetto potremo apprezzare la qualità dell'implementazione ottenuta (soprattutto se comparata con lo sforzo profuso) che ci consente di operare in modo collaborativo sull'immagine selezionata.
Nel caso in cui si volesse estendere questo esempio è necessario considerare la necessità di aggiornare tutti partecipanti della stanza notificando ogni client connesso alla Room al momento del cambio dell'immagine di sfondo. A tal fine si potrebbe pensare di implementare una tecnica simile a quella dell'esempio 'SharedModel' incluso nell'SDK; tale operatività è però sicuramente al di fuori delle intenzioni di questo articolo.
Conclusioni
Sono rimasto disarmato di fronte alla semplicità con la quale è possibile costruire servizi collaborativi utilizzando il modulo LCCS. Naturalmente le operazioni divengono via via più complicate man mano si cercano operatività che esulano dai componenti disponibili nativamente; questo però accade raramente in quanto la maggior parte delle funzionalità di sharing classiche sono correttamente confezionate all'interno di componenti pronti all'uso.
Per chi volesse proseguire nello studio di questo modulo consiglio di puntare il proprio browser verso il forum ufficiale di questa tecnologia; questo spazio oltre che vantare un discreto traffico di utenti è anche molto frequentato dai realizzatori di LCCS che il più delle volte sono disponibili ad aiutare con consigli e suggerimenti per i neofiti.