SlideShare una empresa de Scribd logo
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014 
Scala @ Real Life 
Javier Santos y David Vallejo
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014 
¿Quienes somos? 
David Vallejo @dvnavarro 
«Una expresión regular es una 
expresión que no es del todo buena, 
pero tampoco del todo mala.» 
@borjamonserrano 
Javier Santos @jpaniego 
«Hay dos formas de programar sin 
errores; solo la tercera funciona» 
Alan J Perlis
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014 
Índice 
❑ Proyecto Antulus 
❑ Introducción a Scala 
❑ Features 
❑ Herramientas 
❑ Core – Akka 
❑ Datos maestros – Slick 
❑ Big data – Spark 
❑ API – Spray 
❑ Web – Play 
❑ Realidad actual 
❑ Conclusiones
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014 
Proyecto Antulus 
❑ Objetivo 
❑ Ejemplo: SETI@Home 
❑ Calculadora distribuida colaborativa 
❑ P2P unidades de cálculo 
❑ Motivación 
❑ Ley Moore -> Multicore 
❑ Gran cantidad de datos (Big data) 
❑ Aplicaciones 
❑ Analytics tendencias mercado 
❑ Proyectos investigación genética 
❑ Previsión meteorológica 
❑ Grafos de afinidad (donantes compatibles, parejas, …).
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014 
Proyecto Antulus
Scala Programming @ Madrid 
Aprender Scala en 5 minutos 
MADRID · NOV 21-22 · 2014
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014 
¿Qué es ? 
❑ Lenguaje de propósito general que corre en la JVM 
❑ Martin Odersky. EPFL. Carencias de otros lenguajes. 
❑ Typesafe (2011) 
❑ Características principales 
❑ Herencia múltiple 
❑ Tipado estático 
❑ Inferencia de tipos 
❑ Multiparadigma: 
❑ Funcional 
❑ Orientado a objetos 
❑ Aplicaciones de banca, DSLs, … 
❑ REPL
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014 
: Traits 
trait Animal { 
def sound: String 
} 
trait Cat extends Animal { 
override def sound = "Miau" 
} 
trait Dog extends Animal { 
override def sound = "Guau" 
} 
class Fox extends Cat with Dog
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014 
: Traits 
class Fox extends Cat with Dog 
val fox = new Fox() 
println(fox.sound) //Returns Guau
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014 
: Case classes 
case class Point(x: Int, y: Int) 
val point1 = Point(1, 1) 
point.x 
point.y 
val point2 = point1.copy(y = 2)
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014 
: Pattern Matching 
line.getMiddlePoint match { 
case Point(1, 2) => … 
case Point(x, y) => ... 
case Point(x, _) if x > 0 => ... 
case point @ Point(x, y) => ... 
case _ => ... 
}
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014 
: Implicits 
case class Point(x: Int, y: Int) 
implicit def tupleToPoint(tuple: (Int, Int)) = 
Point(tuple._1, tuple._2) 
def sumPoints(p1: Point, p2: Point) = 
Point(p1.x + p2.x, p1.y + p2.y) 
val p1: Point = Point(1, 2) 
val p2: (Int, Int) = (3, 4) 
sumPoints(p1, p2)
Scala Programming @ Madrid 
: Higher order functions 
MADRID · NOV 21-22 · 2014 
object Calculator { 
type Term = Int 
type Result = Int 
type Operation = (Term, Term) => Result 
val add: Operation = (n1, n2) => n1 + n2 
val sub: Operation = (n1, n2) => n1 - n2 
val mul: Operation = (n1, n2) => n1 * n2 
def calculate(n1: Term, n2: Term)(f: Operation): Result = 
f(n1, n2) 
}
Scala Programming @ Madrid 
: Higher order functions 
MADRID · NOV 21-22 · 2014 
object MyCalculus { 
import Calculator._ 
val simpleAdd = calculate(2, 5)(add) 
val customCalculus = calculate(1, 6)((n1, n2) => n1 * n2 + 10) 
}
Scala Programming @ Madrid 
: …movidas varias. 
MADRID · NOV 21-22 · 2014 
❑ Renombrado de tipos 
import com.antulus.{Calculator => CalculatorAux} 
❑ Notación infija, métodos como funciones. 
names.foreach(name => println(name)) 
names foreach println 
❑ Inferencia de punto y comas
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014 
¡Al turrón!
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014 
Core -
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014 
Core - 
❑ CQRS/ES 
❑ Akka-Persistence 
❑ Clustering 
❑ Cluster sharding
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014 
Core – 
CQRS/ES 
«CQRS stands for Command Query Responsibility Segregation. 
It's a pattern that I first heard described by Greg Young. At its heart 
is a simple notion that you can use a different model to update 
information than the model you use to read information” – Martin 
Fowler 
“Event Sourcing ensures that all changes to application state are 
stored as a sequence of events. Not just can we query these 
events, we can also use the event log to reconstruct past 
states[...].” – Martin Fowler
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014 
Core –
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014 
Core – 
❑ Akka-Persistence 
❑ Journal === Event Storage 
❑ Martin Krasser 
❑ Experimental 
❑ Command 
❑ Persistent Actor 
❑ PersistenceId 
❑ def onCommand: Receive 
def persist(event:Any)(callback: Any => Unit) 
❑ def onRecover: Receive 
❑ Query 
❑ : ( Alternativas : InMemoryDataGrids, RDB, NoSQLDB) 
❑ Distintos journals (LevelDB, InMemory, Cassandra).
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014 
Core – 
❑ Clustering 
❑ En application.conf 
❑ Actor Provider: 
akka.cluster.ClusterActorRefProvider 
❑ Lista de nodos del clúster: 
akka.contrib.pattern.ClusterClient 
❑ En el snippet de Scala 
❑ Habilitar la «recepcionista» 
ClusterReceptionistExtension(system) 
.registerService(clusterListener)
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014 
Core –
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014 
Core – 
❑ Clustering – semántica de envíos 
❑ Send: El mensaje se envía a un único actor del cluster que 
coincida con el path. Si hay varios que coinciden, se 
entrega a uno de ellos aleatoriamente. 
clusterClient ! Send(«/user/handler», «hello», 
localAffinity = true) 
❑ SendToAll: El mensaje se envía a todos los actores que 
encajen con el path. 
clusterClient ! SendToAll(«/user/handler», «hi») 
❑ Publish: El mensaje se envía a todos los actores suscritos 
al topic en el que se publica 
clusterClient ! Publish(«myTopic», «hello»)
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014 
Core – 
❑ Cluster sharding 
❑ Garantiza dos cosas 
❑ Balanceo de carga: En caso de que se añada un 
nuevo nodo o que se caiga otro, el número total de 
actores se "balancea" entre el resto de nodos. 
❑ Identificación de manera inequívoca de un actor, de 
manera que los mensajes dirigidos al mismo actor 
siempre serán redirigidos al nodo que maneja dicho 
actor; o dicho de otra forma, no se podrá dar el caso en 
el que dos nodos procesen un mensaje dirigido al 
mismo actor.
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014 
Core – 
❑ Cluster sharding – Semántica 
❑ Entry: Representa una entidad identificada de manera 
inequívoca y de estado persistente (Agregado). 
❑ Shard: Agrupación de entries. Recomendación: 
NºShards = 10 x NºMaxNodos 
❑ ShardRegion: Agrupación de shards del mismo Entry.
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014 
Core – 
❑ Cluster sharding – Requisitos de implementación 
❑ Arrancar extensión de Sharding 
ClusterSharding(myAkkaSystem) 
❑ Arrancar los ShardRegion para los tipos de entries que 
manejemos 
sharding.start( 
typeName = «MyAggregate», 
entryProps = Some(Props[MyAggregate]), 
idExtractor = MyAggregate.idExtractor, 
shardResolver = MyAggregate.shardResolver)
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014 
Core –
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014 
Unidad de cálculo – /
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014 
Unidad de cálculo – 
❑ Herramienta orientada al Big Data 
❑ Distribución de datos 
❑ Analytics 
❑ ¿Sustituto de ?
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014 
Unidad de cálculo – 
class Job()(implicit context: SparkContext){ 
val myRdd: RDD[Int] = context.parallelize(1 to 10 
toList) 
def mutateMyRDD(rdd: RDD[Int]): Int = 
rdd.map(_*2).reduce(_+_) 
def mutateThis(rdd: RDD[Int]):RDD[(String,Int)] = 
rdd.map(n => n.toString -> n*3) 
} 
val job = new Job() 
println(job.mutateMyRDD(job.myRdd)) //110
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014 
Unidad de cálculo - 
val conf = 
new SparkConf().set("cassandra.connection.host", "localhost") 
implicit val context = 
new SparkContext(conf) 
val myTable = context.cassandraTable[(String, Int)]( 
"myKeyspace", 
"myTable") 
// Same declaration of Job class 
val job = new Job() 
job. mutateThis(job.myRdd).saveToCassandra("myKeyspace", 
"myTable")
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014 
Datos maestros -
Scala Programming @ Madrid 
Datos maestros - 
❑ Librería de acceso y consulta a bases de datos para Scala 
MADRID · NOV 21-22 · 2014 
❑ Soporte para múltiples drivers: 
❑ DB2,Microsoft Access, Microsoft SQL, PostgreSQL, SQLite, 
… 
❑ Query API’s: 
❑ Lifted embedding: Standard. No utiliza tipos Scala 
directamente 
❑ Direct embedding: Experimental. Macros 
❑ Permite utilizar SQL embebido (RawSql) 
❑ Se trabaja continuamente con colecciones Scala
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014 
Datos maestros - 
❑ Lifted embedding 
class Users(tag: Tag) extends Table[(String, Int)](tag, 
"USERS") { 
def name = column[String]("USER_NAME", O.PrimaryKey) 
def age = column[Int]("AGE") 
def * = (name, age) 
} 
val users = TableQuery[Users] 
❑ Direct embedding 
@table(name = "USERS") 
case class User( 
@column(name = "NAME") name: String, 
@column(name = "AGE") age: Int)
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014 
Datos maestros - 
❑ Querying… 
val q1 = users.filter(_.name === "User1") 
// compiles to SQL (simplified): 
// select "NAME", "AGE" 
// from "USERS" 
// where "NAME" = "User1" 
val q2 = users.drop(10).take(5) 
// compiles to SQL (simplified): 
// select "NAME", "AGE" 
// from "USERS" 
// limit 5 offset 10 
val q3 = users.sortBy(_.name.desc.nullsFirst) 
// compiles to SQL (simplified): 
// select "NAME", "AGE" 
// from "USERS" 
// order by "NAME" desc nulls first
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014 
API Rest -
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014 
API Rest - 
❑ Creación de API’s REST 
❑ Arquitectura basada en actores 
❑ Futuro Akka-HTTP 
❑ Permite peticiones asíncronas. 
❑ Incluye DSL para testing
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014 
API Rest - 
❑ Creando rutas 
val route: Route = 
path("job" / HexIntNumber) { id => 
get { 
complete { 
s"Getting Calculus job status for $id." 
} 
} ~ 
put { 
complete { 
s"Updated Calculus job with id $id." 
} 
} 
}
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014 
API Rest - 
❑ Serializadores 
case class Job( 
id: Int, 
description: String, 
tags: List[String] 
) 
object MyJsonProtocol extends DefaultJsonProtocol { 
implicit val jobFormat = jsonFormat3(Job) 
}
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014 
API Rest - 
❑ Testing 
"return a job" in { 
Get("/job/1") ~> route ~> check { 
responseAs[String] must contain( 
"Getting Calculus job status for 1.") 
} 
}
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014 
Interfaz web -
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014 
Interfaz web - 
❑ Framework para construir aplicaciones web 
❑ Construido sobre Akka 
❑ Modelo vista-controlador 
❑ Disponible también para Java
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014 
Interfaz web - 
object MyCalculator extends Controller { 
def calculate(op: Operation) = Action { 
doOperation(op) match { 
case Success(result) => 
Ok("Result: " + result) 
case Failure(t) => 
InternalServerError 
} 
} 
}
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014 
¿Se puede vivir de esto?
Scala Programming @ Madrid 
Uso de Scala - Datos Meetup 
MADRID · NOV 21-22 · 2014
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014 
Uso de Scala - Empresas
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014 
Ámbito laboral 
❑ Para la empresa: 
❑ Desarrolladores escasos 
❑ Dificultad para formar a otros desarrolladores 
❑ Miedo al cambio 
❑ Para los programadores: 
❑ Poca oferta nacional
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014 
Conclusiones
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014 
Conclusiones 
❑ Dos enfoques 
❑ Principiantes: sin experiencia extensa en lenguajes como C++ o 
Java. ¿Mayor facilidad para cambiar al «chip» funcional? 
❑ Gente del mundo Java: facilidad de adaptarse progresivamente 
(Uso de var’s, bucles while, …). 
❑ En cualquier caso: «A escribir se aprende leyendo» 
❑ Jugar y consultar la REPL siempre en caso de duda.
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014 
Conclusiones 
❑ Tecnologías nuevas 
❑ Poca documentación 
❑ Comunidad escasa 
❑ Escalables, distribuidas y clusterizables
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014
Scala Programming @ Madrid 
MADRID · NOV 21-22 · 2014 
Scala @ Real Life 
Javier Santos y David Vallejo

