Visualizzazione post con etichetta componenti BlackBerry. Mostra tutti i post
Visualizzazione post con etichetta componenti BlackBerry. Mostra tutti i post

lunedì 6 luglio 2009

Versione 1.2 di OpenItaly for BlackBerry

Se qualcuno mi accusasse di trascurare questo blog non potrei proprio dargli torto! Ho scritto l'ultimo post quasi un mese fa, un tempo lunghissimo se si considera la rapidità con cui si succedono le notizie al tempo di Internet. Ma per fortuna (!?) non sono andato in vacanza, ho lavorato alla nuova versione di OpenItaly for BlackBerry e quindi oggi posso annunciare la pubblicazione della versione 1.2.0 del social network turistico italiano per BlackBerry.
La novità principale introdotta con questa nuova versione è la gestione delle News di OpenItaly.net, che potranno essere lette direttamente dall'applicazione sul BlackBerry. Tutto questo tempo per scaricare un elenco di news? In realtà, questa funzione è molto più complessa di questo può sembrare a prima vista, per due motivi:
  • il visualizzatore delle News è basato sul componente browser del BlackBerry, integrato direttamente nella nostra applicazione. Ho adottato questo approccio perché il testo della singola News è scritto in HTML e contiene immagini e link verso altre pagine di OpenItaly.net o di siti esterni. Grazie al componente browser si ottiene una visualizzazione perfetta e la possibilità di navigare tramite i link contenuti nella News.
  • OpenItaly for BlackBerry tiene traccia delle News scaricate e lette, memorizzandone le informazioni essenziali direttamente sullo smartphone. In questo modo è sempre possibile recuperare e riaprire anche le vecchie News. Il lettore fornisce indicazioni testuali e grafiche per segnalare all'utente quante sono le News ancora da leggere e quali sono quelle già lette.
Con la prossima tappa, la versione 1.5, dello sviluppo di OpenItaly for BlackBerry verrà messa a disposizione un'altra funzionalità molto importante, cioè la possibilità di registrarsi sul social network direttamente con lo smarphone.

Prima di congedarmi ringrazio tutti quelli che hanno provato le nostre applicazioni per BlackBerry, che sono tanti, visto che sia OpenItaly for BlackBerry che Mastro Bolletta hanno superato abbondantemente i 2000 download ciascuna!

lunedì 8 giugno 2009

OpenItaly for BlackBerry: 1500 download e versione 1.1!

Dopo una sola settimana dalla pubblicazione di OpenItaly for BlackBerry, l'applicazione è stata scaricata più di 1500 volte! Per questo risultato, che mi sembra molto lusinghiero, devo anche ringraziare gli amici di quattro portali che si occupano di applicazioni per BlackBerry e dispositivi mobili, che hanno presentato OpenItaly for BlackBerry e che mi sembra giusto citare:
Devo anche ringraziare Michele “O-Zone” Pinassi, il creatore di OpenItaly.net, con cui stiamo collaborando per sviluppare questa nuova applicazione per BlackBerry.

Per festeggiare questo importante traguardo ho pensato di rilasciare una nuova versione di OpenItaly for BlackBerry, la 1.1, che introduce diverse migliorie e novità:
  • possibilità di aggiornare i dati presenti sulla schermata principale (risorse ed eventi)
  • controllo automatico dell'ultima versione disponibile sul server
  • login manuale e automativo per gli utenti registrati su OpenItaly.net
  • aggiunta di commenti alle risorse direttamente dal BlackBerry (solo per gli utenti registrati che hanno eseguito il login)


E questo è solo l'inizio: sono già previste le versioni 1.2, 1.5 e 2.0, che introdurranno tante nuove funzionalità, la più importante delle quali sarà la possibilità di proporre nuove risorse "on-site", direttamente dal proprio BlackBerry.

domenica 10 maggio 2009

Nuovi progetti per BlackBerry

Mi sono accorto, devo ammettere con un certo dispiacere, che è quasi un mese che non aggiorno il blog. Qualcuno potrebbe pensare che dopo la pubblicazione di Mastro Bolletta sull'App World di RIM mi sia preso una bella vacanza e abbia messo nel cassetto il fido Bold.
Per fortuna, niente di più lontano dalla realtà! Infatti sto lavorando su ben due progetti molto impegnativi, che mi hanno lasciato pochissimo tempo per le altre attività. Il primo è ancora segreto e preferisco aspettare il giorno della pubblicazione, a questo punto non tanto lontano, per rivelarne le caratteristiche.
Il secondo è Desmo BB, di cui ho parlato in un post precedente. Entrambi i progetti presentano problematiche tecniche analoghe, in particolare la gestione delle connessioni di rete, visto che, udite udite, utilizzano dati recuperati da un server centrale. Quindi ho sviluppato diversi componenti per utilizzare nel modo migliore possibile la connettività del BlackBerry e per eseguire le operazioni lunghe e complesse (come il download e il parsing di documenti XML) in thread paralleli.
Desmo BB è un CRM Finanziario Mobile, rivolto a Consulenti Finanziari Indipendenti e Promotori Finanziari e fornisce sia funzionalità di analisi dei portafogli (asset allocation, performance, indicatori di rischio, ecc.), che di gestione del profilo MIFID del Cliente (visualizzazione del profilo e del questionario). Inoltre mette a disposizione diversi strumenti per migliorare la gestione dei rapporti con i Clienti (come la Dashboard, gli Alert e Task, la ricerca, ecc.) ed è integrato con tutti le applicazioni standard del BlackBerry (rubrica, calendario, messaggi, telefono, ecc.).



