SlideShare une entreprise Scribd logo
1  sur  26
Télécharger pour lire hors ligne
Scala ed Rx
in pratica
Michele Mauro
@michelemauro
Scala Treviso Meetup
25/06/2015
WARDA - Fashion Digitalization
Chi vi parla...
CTO @ Visionest
Scientist @ Warda
Risolvo problemi
WARDA è la piattaforma software che mette ordine
al MEDIA CHAOS mediante specifiche applicazioni che
coprono le esigenze in tutte le fasi dell’azienda
Style & ProductStyle & Product
Board
digital technology
Board
digital technologyVisual & RetailVisual & Retail
E-CommerceE-Commerce
Marketing & SocialMarketing & Social
WARDA - Fashion Digitalization
Di cosa vi parlo
Scala applicato ad un problema diverso
dalla “solita„ applicazione web o Big Data
https://www.flickr.com/photos/photosdavidgabrielfischer/13990127367
WARDA - Fashion Digitalization
Problema
Archivio storico
80k file
1.2TB
DAMHTTP
Velocemente
Senza intervento manuale
Tracciando quanto eseguito
WARDA - Fashion Digitalization
Prima analisi
Attraversamento di un albero
di dimensione e cardinalità
ignota
La visita restituisce un
risultato ed i nodi del livello
successivo
WARDA - Fashion Digitalization
Future[T]
Un Future[T] diventerà un valore in futuro
La sua elaborazione può iniziare in qualsiasi momento
Future#get blocca fino al completamento
Future#isCompleted è vero quando il valore è
disponibile
WARDA - Fashion Digitalization
“Velocemente„
Con Future[T] gestiamo le operazioni di lunga
durata; e non dobbiamo più preoccuparci della
concorrenza.
type ResultRest[R] =
(TreeResult[R], List[TreeAction[R]])
type FutureResultRest[R] =
Future[ResultRest[R]]
WARDA - Fashion Digitalization
Il tipo dei dati
Tipo di dato
Documentazione Lessico
Istruzione Materia prima
Uno dei vantaggi più accessibili di Scala è la facilità con
cui è possibile maneggiare, costruire, e descrivere tipi.
WARDA - Fashion Digitalization
“Velocemente„
def buildFuture(
arg: TreeAction[R],
subscriber: Subscriber[TreeEvent[R]]):
FutureResultRest[R]
def select[A](
fs: Seq[Future[A]])
(implicit ec: ExecutionContext):
Future[(Try[A], Seq[Future[A]])]
Grazie a Viktor Klang: https://gist.github.com/4488970
WARDA - Fashion Digitalization
“Velocemente„
● Il numero di thread è un facile parametro
sull'ExecutionContext
● La condizione di termine è che la coda sia vuota, cioè
che select() ritorni (Success[A], Seq())
WARDA - Fashion Digitalization
“Velocemente„
def run(current: Seq[FutureResultRest[R]],
subscriber: Subscriber[TreeEvent[R]]): Unit = {
select(current) onSuccess {
case (done: Try[ResultRest[R]],
rest: Seq[FutureResultRest[R]]) =>
val result = done.get
val remaining = rest ++ result._2.map({ action =>
subscriber.onNext(TreeActionQueue(action))
action
}).map(buildFuture(_, subscriber))
if (remaining.isEmpty)
executionContext.shutdown()
else run(remaining, subscriber)
}
}
WARDA - Fashion Digitalization
Il tipo dei dati
When Scala came out,
Static Typing was dead
Martin Odersky, Scala Italy Milan 08/05/2015
Image by Marco Firrincieli https://plus.google.com/photos/112206187111185023340/albums/6162489666224189969
WARDA - Fashion Digitalization
“Una traccia di quanto eseguito„
● Come contare e sommare risultati che arrivano
contemporaneamente da più thread?
● E nel frattempo annotare le operazioni eseguite?
WARDA - Fashion Digitalization
ReactiveX
“An API for asynchronous
programming with
observable streams„
Semantica standardizzata
e accuratamente definita
“The Observer pattern
done right„
reactivex.io
introtorx.com
WARDA - Fashion Digitalization
ReactiveX
WARDA - Fashion Digitalization
“Una traccia di quanto eseguito„
Il nostro esecutore è un Observable. Ne ricaviamo un
ConnectableObservable, in modo da poterci collegare
più Subscribers:
val walker = TreeWalker[SyncDone]
(config.threads).traverse(List(root)).publish
WARDA - Fashion Digitalization
“Una traccia di quanto eseguito„
walker.subscribe(_ match {
case TreeActionEnd(
TreeResult(source, SyncDone(...), _), _) =>
localLog.println(f"...")
case _ => Nil })
var files = 0L
doneResults.map(s => 1)
.sum.subscribe(files = _)
var bytes = 0L
doneResults.map(_.bytes)
.sum.subscribe(bytes = _)
WARDA - Fashion Digitalization
“Una traccia di quanto eseguito„
walker.connect
WARDA - Fashion Digitalization
Risultati
Problema risolto
Ottima interazione con Java
Codice riutilizzabile
Multithreading semplice
WARDA - Fashion Digitalization
Punti critici
Tempi di compilazione
Ecosistema giovane
Inversione della prospettiva
WARDA - Fashion Digitalization
Ringraziamenti
WARDA - Fashion Digitalization
Bonus 1: scopt
https://github.com/scopt/scopt
WARDA - Fashion Digitalization
Bonus 2: sbt
https://scala-sbt.org
WARDA - Fashion Digitalization
Bonus 3: example code
https://goo.gl/QWHNNb
https://bitbucket.org/michelemauro/scalatvmeetup20150625
WARDA - Fashion Digitalization
Bonus 3: example code
https://goo.gl/QWHNNb
https://bitbucket.org/michelemauro/scalatvmeetup20150625