Más contenido relacionado

Similar a Codemotion 2014 Scala @real life

ASP.NET vNext... Desarrollo cross platform
ASP.NET vNext... Desarrollo cross platformASP.NET vNext... Desarrollo cross platform
ASP.NET vNext... Desarrollo cross platform
Eduard Tomàs
 
Desarrollo de pruebas en entornos Java EE
Desarrollo de pruebas en entornos Java EEDesarrollo de pruebas en entornos Java EE
Desarrollo de pruebas en entornos Java EE
José Manuel López
 
Spark Hands-on
Spark Hands-onSpark Hands-on
Spark Hands-on
Gaspar Muñoz Soria
 
Primeros pasos con Spark - Spark Meetup Madrid 30-09-2014
Primeros pasos con Spark - Spark Meetup Madrid 30-09-2014Primeros pasos con Spark - Spark Meetup Madrid 30-09-2014
Primeros pasos con Spark - Spark Meetup Madrid 30-09-2014
Stratio
 
Primeros pasos con Apache Spark - Madrid Meetup
Primeros pasos con Apache Spark - Madrid MeetupPrimeros pasos con Apache Spark - Madrid Meetup
Primeros pasos con Apache Spark - Madrid Meetup
dhiguero
 
Aplicaciones escalables en la nube: mentiras y verdades
Aplicaciones escalables en la nube: mentiras y verdadesAplicaciones escalables en la nube: mentiras y verdades
Aplicaciones escalables en la nube: mentiras y verdades
Enrique Catala Bañuls
 
