Scala ed Rx in pratica
-
Upload
michelemauro -
Category
Software
-
view
99 -
download
1
Transcript of Scala ed Rx in pratica
![Page 1: Scala ed Rx in pratica](https://reader034.fdocument.pub/reader034/viewer/2022042717/55d26d06bb61eb3e418b475b/html5/thumbnails/1.jpg)
Scala ed Rx in pratica
Michele Mauro@michelemauro
Scala Treviso Meetup25/06/2015
![Page 2: Scala ed Rx in pratica](https://reader034.fdocument.pub/reader034/viewer/2022042717/55d26d06bb61eb3e418b475b/html5/thumbnails/2.jpg)
WARDA - Fashion Digitalization
Chi vi parla...
CTO @ VisionestScientist @ Warda
Risolvo problemi
![Page 3: Scala ed Rx in pratica](https://reader034.fdocument.pub/reader034/viewer/2022042717/55d26d06bb61eb3e418b475b/html5/thumbnails/3.jpg)
WARDA è la piattaforma software che mette ordine al MEDIA CHAOS mediante specifiche applicazioni che
coprono le esigenze in tutte le fasi dell’azienda
Style & Product Style & Product
Boarddigital technology
Boarddigital technologyVisual & Retail Visual & Retail
E-Commerce E-Commerce
Marketing & Social Marketing & Social
![Page 4: Scala ed Rx in pratica](https://reader034.fdocument.pub/reader034/viewer/2022042717/55d26d06bb61eb3e418b475b/html5/thumbnails/4.jpg)
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
![Page 5: Scala ed Rx in pratica](https://reader034.fdocument.pub/reader034/viewer/2022042717/55d26d06bb61eb3e418b475b/html5/thumbnails/5.jpg)
WARDA - Fashion Digitalization
Problema
Archivio storico80k file1.2TB
DAMHTTP
VelocementeSenza intervento manuale
Tracciando quanto eseguito
![Page 6: Scala ed Rx in pratica](https://reader034.fdocument.pub/reader034/viewer/2022042717/55d26d06bb61eb3e418b475b/html5/thumbnails/6.jpg)
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
![Page 7: Scala ed Rx in pratica](https://reader034.fdocument.pub/reader034/viewer/2022042717/55d26d06bb61eb3e418b475b/html5/thumbnails/7.jpg)
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 completamentoFuture#isCompleted è vero quando il valore è disponibile
![Page 8: Scala ed Rx in pratica](https://reader034.fdocument.pub/reader034/viewer/2022042717/55d26d06bb61eb3e418b475b/html5/thumbnails/8.jpg)
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]]
![Page 9: Scala ed Rx in pratica](https://reader034.fdocument.pub/reader034/viewer/2022042717/55d26d06bb61eb3e418b475b/html5/thumbnails/9.jpg)
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.
![Page 10: Scala ed Rx in pratica](https://reader034.fdocument.pub/reader034/viewer/2022042717/55d26d06bb61eb3e418b475b/html5/thumbnails/10.jpg)
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
![Page 11: Scala ed Rx in pratica](https://reader034.fdocument.pub/reader034/viewer/2022042717/55d26d06bb61eb3e418b475b/html5/thumbnails/11.jpg)
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())
![Page 12: Scala ed Rx in pratica](https://reader034.fdocument.pub/reader034/viewer/2022042717/55d26d06bb61eb3e418b475b/html5/thumbnails/12.jpg)
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) } }
![Page 13: Scala ed Rx in pratica](https://reader034.fdocument.pub/reader034/viewer/2022042717/55d26d06bb61eb3e418b475b/html5/thumbnails/13.jpg)
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
![Page 14: Scala ed Rx in pratica](https://reader034.fdocument.pub/reader034/viewer/2022042717/55d26d06bb61eb3e418b475b/html5/thumbnails/14.jpg)
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?
![Page 15: Scala ed Rx in pratica](https://reader034.fdocument.pub/reader034/viewer/2022042717/55d26d06bb61eb3e418b475b/html5/thumbnails/15.jpg)
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
![Page 16: Scala ed Rx in pratica](https://reader034.fdocument.pub/reader034/viewer/2022042717/55d26d06bb61eb3e418b475b/html5/thumbnails/16.jpg)
WARDA - Fashion Digitalization
ReactiveX
![Page 17: Scala ed Rx in pratica](https://reader034.fdocument.pub/reader034/viewer/2022042717/55d26d06bb61eb3e418b475b/html5/thumbnails/17.jpg)
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
![Page 18: Scala ed Rx in pratica](https://reader034.fdocument.pub/reader034/viewer/2022042717/55d26d06bb61eb3e418b475b/html5/thumbnails/18.jpg)
WARDA - Fashion Digitalization
“Una traccia di quanto eseguito„
walker.subscribe(_ match { case TreeActionEnd( TreeResult(source, SyncDone(...), _), _) => localLog.println(f"...") case _ => Nil })
var files = 0LdoneResults.map(s => 1) .sum.subscribe(files = _)
var bytes = 0LdoneResults.map(_.bytes) .sum.subscribe(bytes = _)
![Page 19: Scala ed Rx in pratica](https://reader034.fdocument.pub/reader034/viewer/2022042717/55d26d06bb61eb3e418b475b/html5/thumbnails/19.jpg)
WARDA - Fashion Digitalization
“Una traccia di quanto eseguito„
walker.connect
![Page 20: Scala ed Rx in pratica](https://reader034.fdocument.pub/reader034/viewer/2022042717/55d26d06bb61eb3e418b475b/html5/thumbnails/20.jpg)
WARDA - Fashion Digitalization
Risultati
Problema risolto
Ottima interazione con Java
Codice riutilizzabile
Multithreading semplice
![Page 21: Scala ed Rx in pratica](https://reader034.fdocument.pub/reader034/viewer/2022042717/55d26d06bb61eb3e418b475b/html5/thumbnails/21.jpg)
WARDA - Fashion Digitalization
Punti critici
Tempi di compilazione
Ecosistema giovane
Inversione della prospettiva
![Page 22: Scala ed Rx in pratica](https://reader034.fdocument.pub/reader034/viewer/2022042717/55d26d06bb61eb3e418b475b/html5/thumbnails/22.jpg)
WARDA - Fashion Digitalization
Ringraziamenti
![Page 23: Scala ed Rx in pratica](https://reader034.fdocument.pub/reader034/viewer/2022042717/55d26d06bb61eb3e418b475b/html5/thumbnails/23.jpg)
WARDA - Fashion Digitalization
Bonus 1: scopt
https://github.com/scopt/scopt
![Page 25: Scala ed Rx in pratica](https://reader034.fdocument.pub/reader034/viewer/2022042717/55d26d06bb61eb3e418b475b/html5/thumbnails/25.jpg)
WARDA - Fashion Digitalization
Bonus 3: example codehttps://goo.gl/QWHNNb
https://bitbucket.org/michelemauro/scalatvmeetup20150625
![Page 26: Scala ed Rx in pratica](https://reader034.fdocument.pub/reader034/viewer/2022042717/55d26d06bb61eb3e418b475b/html5/thumbnails/26.jpg)
WARDA - Fashion Digitalization
Bonus 3: example codehttps://goo.gl/QWHNNb
https://bitbucket.org/michelemauro/scalatvmeetup20150625