Nel video vengono mostrate alcune funzionalità di Desmo BB, in particolare la Dashboard personalizzabile, che permette di aggregare sulla schermata iniziale dell'applicazione gli indicatori più interessanti per l'utente e gli Alert e Task che si vogliono avere sempre sotto controllo. Da questo pannello di riepilogo si passa a tutti gli altri, quindi alla ricerca dei Clienti o all'Analisi di Portafoglio. La quasi totalità dei componenti (tabelle multi colonna, griglie, grafici, ecc.) e delle librerie di base (gestione connessione, thread multipli di elaborazione, ecc.) utilizzati sono stati sviluppati internamente e possono essere usati in qualsiasi ambito applicativo.

Dopo questa rapida panoramica su Desmo BB, vi saluto e mi congedo da voi con l'impegno di scrivere il prossimo post entro la fine di maggio per annunciare la pubblicazione della nuova applicazione per BlackBerry.

martedì 24 marzo 2009

Componente per grafico a torta e Desmo BB

Devo ammettere che questo periodo è molto prolifico per quanto riguarda lo sviluppo di software per BlackBerry. Dopo aver realizzato il controllo di versione per Mastro Bolletta, che, fra parentesi ma fino ad un certo punto, ha raggiunto la cifra di 1000 download!, ho sviluppato un nuovo componente per disegnare grafici a torta sul BlackBerry.

Come spesso accade, ci voleva un buon motivo per affrontare anche questa sfida e l’ho trovato in Desmo BB, nome in codice della versione per BlackBerry di Desmo Finanza, il prodotto finanziario di punto realizzato da DataFox. Desmo BB, di cui è disponibile una presentazione con video sul sito Web di DataFox, è un’applicazione commerciale, che in un certo senso condensa ed esalta alla massima potenza tutte le esperienze fatte con le applicazioni gratuite sviluppate fino ad oggi (Mastro Bolletta, Copilota, BB Trainer, Risparmiometro, IBANc). Fornirà sia funzionalità finanziarie che di relazione con i Clienti e sarà integrata con i principali strumenti del BlackBerry (Contatti, Messaggi, Calendario, Attività, Telefono, ecc.).

Tornando al componente per i grafici a torta, posso dire che, dopo l’esperienza con l’altro componente per i grafici a barre, l’implementazione non è stata molto complessa, anche se per ora è in stato prototipale. Penso di utilizzarlo in un prossimo aggiornamento di mastro Bolletta, per fornire una rappresentazione grafica della ripartizione delle spese fra i mesi, le categorie e i beneficiari.

Per ora vi saluto, ma, considerato quanto bolle in pentola, penso che ci risentiremo a breve.

domenica 15 febbraio 2009

Integrazione con applicazioni BlackBerry - 4° parte

Siamo finalmente giunti (qualcuno potrebbe esclamare: era ora!) all'ultima puntata relativa alle problematiche di integrazione con le applicazioni standard del BlackBerry. Dopo aver esaminato il meccanismo per elaborare in modo personalizzato gli allegati presenti nelle email, vediamo la tecnica complementare, cioè come inviare messaggi di posta elettronica con file allegati.
La sequenza di operazioni può essere riassunta nei seguenti punti:
  • Scelta della cartella in cui memorizzare il messaggio e creazione del messaggio
  • Creazione della lista di destinatari a cui inviare il messaggio
  • Caricamento del mittente
  • Impostazione del soggetto
  • Creazione del contenuto, che conterrà la parte con il corpo del messaggio e quella con l'allegato
  • Invio del messaggio
Tutte le classi utilizzate si trovano nel package net.rim.blackberry.api.mail e quindi fanno parte delle estensioni alla libreria standard J2ME fornite da RIM. Vediamo in dettaglio il codice necessario ad implementare i punti appana elencati.

Scelta della cartella in cui memorizzare il messaggio e creazione del messaggio
Store store = Session.getDefaultInstance().getStore();
Folder[] folders = store.list(Folder.SENT);
Folder sentfolder = folders[0];
Message msg = new Message(sentfolder);

Creazione della lista di destinatari a cui inviare il messaggio
Address toList[] = new Address[1];
toList[0]= new Address("rossi@email.it", "Mario Rossi");
msg.addRecipients(Message.RecipientType.TO, toList);

Caricamento del mittente
Address from = new Address("bianchi@email.it", "Paolo Bianchi");
msg.setFrom(from);

Impostazione del soggetto
msg.setSubject("Soggetto dal mail");

Creazione del contenuto, che conterrà la parte con il corpo del messaggio e quella con l'allegato
Multipart multipart = new Multipart();
TextBodyPart body = new TextBodyPart(multipart, messaggio);
SupportedAttachmentPart attach = new SupportedAttachmentPart(multipart, MIME_TYPE, FILE_NAME, allegato.getBytes());
multipart.addBodyPart(body);
multipart.addBodyPart(attach);
msg.setContent(multipart);

Invio del messaggio
Transport.send(msg);

Il penultimo punto è il più importante e il più delicato. Nel codice si utilizzano due variabili di tipo String, messaggio e allegato, che rappresentano rispettivamente il testo del messaggio e quello dell'allegato, da cui si estraggono i byte da inviare. Sono presenti anche due costanti, MIME_TYPE e FILE_NAME, che vengono utilizzate dalla libreria di RIM per impostare i dati fondamentali dell'allegato. Nel caso di Copilota, tali costanti valgono:
MIME_TYPE = "application/x-rimdevice-SegnalazioneCopilota";
FILE_NAME = "x-rimdevice-SegnalazioneCopilota-ABC.cpl";
Il nome del file ripete parte del tipo MIME, in quanto l'infrastruttura di mail del BlackBerry elimina la seconda parte del MIME Type (quella dopo lo /) e la sostituisce con il nome del file. In questo modo il tipo MIME completo risulta:
application/x-rimdevice-SegnalazioneCopilota-ABC.cpl
Sfruttando parti di questa stringa è possibile associare un handler applicativo ad un particolare tipo di allegato, come è stato fatto proprio in Copilota, dove si controlla la presenza della stringa
x-rimdevice-SegnalazioneCopilota
all'interno del tipo MIME dell'allegato.

