SlideShare a Scribd company logo
1 of 26
Applicazioni a tre voci
Di androidi, mele morsicate e more




      Fabrizio Marchesano
            Frame srl
Fabrizio Marchesano
• Domino Solutions Architect, Frame Srl - Genova
• Speaker agli eventi:
             ●
                  Dominopoint Day 1, 2 & 3
             ●
                  Dominopoint DDive 1 & 2
             ●
                  Lotusphere 09 & 10
             ●
                  UKLUG 09
• Co-autore del Redbooks® Wiki:
    Developing Plugins for Lotus Notes, Sametime, and Symphony
    ( http://www-10.lotus.com/ldd/ddwiki.nsf/dx/Table_of_Contents_Developing_Customized_Components_for_Lotus_Notes_Sametime_and_Symphony )




•

• http://www.frameweb.it/
Di cosa parleremo...
• … di quello di cui non parleremo
• … di quello di cui parleremo
• … dell'ambiente di sviluppo utilizzato per creare
  applicazioni mobile native che si interfacciano con Domino
• … di chi si ricorda del progetto B.A.C.H.
• … di come consultare database Domino dal vostro tablet o
  smartphone tramite applicazioni mobile native
• … di come eseguire agenti Domino in mobilità inviando
  parametri in ingresso e ottenendo un output
• … di come sfruttare le potenzialità dei Web Services
  Domino per realizzare applicazioni mobile avanzate
Di cosa non parleremo
• Progettazione e caratteristiche generali di un'applicazione mobile
  cross-platform:
       ●
           da 320x240 a 2048x1536
       ●
           16:9... no, 9:16... no, 3:2... no, 1.85:1
       ●
           Tap o Swipe?
       ●
           Security
• Android vs. iOS vs. BlackBerry
• Titanium vs. PhoneGap vs. Corona vs...
• Mobile Web App
• E sì, lo so: parlando di ciò di cui non parleremo ne stiamo in realtà
  parlando, ritrovandoci di fatto in una “slide di Möbius”
A.A.A. Domino in mobilità cercasi
• Applicazioni Domino mobile vs. applicazioni Domino mobilizzate
• «Signori, è arrivato il vecchio Bach»
• Utilizzare le funzioni native di Domino per consentire l'accesso
  rapido in consultazione a dati in mobilità
• Sfruttare le potenzialità di LotusScript inviando parametri e
  ottenendo un ritorno dati lasciando che sia Domino a occuparsi
  delle attività onerose e comunicando con basi dati non esposte a
  internet (anche riutilizzando codice già creato in precedenza)
• Implementare web services Domino per lo scambio dati complessi
  realizzando applicazioni mobile avanzate per lavorare anche in
  modalità off-line
Domino App Mobile....
• Creare oggi una nuova applicazione Domino significa con tutta
  probabilità sviluppare con le XPages
• Un'applicazione realizzata con questa tecnologia è di fatto già pronta per
  l'utilizzo mobile, senza limitazioni di OS, necessitando eventualmente di
  una ottimizzazione orientata alle necessità pratiche di smartphone e
  tablet (dimensioni schermo, connettività, ecc.)
...Vs. Domino App Mobilizzate
• Necessità specifiche legate a funzionalità proprie dei dispositivi mobile
  (e.g. accesso a rubrica contatti locale, geolocalizzazione, accesso ai dati
  in modalità off-line) potrebbero invece far propendere per lo sviluppo di
  applicazioni native che si interfacciano con Domino...




• ...soluzione che può risultare particolarmente indicata per rendere
  accessibili in mobilità applicazioni client consolidate da tempo (anche
  realizzate su versioni Notes meno recenti), sfruttando la possibilità di
  creare un framework centralizzato per la gestione rapida delle
  configurazioni mobile
• (e se eravate presenti al primo storico Dominopoint Day, tra quattro
  slide sperimenterete probabilmente una sensazione di déjà vu)
Scontro di Titani...um
• http://www.appcelerator.com/
• Parole chiave: Titanium Studio, Titanium Mobile SDK




• Programmazione Javascript

• Ricompilazione del codice in applicazioni native tramite gli SDK per
  Android, iOS, BlackBerry (il supporto per quest'ultimo è
  attualmente in beta)

• Perchè proprio Titanium? Ve lo dirò alla fine (ma niente a che
  vedere con Titanium vs. the rest of the world)
What's App?
  Cartella principale
(script, immagini, ecc.)



Script eseguito
   all'avvio




 Librerie di script




 Configurazione
Codice cross-platform?
       Sì, ma almeno un “if” vi tocca...
• In ambito business, l'opportunità di realizzare applicazioni mobile rivolte
  a un sottoinsieme noto di piattaforme non è così infrequente
• La possibilità di scrivere il codice una sola volta lasciando a Titanium
  l'onere di compilarlo per i diversi sistemi operativi è comunque
  benvenuta...
• … anche se oggetti, proprietà e metodi dedicati sono a disposizione dei
  programmatori per sfruttare al meglio le caratteristiche specifiche dei
  vari    dispositivi     (e.g.   Titanium.UI.Android,      Titanium.UI.iOS,
  Titanium.UI.iPad, Titanium.UI.iPhone)
• Curiosamente, sarà una peculiarità hardware a forzarvi all'utilizzo di
  un'istruzione “if” platform-specific:
                  if(Titanium.Platform.getOsname == "android") {
                      Titanium.App.addEventListener('android:back',
                  function(){
                          //do something
                      })
                  };
Il caro vecchio Johann Sebastian
• Ricordate il progetto B.A.C.H. - BlackBerry Application Central
  Highway?
• Le potenzialità legate all'utilizzo di un unico punto di accesso alla
  intranet Domino per i dispositivi in mobilità (e in grado di automatizzare
  la gestione dell'autenticazione e delle ACL) sono a tuttoggi considerevoli
  e valorizzabili sviluppando in Titanium
• Parole chiave: Lightweight Persistence, Properties API
 Ti.App.Properties.setString('myString','This is a string');

 Ti.App.Properties.setInt('myInt',10);                                                          secondo parametro
                                                                        metodo GET per           per metodo GET:
 Ti.App.Properties.setBool('myBool',true);                         per recupero informazioni     valore di default

 Ti.App.Properties.setDouble('myDouble',10.6);

 Ti.App.Properties.setList('myList',myArray);

                                             Ti.App.Properties.getString('myString','This is a string default');

                                             Ti.App.Properties.getInt('myInt',20);

    metodo SET per                           Ti.App.Properties.getBool('myBool',false);
 impostazione proprietà
                                             Ti.App.Properties.getDouble('myDouble',20.6);

                                             Ti.App.Properties.getList('myList');
Soggetto: accesso dati in lettura (1)
• Esigenza base: consultazione via HTTP da dispositivi mobili di dati
  residenti su applicazioni intranet
Soggetto: accesso dati in lettura (2)
• Rendere disponibili i dati da Domino in modalità strutturata: comando
  URL ReadViewEntries e relativi parametri
Soggetto: accesso dati in lettura (3)
 • Lettura dati: Titanium.Network.HTTPClient, getResponseXML e
   Titanium.XML.Document
var client = Ti.Network.createHTTPClient({

         // funzione richiamata quando sono disponibili dati di ritorno
         onload : function(e) {
          var xmlDoc=this.responseXML;
          // inserire il codice per il parsing
         },
         // funzione richiamata in caso di errore, incluso il timeout
onerror : function(e) {
          // inserire il codice per la gestione degli errori
         },
         timeout : 5000 // in millisecondi
 });

var url='http://<servername>/<dbpath>/<dbname>/<viewname>?ReadViewEntries&StartKey='+field.value;

// preparazione della connessione
client.open("GET", url);
// invio della richiesta
client.send();
Risposta: LotusScript Agents (1)
• Esigenza speciale: S.I.C.B.S.O (Simple In, Complex Between, Simple Out)




Parametro                                                           Parametro
    IN                                                                 OUT




              http://turbulence.org/spotlight/thinking/chess.html
Risposta: LotusScript Agents (2)
• Predisposizione agente LotusScript per chiamata via URL con passaggio
  parametri e ritorno valore: Query_String e Print
         Dim   Ss As New NotesSession
         Dim   wDoc As NotesDocument
         Dim   ret As String, retError As String
         Dim   strParamList As Variant
         Dim   strQueryString As String, param1 As String

         On Error GoTo retError 'gestione per errori non previsti

         Set wDoc=Ss.DocumentContext

         'lista dei parametri passati via url
         strQueryString=StrRight(wDoc.Query_String(0),"&")
         strParamList=Evaluate({@Explode("} & strQueryString & {"; "&")})

         'definisco i parametri passati via url
         param1=StrRight(strParamList(0),"=")

         'INSERIRE CODICE PERSONALIZZATO

         ret="Operazione eseguita con successo."
         ret:
         Print "Content-type: text/xml; charset=utf-8"
         Print ret
         Exit Sub
         retError:
         Resume errMsg

         errMsg:
         retError="ATTENZIONE!"+Chr(10)+"L'applicazione ha riscontrato un errore imprevisto."

         Print "Content-type: text/xml; charset=utf-8"
         Print retError
Risposta: LotusScript Agents (3)
• Esecuzione agente e lettura risposta: Titanium.Network.HTTPClient e
  getResponseText

  var client = Ti.Network.createHTTPClient({

           // funzione richiamata quando sono disponibili dati di ritorno
           onload : function(e) {
            var retAgent=this.responseText;
            // inserire il codice per la gestione del messaggio di ritorno
           },
           // funzione richiamata in caso di errore, incluso il timeout
           onerror : function(e) {
            // inserire il codice per la gestione degli errori
           },
           timeout : 5000 // in millisecondi
  });

  var url='http://<servername>/<dbpath>/<dbname>/<agentname>?OpenAgent&param1='+field.value;

  // preparazione della connessione
  client.open("GET", url);
  // invio della richiesta
  client.send();
Controsoggetto per aumentazione:
Domino Web Services e SQLite Database (1)
• Esigenza complessa: importazione-esportazione record
Controsoggetto per aumentazione:
Domino Web Services e SQLite Database (2)
• Predisposizione Domino per gestione dati strutturati: LotusScript/Java e
  WSDL
                            Class wsClass

                            Function wsFunction(param1 As String, param2 As String) As String

                            Dim Ss As New NotesSession
                            Dim Db As NotesDatabase

                            On Error GoTo retError

                            Set Db = Ss.CurrentDatabase

                            ' INSERIRE CODICE PERSONALIZZATO

                            ' IMPOSTARE VALORE DI RITORNO
                            wsFunction = "ok"
                            Exit Function

                            retError:
                            Resume errMsg

                            errMsg:
                            ' VALORE DI RITORNO IN CASO DI ERRORE
                            wsFunction="error"

                            End Function

                            End Class
Controsoggetto per aumentazione:
Domino Web Services e SQLite Database (3)
• Interazione da dispositivo: Titanium.Network.HTTPClient, SOAPAction e
  Ti.Database.open
  var url = 'http://<servername>/<dbpath>/<dbname>/<webservicename>?OpenWebService';
  var callparams = {
   parameter1 : field1.value,
   parameter2 : field2.value,
  };
  var wsclient = new customWSHTTPClient({ // funzione che restituisce un oggetto
     endpoint : url,                           // HTTPClient predisposto per protocollo SOAP
     targetNamespace : 'http://www.webserviceX.NET/'
  });
  try {
     wsclient.invoke('<FUNCTIONAME>', callparams, function(xmlDoc) {

     var results = xmlDoc.documentElement.getElementsByTagName('<TAGNAME>');
     if(results && results.length > 0) {
       var result = results.item(0).firstChild.nodeValue;

       var db = Ti.Database.open('dbname');
       db.execute('INSERT INTO tablename (columnname) VALUES (?)', result);
       db.close();
     } else {
       alert('Errore risultato');
     }
    });
  } catch(e) {
    alert('Errore connessione');
  }
Applicazione a tre voci (demo)
Dal frontespizio dell'autografo delle
  “Invenzioni e Sinfonie” di J. S. Bach
• «Metodo efficace con cui si presenta in forma chiara agli
  appassionati degli strumenti a tastiera e soprattutto a coloro che
  sono desiderosi di apprendere, non soltanto (1) come si suona
  correttamente a due voci, ma anche (2) come si può arrivare, man
  mano che l'allievo progredisce, a far buon uso di tre voci obbligate
  e ottenere così non soltanto delle buone invenzioni, ma poterle
  pure bene eseguire e soprattutto acquistare l'arte del cantabile e il
  gusto della composizione»
    (Joh. Seb. Bach, Maestro di Cappella di Sua Altezza il Principe di
     Anhalt-Köthen, Anno Christi 1723)
PERCHÈ PROPRIO TITANIUM (1)
    Uno studio in Titanium




http://www.theindieshelter.com/2012/indieanapolis-2012-fabriziomarchesano/
PERCHÈ PROPRIO TITANIUM (2)
Halloween Stories for Music Lovers




https://play.google.com/store/apps/details?id=com.mozartfma.firstnameday
Questions?



Contatti: fabrizio.marchesano@frameweb.it
Grazie agli sponsor per aver reso possibile i
         Dominopoint Days 2012!
                  Main Sponsor


                   Vad sponsor

                 Platinum sponsor




                  Gold sponsor

More Related Content

Viewers also liked

Baralho da Gata Lili
Baralho da Gata LiliBaralho da Gata Lili
Baralho da Gata LiliGata Lili
 
Presentatie Stage en Eindwerk
Presentatie Stage en EindwerkPresentatie Stage en Eindwerk
Presentatie Stage en EindwerkNico De Muynck
 
Fallo de la justicia de Mar del Plata (fragmento)
Fallo de la justicia de Mar del Plata (fragmento)Fallo de la justicia de Mar del Plata (fragmento)
Fallo de la justicia de Mar del Plata (fragmento)Foro Blog
 
Meta scribe
Meta scribeMeta scribe
Meta scribedeco1960
 

Viewers also liked (20)

Sametime 8.x configurarlo ed installarlo
Sametime 8.x configurarlo ed installarloSametime 8.x configurarlo ed installarlo
Sametime 8.x configurarlo ed installarlo
 
Lotus Notes Traveler...cosa è come installarlo e le novità future
Lotus Notes Traveler...cosa è come installarlo e le novità futureLotus Notes Traveler...cosa è come installarlo e le novità future
Lotus Notes Traveler...cosa è come installarlo e le novità future
 
DDive - 8.5.2 Xpages - L'evoluzione continua
DDive - 8.5.2 Xpages - L'evoluzione continuaDDive - 8.5.2 Xpages - L'evoluzione continua
DDive - 8.5.2 Xpages - L'evoluzione continua
 
Sviluppare applicazioni Domino Web per dispositivi Mobili
Sviluppare applicazioni Domino Web per dispositivi MobiliSviluppare applicazioni Domino Web per dispositivi Mobili
Sviluppare applicazioni Domino Web per dispositivi Mobili
 
Tivoli Storage Manager - backup and restore for Domino, #dd13
Tivoli Storage Manager - backup and restore for Domino, #dd13Tivoli Storage Manager - backup and restore for Domino, #dd13
Tivoli Storage Manager - backup and restore for Domino, #dd13
 
Composite Application
Composite ApplicationComposite Application
Composite Application
 
Sametime 7.5.X
Sametime 7.5.XSametime 7.5.X
Sametime 7.5.X
 
Ajax - Presente e futuro delle applicazioni web
Ajax - Presente e futuro delle applicazioni webAjax - Presente e futuro delle applicazioni web
Ajax - Presente e futuro delle applicazioni web
 
Dp3 Fabio Pignatti - Superena Lotus
Dp3  Fabio Pignatti - Superena LotusDp3  Fabio Pignatti - Superena Lotus
Dp3 Fabio Pignatti - Superena Lotus
 
#dd12 panagenda the value of transparency - it
#dd12 panagenda   the value of transparency - it#dd12 panagenda   the value of transparency - it
#dd12 panagenda the value of transparency - it
 
Mayo2010
Mayo2010Mayo2010
Mayo2010
 
Baralho da Gata Lili
Baralho da Gata LiliBaralho da Gata Lili
Baralho da Gata Lili
 
Presentatie Stage en Eindwerk
Presentatie Stage en EindwerkPresentatie Stage en Eindwerk
Presentatie Stage en Eindwerk
 
Fallo de la justicia de Mar del Plata (fragmento)
Fallo de la justicia de Mar del Plata (fragmento)Fallo de la justicia de Mar del Plata (fragmento)
Fallo de la justicia de Mar del Plata (fragmento)
 
Byron ruiz tema
Byron ruiz  temaByron ruiz  tema
Byron ruiz tema
 
Cumple jose
Cumple joseCumple jose
Cumple jose
 
www.energypluslight.com
www.energypluslight.comwww.energypluslight.com
www.energypluslight.com
 
Meta scribe
Meta scribeMeta scribe
Meta scribe
 
Vuelta de campana
Vuelta de campana Vuelta de campana
Vuelta de campana
 
Bebesen taiwan
Bebesen taiwanBebesen taiwan
Bebesen taiwan
 

Similar to #dd12 Applicazioni a tre voci (Android e Domino)

SkyMedia: La tecnologia al servizio dell'intrattenimento
SkyMedia: La tecnologia al servizio dell'intrattenimentoSkyMedia: La tecnologia al servizio dell'intrattenimento
SkyMedia: La tecnologia al servizio dell'intrattenimentoMavigex srl
 
Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini Whymca
 
SVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROIDSVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROIDLuca Masini
 
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Wellnet srl
 
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Eugenio Minardi
 
.Net 4.0 Preview @ UGIdotNet
.Net 4.0 Preview @ UGIdotNet.Net 4.0 Preview @ UGIdotNet
.Net 4.0 Preview @ UGIdotNetMauro Servienti
 
Programmazione web libera dai framework
Programmazione web libera dai frameworkProgrammazione web libera dai framework
Programmazione web libera dai frameworkFrancesca1980
 
Introduzione a Node.js
Introduzione a Node.jsIntroduzione a Node.js
Introduzione a Node.jsMichele Capra
 
Drupal Day 2012 - Applicazioni mobile multipiattaforma integrate con Drupal 7...
Drupal Day 2012 - Applicazioni mobile multipiattaforma integrate con Drupal 7...Drupal Day 2012 - Applicazioni mobile multipiattaforma integrate con Drupal 7...
Drupal Day 2012 - Applicazioni mobile multipiattaforma integrate con Drupal 7...DrupalDay
 
MongoDB User Group Padova - Overviews iniziale su MongoDB
MongoDB User Group Padova - Overviews iniziale su MongoDBMongoDB User Group Padova - Overviews iniziale su MongoDB
MongoDB User Group Padova - Overviews iniziale su MongoDBStefano Dindo
 
Custom vision on edge device
Custom vision on edge deviceCustom vision on edge device
Custom vision on edge deviceAlessio Biasiutti
 
IoT Saturday 2019 - Custom Vision on Edge device
IoT Saturday 2019 - Custom Vision on Edge deviceIoT Saturday 2019 - Custom Vision on Edge device
IoT Saturday 2019 - Custom Vision on Edge deviceAlessio Biasiutti
 

Similar to #dd12 Applicazioni a tre voci (Android e Domino) (20)

SkyMedia: La tecnologia al servizio dell'intrattenimento
SkyMedia: La tecnologia al servizio dell'intrattenimentoSkyMedia: La tecnologia al servizio dell'intrattenimento
SkyMedia: La tecnologia al servizio dell'intrattenimento
 
Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini
 
SVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROIDSVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROID
 
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
 
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
 
.Net 4.0 Preview @ UGIdotNet
.Net 4.0 Preview @ UGIdotNet.Net 4.0 Preview @ UGIdotNet
.Net 4.0 Preview @ UGIdotNet
 
XPages Tips & Tricks, #dd13
XPages Tips & Tricks, #dd13XPages Tips & Tricks, #dd13
XPages Tips & Tricks, #dd13
 
Programmazione web libera dai framework
Programmazione web libera dai frameworkProgrammazione web libera dai framework
Programmazione web libera dai framework
 
Novità di Asp.Net 4.0
Novità di Asp.Net 4.0Novità di Asp.Net 4.0
Novità di Asp.Net 4.0
 
Introduzione a node.js
Introduzione a node.jsIntroduzione a node.js
Introduzione a node.js
 
Introduzione a Node.js
Introduzione a Node.jsIntroduzione a Node.js
Introduzione a Node.js
 
Drupal Day 2012 - Applicazioni mobile multipiattaforma integrate con Drupal 7...
Drupal Day 2012 - Applicazioni mobile multipiattaforma integrate con Drupal 7...Drupal Day 2012 - Applicazioni mobile multipiattaforma integrate con Drupal 7...
Drupal Day 2012 - Applicazioni mobile multipiattaforma integrate con Drupal 7...
 
Hexagonal architecture ita
Hexagonal architecture itaHexagonal architecture ita
Hexagonal architecture ita
 
Dojo nuovo look alle vostre applicazioni web Domino
Dojo nuovo look alle vostre applicazioni web DominoDojo nuovo look alle vostre applicazioni web Domino
Dojo nuovo look alle vostre applicazioni web Domino
 
Java lezione 14
Java lezione 14Java lezione 14
Java lezione 14
 
Azure functions
Azure functionsAzure functions
Azure functions
 
MongoDB User Group Padova - Overviews iniziale su MongoDB
MongoDB User Group Padova - Overviews iniziale su MongoDBMongoDB User Group Padova - Overviews iniziale su MongoDB
MongoDB User Group Padova - Overviews iniziale su MongoDB
 
Custom vision on edge device
Custom vision on edge deviceCustom vision on edge device
Custom vision on edge device
 
IoT Saturday 2019 - Custom Vision on Edge device
IoT Saturday 2019 - Custom Vision on Edge deviceIoT Saturday 2019 - Custom Vision on Edge device
IoT Saturday 2019 - Custom Vision on Edge device
 
OrientDB & Big Data
OrientDB & Big DataOrientDB & Big Data
OrientDB & Big Data
 

More from Dominopoint - Italian Lotus User Group

IBM Connections How to use existing data to increase adoption success with IB...
IBM Connections How to use existing data to increase adoption success with IB...IBM Connections How to use existing data to increase adoption success with IB...
IBM Connections How to use existing data to increase adoption success with IB...Dominopoint - Italian Lotus User Group
 

More from Dominopoint - Italian Lotus User Group (20)

TOTP - Time-Based One Time password in Domino
TOTP - Time-Based One Time password in DominoTOTP - Time-Based One Time password in Domino
TOTP - Time-Based One Time password in Domino
 
Domino Backup V12 - Un nuovo Task
Domino Backup V12 - Un nuovo TaskDomino Backup V12 - Un nuovo Task
Domino Backup V12 - Un nuovo Task
 
Mail Client from Traveler to Verse On-Premises
Mail Client from Traveler to Verse On-PremisesMail Client from Traveler to Verse On-Premises
Mail Client from Traveler to Verse On-Premises
 
IBM Worspace: Towards a culture of conversations
IBM Worspace: Towards a culture of conversationsIBM Worspace: Towards a culture of conversations
IBM Worspace: Towards a culture of conversations
 
Microsoft Outlook for Domino (IMSMO)
Microsoft Outlook for Domino (IMSMO)Microsoft Outlook for Domino (IMSMO)
Microsoft Outlook for Domino (IMSMO)
 
Riding the Enterprise Integration train
Riding the Enterprise Integration trainRiding the Enterprise Integration train
Riding the Enterprise Integration train
 
Ortocloud l'applicazione per fare orto su Bluemix
Ortocloud l'applicazione per fare orto su BluemixOrtocloud l'applicazione per fare orto su Bluemix
Ortocloud l'applicazione per fare orto su Bluemix
 
Meetit16 KeyNote di Apertura
Meetit16 KeyNote di AperturaMeetit16 KeyNote di Apertura
Meetit16 KeyNote di Apertura
 
IBM Domino Modernizing apps with Angularjs
IBM Domino Modernizing apps with AngularjsIBM Domino Modernizing apps with Angularjs
IBM Domino Modernizing apps with Angularjs
 
IBM Connections How to use existing data to increase adoption success with IB...
IBM Connections How to use existing data to increase adoption success with IB...IBM Connections How to use existing data to increase adoption success with IB...
IBM Connections How to use existing data to increase adoption success with IB...
 
Cloudant e XPages
Cloudant e XPagesCloudant e XPages
Cloudant e XPages
 
IBM Bluemix
IBM BluemixIBM Bluemix
IBM Bluemix
 
IBM Connections 10 things every user should know
IBM Connections 10 things every user should knowIBM Connections 10 things every user should know
IBM Connections 10 things every user should know
 
IBM Verse New Way To Work
IBM Verse New Way To WorkIBM Verse New Way To Work
IBM Verse New Way To Work
 
Crossware MailSignature
Crossware MailSignatureCrossware MailSignature
Crossware MailSignature
 
Cooperteam soluzioni
Cooperteam soluzioniCooperteam soluzioni
Cooperteam soluzioni
 
Notes and Domino Roadmap
Notes and Domino RoadmapNotes and Domino Roadmap
Notes and Domino Roadmap
 
La Collaborazione Europea
La Collaborazione EuropeaLa Collaborazione Europea
La Collaborazione Europea
 
the future of work
the future of workthe future of work
the future of work
 
Dominopoint meet the experts 2015 - XPages
Dominopoint   meet the experts 2015 - XPagesDominopoint   meet the experts 2015 - XPages
Dominopoint meet the experts 2015 - XPages
 

#dd12 Applicazioni a tre voci (Android e Domino)

  • 1. Applicazioni a tre voci Di androidi, mele morsicate e more Fabrizio Marchesano Frame srl
  • 2. Fabrizio Marchesano • Domino Solutions Architect, Frame Srl - Genova • Speaker agli eventi: ● Dominopoint Day 1, 2 & 3 ● Dominopoint DDive 1 & 2 ● Lotusphere 09 & 10 ● UKLUG 09 • Co-autore del Redbooks® Wiki: Developing Plugins for Lotus Notes, Sametime, and Symphony ( http://www-10.lotus.com/ldd/ddwiki.nsf/dx/Table_of_Contents_Developing_Customized_Components_for_Lotus_Notes_Sametime_and_Symphony ) • • http://www.frameweb.it/
  • 3. Di cosa parleremo... • … di quello di cui non parleremo • … di quello di cui parleremo • … dell'ambiente di sviluppo utilizzato per creare applicazioni mobile native che si interfacciano con Domino • … di chi si ricorda del progetto B.A.C.H. • … di come consultare database Domino dal vostro tablet o smartphone tramite applicazioni mobile native • … di come eseguire agenti Domino in mobilità inviando parametri in ingresso e ottenendo un output • … di come sfruttare le potenzialità dei Web Services Domino per realizzare applicazioni mobile avanzate
  • 4. Di cosa non parleremo • Progettazione e caratteristiche generali di un'applicazione mobile cross-platform: ● da 320x240 a 2048x1536 ● 16:9... no, 9:16... no, 3:2... no, 1.85:1 ● Tap o Swipe? ● Security • Android vs. iOS vs. BlackBerry • Titanium vs. PhoneGap vs. Corona vs... • Mobile Web App • E sì, lo so: parlando di ciò di cui non parleremo ne stiamo in realtà parlando, ritrovandoci di fatto in una “slide di Möbius”
  • 5. A.A.A. Domino in mobilità cercasi • Applicazioni Domino mobile vs. applicazioni Domino mobilizzate • «Signori, è arrivato il vecchio Bach» • Utilizzare le funzioni native di Domino per consentire l'accesso rapido in consultazione a dati in mobilità • Sfruttare le potenzialità di LotusScript inviando parametri e ottenendo un ritorno dati lasciando che sia Domino a occuparsi delle attività onerose e comunicando con basi dati non esposte a internet (anche riutilizzando codice già creato in precedenza) • Implementare web services Domino per lo scambio dati complessi realizzando applicazioni mobile avanzate per lavorare anche in modalità off-line
  • 6. Domino App Mobile.... • Creare oggi una nuova applicazione Domino significa con tutta probabilità sviluppare con le XPages • Un'applicazione realizzata con questa tecnologia è di fatto già pronta per l'utilizzo mobile, senza limitazioni di OS, necessitando eventualmente di una ottimizzazione orientata alle necessità pratiche di smartphone e tablet (dimensioni schermo, connettività, ecc.)
  • 7. ...Vs. Domino App Mobilizzate • Necessità specifiche legate a funzionalità proprie dei dispositivi mobile (e.g. accesso a rubrica contatti locale, geolocalizzazione, accesso ai dati in modalità off-line) potrebbero invece far propendere per lo sviluppo di applicazioni native che si interfacciano con Domino... • ...soluzione che può risultare particolarmente indicata per rendere accessibili in mobilità applicazioni client consolidate da tempo (anche realizzate su versioni Notes meno recenti), sfruttando la possibilità di creare un framework centralizzato per la gestione rapida delle configurazioni mobile • (e se eravate presenti al primo storico Dominopoint Day, tra quattro slide sperimenterete probabilmente una sensazione di déjà vu)
  • 8. Scontro di Titani...um • http://www.appcelerator.com/ • Parole chiave: Titanium Studio, Titanium Mobile SDK • Programmazione Javascript • Ricompilazione del codice in applicazioni native tramite gli SDK per Android, iOS, BlackBerry (il supporto per quest'ultimo è attualmente in beta) • Perchè proprio Titanium? Ve lo dirò alla fine (ma niente a che vedere con Titanium vs. the rest of the world)
  • 9. What's App? Cartella principale (script, immagini, ecc.) Script eseguito all'avvio Librerie di script Configurazione
  • 10. Codice cross-platform? Sì, ma almeno un “if” vi tocca... • In ambito business, l'opportunità di realizzare applicazioni mobile rivolte a un sottoinsieme noto di piattaforme non è così infrequente • La possibilità di scrivere il codice una sola volta lasciando a Titanium l'onere di compilarlo per i diversi sistemi operativi è comunque benvenuta... • … anche se oggetti, proprietà e metodi dedicati sono a disposizione dei programmatori per sfruttare al meglio le caratteristiche specifiche dei vari dispositivi (e.g. Titanium.UI.Android, Titanium.UI.iOS, Titanium.UI.iPad, Titanium.UI.iPhone) • Curiosamente, sarà una peculiarità hardware a forzarvi all'utilizzo di un'istruzione “if” platform-specific: if(Titanium.Platform.getOsname == "android") { Titanium.App.addEventListener('android:back', function(){ //do something }) };
  • 11. Il caro vecchio Johann Sebastian • Ricordate il progetto B.A.C.H. - BlackBerry Application Central Highway? • Le potenzialità legate all'utilizzo di un unico punto di accesso alla intranet Domino per i dispositivi in mobilità (e in grado di automatizzare la gestione dell'autenticazione e delle ACL) sono a tuttoggi considerevoli e valorizzabili sviluppando in Titanium • Parole chiave: Lightweight Persistence, Properties API Ti.App.Properties.setString('myString','This is a string'); Ti.App.Properties.setInt('myInt',10); secondo parametro metodo GET per per metodo GET: Ti.App.Properties.setBool('myBool',true); per recupero informazioni valore di default Ti.App.Properties.setDouble('myDouble',10.6); Ti.App.Properties.setList('myList',myArray); Ti.App.Properties.getString('myString','This is a string default'); Ti.App.Properties.getInt('myInt',20); metodo SET per Ti.App.Properties.getBool('myBool',false); impostazione proprietà Ti.App.Properties.getDouble('myDouble',20.6); Ti.App.Properties.getList('myList');
  • 12. Soggetto: accesso dati in lettura (1) • Esigenza base: consultazione via HTTP da dispositivi mobili di dati residenti su applicazioni intranet
  • 13. Soggetto: accesso dati in lettura (2) • Rendere disponibili i dati da Domino in modalità strutturata: comando URL ReadViewEntries e relativi parametri
  • 14. Soggetto: accesso dati in lettura (3) • Lettura dati: Titanium.Network.HTTPClient, getResponseXML e Titanium.XML.Document var client = Ti.Network.createHTTPClient({ // funzione richiamata quando sono disponibili dati di ritorno onload : function(e) { var xmlDoc=this.responseXML; // inserire il codice per il parsing }, // funzione richiamata in caso di errore, incluso il timeout onerror : function(e) { // inserire il codice per la gestione degli errori }, timeout : 5000 // in millisecondi }); var url='http://<servername>/<dbpath>/<dbname>/<viewname>?ReadViewEntries&StartKey='+field.value; // preparazione della connessione client.open("GET", url); // invio della richiesta client.send();
  • 15. Risposta: LotusScript Agents (1) • Esigenza speciale: S.I.C.B.S.O (Simple In, Complex Between, Simple Out) Parametro Parametro IN OUT http://turbulence.org/spotlight/thinking/chess.html
  • 16. Risposta: LotusScript Agents (2) • Predisposizione agente LotusScript per chiamata via URL con passaggio parametri e ritorno valore: Query_String e Print Dim Ss As New NotesSession Dim wDoc As NotesDocument Dim ret As String, retError As String Dim strParamList As Variant Dim strQueryString As String, param1 As String On Error GoTo retError 'gestione per errori non previsti Set wDoc=Ss.DocumentContext 'lista dei parametri passati via url strQueryString=StrRight(wDoc.Query_String(0),"&") strParamList=Evaluate({@Explode("} & strQueryString & {"; "&")}) 'definisco i parametri passati via url param1=StrRight(strParamList(0),"=") 'INSERIRE CODICE PERSONALIZZATO ret="Operazione eseguita con successo." ret: Print "Content-type: text/xml; charset=utf-8" Print ret Exit Sub retError: Resume errMsg errMsg: retError="ATTENZIONE!"+Chr(10)+"L'applicazione ha riscontrato un errore imprevisto." Print "Content-type: text/xml; charset=utf-8" Print retError
  • 17. Risposta: LotusScript Agents (3) • Esecuzione agente e lettura risposta: Titanium.Network.HTTPClient e getResponseText var client = Ti.Network.createHTTPClient({ // funzione richiamata quando sono disponibili dati di ritorno onload : function(e) { var retAgent=this.responseText; // inserire il codice per la gestione del messaggio di ritorno }, // funzione richiamata in caso di errore, incluso il timeout onerror : function(e) { // inserire il codice per la gestione degli errori }, timeout : 5000 // in millisecondi }); var url='http://<servername>/<dbpath>/<dbname>/<agentname>?OpenAgent&param1='+field.value; // preparazione della connessione client.open("GET", url); // invio della richiesta client.send();
  • 18. Controsoggetto per aumentazione: Domino Web Services e SQLite Database (1) • Esigenza complessa: importazione-esportazione record
  • 19. Controsoggetto per aumentazione: Domino Web Services e SQLite Database (2) • Predisposizione Domino per gestione dati strutturati: LotusScript/Java e WSDL Class wsClass Function wsFunction(param1 As String, param2 As String) As String Dim Ss As New NotesSession Dim Db As NotesDatabase On Error GoTo retError Set Db = Ss.CurrentDatabase ' INSERIRE CODICE PERSONALIZZATO ' IMPOSTARE VALORE DI RITORNO wsFunction = "ok" Exit Function retError: Resume errMsg errMsg: ' VALORE DI RITORNO IN CASO DI ERRORE wsFunction="error" End Function End Class
  • 20. Controsoggetto per aumentazione: Domino Web Services e SQLite Database (3) • Interazione da dispositivo: Titanium.Network.HTTPClient, SOAPAction e Ti.Database.open var url = 'http://<servername>/<dbpath>/<dbname>/<webservicename>?OpenWebService'; var callparams = { parameter1 : field1.value, parameter2 : field2.value, }; var wsclient = new customWSHTTPClient({ // funzione che restituisce un oggetto endpoint : url, // HTTPClient predisposto per protocollo SOAP targetNamespace : 'http://www.webserviceX.NET/' }); try { wsclient.invoke('<FUNCTIONAME>', callparams, function(xmlDoc) { var results = xmlDoc.documentElement.getElementsByTagName('<TAGNAME>'); if(results && results.length > 0) { var result = results.item(0).firstChild.nodeValue; var db = Ti.Database.open('dbname'); db.execute('INSERT INTO tablename (columnname) VALUES (?)', result); db.close(); } else { alert('Errore risultato'); } }); } catch(e) { alert('Errore connessione'); }
  • 21. Applicazione a tre voci (demo)
  • 22. Dal frontespizio dell'autografo delle “Invenzioni e Sinfonie” di J. S. Bach • «Metodo efficace con cui si presenta in forma chiara agli appassionati degli strumenti a tastiera e soprattutto a coloro che sono desiderosi di apprendere, non soltanto (1) come si suona correttamente a due voci, ma anche (2) come si può arrivare, man mano che l'allievo progredisce, a far buon uso di tre voci obbligate e ottenere così non soltanto delle buone invenzioni, ma poterle pure bene eseguire e soprattutto acquistare l'arte del cantabile e il gusto della composizione» (Joh. Seb. Bach, Maestro di Cappella di Sua Altezza il Principe di Anhalt-Köthen, Anno Christi 1723)
  • 23. PERCHÈ PROPRIO TITANIUM (1) Uno studio in Titanium http://www.theindieshelter.com/2012/indieanapolis-2012-fabriziomarchesano/
  • 24. PERCHÈ PROPRIO TITANIUM (2) Halloween Stories for Music Lovers https://play.google.com/store/apps/details?id=com.mozartfma.firstnameday
  • 26. Grazie agli sponsor per aver reso possibile i Dominopoint Days 2012! Main Sponsor Vad sponsor Platinum sponsor Gold sponsor