venerdì 20 novembre 2015

Laboratorio su Android in collaborazione con il GDG Roma

Con la collaborazione del GDG Roma, stiamo preparando una esercitazione su Android.Affinché l'esercitazione sia proficua, sarebbe meglio se, chi vuole partecipare, possa prendere confidenza con alcuni strumenti un po' prima.
Gli strumenti che si consiglia di installare e farci qualche prova sono:
  • Android Studio, l'IDE ufficiale per Android, basato su IntelliJ (consigliatissimo per lo sviluppo Java anche non Android);
  • Gradle, lo strumento di build, alternativo a Maven, che viene usato per compilare i progetti Android;
  • Android SDK, è compreso in Android Studio, ma anche con quello è meglio fare qualche prova prima.
L'evento si trova qui:

https://metooo.io/e/laboratorio-android

domenica 8 novembre 2015

PrimeFaces come API e MaterialPrime

Nell'ultimo incontro del JUG (05 Nov 2015) siamo stati ospitati da Oracle Italia che, tramite la preziosa collaborazione di Nino Guarnacci, ci ha aperto le porte alla propria eccezionale sala conferenze.
Forse colpevole l'ora o la zona poco favorevole, è stato un peccato che l'affluenza effettiva fosse ridotta, perché il tema è stato a mio avviso molto interessante, pratico e presentato con grande efficacia da Francesco Strazzullo.

Per chi non ha potuto esserci eccovi un breve riassunto.

Introduzioni


In attesa dei ritardatari abbiamo approfittato per guardarci in faccia e fare le presentazioni, in particolare Strazzullo ci ha raccontato della sua attività di sviluppatore java oramai convertito in front-end puro e quindi con una buona esperienza di javascript e del suo ecosistema. Nell'azienda di Ancona di cui è parte, e-xtrategy, si occupa infatti di realizzare design front-end per i clienti, collabora da qualche tempo con il sito di articoli online cosenonjaviste.it e fa parte del collettivo di sviluppatori delle Marche (dev.marche.it).

Infine, cosa essenziale al nostro incontro, Francesco è contributor del progetto PrimeFaces Extensions e in particolare uno degli sviluppatori di MaterialPrime, una libreria di componenti JSF, basata su PrimeFaces, che realizza il design Material di Google.

PrimeFaces, ci racconta Francesco, è la libreria di fatto più utilizzata ad oggi per la realizzazione di componenti JSF, avendo da tempo superato le alternative RichFaces e IceFaces.

La libreria, PrimeFaces e MaterialPrime


In breve, PrimeFaces è una libreria che rende disponibile tramite componenti JSF le funzionalità della onnipresente jQuery. L'utilizzo è gratuito, a patto di condividere sul repository ufficiale ogni componente personalizzato dall'utente, in modo da arricchire sempre più i componenti disponibili a chi inizia.
Altra caratteristica di PrimeFaces, come anticipa lo speaker, è che si presta bene per la creazione di componenti personalizzati, utilizzando il framework e le sue API.

Ogni componente è suddiviso in una parte client javascript, che si occupa dell'interazione lato browser, e una server, in java, divisa in un componente che esegue la logica di dominio e un renderer per la generazione di html.
Quest'ultimo aspetto purtroppo rimane poco sofisticato: il markup va scritto tramite stringhe, benché io abbia intravisto delle API che semplificano la generazione di tag e attributi.

A questo punto la presentazione passa ad un esempio dettagliato di come scrivere e integrare le diverse parti di un componente personalizzato. L'elemento chiave è il riutilizzo delle funzionalità previste dalla libreria, che garantiscono diverse cose essenziali: avere a disposizione un sistema di eventi, attributi, chiamate ajax, nonché la gestione dello stato lato server. Inoltre questo modello garantisce un'uniformità nello sviluppo e l'utilizzo, in modo che gli utilizzatori finali della libreria si trovino a proprio agio anche utilizzando componenti nuovi.

Personalmente trovo che il pregio fondamentale di questo sistema sia la possibilità di intervenire sul componente da due fronti, lavorando in java sul back-end e direttamente in javascript sul front-end. In questo modo è molto semplice integrare librerie di entrambi gli ecosistemi, in modo essenzialmente trasparente.

Tanto per chiarire questo punto, Strazzullo ci spiega come MaterialPrime non faccia altro che richiamare internamente alla parte client dei suoi componenti una libreria javascript di nome materializecss, la quale si occupa di realizzare la parte grafica e la logica secondo le linee guida dello stile di Google.