Vi saluto confermandovi che sto portando avanti lo sviluppo di una nuova applicazione per BlackBerry: sono già a buon punto e spero di finire tutto entro febbraio. Contemporaneamente sto sperimentando con un BlackBerry Bold e con il sistema server di RIM (la versione Professional del BES), in modo da toccare con mano le potenzialità di questa infrastruttura, in particolare per quanto riguarda la gestione dei criteri IT. Spero di raccogliere materiale sufficiente per scrivere qualche post interessante.

sabato 31 gennaio 2009

Integrazione con applicazioni BlackBerry - 3° parte

Eccoci finalmente, dopo qualche giorno di pausa, alla terza parte di questa panoramica sugli aspetti tecnici dell'integrazione con le applicazioni native del BlackBerry. Uno degli obiettivi che mi sono posto durante la progettazione di Copilota consiste nel dare la possibilità a chi utilizza l'applicazione di condividere con amici e colleghi quanto di interessante (ristoranti, musei, ecc.) ha scoperto durante i suoi viaggi. Lo strumento più naturale per raggiungere questo scopo mi è sembrata l'email, quindi mi sono trovato di fronte alla necessità di inviare allegati contenenti le informazioni applicative e di riconoscerle sul dispositivo del destinatario, in modo da poterle gestire opportunamente. La piattaforma di RIM mette a disposizione un'apposita interfaccia, net.rim.blackberry.api.mail.AttachmentHandler, le cui implementazioni possono essere registrate come gestori di allegati personalizzati, tramite il metodo addAttachmentHandler della classe net.rim.blackberry.api.mail.AttachmentHandlerManager. Questa interfaccia presenta tre metodi:
  • String menuString() - permette di indicare la voce di menù che appare quando si seleziona un allegato gestito da questa implementazione;
  • boolean supports(String contentType) - viene utilizzato per discriminare gli allegati da gestire da tutti gli altri. In questo metodo bisogna controllare che il contentType passato sia riconducibile a quello dell'allegato con le informazioni applicative;
  • void run(Message m, SupportedAttachmentPart p) - è il metodo che viene eseguito quando l'utente seleziona la voce di menù associata a questo gestore. Il contentuto dell'allegato può essere ricavato tramite la chiamata p.getContent(), che restituisce un array di byte, da interpretare secondo un certo formato (testo, immagine, file zip, ecc.)
Come ho scritto in un post precedente, la chiamata p.getContent() funziona solo con le versioni del sistema operativo dalla 4.5.0.63 in poi; quindi, per poter fornire questa funzionalità a tutti i possessori di BlackBerry, ho inviato i dati da condividere sia nell'allegato che nel corpo del messaggio: se non trovo niente nel primo, li recupero dal secondo.

Nel prossimo post completerò questo argomento, esaminando come creare e inviare via mail un allegato personalizzato. A questo punto vi saluto con alcune novità:
  • Copilota ha superato abbondantemente i 300 download e anche le altre applicazioni per BlackBerry ultimamente sono state scaricate molte volte, in particolare IBANc;
  • Ho iniziato a sviluppare una nuova applicazione per BlackBerry; il progetto è già impostato e alcune classi sono completate, ma ancora mancano tutte quelle che costituiscono l'interfaccia grafica;
  • Abbiamo adottato GWT e SmartGWT come librerie base per un nuovo progetto relativamente complesso e sono molto soddisfatto dei risultati ottenuti fino a questo momento. La possibilità di realizzare applicazioni AJAX direttamente in Java è notevole e spero di poter dedicare qualche prossimo post a questi argomenti.

giovedì 15 gennaio 2009

Integrazione con applicazioni BlackBerry - 2° parte

Eccoci alla seconda puntata dedicata alle problematiche di integrazione con le applicazioni native del BlackBerry. Prima di affrontare i temi tecnici, sono molto contento di poter annunciare che l'applicazione Copilota è stata scaricata più di 150 volte nei primi due giorni dalla pubblicazione. Anche le altre applicazioni per BlackBerry che abbiamo rilasciato i mesi scorsi, cioè IBANc, Risparmiometro e BB Trainer, sono state riscoperte e scaricate molte volte. Devo anche ringraziare gli amici di BlackBerryItalia, BBWorld e Blackberry Italian Usergroup per aver pubblicato sui loro siti Web articoli sulle nostre applicazioni.

L'argomento di questo post è l'integrazione con il GPS e lo strumento per le Mappe. Il mio scopo era abbastanza semplice, cioè leggere le coordinate correnti e visualizzarle sulla mappa. Ovviamente il GPS fornisce molte altre informazioni, come l'altitudine o la velocità, ma per il momento mi sono limitato a latitudine e longitudine.
Prima di tutto è necessario recuperare un'istanza della classe javax.microedition.location.LocationProvider tramite il metodo statico getInstance(Criteria criteria): il parametro criteria permette di indicare il tipo di localizzazione desiderato (ad esempio GPS o GSM), specificando null, come nel mio caso, si ottiene il LocationProvider predefinito. Nel caso in cui questa funzionalità non sia disponibile viene lanciata una LocationException.

locationProvider = LocationProvider.getInstance(null);

A questo punto è possibile recuperare le coordinate correnti tramite il metodo getLocation(int timeout). La documentazione in formato PDF riporta una nota non presente nei JavaDoc: questa chiamata non può essere eseguita nel thread degli eventi (ad esempio nel gestore di un menù), altrimenti viene lanciata un'eccezione LocationException. Ho sperimentato direttamente che quanto affermato è vero e quindi ho dovuto lanciare un thread in background per eseguire il metodo. Quindi nel metodo run() bisogna scrivere qualcosa del genere:

Location location = locationProvider.getLocation(60);
QualifiedCoordinates qf = location.getQualifiedCoordinates();
double latitudine = qf.getLatitude();
double longitudine = qf.getLongitude();

