Archive for Multiplatform

Uniface plugin?

Ho pubblicato sul sito di uniface.info il post che segue in questa pagina.
Qualcuno vuol dire la sua qui in italiano?

========== ========== ========== ========== ========== ==========
Hi Unifacers,

In the current IT world driven from integrations could it be of interest to the Uniface world to have a standardized mode to develop and deploy plugins to Uniface apps? IMHO…YES!

I do not remember this specific subject being discussed, but it could be I was not part of the discussion or I have simply forgotten about it!

Pro…? Cons…? Pitfalls…? Tips…? Suggestions…?

Let’s argue about it!
========== ========== ========== ========== ========== ==========

UNIFACE plugins

Definition: a uniface plugin could be a full application (launcher, monitor, configurator, …) or a part of an application (module, library, …) that can be used together or integrated within a Uniface application. Each plugin is dedicated to a single business or technical object. Base for each plugin should be a microservice architecture, extended with a re-susable presentation layer.  The word “plugin” is used to identify a software that can easily be re-used in any Uniface installation and configuration.

Perimeter (DRAFT) for a “whatever” plugin:
SelfContainedUARname: UP_XXXX_whatever_VVV where:
– XXXX is a unique identifier of plugin provider
– whatever is the concept implemented in the plugin
– VVV is the plugin version
each plugin provider is responsible to maintain plugin info updated
Mission: [short description (max 250 char) defining the plugin interface perimeter]
PluginVersion: x.y[.z]
UnifaceVersionsSupported: Ux.Uy[, Ux1.Uy1][, Ux2.Uy2]
ComponentsNames: XXXX_*
GlobalObjects: Each plugin component is connected to its library named XXXX_*
Objects being part of SYSTEM_LIBRARY should have their names starting with XXXX_*
$variation and $language MUST be saved and restored from ALL plugin interactions
Objects being part of USYS variation should have their names starting with XXXX_*
Security: None | ???TBD???
DBMS: None | XXXX_APPMODEL
UserInterface: None | Char | C/S | Web
LanguagesSupported: “USA” MUST be supported! Further list of international codes from ISO-639-3
ServicesPerimeter: None | Uniface | LAN | Internet
PrintingPerimeter: None | Uniface | OtherToBeSpecified
DataExchangePerimeter: InLine | LocalFolder | MailBox | OtherToBeSpecified
OperationsList: simpleListOfOperationsAvailableWithoutParams but a short description
PresentationComponents: simpleListOfPresentationComponents with attribute: Contained | Indipendent and a short description
OtherPluginPreRequisites: None | ListOfOtherPlugin(s)ThatMUSTbeAvailable
PluginOptionals: None | ListOfOtherOptionalPlugins
OtherTechPreRequisites: None | ListOfOtherTechPreRequisites
DeliveryMode: OpenSources | UARonly | withSourcesIfRequested
TechDocumentation: None | Samples | Included
Contact: eMailAddress

Let’s try with an example
(thanks to Theo Neskeens providing initial GoogleMap Integration sample):
SelfContainedUARname: UP_GSAN_GMAP_100
Mission: Interface to Google Map, Services and Presentations
Version: 1.0.0
UnifaceVersion: 9.7
ComponentsNames: GSAN_*
GlobalObjects: None
Security: None
DBMS: None
UserInterface: C/S
LanguagesSupported: ITA
ServicesPerimeter: Internet
PrintingPerimeter: Uniface, GSAN_UPDF plugin
DataExchangePerimeter: InLine
OperationsList:
GSAN_GMAP_SVC.getDistance() get distance in km between two GeoPoints|Addresses|POIs in an UIL
GSAN_GMAP_SVC.getPathFromTo() get traveling steps between two GeoPoints|Addresses|POIs in an UIL
GSAN_GMAP_SVC.getStaticMap() get static map related to a GeoPoint|Address|POI in an UIL
PresentationComponents:
GSAN_GMAP_MAP Contained form showing either static or dynamic maps
OtherPluginPreRequisites: None
– <strong>PluginOptionals: GSAN_UPDF: to interactively print map to PDF
– OtherTechPreRequisites: Google Developer Account must be setup
DeliveryMode: UARonly
TechDocumentation: Samples
Contact: name.surname@domain.ext

Simpler HowTo:
– Add reference to UP_GSAN_GMAP_100 UAR file to the [RESOURCES] section of your ASN file
– Use in your application activate “GSAN_GMAP_SVC”.getDistance() with documented parameters to get distance between two addresses.
========== ========== ========== ========== ========== ==========

Migliorare le applicazioni Uniface esistenti

Negli ultimi due mesi sono stato spesso coinvolto in attività di consulenza mirate a migliorare applicazioni Uniface esistenti.
Ci sono a tutt’oggi in produzione, sia a livello internazionale che in Italia, applicazioni Uniface 5, Uniface 6, Uniface 7, Uniface 8 e, ovviamente, Uniface 9.
L’ambiente di sviluppo si è ampiamente evoluto nei suoi 30+ anni di presenza sul mercato ed ancora oggi continua ad evolvere piuttosto rapidamente: la nuova versione Uniface 10 ne è l’immediata controprova.
Le nuove funzionalità, rese disponibili nel corso degli anni, vanno integrate nelle modalità di sviluppo originarie facendo attenzione a mantenere l’integrità funzionale dell’applicazione originale.