Spark
SparkSpark
Resilient Distributed Dataset - Analisis paper
Resilient  Distributed Dataset - Analisis paper Resilient  Distributed Dataset - Analisis paper
Resilient Distributed Dataset - Analisis paper
Javier de la Rosa Fernandez
 
Meetup Fun[ctional] spark with scala
Meetup Fun[ctional] spark with scalaMeetup Fun[ctional] spark with scala
Meetup Fun[ctional] spark with scala
José Carlos García Serrano
 
Fun[ctional] spark with scala
Fun[ctional] spark with scalaFun[ctional] spark with scala
Fun[ctional] spark with scala
David Vallejo Navarro
 
Primeros pasos con aurelia
Primeros pasos con aureliaPrimeros pasos con aurelia
Primeros pasos con aurelia
Jose Angel Parreño Madrigal
 
Scala @ Real life
Scala @ Real lifeScala @ Real life
Scala @ Real life
Javier Santos Paniego
 
Ruby para Java Developers
Ruby para Java DevelopersRuby para Java Developers
Ruby para Java Developers
Gustavo Andres Brey
 
Análisis de datos con Apache Spark
Análisis de datos con Apache SparkAnálisis de datos con Apache Spark
Análisis de datos con Apache Spark
Eduardo Castro
 
Del infierno al cielo
Del infierno al cieloDel infierno al cielo
Del infierno al cielo
Raúl Requero García
 
Update Big Data 2014
Update Big Data 2014Update Big Data 2014
Update Big Data 2014
Stratebi
 
Creación de Builders y DSL's con Groovy
Creación de Builders y DSL's con GroovyCreación de Builders y DSL's con Groovy
Creación de Builders y DSL's con Groovy
Jose Juan R. Zuñiga
 
Carrera de fondo - La continuada lucha de AngularJS - CodeMotion 2015
Carrera de fondo - La continuada lucha de AngularJS - CodeMotion 2015Carrera de fondo - La continuada lucha de AngularJS - CodeMotion 2015
Carrera de fondo - La continuada lucha de AngularJS - CodeMotion 2015
José Manuel García García
 
Capas de acceso a datos .NET escalables de verdad: el batido perfecto para el...
Capas de acceso a datos .NET escalables de verdad: el batido perfecto para el...Capas de acceso a datos .NET escalables de verdad: el batido perfecto para el...
Capas de acceso a datos .NET escalables de verdad: el batido perfecto para el...
Enrique Catala Bañuls
 
Meetup Spark y la Combinación de sus Distintos Módulos
Meetup Spark y la Combinación de sus Distintos MódulosMeetup Spark y la Combinación de sus Distintos Módulos
Meetup Spark y la Combinación de sus Distintos Módulos
Jorge Lopez-Malla
 