Per lasciare l'utente in attesa del completamento dell'operazione ho aperto un dialogo modale con una barra di avanzamento, che scandisce i secondi.

Una volta recuperate le coordinate è possibile aprire lo strumento per le Mappe e visualizzare la posizione, utilizzando la classe Invoke già analizzata nel post precedente. In questo caso è necessario preparare una stringa con un formato specifico e passarla tramite la classe MapsArguments.

String location = "<lbs>" +
"<location lat='" + String.valueOf((int)(latitudine * 100000)) +
"' lon='" + String.valueOf((int)(longitudine * 100000)) + "'/>" +
"</lbs>";

MapsArguments maps = new MapsArguments(MapsArguments.ARG_LOCATION_DOCUMENT, location);
Invoke.invokeApplication(Invoke.APP_TYPE_MAPS, maps);

L'unica accortezza è moltiplicare per 100000 i valori delle coordinate e quindi trasformarli in interi.

Per ora vi saluto e vi rimando al prossimo articolo, in cui vedremo come gestire in modo personalizzato gli allegati dei messaggi di posta.

martedì 23 dicembre 2008

Nuova Applicazione per BlackBerry

Sono abbastanza soddisfatto dell'accoglienza riservata alle nostre prime applicazioni per BlackBerry: Risparmiometro si avvicina ormai ai 100 download, IBANc ha superato i 50 e BB Trainer, dopo un inizio un po' difficile, sta riguadagnando terreno. Spero che la nuova applicazione che sto sviluppando raggiunga risultati altrettanto lusinghieri. Purtrpoppo sono un po' indietro con la tabella di marcia: avrei voluto rilasciarla prima di Natale, ma non credo di farcela. A questo punto l'obiettivo è l'inzio del 2009. In realtà non sono stato con le mani in mano, anzi ho lavorato molto! Forse anche troppo, nel senso che ho cercato di implementare molte funzioni (secondo me utili) e contemporaneamente di integrare il più possibile l'applicazione con gli strumenti nativi del BlackBerry. Quindi oltre a poter richiamare direttamente le applicazioni per telefonare, per inviare email e per navigare su Internet, viene recuperata la posizione corrente dal GPS (per i dispositivi che ne sono provvisti) e viene visualizzata la mappa relativa. Infine ho pensato di implementare un meccanismo di condivisione delle informazioni (in modo che gli amici possano scambiarsi quanto ritengono utile e interessante), basato sull'invio di email e una gestione custom degli allegati. Purtroppo sembra che la libreria Java nelle versioni precedenti alla 4.5.0.63 sia affetta da un bug proprio nelle parti relative agli allegati e quindi questa funzionalità potrebbe non essere fruibile pienamente su molti dispositivi. Comunque devo verificare il comportamento di un dispositivo reale, oltre che dei vari simulatori.

Prima di salutarvi e di augurarvi Buon Natale vi segnalo una libreria che mi sembra molto interessante e che sto valutando per un nostro progetto importante, cioè SmartGWT, l'implementazione per GWT delle API SmartClient. Sono disponibili tantissimi componenti AJAX molto potenti ed è possibile utilizzare un meccanismo di Data Binding veramente valido. Vi consigli di darci un'occhiata.

lunedì 15 dicembre 2008

BB Trainer per BlackBerry

Dopo l'annuncio del post precedente, mi sono impegnato a fondo per completare il prima possibile la nuova applicazione per BlackBerry. In realtà c'è stato un cambio in corso d'opera, visto che mi è venuta in mente un'altra funzionalità che ho preferito realizzare prima di quella su cui stavo già lavorando, che quindi è stata temporaneamente messa da parte e che penso di riprendere proprio oggi. Quindi è nato BB Trainer, l'assistente di palestra per BlackBerry. Non mi voglio dilungare sulle funzionalità del software, per cui vi rimando alle pagine del sito di DataFox, ma sugli aspetti tecnici.
BB Trainer sfrutta tutti i componenti che ho realizzato e di cui vi ho parlato nei miei post, in particolare il GridLayoutManager e il Grafico a Barre. Durante lo sviluppo, li ho abbastanza migliorati e ho realizzato un mini (ma proprio mini) framework, che facilita abbastanza lo sviluppo di applicazioni di questo tipo. Effettivamente, BB Trainer, pur essendo molto più complesso di IBANc e Risparmiometro, è stato realizzato in molto meno tempo. Inoltre, per rendere più interessante lo sviluppo e più funzionale l'applicazione, ho richiamato (grazie alla classe net.rim.blackberry.api.invoke.Invoke) le applicazioni per il Telefono e la Posta Elettronica native del BlackBerry.Spero di poter annunciare a breve il rilascio dell'altra applicazione, in modo da poterla considerare un po' come il nostro regalo di Natale per tutti gli utilizzatori di BlackBerry.

lunedì 1 dicembre 2008

Nuova Applicazione e Libreria di Grafici per BlackBerry