Nella prima fase di queste attività si esplorano gli “Standard & Guidelines” adottati nello sviluppo dell’applicazione, che nella terminologia corrente vengono denominati “Framework di sviluppo”.
Analizzando il modo con cui l’applicazione è stata sviluppata si possono tracciare le linee di potenziale miglioramento, che ricadono in 6 possibili passi:

  1. Da “Stacked forms” char a “Stacked forms” GUI
    2. Da “Stacked forms” GUI a “NonModal forms” GUI
    3. Su “NonModal forms” GUI inclusione di una API applicativa
    4. Da “NonModal forms” GUI a “Web 2.0 pages”
    5. Da “Web 2.0 pages” a “Mobile pages”
    6. Da “Mobile pages” a “Fully partitionable application”

Lo sforzo necessario per ammodernare un applicazione è ovviamente funzione del punto di partenza e del punto di arrivo selezionato. Conviene definire tre obbiettivi: uno a breve, uno a medio ed uno a lungo termine; in questo modo risulta in genere possibile miscelare la quotidiana attività di manutenzione evolutiva dell’applicazione con gli obbiettivi di miglioramento aziendali rilasciando progressivamente le novità sviluppate sul proprio mercato di riferimento.

Chi volesse approfondire l’argomento mi contatti: gianni.sandiglianoATunifacesolutions.com

Da “Standard & Guidelines” a “Framework”

L’argomento che si dibatte più frequentemente in questi ultimi anni durante le attività su Uniface è quello che definisce il titolo di questo articolo: stabilire i metodi / criteri di sviluppo per riscrivere od estendere le proprie applicazioni al mondo Web/Mobile.

Più che un articolo che fornisce una soluzione ideale vuole essere l’inizio di una riflessione su quale sia il metodo scelto, ed eventualmente applicato, per:
– migrare una applicazione client/server esistente a 3 livelli
– sviluppare estensioni a 3 livelli per una applicazione client/server esistente

Nell’ambito della classica architettura applicativa a 3 livelli DATI -> SERVIZI -> (API) -> PRESENTAZIONE risulta in particolare sempre un poco ostica la decisione di quale/i componente/i di programmazione della presentazione lato browser (MV*) includere nel proprio framework per via della molteplicità di proposte e di scelte offerte dal mercato. Potete dare un’occhiata al sito http://todomvc.com per comprendere cosa si intenda per “molteplicità”.

Le proposte disponibili sul mercato vanno sostanzialmente suddivise in due gruppi:
– Framework server-side
– Framework client-side
e la decisione sulla strada da seguire per perseguire gli obbiettivi che l’applicazione si propone di affrontare e risolvere non sempre risulta immediata. In molti casi un ragionevole equilibrio tra le funzionalità svolte dal server e quelle attuate dal client è necessario ma non sempre è immediata la linea di demarcazione tra i due fronti in quanto molto (se non tutto!) dipende dalle funzionalità che si devono sviluppare. L’ideale sarebbe sviluppare applicazioni utilizzando un framework che sia in grado di lavorare su entrambi i fronti (Vedere http://isomorphic.net).

La difficoltà legata alla molteplicità di scelte tecnologiche disponibili va in genere a braccetto con l’esigenza di mantenere il miglior grado di indipendenza dai browser disponibili sulle varie piattaforme, utilizzate dagli utenti; alcune di queste accoppiate browser/piattaforma fanno parte del mondo mobile, per cui si portano appresso esigenze specifiche a livello di presentazione e richiedono di conseguenza un approccio, perlomeno in parte, dedicato. Quando questo approccio dedicato diventa prioritario nel panorama complessivo si parla di “Mobile First Framework”.

Le scelte che ho riscontrato essere maggiormente utilizzate ad oggi sono:
– Bootstrap + jQuery
– AngularJS
– ReactJS
– Custom / Personalizzato (della serie “uso quello che mi serve quando mi serve!”)

Ringrazio anticipatamente chi volesse aggiungere un contributo o una riflessione.

Sviluppo applicazioni Web – Mobile

Con il rilascio della versione 9.7.02 si è aperta la possibilità di sviluppare e rilasciare applicazioni mobile con Uniface.

Lo sviluppo con Uniface di applicazioni mobile presuppone conoscenza nello sviluppo di applicazioni Web con integrazione delle tecnologie che stanno alla base del web 2.0 (HTML5 / CSS3 / Javascript) nel contesto delle DSP (Dynamic Server Pages), la cosiddetta “programmazione lato browser”.

Al fine di permettere agli sviluppatori Uniface Desktop (Client/server) di approcciare lo sviluppo web/mobile DA ZERO gli ULab hanno rilasciato sul canale YouTube dedicato a Uniface una serie di filmati che sono raccolti in un articolo introduttivo disponibile su uniface.info alla pagina:

http://unifaceinfo.com/html5-javascript-css3-training-videos-uniface-developers-uniface-info/

I brevi filmati chiariscono alcuni punti fermi dello sviluppo Web/Mobile, dando un compito specifico ad ognuna delle tecnologie di base coinvolte nella programmazione lato browser:

  1. HTML5: gives a meaning to data.
  2. CSS3: styles elements presented on screen, paper, or other media.
  3. Javascript: a scripting language to enable interactive sites.

Nell’ambito dei filmati viene fatto riferimento ad un paio di siti di supporto:
1) http://caniuse.com che costituisce uno dei principali riferimenti per conoscere il livello di supporto, e di conseguenza la portabilità, di una specifica funzionalità della programmazione lato browser.
2) http://css3generator.com che permette un approccio semplificato a quelle direttive CSS3 che dovessero essere differenziate e/o moltiplicate nella loro sintassi per ottenere una effettiva portabilità attraverso i vari browser e le loro versioni.

Un’ultima avvertenza, consiglio la visione dei filmati in quest’ordine:
1) HTML5
2) CSS3
3) Javascript

Buona visione!