Similar a Codemotion 2014 Scala @real life (20)

ASP.NET vNext... Desarrollo cross platform
ASP.NET vNext... Desarrollo cross platformASP.NET vNext... Desarrollo cross platform
ASP.NET vNext... Desarrollo cross platform
 
Desarrollo de pruebas en entornos Java EE
Desarrollo de pruebas en entornos Java EEDesarrollo de pruebas en entornos Java EE
Desarrollo de pruebas en entornos Java EE
 
Spark Hands-on
Spark Hands-onSpark Hands-on
Spark Hands-on
 
Primeros pasos con Spark - Spark Meetup Madrid 30-09-2014
Primeros pasos con Spark - Spark Meetup Madrid 30-09-2014Primeros pasos con Spark - Spark Meetup Madrid 30-09-2014
Primeros pasos con Spark - Spark Meetup Madrid 30-09-2014
 
Primeros pasos con Apache Spark - Madrid Meetup
Primeros pasos con Apache Spark - Madrid MeetupPrimeros pasos con Apache Spark - Madrid Meetup
Primeros pasos con Apache Spark - Madrid Meetup
 
Aplicaciones escalables en la nube: mentiras y verdades
Aplicaciones escalables en la nube: mentiras y verdadesAplicaciones escalables en la nube: mentiras y verdades
Aplicaciones escalables en la nube: mentiras y verdades
 
Spark
SparkSpark
Spark
 
Resilient Distributed Dataset - Analisis paper
Resilient  Distributed Dataset - Analisis paper Resilient  Distributed Dataset - Analisis paper
Resilient Distributed Dataset - Analisis paper
 
Meetup Fun[ctional] spark with scala
Meetup Fun[ctional] spark with scalaMeetup Fun[ctional] spark with scala
Meetup Fun[ctional] spark with scala
 
Fun[ctional] spark with scala
Fun[ctional] spark with scalaFun[ctional] spark with scala
Fun[ctional] spark with scala
 
Primeros pasos con aurelia
Primeros pasos con aureliaPrimeros pasos con aurelia
Primeros pasos con aurelia
 
Scala @ Real life
Scala @ Real lifeScala @ Real life
Scala @ Real life
 
Ruby para Java Developers
Ruby para Java DevelopersRuby para Java Developers
Ruby para Java Developers
 
Análisis de datos con Apache Spark
Análisis de datos con Apache SparkAnálisis de datos con Apache Spark
Análisis de datos con Apache Spark
 
Del infierno al cielo
Del infierno al cieloDel infierno al cielo
Del infierno al cielo
 
Update Big Data 2014
Update Big Data 2014Update Big Data 2014
Update Big Data 2014
 
Creación de Builders y DSL's con Groovy
Creación de Builders y DSL's con GroovyCreación de Builders y DSL's con Groovy
Creación de Builders y DSL's con Groovy
 
Carrera de fondo - La continuada lucha de AngularJS - CodeMotion 2015
Carrera de fondo - La continuada lucha de AngularJS - CodeMotion 2015Carrera de fondo - La continuada lucha de AngularJS - CodeMotion 2015
Carrera de fondo - La continuada lucha de AngularJS - CodeMotion 2015
 
Capas de acceso a datos .NET escalables de verdad: el batido perfecto para el...
Capas de acceso a datos .NET escalables de verdad: el batido perfecto para el...Capas de acceso a datos .NET escalables de verdad: el batido perfecto para el...
Capas de acceso a datos .NET escalables de verdad: el batido perfecto para el...
 
Meetup Spark y la Combinación de sus Distintos Módulos
Meetup Spark y la Combinación de sus Distintos MódulosMeetup Spark y la Combinación de sus Distintos Módulos
Meetup Spark y la Combinación de sus Distintos Módulos
 

Último

ENSAYO SOBRE LA ANSIEDAD Y LA DEPRESION.docx
ENSAYO SOBRE LA ANSIEDAD Y LA DEPRESION.docxENSAYO SOBRE LA ANSIEDAD Y LA DEPRESION.docx
ENSAYO SOBRE LA ANSIEDAD Y LA DEPRESION.docx
SandraPiza2
 
FORTI-JUNIO 2024. CIENCIA, EDUCACION, CULTURA,pdf
FORTI-JUNIO 2024. CIENCIA, EDUCACION, CULTURA,pdfFORTI-JUNIO 2024. CIENCIA, EDUCACION, CULTURA,pdf
FORTI-JUNIO 2024. CIENCIA, EDUCACION, CULTURA,pdf
El Fortí
 
Libro infantil sapo y sepo un año entero pdf
Libro infantil sapo y sepo un año entero pdfLibro infantil sapo y sepo un año entero pdf
Libro infantil sapo y sepo un año entero pdf
danitarb
 
Presentación Curso C. Diferencial - 2024-1.pdf
Presentación Curso C. Diferencial - 2024-1.pdfPresentación Curso C. Diferencial - 2024-1.pdf
Presentación Curso C. Diferencial - 2024-1.pdf
H4RV3YH3RN4ND3Z
 
Guia para Docentes como usar ChatGPT Mineduc Ccesa007.pdf
Guia para Docentes como usar ChatGPT  Mineduc Ccesa007.pdfGuia para Docentes como usar ChatGPT  Mineduc Ccesa007.pdf
Guia para Docentes como usar ChatGPT Mineduc Ccesa007.pdf
Demetrio Ccesa Rayme
 
guia de aprendizaje NI Asalto y toma del morro de Arica.docx
guia de aprendizaje NI Asalto y toma del morro de Arica.docxguia de aprendizaje NI Asalto y toma del morro de Arica.docx
guia de aprendizaje NI Asalto y toma del morro de Arica.docx
ClaudiaGarcia963683
 