Difetti


Ovviamente non ci sono solo lati positivi, ma anche qualche pecca. In particolare Francesco segnala che il codice del framework è poco documentato essendo essenzialmente uno strumento interno. Per lo stesso motivo, ad ogni rilascio di qualche aggiornamento c'è sempre il rischio che vengano introdotte modifiche non compatibili, da cui la necessità di eseguire dei controlli di regressione ogni qualvolta si aggiorna la versione su cui basare i propri componenti.


Conclusioni


Devo dire che data la mia maggiore esperienza con librerie più recenti, quali GWT e Vaadin, sono rimasto piacevolmente sorpreso di vedere come una tecnologia che a causa di un pregiudizio avevo considerato sorpassata fornisca in realtà una buona flessibilità e una serie di strumenti validi per costruire interfacce utente di tutto rispetto. In effetti MaterialPrime dimostra questo: che JSF non deve essere per forza associata ad una grafica scadente o ad un design "da svecchiare".

Questa mi sembra un'ottima notizia, soprattutto per tutti gli sviluppatori che, lavorando su prodotti legacy o con lo standard JEE, possono aver immaginato di non avere speranze per quanto riguarda la possibilità di realizzare un front-end al pari con gli strumenti più attuali sul panorama.

Grazie ancora a Francesco Strazzullo e al suo collega Michele Focanti che ci hanno raggiunto da Ancona per condividere con noi la loro esperienza.

Ivano Pagano


Ecco il link con le slide della presentazione

Per ulteriori informazioni vi rimando al sito di Francesco e al progetto su github


mercoledì 7 ottobre 2015

Prossimo incontro: DevOps for Dev

A meno che tu non stia salvando il mondo, non sprecare il tuo tempo installando cose, vedendo gente, facendo altre cose.

https://metooo.io/e/dev-ops

mercoledì 23 settembre 2015

Infinispan: Distributed Cross-Application Caching il 30 settembre

Quando: 30 settembre
Dove: Red Hat Roma - Via Andrea Doria, 41M scala B Metro A Ottaviano o Cipro.
Per iscriversi: http://jugevents.org/jugevents/event/show.html?id=56448


Programma


18:30 – 19:00
Speaker: Tristan Tarrant
Title: Infinispan: Distributed Cross-Application Caching
Infinispan is a Java library for embedded caching. It is also a server for remote caching. It can run as a local cache. It can also scale to hundreds of distributed nodes. You can use it to store, retrieve, query, compute and listen to changes in your data.
In this talk Tristan will provide an overview of the variety of uses to which you can put Infinispan in your applications, from simple Java applications, to cross-language, cross-platform application ecosystems.

19:00 – 19:30
Speaker: Gustavo Fernandes
Title: Infinispan and Apache integrations
Besides being Apache licensed, Infinispan also integrates nicely with some important Apache projects, such as Lucene, Spark and Hadoop. This talk will walk through each one with use cases and code samples.

19:30 – 20:00
Speaker: Adrian Nistor
Title: Querying Infinispan, beyond the Map API
Infinispan is a transactional, distributed, in-memory key/value store mainly exposing the ubiquitous Map-Like API. But the key/value view is almost never enough. Infinispan provides powerful search APIs which allow you to perform complex on-demand or continuous searches on your rich domain model. A tight integration with Hibernate Search and Apache Lucene enables fast indexing and searching for your Java objects or your platform-neutral data encoded in Google’s Protocol Buffers format. It provides a simple and expressive native query DSL but can also run Lucene queries equally well.

lunedì 14 settembre 2015

Basi dati non relazionali e transazioni

Autore: Davide Lorenzo Marino

Oggi ci sono molti database nosql che gestiscono sia transazioni ACID, sia foreign key e quindi integrità referenziali.
Ad esempio:

  • OrientDb
  • Neo4j
  • Titan
  • ArangoDb (solo transazioni ACID)
  • Blazegraph
  • FoundationDb (transazioni ACID, con foreign key solo sul layer SQL, si tratta di un db multimodello)

Più in generale direi che i database basati su un modello a grafo generalmente supportano le foreign key (in fondo sono disegnati per gestire le relazioni fra nodi) e anche alcuni nosql multi modello.

Per il modo in cui sono implementati internamente quasi sicuramente nessun document db,  key value db e wide column db dovrebbe avere le foreign key. Alcuni di questi però supportano le transazioni.