Contenu connexe

Similaire à Scala ed Rx in pratica

Layar, la nuova frontiera della realtà aumentata
Layar, la nuova frontiera della realtà aumentataLayar, la nuova frontiera della realtà aumentata
Layar, la nuova frontiera della realtà aumentata
Andrea Piovani
 
Le applicazioni CAD sui dispositivi mobile
Le applicazioni CAD sui dispositivi mobileLe applicazioni CAD sui dispositivi mobile
Le applicazioni CAD sui dispositivi mobile
Giada_Maccari
 
Iuavcamp presentazione
Iuavcamp presentazione Iuavcamp presentazione
Iuavcamp presentazione
Giada15
 
Panorama necto, la business intelligence collaborativa mr v02
Panorama necto, la business intelligence collaborativa mr v02Panorama necto, la business intelligence collaborativa mr v02
Panorama necto, la business intelligence collaborativa mr v02
Mauro Ruffino
 

Similaire à Scala ed Rx in pratica (20)

14a Conferenza Nazionale di Statistica
14a Conferenza Nazionale di Statistica14a Conferenza Nazionale di Statistica
14a Conferenza Nazionale di Statistica
 
Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015
Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015
Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015
 
Design Pattern Strutturali
Design Pattern StrutturaliDesign Pattern Strutturali
Design Pattern Strutturali
 
Ria (Rich Internet Application) : Autodesk Homestyler , Domus Planner
Ria (Rich Internet Application) : Autodesk Homestyler , Domus PlannerRia (Rich Internet Application) : Autodesk Homestyler , Domus Planner
Ria (Rich Internet Application) : Autodesk Homestyler , Domus Planner
 
Applicazioni Aziendali in Cloud
Applicazioni Aziendali in CloudApplicazioni Aziendali in Cloud
Applicazioni Aziendali in Cloud
 
OrientDB & Big Data
OrientDB & Big DataOrientDB & Big Data
OrientDB & Big Data
 
Fashion guide: CAD e CAD.Assyst
Fashion guide: CAD e CAD.AssystFashion guide: CAD e CAD.Assyst
Fashion guide: CAD e CAD.Assyst
 
3DD 1e Reconfig
3DD 1e Reconfig3DD 1e Reconfig
3DD 1e Reconfig
 