Lecciones 10 Esc. Sabática. El espiritismo desenmascarado docx
Lecciones 10 Esc. Sabática. El espiritismo desenmascarado docxLecciones 10 Esc. Sabática. El espiritismo desenmascarado docx
Lecciones 10 Esc. Sabática. El espiritismo desenmascarado docx
Alejandrino Halire Ccahuana
 
Teorías de la motivación intrínseca y extrínseca,.pdf
Teorías de la motivación intrínseca y extrínseca,.pdfTeorías de la motivación intrínseca y extrínseca,.pdf
Teorías de la motivación intrínseca y extrínseca,.pdf
Nikolle10
 
PLAN DE CAPACITACION xxxxxxxxxxxxxxxxxxx
PLAN DE CAPACITACION xxxxxxxxxxxxxxxxxxxPLAN DE CAPACITACION xxxxxxxxxxxxxxxxxxx
PLAN DE CAPACITACION xxxxxxxxxxxxxxxxxxx
cportizsanchez48
 
Horarios y fechas de la PAU 2024 en la Comunidad Valenciana.
Horarios y fechas de la PAU 2024 en la Comunidad Valenciana.Horarios y fechas de la PAU 2024 en la Comunidad Valenciana.
Horarios y fechas de la PAU 2024 en la Comunidad Valenciana.
20minutos
 
Sesión: El espiritismo desenmascarado.pdf
Sesión: El espiritismo desenmascarado.pdfSesión: El espiritismo desenmascarado.pdf
Sesión: El espiritismo desenmascarado.pdf
https://gramadal.wordpress.com/
 
Triduo Eudista: Jesucristo, Sumo y Eterno Sacerdote; El Corazón de Jesús y el...
Triduo Eudista: Jesucristo, Sumo y Eterno Sacerdote; El Corazón de Jesús y el...Triduo Eudista: Jesucristo, Sumo y Eterno Sacerdote; El Corazón de Jesús y el...
Triduo Eudista: Jesucristo, Sumo y Eterno Sacerdote; El Corazón de Jesús y el...
Unidad de Espiritualidad Eudista
 
SEMIOLOGIA DE HEMORRAGIAS DIGESTIVAS.pptx
SEMIOLOGIA DE HEMORRAGIAS DIGESTIVAS.pptxSEMIOLOGIA DE HEMORRAGIAS DIGESTIVAS.pptx
SEMIOLOGIA DE HEMORRAGIAS DIGESTIVAS.pptx
Osiris Urbano
 
calendario academico uanl semestre 2024.
calendario academico uanl semestre 2024.calendario academico uanl semestre 2024.
calendario academico uanl semestre 2024.
ClaudiaPalacios64
 
UNA VISITA A SAN PEDRO EN EL VATICANO.pdf
UNA VISITA A SAN PEDRO EN EL VATICANO.pdfUNA VISITA A SAN PEDRO EN EL VATICANO.pdf
UNA VISITA A SAN PEDRO EN EL VATICANO.pdf
Joan Ribes Gallén
 
Blogs_y_Educacion_Por Zaracho Lautaro_.pdf
Blogs_y_Educacion_Por Zaracho Lautaro_.pdfBlogs_y_Educacion_Por Zaracho Lautaro_.pdf
Blogs_y_Educacion_Por Zaracho Lautaro_.pdf
lautyzaracho4
 
Guia Practica de ChatGPT para Docentes Ccesa007.pdf
Guia Practica de ChatGPT para Docentes Ccesa007.pdfGuia Practica de ChatGPT para Docentes Ccesa007.pdf
Guia Practica de ChatGPT para Docentes Ccesa007.pdf
Demetrio Ccesa Rayme
 
El ensayo mexicano en el siglo XX LITERATURA
El ensayo mexicano en el siglo XX LITERATURAEl ensayo mexicano en el siglo XX LITERATURA
El ensayo mexicano en el siglo XX LITERATURA
Armando920824
 
JOSÉ MARÍA ARGUEDAS cuentos breves para secundaria
JOSÉ MARÍA ARGUEDAS cuentos breves para secundariaJOSÉ MARÍA ARGUEDAS cuentos breves para secundaria
JOSÉ MARÍA ARGUEDAS cuentos breves para secundaria
alegrialesliemarlene
 
Semana 10-TSM-del 27 al 31 de mayo 2024.pptx
Semana 10-TSM-del 27 al 31 de mayo 2024.pptxSemana 10-TSM-del 27 al 31 de mayo 2024.pptx
Semana 10-TSM-del 27 al 31 de mayo 2024.pptx
LorenaCovarrubias12
 

Último (20)

ENSAYO SOBRE LA ANSIEDAD Y LA DEPRESION.docx
ENSAYO SOBRE LA ANSIEDAD Y LA DEPRESION.docxENSAYO SOBRE LA ANSIEDAD Y LA DEPRESION.docx
ENSAYO SOBRE LA ANSIEDAD Y LA DEPRESION.docx
 
FORTI-JUNIO 2024. CIENCIA, EDUCACION, CULTURA,pdf
FORTI-JUNIO 2024. CIENCIA, EDUCACION, CULTURA,pdfFORTI-JUNIO 2024. CIENCIA, EDUCACION, CULTURA,pdf
FORTI-JUNIO 2024. CIENCIA, EDUCACION, CULTURA,pdf
 
Libro infantil sapo y sepo un año entero pdf
Libro infantil sapo y sepo un año entero pdfLibro infantil sapo y sepo un año entero pdf
Libro infantil sapo y sepo un año entero pdf
 
Presentación Curso C. Diferencial - 2024-1.pdf
Presentación Curso C. Diferencial - 2024-1.pdfPresentación Curso C. Diferencial - 2024-1.pdf
Presentación Curso C. Diferencial - 2024-1.pdf
 