Per quel che riguarda i constraints non legati a foreign key (lunghezza del campo, tipo del campo, non nullabilità) credo che i db nosql ne siano generalmente provvisti se permettono di definire uno schema base (eventualmente espandibile con altre colonne). Sicuramente OrientDb che ho avuto modo di studiare un pochino ne è provvisto ed anzi mi sembra che abbia addirittura più constraint dei db relazionali classici (ad esempio ha controlli sulla lunghezza minima di un campo che in molti db relazionali come mysql può essere gestita solo con un trigger).

Sicuramente una grande differenza fra db relazionali classici e db nosql è che i db nosql sono schema less, mentre un db relazionale puro non lo è.
Questo garantisce una maggiore flessibilità perché aggiungere una colonna su una tabella che ha molti milioni di record può essere veramente pesante e non gestibile in un ambiente che non ammette tempi di manutenzione elevati.

Un'altra grande differenza non citata (almeno mi pare) nei precedenti interventi è che i db nosql utilizzano dialetti personalizzati per l'accesso ai dati. Questo vuol dire che migrare da un db all'altro può essere molto complesso, mentre i db relazionali, pur con piccole differenze, utilizzano tutti l'SQL per l'accesso ai dati. Alcuni dei dialetti NoSql sono abbastanza semplici, altri decisamente più complessi, soprattutto nei db a grafo e riuscire a padroneggiare tutti gli aspetti sulle possibili query di estrazione può essere molto difficile.

Ad ogni modo tieni conto che i db NoSql sono molto diversi tra di loro. Alcuni hanno delle caratteristiche, altri ne hanno delle differenti. Esistono per esempio alcuni db NoSql che non permettono la replicazione su più nodi (ad esempio MemCached) e quindi non si può nemmeno affermare che i db NoSql scalano meglio dei db relazionali (anche se nella stragrande maggioranza dei casi questo è vero).

A chi interessasse approfondire potete trovare informazioni interessanti su questo sito: http://db-engines.com/en/

martedì 1 settembre 2015

Primi passi con Haskell e a seguire Entando, una UI Platform per sviluppare applicazioni Web, Mobile e IoT

Nel prossimo incontro del JUG Roma si parlerà di Haskell, un linguaggio di programmazione funzionale puro, e di Entando, una piattaforma di sviluppo.Per saperne di più e registrarvi, andate qui.

lunedì 22 giugno 2015

Prossimo incontro su "Java 8: le nuove interfacce"


Java 8: le nuove interfacce                     

Java 8: le nuove interfacce

Ezio Sperduto ci racconta come sono cambiate le interfacce del nostro linguaggio preferito

Via Vacuna, 107, 00157 Roma, ItaliaIl 9 luglio 2015 dalle 19:30 alle 21:00 UTC(+02:00)
VAI ALL'EVENTO
Metooo SRL - Viale Gramsci 17/B 80122 Napoli - P.IVA 07426331216

lunedì 25 maggio 2015

Serenity BDD (aka thucydides) uno sguardo agli Automated Acceptance Testing

Nel prossimo incontro parleremo di Serenity BDD.

Serenity Bdd permette di scrivere con molta facilità dei test di regressione automatici per tutti quei prodotti che abbiano un'interfaccia web e non solo. In questo talk andremmo a scoprire i suoi punti di forza e i suoi possibili utilizza su un'applicazione di esempio.

Per iscriversi:
http://www.jugevents.org/jugevents/event/56333

giovedì 7 maggio 2015

#GWTcon2015

L'anno scorso ci sono stati più di 130 partecipanti provenienti da tutta Italia, 9 speakers, 11 sessioni ed oltre 10 ore di talk (info sul canale youtube)

Quest'anno la GWTcon torna e diventa internazionale, con eventi gemelli in almeno altre 2 sedi (Tolosa e Tunisi), speakers di fama internazionale ed un programma di iniziative collegate in continua evoluzione.

E' stata appena pubblicata la data della seconda edizione, che sarà il prossimo 11 Novembre 2015, sempre a Firenze e la lista degli speakers confermati comprende Daniel 'Singular' Kurka (Google) e Christian 'GWTP' Goudreau (ArcBees). 
La lista completa degli speaker che ad oggi hanno confermato la loro presenza si trova all'url: http://www.gwtcon.org/#speakers


giovedì 19 marzo 2015

Configurazioni dei build più compatte con Maven Polyglot

