SlideShare una empresa de Scribd logo
1 de 62
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 platformEduard 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 EEJosé Manuel López
 
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 Meetupdhiguero
 
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-2014Stratio
 
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 verdadesEnrique Catala Bañuls
 
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 SparkEduardo Castro
 
Update Big Data 2014
Update Big Data 2014Update Big Data 2014
Update Big Data 2014Stratebi
 
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 GroovyJose 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 2015José 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ódulosJorge 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 Apache Spark - Madrid Meetup
Primeros pasos con Apache Spark - Madrid MeetupPrimeros pasos con Apache Spark - Madrid Meetup
Primeros pasos con Apache Spark - Madrid Meetup
 
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
 
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
 
Resilient Distributed Dataset - Analisis paper
Resilient  Distributed Dataset - Analisis paper Resilient  Distributed Dataset - Analisis paper
Resilient Distributed Dataset - Analisis paper
 
Spark
SparkSpark
Spark
 
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

TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSTEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSjlorentemartos
 
La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.amayarogel
 
La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...JonathanCovena1
 
CLASE - La visión y misión organizacionales.pdf
CLASE - La visión y misión organizacionales.pdfCLASE - La visión y misión organizacionales.pdf
CLASE - La visión y misión organizacionales.pdfJonathanCovena1
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...JAVIER SOLIS NOYOLA
 
Historia y técnica del collage en el arte
Historia y técnica del collage en el arteHistoria y técnica del collage en el arte
Historia y técnica del collage en el arteRaquel Martín Contreras
 
TECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptx
TECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptxTECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptx
TECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptxKarlaMassielMartinez
 
origen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioorigen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioELIASAURELIOCHAVEZCA1
 
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxTIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxlclcarmen
 
Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónLourdes Feria
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfAngélica Soledad Vega Ramírez
 
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...Carlos Muñoz
 
INSTRUCCION PREPARATORIA DE TIRO .pptx
INSTRUCCION PREPARATORIA DE TIRO   .pptxINSTRUCCION PREPARATORIA DE TIRO   .pptx
INSTRUCCION PREPARATORIA DE TIRO .pptxdeimerhdz21
 
plande accion dl aula de innovación pedagogica 2024.pdf
plande accion dl aula de innovación pedagogica 2024.pdfplande accion dl aula de innovación pedagogica 2024.pdf
plande accion dl aula de innovación pedagogica 2024.pdfenelcielosiempre
 
Éteres. Química Orgánica. Propiedades y reacciones
Éteres. Química Orgánica. Propiedades y reaccionesÉteres. Química Orgánica. Propiedades y reacciones
Éteres. Química Orgánica. Propiedades y reaccionesLauraColom3
 
CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADauxsoporte
 
Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Lourdes Feria
 

Último (20)

TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOSTEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
TEMA 13 ESPAÑA EN DEMOCRACIA:DISTINTOS GOBIERNOS
 
La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.
 
La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...
 
Presentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza MultigradoPresentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza Multigrado
 
Unidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la InvestigaciónUnidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la Investigación
 
Tema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdf
Tema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdfTema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdf
Tema 8.- PROTECCION DE LOS SISTEMAS DE INFORMACIÓN.pdf
 
CLASE - La visión y misión organizacionales.pdf
CLASE - La visión y misión organizacionales.pdfCLASE - La visión y misión organizacionales.pdf
CLASE - La visión y misión organizacionales.pdf
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
 
Historia y técnica del collage en el arte
Historia y técnica del collage en el arteHistoria y técnica del collage en el arte
Historia y técnica del collage en el arte
 
TECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptx
TECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptxTECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptx
TECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptx
 
origen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioorigen y desarrollo del ensayo literario
origen y desarrollo del ensayo literario
 
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxTIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
 
Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcción
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
 
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
 
INSTRUCCION PREPARATORIA DE TIRO .pptx
INSTRUCCION PREPARATORIA DE TIRO   .pptxINSTRUCCION PREPARATORIA DE TIRO   .pptx
INSTRUCCION PREPARATORIA DE TIRO .pptx
 
plande accion dl aula de innovación pedagogica 2024.pdf
plande accion dl aula de innovación pedagogica 2024.pdfplande accion dl aula de innovación pedagogica 2024.pdf
plande accion dl aula de innovación pedagogica 2024.pdf
 
Éteres. Química Orgánica. Propiedades y reacciones
Éteres. Química Orgánica. Propiedades y reaccionesÉteres. Química Orgánica. Propiedades y reacciones
Éteres. Química Orgánica. Propiedades y reacciones
 
CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDAD
 
Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...
 

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