Guia para Docentes como usar ChatGPT Mineduc Ccesa007.pdf
Guia para Docentes como usar ChatGPT  Mineduc Ccesa007.pdfGuia para Docentes como usar ChatGPT  Mineduc Ccesa007.pdf
Guia para Docentes como usar ChatGPT Mineduc Ccesa007.pdf
 
guia de aprendizaje NI Asalto y toma del morro de Arica.docx
guia de aprendizaje NI Asalto y toma del morro de Arica.docxguia de aprendizaje NI Asalto y toma del morro de Arica.docx
guia de aprendizaje NI Asalto y toma del morro de Arica.docx
 
Lecciones 10 Esc. Sabática. El espiritismo desenmascarado docx
Lecciones 10 Esc. Sabática. El espiritismo desenmascarado docxLecciones 10 Esc. Sabática. El espiritismo desenmascarado docx
Lecciones 10 Esc. Sabática. El espiritismo desenmascarado docx
 
Teorías de la motivación intrínseca y extrínseca,.pdf
Teorías de la motivación intrínseca y extrínseca,.pdfTeorías de la motivación intrínseca y extrínseca,.pdf
Teorías de la motivación intrínseca y extrínseca,.pdf
 
PLAN DE CAPACITACION xxxxxxxxxxxxxxxxxxx
PLAN DE CAPACITACION xxxxxxxxxxxxxxxxxxxPLAN DE CAPACITACION xxxxxxxxxxxxxxxxxxx
PLAN DE CAPACITACION xxxxxxxxxxxxxxxxxxx
 
Horarios y fechas de la PAU 2024 en la Comunidad Valenciana.
Horarios y fechas de la PAU 2024 en la Comunidad Valenciana.Horarios y fechas de la PAU 2024 en la Comunidad Valenciana.
Horarios y fechas de la PAU 2024 en la Comunidad Valenciana.
 
Sesión: El espiritismo desenmascarado.pdf
Sesión: El espiritismo desenmascarado.pdfSesión: El espiritismo desenmascarado.pdf
Sesión: El espiritismo desenmascarado.pdf
 
Triduo Eudista: Jesucristo, Sumo y Eterno Sacerdote; El Corazón de Jesús y el...
Triduo Eudista: Jesucristo, Sumo y Eterno Sacerdote; El Corazón de Jesús y el...Triduo Eudista: Jesucristo, Sumo y Eterno Sacerdote; El Corazón de Jesús y el...
Triduo Eudista: Jesucristo, Sumo y Eterno Sacerdote; El Corazón de Jesús y el...
 
SEMIOLOGIA DE HEMORRAGIAS DIGESTIVAS.pptx
SEMIOLOGIA DE HEMORRAGIAS DIGESTIVAS.pptxSEMIOLOGIA DE HEMORRAGIAS DIGESTIVAS.pptx
SEMIOLOGIA DE HEMORRAGIAS DIGESTIVAS.pptx
 
calendario academico uanl semestre 2024.
calendario academico uanl semestre 2024.calendario academico uanl semestre 2024.
calendario academico uanl semestre 2024.
 
UNA VISITA A SAN PEDRO EN EL VATICANO.pdf
UNA VISITA A SAN PEDRO EN EL VATICANO.pdfUNA VISITA A SAN PEDRO EN EL VATICANO.pdf
UNA VISITA A SAN PEDRO EN EL VATICANO.pdf
 
Blogs_y_Educacion_Por Zaracho Lautaro_.pdf
Blogs_y_Educacion_Por Zaracho Lautaro_.pdfBlogs_y_Educacion_Por Zaracho Lautaro_.pdf
Blogs_y_Educacion_Por Zaracho Lautaro_.pdf
 
Guia Practica de ChatGPT para Docentes Ccesa007.pdf
Guia Practica de ChatGPT para Docentes Ccesa007.pdfGuia Practica de ChatGPT para Docentes Ccesa007.pdf
Guia Practica de ChatGPT para Docentes Ccesa007.pdf
 
El ensayo mexicano en el siglo XX LITERATURA
El ensayo mexicano en el siglo XX LITERATURAEl ensayo mexicano en el siglo XX LITERATURA
El ensayo mexicano en el siglo XX LITERATURA
 
JOSÉ MARÍA ARGUEDAS cuentos breves para secundaria
JOSÉ MARÍA ARGUEDAS cuentos breves para secundariaJOSÉ MARÍA ARGUEDAS cuentos breves para secundaria
JOSÉ MARÍA ARGUEDAS cuentos breves para secundaria
 
Semana 10-TSM-del 27 al 31 de mayo 2024.pptx
Semana 10-TSM-del 27 al 31 de mayo 2024.pptxSemana 10-TSM-del 27 al 31 de mayo 2024.pptx
Semana 10-TSM-del 27 al 31 de mayo 2024.pptx
 