Una delle critiche che si sente più spesso su Maven è che l'XML è molto verboso.
Con Maven Polyglot potete scrivere questo:
project {
  modelVersion '4.0.0'    
  groupId 'io.takari.polyglot'
  artifactId 'groovy-project'
  version '0.0.1-SNAPSHOT'
  //
  // Possibly a more preferrable way to generate the groupId,
  // artifactId, and version elements:
  //
  // $artifact('io.takari.polyglot:groovy-project:0.0.1-SNAPSHOT')
  //
  name 'Groovy Maven Love'
      
  build {
    //
    // Arbitrary Groovy code can be executed in any phase in the form of a dynamic plugin
    //
    $execute(id: 'hello', phase: 'validate') {
      println ""
      println "Hello! I am Groovy inside Maven. What? What am I doing here?? I'm confused. I guess we are friends now. Maybe."
      println ""
    }           
  }
}
Dovete avere Java 1.7 e Maven 3.3.1.
Per farlo funzionare, dovete creare una cartella .mvn e metterci dentro un file extensions.xml con scritto dentro (nel caso di Groovy):

<?xml version="1.0" encoding="UTF-8"?>
<extensions>
  <extension>
    <groupId>io.takari.polyglot</groupId>
    <artifactId>polyglot-groovy</artifactId>
    <version>0.1.5</version>
  </extension>
</extensions>

Il motivo per il quale è importante che Maven diventi poliglotta è che ci sono un sacco di plugin per Maven ed estensioni di strumenti di terze parti.
C'è anche la possibilità di usare YAML, Atom, Scala ed altri linguaggi.

Tra le alernative a Maven ci sono:
  • Apache Ivy, dependency management per ANT
  • Grape, dell'ecosistema Groovy
  • Gradle
  • Apache Buildr
  • Typesafe SBT
  • Leiningen per Clojure

Scriveteci cosa ne pensate nei commenti qua sotto.

martedì 10 febbraio 2015

LiquidO con Jacopo Romei

Quando: il 16 febbraio 2015 ore 19:30 circa
Dove: LUISS EnLabs, Via Giovanni Giolitti, 34
Per iscriversi: http://jugevents.org/jugevents/event/55288

http://liquido.cocoonprojects.com/


You might have heard of a new breed of organisational models, responding to the fast growing adaptability, engagement and collaboration needs within modern company structures.
Or you might have simply experienced the sound problems of slowness, rigidity, bureaucracy, disengagement along with various kinds of waste and bottlenecks that “traditional” organisational models generate and suffer nowadays.
This is what LiquidO™ is all about: the original “liquid organisation” model for governance, born from direct experience within Cocoon Projects and in use in a growing number of for profit and not-forprofit organisations willing to get liquid.


venerdì 30 gennaio 2015

Presentazione del libro su Java 8 di Pellegrino Principe

La copertina del libro di Pellegrino Principe
Ieri abbiamo sfidato l'allarme meteo per parlare del libro di Pellegrino Principe con l'autore.
Oltre che del libro, si è parlato della storia di Java e dei fondamenti teorici che sono dietro alle annotations, così come delle collection e soprattutto delle lambda expression.

Pellegrino ha cominciato a programmare con l'Amiga 500, quindi non si può proprio dire che sia un novellino. Da sempre ha voltuto capire cosa c'è dietro a ciò che faceva e si vede anche all'impostazione che ha dato ai corsi che tiene ed alla sua opera.

Secondo l'autore, la novità principale di Java 8 sono proprio le lambda expression, che hanno modificato molto il modo di programmare. Ciò ha anche suscitato delle paure in molti lettori, i quali a volte hanno preferito continuare a comprare il libro su Java 7 degli autori. Le novità di Java 8 hanno anche suscitato critiche da parte dei puristi di Java, i quali avrebbero voluto che Java rimanesse un linguaggio orientato ad oggetti, invece di diventare un linguaggio multi-paradigma, come è adesso.

Il motivo che ha spinto all'introduzione delle Lambda Expressions è la disponibilità di computer che hanno diversi core e di sistemi di calcolo distribuiti. La gestione della concorrenza con i thread è estremamente complicata ed è molto facile fare errori. Invece, con le Lambda Expression è possibile scrivere programmi concorrenti con più facilità.

Per approfondire
Il sito CoseNonJaviste ha diversi articoli interessanti sulle lambda expression, li potete trovare tutti qui:
http://www.cosenonjaviste.it/tag/lambda-expressions/