Augmented Reality For Fun & profit
Augmented Reality For Fun & profitAugmented Reality For Fun & profit
Augmented Reality For Fun & profit
 
Diagrammi di Attività
Diagrammi di AttivitàDiagrammi di Attività
Diagrammi di Attività
 
Confronto tra GstarCAD e ZWCAD
Confronto tra GstarCAD e ZWCADConfronto tra GstarCAD e ZWCAD
Confronto tra GstarCAD e ZWCAD
 
Layar, la nuova frontiera della realtà aumentata
Layar, la nuova frontiera della realtà aumentataLayar, la nuova frontiera della realtà aumentata
Layar, la nuova frontiera della realtà aumentata
 
Art Everywhere: progetto per workshop Google. Sviluppo di sistemi di pattern ...
Art Everywhere: progetto per workshop Google. Sviluppo di sistemi di pattern ...Art Everywhere: progetto per workshop Google. Sviluppo di sistemi di pattern ...
Art Everywhere: progetto per workshop Google. Sviluppo di sistemi di pattern ...
 
Diagrammi di Sequenza
Diagrammi di SequenzaDiagrammi di Sequenza
Diagrammi di Sequenza
 
Le applicazioni CAD sui dispositivi mobile
Le applicazioni CAD sui dispositivi mobileLe applicazioni CAD sui dispositivi mobile
Le applicazioni CAD sui dispositivi mobile
 
Iuavcamp presentazione
Iuavcamp presentazione Iuavcamp presentazione
Iuavcamp presentazione
 
PyPaPi Qt Java Framework
PyPaPi Qt Java FrameworkPyPaPi Qt Java Framework
PyPaPi Qt Java Framework
 
Lista di software gratuito per la modellazione e stampa 3D (v.4)
Lista di software gratuito per la modellazione e stampa 3D (v.4)Lista di software gratuito per la modellazione e stampa 3D (v.4)
Lista di software gratuito per la modellazione e stampa 3D (v.4)
 
Sydav PDF 3D
Sydav PDF 3DSydav PDF 3D
Sydav PDF 3D
 
Panorama necto, la business intelligence collaborativa mr v02
Panorama necto, la business intelligence collaborativa mr v02Panorama necto, la business intelligence collaborativa mr v02
Panorama necto, la business intelligence collaborativa mr v02
 