Codemotion 2014 Scala @real life

  • 1. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014 Scala @ Real Life Javier Santos y David Vallejo
  • 2. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014 ¿Quienes somos? David Vallejo @dvnavarro «Una expresión regular es una expresión que no es del todo buena, pero tampoco del todo mala.» @borjamonserrano Javier Santos @jpaniego «Hay dos formas de programar sin errores; solo la tercera funciona» Alan J Perlis
  • 3. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014
  • 4. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014 Índice ❑ Proyecto Antulus ❑ Introducción a Scala ❑ Features ❑ Herramientas ❑ Core – Akka ❑ Datos maestros – Slick ❑ Big data – Spark ❑ API – Spray ❑ Web – Play ❑ Realidad actual ❑ Conclusiones
  • 5. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014 Proyecto Antulus ❑ Objetivo ❑ Ejemplo: SETI@Home ❑ Calculadora distribuida colaborativa ❑ P2P unidades de cálculo ❑ Motivación ❑ Ley Moore -> Multicore ❑ Gran cantidad de datos (Big data) ❑ Aplicaciones ❑ Analytics tendencias mercado ❑ Proyectos investigación genética ❑ Previsión meteorológica ❑ Grafos de afinidad (donantes compatibles, parejas, …).
  • 6. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014
  • 7. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014
  • 8. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014
  • 9. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014
  • 10. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014
  • 11. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014
  • 12. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014
  • 13. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014 Proyecto Antulus
  • 14. Scala Programming @ Madrid Aprender Scala en 5 minutos MADRID · NOV 21-22 · 2014
  • 15. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014 ¿Qué es ? ❑ Lenguaje de propósito general que corre en la JVM ❑ Martin Odersky. EPFL. Carencias de otros lenguajes. ❑ Typesafe (2011) ❑ Características principales ❑ Herencia múltiple ❑ Tipado estático ❑ Inferencia de tipos ❑ Multiparadigma: ❑ Funcional ❑ Orientado a objetos ❑ Aplicaciones de banca, DSLs, … ❑ REPL
  • 16. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014 : Traits trait Animal { def sound: String } trait Cat extends Animal { override def sound = "Miau" } trait Dog extends Animal { override def sound = "Guau" } class Fox extends Cat with Dog
  • 17. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014
  • 18. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014 : Traits class Fox extends Cat with Dog val fox = new Fox() println(fox.sound) //Returns Guau
  • 19. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014 : Case classes case class Point(x: Int, y: Int) val point1 = Point(1, 1) point.x point.y val point2 = point1.copy(y = 2)
  • 20. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014 : Pattern Matching line.getMiddlePoint match { case Point(1, 2) => … case Point(x, y) => ... case Point(x, _) if x > 0 => ... case point @ Point(x, y) => ... case _ => ... }
  • 21. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014 : Implicits case class Point(x: Int, y: Int) implicit def tupleToPoint(tuple: (Int, Int)) = Point(tuple._1, tuple._2) def sumPoints(p1: Point, p2: Point) = Point(p1.x + p2.x, p1.y + p2.y) val p1: Point = Point(1, 2) val p2: (Int, Int) = (3, 4) sumPoints(p1, p2)
  • 22. Scala Programming @ Madrid : Higher order functions MADRID · NOV 21-22 · 2014 object Calculator { type Term = Int type Result = Int type Operation = (Term, Term) => Result val add: Operation = (n1, n2) => n1 + n2 val sub: Operation = (n1, n2) => n1 - n2 val mul: Operation = (n1, n2) => n1 * n2 def calculate(n1: Term, n2: Term)(f: Operation): Result = f(n1, n2) }
  • 23. Scala Programming @ Madrid : Higher order functions MADRID · NOV 21-22 · 2014 object MyCalculus { import Calculator._ val simpleAdd = calculate(2, 5)(add) val customCalculus = calculate(1, 6)((n1, n2) => n1 * n2 + 10) }
  • 24. Scala Programming @ Madrid : …movidas varias. MADRID · NOV 21-22 · 2014 ❑ Renombrado de tipos import com.antulus.{Calculator => CalculatorAux} ❑ Notación infija, métodos como funciones. names.foreach(name => println(name)) names foreach println ❑ Inferencia de punto y comas
  • 25. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014 ¡Al turrón!
  • 26. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014 Core -
  • 27. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014 Core - ❑ CQRS/ES ❑ Akka-Persistence ❑ Clustering ❑ Cluster sharding
  • 28. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014 Core – CQRS/ES «CQRS stands for Command Query Responsibility Segregation. It's a pattern that I first heard described by Greg Young. At its heart is a simple notion that you can use a different model to update information than the model you use to read information” – Martin Fowler “Event Sourcing ensures that all changes to application state are stored as a sequence of events. Not just can we query these events, we can also use the event log to reconstruct past states[...].” – Martin Fowler
  • 29. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014 Core –
  • 30. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014 Core – ❑ Akka-Persistence ❑ Journal === Event Storage ❑ Martin Krasser ❑ Experimental ❑ Command ❑ Persistent Actor ❑ PersistenceId ❑ def onCommand: Receive def persist(event:Any)(callback: Any => Unit) ❑ def onRecover: Receive ❑ Query ❑ : ( Alternativas : InMemoryDataGrids, RDB, NoSQLDB) ❑ Distintos journals (LevelDB, InMemory, Cassandra).
  • 31. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014 Core – ❑ Clustering ❑ En application.conf ❑ Actor Provider: akka.cluster.ClusterActorRefProvider ❑ Lista de nodos del clúster: akka.contrib.pattern.ClusterClient ❑ En el snippet de Scala ❑ Habilitar la «recepcionista» ClusterReceptionistExtension(system) .registerService(clusterListener)
  • 32. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014 Core –
  • 33. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014 Core – ❑ Clustering – semántica de envíos ❑ Send: El mensaje se envía a un único actor del cluster que coincida con el path. Si hay varios que coinciden, se entrega a uno de ellos aleatoriamente. clusterClient ! Send(«/user/handler», «hello», localAffinity = true) ❑ SendToAll: El mensaje se envía a todos los actores que encajen con el path. clusterClient ! SendToAll(«/user/handler», «hi») ❑ Publish: El mensaje se envía a todos los actores suscritos al topic en el que se publica clusterClient ! Publish(«myTopic», «hello»)
  • 34. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014 Core – ❑ Cluster sharding ❑ Garantiza dos cosas ❑ Balanceo de carga: En caso de que se añada un nuevo nodo o que se caiga otro, el número total de actores se "balancea" entre el resto de nodos. ❑ Identificación de manera inequívoca de un actor, de manera que los mensajes dirigidos al mismo actor siempre serán redirigidos al nodo que maneja dicho actor; o dicho de otra forma, no se podrá dar el caso en el que dos nodos procesen un mensaje dirigido al mismo actor.
  • 35. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014 Core – ❑ Cluster sharding – Semántica ❑ Entry: Representa una entidad identificada de manera inequívoca y de estado persistente (Agregado). ❑ Shard: Agrupación de entries. Recomendación: NºShards = 10 x NºMaxNodos ❑ ShardRegion: Agrupación de shards del mismo Entry.
  • 36. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014 Core – ❑ Cluster sharding – Requisitos de implementación ❑ Arrancar extensión de Sharding ClusterSharding(myAkkaSystem) ❑ Arrancar los ShardRegion para los tipos de entries que manejemos sharding.start( typeName = «MyAggregate», entryProps = Some(Props[MyAggregate]), idExtractor = MyAggregate.idExtractor, shardResolver = MyAggregate.shardResolver)
  • 37. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014 Core –
  • 38. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014 Unidad de cálculo – /
  • 39. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014 Unidad de cálculo – ❑ Herramienta orientada al Big Data ❑ Distribución de datos ❑ Analytics ❑ ¿Sustituto de ?
  • 40. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014 Unidad de cálculo – class Job()(implicit context: SparkContext){ val myRdd: RDD[Int] = context.parallelize(1 to 10 toList) def mutateMyRDD(rdd: RDD[Int]): Int = rdd.map(_*2).reduce(_+_) def mutateThis(rdd: RDD[Int]):RDD[(String,Int)] = rdd.map(n => n.toString -> n*3) } val job = new Job() println(job.mutateMyRDD(job.myRdd)) //110
  • 41. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014 Unidad de cálculo - val conf = new SparkConf().set("cassandra.connection.host", "localhost") implicit val context = new SparkContext(conf) val myTable = context.cassandraTable[(String, Int)]( "myKeyspace", "myTable") // Same declaration of Job class val job = new Job() job. mutateThis(job.myRdd).saveToCassandra("myKeyspace", "myTable")
  • 42. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014 Datos maestros -
  • 43. Scala Programming @ Madrid Datos maestros - ❑ Librería de acceso y consulta a bases de datos para Scala MADRID · NOV 21-22 · 2014 ❑ Soporte para múltiples drivers: ❑ DB2,Microsoft Access, Microsoft SQL, PostgreSQL, SQLite, … ❑ Query API’s: ❑ Lifted embedding: Standard. No utiliza tipos Scala directamente ❑ Direct embedding: Experimental. Macros ❑ Permite utilizar SQL embebido (RawSql) ❑ Se trabaja continuamente con colecciones Scala
  • 44. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014 Datos maestros - ❑ Lifted embedding class Users(tag: Tag) extends Table[(String, Int)](tag, "USERS") { def name = column[String]("USER_NAME", O.PrimaryKey) def age = column[Int]("AGE") def * = (name, age) } val users = TableQuery[Users] ❑ Direct embedding @table(name = "USERS") case class User( @column(name = "NAME") name: String, @column(name = "AGE") age: Int)
  • 45. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014 Datos maestros - ❑ Querying… val q1 = users.filter(_.name === "User1") // compiles to SQL (simplified): // select "NAME", "AGE" // from "USERS" // where "NAME" = "User1" val q2 = users.drop(10).take(5) // compiles to SQL (simplified): // select "NAME", "AGE" // from "USERS" // limit 5 offset 10 val q3 = users.sortBy(_.name.desc.nullsFirst) // compiles to SQL (simplified): // select "NAME", "AGE" // from "USERS" // order by "NAME" desc nulls first
  • 46. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014 API Rest -
  • 47. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014 API Rest - ❑ Creación de API’s REST ❑ Arquitectura basada en actores ❑ Futuro Akka-HTTP ❑ Permite peticiones asíncronas. ❑ Incluye DSL para testing
  • 48. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014 API Rest - ❑ Creando rutas val route: Route = path("job" / HexIntNumber) { id => get { complete { s"Getting Calculus job status for $id." } } ~ put { complete { s"Updated Calculus job with id $id." } } }
  • 49. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014 API Rest - ❑ Serializadores case class Job( id: Int, description: String, tags: List[String] ) object MyJsonProtocol extends DefaultJsonProtocol { implicit val jobFormat = jsonFormat3(Job) }
  • 50. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014 API Rest - ❑ Testing "return a job" in { Get("/job/1") ~> route ~> check { responseAs[String] must contain( "Getting Calculus job status for 1.") } }
  • 51. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014 Interfaz web -
  • 52. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014 Interfaz web - ❑ Framework para construir aplicaciones web ❑ Construido sobre Akka ❑ Modelo vista-controlador ❑ Disponible también para Java
  • 53. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014 Interfaz web - object MyCalculator extends Controller { def calculate(op: Operation) = Action { doOperation(op) match { case Success(result) => Ok("Result: " + result) case Failure(t) => InternalServerError } } }
  • 54. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014 ¿Se puede vivir de esto?
  • 55. Scala Programming @ Madrid Uso de Scala - Datos Meetup MADRID · NOV 21-22 · 2014
  • 56. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014 Uso de Scala - Empresas
  • 57. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014 Ámbito laboral ❑ Para la empresa: ❑ Desarrolladores escasos ❑ Dificultad para formar a otros desarrolladores ❑ Miedo al cambio ❑ Para los programadores: ❑ Poca oferta nacional
  • 58. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014 Conclusiones
  • 59. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014 Conclusiones ❑ Dos enfoques ❑ Principiantes: sin experiencia extensa en lenguajes como C++ o Java. ¿Mayor facilidad para cambiar al «chip» funcional? ❑ Gente del mundo Java: facilidad de adaptarse progresivamente (Uso de var’s, bucles while, …). ❑ En cualquier caso: «A escribir se aprende leyendo» ❑ Jugar y consultar la REPL siempre en caso de duda.
  • 60. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014 Conclusiones ❑ Tecnologías nuevas ❑ Poca documentación ❑ Comunidad escasa ❑ Escalables, distribuidas y clusterizables
  • 61. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014
  • 62. Scala Programming @ Madrid MADRID · NOV 21-22 · 2014 Scala @ Real Life Javier Santos y David Vallejo