Dopo la pubblicazione di Risparmiometro, ho iniziato lo sviluppo di una nuova applicazione per BlackBerry e quindi ho avuto pochissimo tempo da dedicare al Blog. Visto che l'appetito vien mangiando, questa applicazione è ancora più complessa delle due precedenti, con molte funzionalità e schermi, per cui non so esattamente quanto tempo mi ci vorrà per finirla. Non voglio anticipare niente, se non l'idea di base, comune anche al Risparmiometro, che si può sintetizzare nei due famosi motti dei nostri antenati Romani, "hic et nunc" (qui e ora) e "carpe diem" (cogli l'attimo). Penso che valga la pena utilizzare un'applicazione su smartphone quando permette di salvare al volo una qualche informazione, che altrimenti perderemmo, nel momento in cui ci passa davanti agli occhi, perché ce la possiamo dimenticare e abbiamo difficoltà ad appuntarla da qualche parte. In questo modo salviamo su un dispositivo che portiamo sempre con noi quanto pensiamo che ci possa essere utile in futuro e lo possiamo poi recuperare quando ci viene in mente o ci serve veramente.

Per semplificare lo sviluppo del Risparmiomentro ho realizzato il GridLayoutManager, per questa nuova applicazione ho inziato ad implementare una libreria di grafici per BlackBerry. Al momento è disponibile solo un grafico a barre verticali, di cui potete vedere un esempio nella figura seguente:Per ora può essere utilizzato solo per visualizzare dati storici, che cioè si sono verificati in un certo momento temporale. Anche se non ho l'ambizione di riscrivere il JFreeChart per BlackBerry, al momento il codice non è sufficientemente maturo e generico per essere reso pubblico. Comunque spero di riuscirci, prima o poi.

domenica 16 novembre 2008

GridLayout per BlackBerry

Dopo aver completato lo sviluppo di IBANc, l'applicazione per la gestione di codici IBAN per BlackBerry, ho iniziato a cercare nuove esigenze per cui varrebbe la pena realizzare un software da far girare sui telefonini di RIM. Durante questo studio, mi sono reso conto che un aspetto, su cui la libreria Java del BlackBerry è carente, è la gestione del posizionamento dei componenti grafici sullo schermo. I contenitori standard (VerticalFieldManager e HorizontalFieldManager), anche se combinati fra loro, non permettono di collocare i componenti con la precisione necessaria per la realizzazione di una maschera complessa e inoltre non consentono di incolonnare i vari campi. Quest'ultima caratteristica negativa porta a risultati che, per mio gusto personale, non sono particolarmente piacevoli da vedere, come mostra abbastanza chiaramente la figura seguente:Si può notare come i vari campi di immissione siano disallineati rispetto ad un ideale asse verticale. Infine è molto complesso, se non impossibile, affiancare orizzontalmente due o più campi.
Sono quindi arrivato alla conclusione che è necessario disporre di un nuovo contenitore, sottoclasse di net.rim.device.api.ui.Manager, che fornisca funzionalità analoghe, anche se più semplici, del GridBagLayout dell'AWT di Java.
Ho deciso di chiamarlo it.datafox.bb.ui.container.GridLayoutManager, in quanto permette di disporre i componenti visuali su una griglia (GridLayout), con un numero prefissato di righe e colonne, ciascuna delle quali ha una larghezza definita dall'utilizzatore, espressa come percentuale della larghezza totale dello schermo. Per garantire una maggiore flessibilità, ho reso possibile estendere ogni campo su un numero arbitrario di righe e colonne, utilizzando un meccanismo analogo a quello del colspan/rowspan dell'HTML. La schermata seguente mostra lo stesso gruppo di componenti disposti grazie al GridLayout, utilizzando una griglia con due colonne e diverse righe.Tutti i campi di immissione, che si trovano nella seconda colonna, sono allineati verticalmente e alcuni campi speciali, come il gauge (la barra con la percentuale) o la lista, hanno un colspan pari a due e quindi occupano tutto lo spazio orizzontale disponibile. Si può anche notare che i due radio button sono posizionati sulla stessa riga, come sembra logico aspettarsi, visto che sono mutuamente esclusivi. Ho preparato anche un'altra schermata, in cui le colonne sono tre e dove ho posizionato i vari componenti con allineamenti orizzontali diversi.Per poter sfruttare le funzionalità del GridLayoutManager nel modo più semplice, ho creato anche una sottoclasse astratta di net.rim.device.api.ui.container.FullScreen, che si chiama it.datafox.bb.ui.container.FormScreen, da utilizzare per implementare i propri schermi di tipo form (maschere di visualizzazione o gestione di dati complessi). I metodi salienti del FormScreen sono il costruttore e l'add. Il costruttore ha la seguente firma:
public FormScreen(int numRows, int numCols, float[] colWidthPercs, long style)
e i parametri forniscono le seguenti informazioni:
  • numRows - numero di righe della griglia
  • numCols - numero di colonne della griglia
  • colWidthPercs - larghezza percentuale di ciascuna colonna
Il metodo add permette di aggiungere un campo allo schermo e ha le seguente firma:
protected void add(Field field, int x, int y, int rowspan, int colspan)
I parametri forniscono le seguenti informazioni:
  • field - campo che si vuole aggiungere allo schermo
  • x - colonna della griglia in cui si vuole inserire il campo
  • y - riga della griglia in cui si vuole inserire il campo
  • rowspan - numero di righe occupate dal campo
  • colpan - numero di colonne occupate dal campo
Quindi per creare un nuovo schermo con quattro righe e tre colonne e una dimensione relativa di 30, 40, 30 si può usare il seguente codice:
new TestScreen2(4, 3, new float[] { 30, 40, 30 },...)
e per aggiungere un'etichetta nella terza riga, in modo che la occupi tutta (colspan = 3) e che sia allineata al centro, si può scrivere in questo modo:
add(new LabelField("Label3", Field.FIELD_HCENTER), 0, 2, 1, 3)
Il codice sorgente del GridLayoutManager, del FormScreen e degli schermi di esempio riportati nelle schermate precedenti è scaricabile dal sito Web di DataFox. Ho testato questi componenti con tutti i simulatori dei dispositivi più recenti (dall'8100 al 9500) e il risultato è sempre stato positivo.

Restando in tema di sviluppo software per BlackBerry, vi segnalo un'interessante novità, cioè la nuova versione beta del plugin per Eclipse fornito da RIM. Questo rilascio è compatibile con Eclipse 3.4 e mette a disposizione tutti gli strumenti presenti nel JDE, come la firma del codice e la possibilità di scegliere la versione della libreria e del simulatore da utilizzare, integrandoli nel ben più potente ambiente di sviluppo Open Source. Da quando l'ho installato non ho riscontrato problemi e il suo utilizzo è veramente piacevole e produttivo, quindi lo consiglio a tutti quelli che realizzano software per BlackBerry.

venerdì 7 novembre 2008

L'ultima versione di RoundedVerticalFieldManager

Ho copiato sul server Web di DataFox l'ultima versione del codice sorgente del componente per BlackBerry che ho sviluppato, cioè il RoundedVerticalFieldManager. Durante la realizzazione dell'applicazione IBANc, questo contenitore con bordi stondati è stato utilizzato e testato molto più approfonditamente. Quindi sono emerse diverse problematiche nel ridisegno di alcune zone dopo la visualizzazione di dialoghi di grosse dimensioni. È stato necessario inserire diverso codice di debug per capire esattamente i rettangoli interessati e di conseguenza le operazioni da compiere per ottenere i giusti riempimenti. Per sicurezza (e un po' di scaramanzia ;-)) ho lasciato commentate le varie righe con la stampa su console dei messaggi con le informazioni che mi servivano. Adesso, dopo diverse prove, il risultato mi sembra soddisfacente e piacevole da vedere, come potete osservare nell'immagine seguente, che ho ripreso dalla pagina con le schermate di IBANc.
Lo schermo è stato diviso in tre sezioni verticali, ciscuna delle quali contiene un RoundedVerticalFieldManager. Il primo serve per mostrare il codice IBAN risultante dall'elaborazione dei dati inseriti dall'utente. Il secondo contiene i singoli campi che costituiscono il codice IBAN e le informazioni di supporto (come la descrizione del record su cui si sta lavorando). Il terzo contiene il pulsante Verifica, con cui si richiede il controllo dei dati inseriti e la creazione del codice IBAN. Per osservare il contenitore all'opera, oltre a scaricare e installare sul proprio BlackBerry l'applicazione IBANc, è anche possibile visionare la dimostrazione video di IBANc.

A partire da questo post, prima di salutarvi, pubblicherò alcune notizie su strumenti e tecnologie che utilizzo o che mi sembrano interessanti e per i quali c'è qualche novità di rilievo:
  • È uscita la nuova e attesa versione 8 di IntelliJ IDEA. Le novità e le modifiche sembrano numerose e importanti e riguardano tutti gli aspetti dello sviluppo di applicazioni su piattaforma Java. Ho scaricato e installato la versione trial, spero di riuscire a provarla e di poter raccontare le prime impressini di utilizzo di questo strumento.
  • È disponibile la versione 0.9 di ZK Studio, il plugin per Eclipse rivolto agli utilizzatori del framework ZK. Anche per questo software sono molte le migliorie rispetto alle versioni precedenti, in particolare l'editor visuale di codice ZUL, che permette di avere un'anteprima del'aspetto grafico della pagina. Ritengo che la piattaforma ZK sia molto interessante e sto aspettando l'occasione giusta per metterla alla prova su un progetto reale.

giovedì 9 ottobre 2008

Nuova versione del contenitore con bordi per BlackBerry

Iniziando a lavorare seriamente con il RoundedVerticalFieldManager (il mio contenitore con bordi per BlackBerry), ho scoperto subito un comportamento non proprio corretto. Ho inserito nel contenitore varie tipologie di componenti (campi di input e bottoni) e il risultato è stato un disastro:
Spostandosi in alto e in basso con il cursore e inserendo del testo, tutto lo sfondo viene come "mangiato" e l'effetto finale non è proprio quello desiderato. Ho dovuto introdurre diversi controlli per gestire queste situazioni (e non penso di averle ancora individuate tutte) e per fare in modo che lo sfondo venga salvaguardato durante l'interazione con i componenti in primo piano. Alla fine il risultato è decisamente più accettabile:
Ho anche dato una pulitina al codice, togliendo di mezzo un po' di costanti che erano rimaste in giro, e ho aggiornato l'archivio presente sul server Web di DataFox e potete quindi continuare a scaricarlo cliccando qui.
Adesso spero di potermi dedicare allo sviluppo dell'applicazione vera e propria! A forza di sviluppare software usando componenti già pronti ci si dimentica di quanto sia difficile farseli da sé.....

martedì 7 ottobre 2008

Contenitore con bordi per BlackBerry

Ho iniziato a sviluppare l'applicazione per BlackBerry di cui vi ho parlato nei post precedenti, cercando di sfruttare tutti i momenti liberi che sono riuscito a trovare. Per l'interfaccia utente mi sono ispirato alle varie applicazioni standard preinstallate sul telefonino (ad esempio Tasks), quindi ho creato uno schermo principale e uno di dettaglio, con una serie di campi di input con cui l'utente può interagire per inserire e modificare le informazioni. Ho cercato di organizzare questo form suddividendo i campi in gruppi logici, racchiusi all'interno di aree delimitate in qualche modo. Il candidato ideale per svolgere questo ruolo è la classe Border (che si trova nel package net.rim.device.api.ui.decor), da applicare ad un componente (in questo caso un contenitore) tramite il metodo setBorder della classe Field. Dopo aver scritto tutto il codice, ecco la sgradita sorpresa: il programma funziona senza problemi con l'emulatore del modello 9000, ma utilizzando un modello precedente si ottiene un errore bloccante.Dopo un po' di ricerche, scopro (con una certa incredulità per tale mancanza) che tutto questo funziona solo con il JDE (e di conseguenza con la libreria di runtime) 4.6.0. Suddetti classi e metodi nella versione 4.5.0 non esistono proprio e quindi non si può che verificare l'errore di Class Not Found.

Come ovviare a questa situazione? Eliminando l'uso del Border tutto va a meraviglia, ma il risultato è abbastanza penoso da un punto di vista estetico. Dopo vari tentativi falliti (ad esempio l'uso di una bitmap come sfondo del contentore), arrivo alla soluzione attuale, che mi soddisfa abbastanza, anche se può essere sicuramente migliorata. Ho creato una sottoclasse di VerticalFieldManager (package net.rim.device.api.ui.container), visto che i vari campi devono essere disposti verticalmente, e ho sovrascritto il metodo paintBackground. In questo metodo ho riempito il rettangolo che rappresenta il contenitore con un colore di sfondo e su questo ho disegnato un rettangolo con i bordi stondati più piccolo, riempito di bianco. Il risultato è visibile in figura:
Per completare il componente bisognerebbe dare un maggior effetto tridimensionale, come di profondità alla parte interna, ma per ora può andare bene anche così. Ho preparato un archivio contenente il codice sorgente del RoundedVerticalFieldManager (package it.datafox.bb.ui.container), che può essere scaricato da qui. Per posizionare correttamente i componenti all'interno del contenitore è necessario utilizzare il metodo setPadding, come nel seguente esempio:
provaVFM.setPadding(new XYEdges(7, 5, 6, 7));

Alcune novità anche per quanto riguarda il sito Web di DataFox. Abbiamo infatti creato tante sottosezioni relative ai moduli di Desmo Finanza e di Desmo Monitor Investimenti. Quindi funzionalità importanti come il Controllo Limiti Normativi, il Registro Ordini, il Calcolo dei Rendimenti, la Performance Contribution e la Performance Attribution hanno finalmente lo spazio e l'approfondimento che meritano.

martedì 30 settembre 2008

Applicazione per BlackBerry e domini Performance Attribution

Dopo aver completato la Component Gallery e aver testato altre classi messe a disposizione dalla libreria di RIM (ad esempio, trovo veramente notevole la coppia PersistentStore / PersistentObject per memorizzare oggetti Java generici nella memoria del dispositivo), ho iniziato lo sviluppo di una vera applicazione per BlackBerry. Vi voglio anticipare solo che le funzionalità sono in ambito bancario e che appena completata sarà liberamente scaricabile.

Abbiamo completato la registrazione e la configurazione di tre nuovi domini Internet relativi alla Performance Attribution, cioè www.performanceattribution.it, www.performance-attribution.it e www.performance-attribution.com. Per il momento li abbiamo fatti puntare tutti sul sito Web di DataFox, tuttavia stiamo studiando altre soluzioni, in particolare la realizzazione (con Joomla! 1.5, in modo da sfruttare le nostre competenze su questo CMS) di un sito Web con contenuti e approfondimenti specifici su questa tematica.

domenica 28 settembre 2008

Nuova versione della Component Gallery per BlackBerry

Come avevo promesso qualche post fa, ho completato la Component Gallery con i componenti grafici del BlackBerry e questa volta penso di averli utilizzati tutti, o quasi. Il file aggiornato è scaricabile qui e, come il precedente, contiene sia i sorgenti che i file di supporto per il JDE di Eclipse.
In questa nuova versione sono presenti due Screen diversi e per passare dal primo al secondo è sufficiente cliccare sul pulsante presente nella prima schermata. Il primo (visibile nella figura seguente) è lo stesso della versione precendente, a cui è stato aggiunto un Field custom che disegna un rettangolo colorato.
Il secondo (visibile nella figura successiva) è quello più interessante, in quanto mette alla prova i seguenti componenti:
  • contenitori (HorizontalFieldManager e VerticalFieldManager)
  • ListField
  • TreeField
Ho fatto alcuni esperimenti con i contenitori, il cui risultato è visibile nella parte alta dello schermo, per verificare quali siano le possibilità di disporre i componenti sullo schermo.
Per quanto riguarda il ListField, ho creato una sottoclasse ad hoc, MyListField, in modo da poter intercettare gli eventi generati dalla trackwheel e dalla tastiera e per associare a questo componente un menù custom. Quindi, quando il focus è su questo componente e si preme il pulsante che apre il menù, appare una nuova voce creata da codice.
Il TreeField è interessante in quanto con il metodo addChildNode si aggiungono nodi all'albero e con il metodo drawTreeItem (definito in un'apposita interfaccia richiamata dal Framework) si vanno invece a disegnare sullo schermo. In tal modo si è ottenuta la separazione fra dati e presentazione (model e view) e risulta più facile personalizzare l'aspetto grafico dell'albero.

Prima di concludere, vi segnalo che sul sito di DataFox, nella sezione Corsi di Formazione, sono presenti i programmi dei nuovi corsi, come il Corso su Joomla! 1.5, il Corso su PHP e MySQL, il Corso di programmazione base e il Corso di Programmazione ad Oggetti.

domenica 14 settembre 2008

Component Gallery per BlackBerry

Ho completato una prima versione della Component Gallery per BlackBerry, in cui sono utilizzati tutti i componenti grafici di base contenuti nel package net.rim.device.api.ui.component. Ho preferito rimandare ad una seconda versione i componenti più complessi, come il ListField e il TreeField, e i vari contentori presenti nel package net.rim.device.api.ui.container.

Come si può vedere nella figura seguente, all'interno del simulatore il programma può essere lanciato tramite una semplice icona che si trova nella cartella Downloads:
Una volta partito, viene visualizzata una schermata con tutti i componenti disposti verticalmente; poiché sono molti, non entrano tutti in una singola pagina e si possono vedere spostandosi verso il basso.Il codice sorgente e i file di supporto per Eclipse con plugin JDE si possono scaricare da qui. Oltre che con questo ambiente, il codice può essere utilizzato anche con il JDE standard, dopo aver creato e configurato i contenitori previsti da questo tool (workspace e project).

venerdì 12 settembre 2008

JDE e Eclipse

Dopo un po' di tempo, riesco finalmente a scrivere un nuovo post. In questi giorni siamo stati molto impegnati ad aggiornare il sito Web di DataFox e le brochure di Desmo Finanza e Desmo Monitor Investimenti, in particolare per presentare le nuove funzionalità di Performance Contribution e Performance Attribution. Abbiamo anche pubblicato una demo statica del nuovo modulo "Portafogli WEB".

Ma torniamo a noi e allo sviluppo di applicazioni per BlackBerry. Come anticipato nel post precedente sto preparando una piccola demo dei componenti grafici messi a disposizione dalla libreria di RIM; ho iniziato utilizzando, come ambiente di sviluppo, il JDE 4.6.0 (di cui è appena uscita la versione definitiva), ma ho sentito la necessità di tornare ad Eclispe, vista la familiarità che ho con questo tool. Quindi ho installato la beta del JDE Plug-in for Eclipse, appoggiandolo ad uno degli Eclipse presenti sul mio computer. Fin qui tutto bene, ho creato il workspace per il BlackBerry e un progetto, in cui ho copiato quanto realizzato con il JDE. Anche l'emulatore ha funzionato senza problemi.

Quando ho iniziato a modificare il codice ho avuto una brutta sorpresa: il completamento automatico (Ctrl+Space) non funziona! Ma come è possibile? All'interno della classe principale, sottoclasse di MainScreen il Code Assist di Eclipse non fornisce nessun suggerimento, neanche per le classi base come String; al contrario, in altre classi figlie di Object tutto va a meraviglia. Poiché ritengo che questa funzionalità sia fondamentale, ho cercato di capire il motivo di questo strano comportamento. Dopo un po' di indagini e di tentativi, ho scoperto che alcune classi presenti nel JAR fornito con il JDE (net_rim_api.jar) risultano contenere una o più inner class, ma il corrispondente file .class (riconoscibile dalla presenza del $ nel nome) manca. Quando si crea una sottoclasse di queste classi (ad esempio UiApplication o MainScreen), il Code Assist non fornisce nessun suggerimento. In modo forse non molto ortodosso (ma bisogna fare di necessità virtù, no?), ho creato i file .class delle inner class mancanti, li ho aggiunti ad una mia versione del file JAR di libreria e mettendo quest'ultimo nel Build Path del progetto l'auto completamento ha iniziato a fare il suo dovere. Anche a run time non ci sono problemi, in quanto il JAR "arricchito" serve solo per l'editing e la compilazione e quindi le inner class fittizie non vengono neanche considerate dall'emulatore.

Pur avendo raggiunto il mio scopo, resto con due dubbi:
  • come mai le inner class mancano dal JAR? dimenticanza o protezione del codice dagli attacchi dei decompilatori?
  • perché Eclipse non gestisce in modo migliore questa situazione anomala?
Alla prossima, finalmente con la demo completata, anche grazie al Code Assist di Eclipse!

venerdì 5 settembre 2008

Dove sono finite le applicazioni?

Mi riaggancio al post precedente, a proposito dell'utilizzo dell'emulatore del BlackBerry all'interno del JDE. Grazie alle preziose indicazioni che ho trovato su dev|sushi, sono finalmente riuscito ad eseguire le applicazioni di esempio e quelle scritte da me, sia nella versione stabile 4.5.0 che nella beta 4.6.0. Ma qual è il mistero finalmente svelato? A differenza di tutti gli altri emulatori che ho utilizzato in passato (ad esempio quello per Windows Mobile o per J2ME), in questo caso l'applicazione che si vuol testare non parte automaticamente, ma viene semplicemente caricata nella memoria dell'ambiente emulato. Per certi versi, questo comportamento è più realistico, visto che sul dispositivo vero le applicazioni devono essere lanciate dall'utente, quando ha intenzione di utilizzarle.

Nell'emulatore predefinito del JDE 4.5.0, corrispondente al BB 8300, le applicazioni create nell'ambiente di sviluppo si trovano insieme alle altre, come si vede in figura, dove è stata evidenziato l'esempio "Hello World".
Nell'emulatore del JDE 4.6.0, corrispondente al BB 9000, le applicazioni su cui si sta lavorando si trovano nella cartella Downloads, come si vede in figura, dove, oltre al solito "Hello World", si possono vedere altri esempi.

In un prossimo post presenterò una piccola applicazione dimostrativa, corredata di codice sorgente, in cui sono utilizzati i vari componenti grafici (lista, albero, radio, check, ecc.), messi a disposizione da RIM per creare le interfacce utente. Lo scopo è di mettere a disposizione una galleria di componenti con cui fare esperimenti e toccare con mano i risultati ottenibili con ciascuno di essi.

martedì 2 settembre 2008

Sviluppo per BlackBerry e attacchi NDR su Exchange

Oggi avrei voluto parlare dei primi risultati conseguiti nello sviluppo di software per BlackBerry. Purtroppo, dopo diversi tentativi e ricerche su Internet, non sono riuscito a far funzionare correttamente l'emulatore integrato nella versione 4.6.0 (beta) del JDE (ambiente intergrato fornito da RIM). Il comportamento è stato abbastanza singolare, in quanto l'emulatore partiva senza problemi, ma non riusciva a caricare i programmi compilati, il tutto senza fornire la minima spiegazione. Al contrario, i programmi di sistema, ad esempio il browser Web, hanno funzionato benissimo. Quindi ho deciso di disinstallare tutto e di cominciare da capo, provando prima con la versione stabile (4.5.0) e solo successivamente con la beta. Vi aggiornerò in un prossimo post.

Per fortuna è andata meglio con un problema che ci tormentava da molto, cioè un attacco di tipo NDR (Non Delivery Report) al nostro server Exchange. Stamani ne è stato portato un altro molto intenso, che di fatto bloccava tutte le nostre mail, in quanto il provider le rifiutava a causa del troppo traffico. Dopo una ricerca su Internet e la lettura di alcuni articoli della Knowledge Base di Microsoft (http://support.microsoft.com/kb/842851 e http://support.microsoft.com/?kbid=294757), abbiamo deciso di bloccare l'invio degli NDR, usando l'apposito pannello di Exchange (voce "Consenti rapporti di mancato recapito").Agendo in questo modo il problema è stato risolto, spero definitivamente.
Ricerca personalizzata