Scala ed Rx in pratica

  • 1. Scala ed Rx in pratica Michele Mauro @michelemauro Scala Treviso Meetup 25/06/2015
  • 2. WARDA - Fashion Digitalization Chi vi parla... CTO @ Visionest Scientist @ Warda Risolvo problemi
  • 3. WARDA è la piattaforma software che mette ordine al MEDIA CHAOS mediante specifiche applicazioni che coprono le esigenze in tutte le fasi dell’azienda Style & ProductStyle & Product Board digital technology Board digital technologyVisual & RetailVisual & Retail E-CommerceE-Commerce Marketing & SocialMarketing & Social
  • 4. WARDA - Fashion Digitalization Di cosa vi parlo Scala applicato ad un problema diverso dalla “solita„ applicazione web o Big Data https://www.flickr.com/photos/photosdavidgabrielfischer/13990127367
  • 5. WARDA - Fashion Digitalization Problema Archivio storico 80k file 1.2TB DAMHTTP Velocemente Senza intervento manuale Tracciando quanto eseguito
  • 6. WARDA - Fashion Digitalization Prima analisi Attraversamento di un albero di dimensione e cardinalità ignota La visita restituisce un risultato ed i nodi del livello successivo
  • 7. WARDA - Fashion Digitalization Future[T] Un Future[T] diventerà un valore in futuro La sua elaborazione può iniziare in qualsiasi momento Future#get blocca fino al completamento Future#isCompleted è vero quando il valore è disponibile
  • 8. WARDA - Fashion Digitalization “Velocemente„ Con Future[T] gestiamo le operazioni di lunga durata; e non dobbiamo più preoccuparci della concorrenza. type ResultRest[R] = (TreeResult[R], List[TreeAction[R]]) type FutureResultRest[R] = Future[ResultRest[R]]
  • 9. WARDA - Fashion Digitalization Il tipo dei dati Tipo di dato Documentazione Lessico Istruzione Materia prima Uno dei vantaggi più accessibili di Scala è la facilità con cui è possibile maneggiare, costruire, e descrivere tipi.
  • 10. WARDA - Fashion Digitalization “Velocemente„ def buildFuture( arg: TreeAction[R], subscriber: Subscriber[TreeEvent[R]]): FutureResultRest[R] def select[A]( fs: Seq[Future[A]]) (implicit ec: ExecutionContext): Future[(Try[A], Seq[Future[A]])] Grazie a Viktor Klang: https://gist.github.com/4488970
  • 11. WARDA - Fashion Digitalization “Velocemente„ ● Il numero di thread è un facile parametro sull'ExecutionContext ● La condizione di termine è che la coda sia vuota, cioè che select() ritorni (Success[A], Seq())
  • 12. WARDA - Fashion Digitalization “Velocemente„ def run(current: Seq[FutureResultRest[R]], subscriber: Subscriber[TreeEvent[R]]): Unit = { select(current) onSuccess { case (done: Try[ResultRest[R]], rest: Seq[FutureResultRest[R]]) => val result = done.get val remaining = rest ++ result._2.map({ action => subscriber.onNext(TreeActionQueue(action)) action }).map(buildFuture(_, subscriber)) if (remaining.isEmpty) executionContext.shutdown() else run(remaining, subscriber) } }
  • 13. WARDA - Fashion Digitalization Il tipo dei dati When Scala came out, Static Typing was dead Martin Odersky, Scala Italy Milan 08/05/2015 Image by Marco Firrincieli https://plus.google.com/photos/112206187111185023340/albums/6162489666224189969
  • 14. WARDA - Fashion Digitalization “Una traccia di quanto eseguito„ ● Come contare e sommare risultati che arrivano contemporaneamente da più thread? ● E nel frattempo annotare le operazioni eseguite?
  • 15. WARDA - Fashion Digitalization ReactiveX “An API for asynchronous programming with observable streams„ Semantica standardizzata e accuratamente definita “The Observer pattern done right„ reactivex.io introtorx.com
  • 16. WARDA - Fashion Digitalization ReactiveX
  • 17. WARDA - Fashion Digitalization “Una traccia di quanto eseguito„ Il nostro esecutore è un Observable. Ne ricaviamo un ConnectableObservable, in modo da poterci collegare più Subscribers: val walker = TreeWalker[SyncDone] (config.threads).traverse(List(root)).publish
  • 18. WARDA - Fashion Digitalization “Una traccia di quanto eseguito„ walker.subscribe(_ match { case TreeActionEnd( TreeResult(source, SyncDone(...), _), _) => localLog.println(f"...") case _ => Nil }) var files = 0L doneResults.map(s => 1) .sum.subscribe(files = _) var bytes = 0L doneResults.map(_.bytes) .sum.subscribe(bytes = _)
  • 19. WARDA - Fashion Digitalization “Una traccia di quanto eseguito„ walker.connect
  • 20. WARDA - Fashion Digitalization Risultati Problema risolto Ottima interazione con Java Codice riutilizzabile Multithreading semplice
  • 21. WARDA - Fashion Digitalization Punti critici Tempi di compilazione Ecosistema giovane Inversione della prospettiva
  • 22. WARDA - Fashion Digitalization Ringraziamenti
  • 23. WARDA - Fashion Digitalization Bonus 1: scopt https://github.com/scopt/scopt
  • 24. WARDA - Fashion Digitalization Bonus 2: sbt https://scala-sbt.org
  • 25. WARDA - Fashion Digitalization Bonus 3: example code https://goo.gl/QWHNNb https://bitbucket.org/michelemauro/scalatvmeetup20150625
  • 26. WARDA - Fashion Digitalization Bonus 3: example code https://goo.gl/QWHNNb https://bitbucket.org/michelemauro/scalatvmeetup20150625