SlideShare une entreprise Scribd logo
1  sur  53
Télécharger pour lire hors ligne
Experience report 2009 - 2013
Scala en proyectos de
vinculación ANCAP-UR
Germán Ferrari
Marzo 2013
@gerferra
uy.linkedin.com/in/gerferra/
Proyectos
2009 - 2010
"Modelo estocástico
múltiple-etapa para apoyo
a la toma de decisiones
en la planificación de la
producción"
2012 - 2013
Extensión al proyecto
original. En curso
Equipo
Ing. Quim. Bernardo Zimberg - ANCAP
M.Sc. Carlos Testuri - FIng, UR
Ing. Comp. Germán Ferrari - FIng, UR
Componentes
Modelo matemático
Escrito en Mathprog
Resuelto con herramientas de GLPK
Aplicación de escritorio
Inicialmente: Entrada de datos
Con el tiempo
Ejecución y monitoreo del solver
Reporte de resultados
Scala
Por qué Scala?
Único programando, fascinado con el lenguaje
Java era una alternativa viable
Scala es "sólo una biblioteca"
Por qué Scala?
Tipado estático
Favorece
inmutabilidad
Código legible y corto
Inferencia de tipos
Sin boilerplate
DSL friendly
Biblioteca estándar
Colecciones
Procesos
Parsers
REPL
Comunidad
Fácil! para programadores Java ;)
Herramientas y bibliotecas usadas
Scala-Swing
spray-json
Scala IO
ScalaTest
scala.sys.process
PackratParsers
sbt, sbt-assembly, sbteclipse
Scala IDE for Eclipse
Scala-Swing
Wrapper sobre Swing
Se integra naturalmente en Scala
Feel declarativo
API más simple
Usando MVP inspirado en el propuesto en
GWT
No muy Scala-like pero funciona
Scala-Swing - ejemplos
object HelloWorld extends SimpleSwingApplication {
def top = new MainFrame {
title = "Hello, World!"
contents = new Button {
text = "Click Me!"
}
}
}
Scala-Swing - ejemplos
val b = new Button {
text = "OK"
font = f
preferredSize = (20, 20)
}
listenTo(b)
reactions += {
case ButtonClicked(`b`) => //reaction here
}
Scala-Swing - ejemplos
new FlowPanel {
contents ++= new Button("a") :: new Button("b") :: Nil
}
new BoxPanel(Horizontal) {
contents ++= new Label("text") :: HStrut(2) ::
new Button("a") :: HGlue :: new Button("b") :: Nil
}
new BorderPanel {
layout(new Button("North")) = Position.North
layout(new Button("Center")) = Position.Center
}
Scala-Swing - a tener en cuenta
No es wrapper 100% completo
No está mantenido activamente
Relativamente fácil de extender
ScalaSwingContrib
Bastante fácil de usar pero falta documentación
(Java)Swing usa reflection para algunas cosas
ScalaFX
(De)Serialización de JSON basado en Type-
classes
trait JsonReader[T] { def read(json: JsValue): T }
trait JsonWriter[T] { def write(obj: T): JsValue }
trait JsonFormat[T] extends
JsonReader[T] with JsonWriter[T]
Usado para persistir configuración y archivos
de proyectos
spray-json
spray-json - ejemplos
case class Color(name: String, red: Int, green: Int,
blue: Int)
object MyJsonProtocol extends DefaultJsonProtocol {
implicit val colorFormat: JsonFormat[Color] =
jsonFormat4(Color)
}
import MyJsonProtocol.colorFormat
val json = Color("CadetBlue", 95, 158, 160).toJson
val color = json.convertTo[Color]
spray-json - ejemplos
object JSON extends DefaultJsonProtocol {
implicit object PathJsonFormat extends RootJsonFormat[Path] {
def write(c: Path): JsValue = c.path.toJson
def read(value: JsValue): Path = value.convertTo[String] // string2path
}
implicit val AppCfgFormat = jsonFormat(AppCfg, "paths", "selPath")
}
case class AppCfg(paths: Set[Path], selPath: Option[Path])
spray-json - ejemplos
type RetRels = Seq[(Ship, Ship)]
implicit val RetRelsWriter = new RootJsonWriter[RetRels] {
def write(rels: RetRels) =
rels.map { case (s1, s2) => s1.name -> s2.name }.toJson
}
implicit val RetRelsReader = new RootJsonReader[Seq[Ship] => RetRels] {
def read(value: JsValue) = { imps =>
val ship = imps.map { s => s.name -> s }.toMap
value.convertTo[Seq[(String, String)]] map {
case (n1, n2) => ship(n1) -> ship(n2)
}
}
}
val retRels = json.convertTo[Seq[Ship] => RetRels].apply(imps)
spray-json - resumen
Lógica de conversión desacoplada
Gran control sobre la conversión
Múltiples implementaciones
Distintos niveles de refinamiento
Conversiones asimétricas
Escalable
Agregar nuevas conversiones es barato
Las conversiones se pueden combinar
Scala IO
Entrada / salida en Scala
Manejo simple, portable, correcto y eficiente de
archivos y otros recursos de E/S
Componentes
IO Básico
Archivos
Acceso asincrónico
Processor
Scala IO - ejemplos
import scalax.file.Path
val path = Path("file")
path.byteArray // lee todos los bytes en memoria
// `bytes` es lazy y no lee los bytes hasta que son
// requeridos o forzados
path.bytes.drop(5).take(5).force
// lee todos los bytes en un String. El Codec puede ser
// implícito
path.string(Codec.UTF8)
Scala IO - ejemplos
def save[T: JsonFormat](t: T, path: Path) {
path.write(t.toJson.prettyPrint)(Codec.UTF8)
}
def load[T: JsonFormat](path: Path): T = {
path.string(Codec.UTF8).asJson.convertTo[T]
}
Scala IO - ejemplos
def command: (String, URL) = {
val name = if (isWin) "cmd.exe" else "cmd"
name -> this.getClass.getResource(name)
}
val basePath: Path = ...
val (cmdName, cmdResource) = command
val cmdPath = basePath / "cmd" / cmdName
Resource.fromURL(cmdResource).copyDataTo(cmdPath)
cmdPath.attributes = Seq(ExecuteAccessAttribute(true))
Scala IO - ejemplos
import scalax.io._
val output:Output = Resource.fromOutputStream(
new java.io.FileOutputStream("daily-scala.out"))
val in:Input = Resource.fromFile("daily-scala.out")
for{
processor <- output.outputProcessor
out = processor.asOutput
}{
// todas las escrituras van a ir al mismo output stream/channel abierto
out.write("first writen")
out.write("second write")
}
// muestra las líneas escritas
in.string
ScalaTest
Framework de testing
Multiples estilos de test
TDD - FunSuite
BDD - FunSpec
FeatureSpec
ScalaTest - ejemplos
import org.junit.runner.RunWith
import org.scalatest.junit.JUnitRunner
@RunWith(classOf[JUnitRunner])
class DummyTest extends FlatSpec with ShouldMatchers {
"A Stack" should "pop values in last-in-first-out order" in {
val stack = new Stack[Int]
stack.push(1)
stack.push(2)
stack.pop() should equal (2)
stack.pop() should equal (1)
}
it should "throw NoSuchElementException if an empty stack is popped" in {
val emptyStack = new Stack[String]
evaluating { emptyStack.pop() } should produce [NoSuchElementException]
}}
scala.sys.process
API para ejecutar y controlar procesos
Indicar qué correr y cómo
Manejar E/S
Correr proceso
Utilizado para ejecución y monitoreo del solver
scala.sys.process - ejemplos
import scala.sys.process._
// Ejecuta "ls" y envía la salida a stdout
"ls".!
// Ejecuta "ls" y devuelve `Stream[String]` con la salida.
val contents = Process("ls").lines
// Ejecuta "ls" y devuelve un String con la salida.
def contentsOf(dir: String): String = Seq("ls", dir).!!
scala.sys.process - ejemplos
new URL("http://databinder.net/dispatch/About") #>
"grep JSON" #>>
new File("About_JSON") !
scala.sys.process - ejemplos
val builder = Process(glpsol.cmd,
Seq(
"--model", modelPath.path,
"--data", dataPath.path,
"--check"))
val logger = ProcessLogger { line =>
onEDT { view.append(line) }
}
val proc = builder.run(logger)
PackratParsers
Construcción de parsers dentro del lenguaje
Admiten gramaticas recursivas por la izquierda
Los parsers comunes entran en loop
Experimentos muy básicos de parsear
entidades Mathprog
PackratParsers - ejemplos
expr ::= term { "+" term | "-" term }
term ::= factor { "*" factor | "/" factor }
factor ::= floatingPointNumber | "(" expr ")".
import scala.util.parsing.combinator._
class Arith extends JavaTokenParsers with PackratParsers {
lazy val expr: PackratParser[Any] = term ~ rep("+" ~ term | "-" ~ term)
lazy val term: PackratParser[Any] = factor ~ rep("*" ~ factor | "/" ~ factor)
lazy val factor: PackratParser[Any] = floatingPointNumber | "(" ~ expr ~ ")"
}
PackratParsers - ejemplos
sealed trait Expr
case class Add(t1: Expr, t2: Expr) extends Expr
case class Sub(t1: Expr, t2: Expr) extends Expr
sealed trait Term extends Expr
case class Mul(f1: Expr, f2: Expr) extends Term
case class Div(f1: Expr, f2: Expr) extends Term
sealed trait Factor extends Term
case class Num(n: Float) extends Factor
PackratParsers - ejemplos
class Arith extends JavaTokenParsers with PackratParsers {
lazy val expr: PackratParser[Expr] =
term ~ rep("+" ~ term | "-" ~ term) ^^ {
case term ~ list => ???
}
lazy val term: PackratParser[Expr] =
factor ~ rep("*" ~ factor | "/" ~ factor) ^^ {
case factor ~ list => ???
}
lazy val factor: PackratParser[Expr] = (
floatingPointNumber ^^ { ??? }
| "(" ~ expr ~ ")" ^^ { ??? } )
}
PackratParsers - ejemplos
lazy val factor: PackratParser[Expr] = (
floatingPointNumber ^^ { str => Num(str.toFloat) }
| "(" ~> expr <~ ")")
PackratParsers - ejemplos
lazy val term: PackratParser[Expr] =
factor ~ rep("*" ~ factor | "/" ~ factor) ^^ {
case factor ~ list =>
@tailrec
def parseFactor(e1: Expr, rest: List[String ~ Expr]): Expr = rest match {
case Nil => e1
case "*" ~ e2 :: rest1 => parseFactor(Mul(e1, e2), rest1)
case "/" ~ e2 :: rest1 => parseFactor(Div(e1, e2), rest1)
}
parseFactor(factor, list)
}
PackratParsers - ejemplos
def parse(str: String): Expr = {
val parser = new Arith
import parser._
parser.parse(phrase(expr), str) match {
case Success(result, _) => result
case failure: NoSuccess => sys.error(failure.toString)
}
}
parse("2 + 2 * 3 / (5 + 8)")
// Add(Num(2.0),Div(Mul(Num(2.0),Num(3.0)),Add(Num(5.0),Num(8.0))))
parse("2 + 2 * 3 / 5 + 8")
// Add(Add(Num(2.0),Div(Mul(Num(2.0),Num(3.0)),Num(5.0))),Num(8.0))
parse("2") // Num(2.0)
Otros - importar proyectos
type Loader = Path => Option[Project]
object Sega1_0_0Loader extends Loader { ... }
object Sega2_0_0Loader extends Loader { ... }
val loaders =
Sega2_0_0Loader :: Sega1_0_0Loader :: Nil
Otros - importar proyectos
def fromPath(path: Path): Option[Project] =
loaders.flatMap { load => load(path) }.headOption
Otros - importar proyectos
def fromPath(path: Path): Option[Project] =
loaders.view.flatMap { load => load(path) }.headOption
Otros - importar proyectos
def fromPath(path: Path): Future[Option[Project]] =
future {
loaders.view.flatMap { load => load(path) }.headOption
}
Otros - importar proyectos
def fromPath(path: Path): Future[Option[Project]] =
future {
loaders.view.flatMap { load => load(path) }.headOption
}
for {
optP <- fromPath(path)
p <- optP
} {
eventBus.publish(StatusMessage(s"Proj. ${p.name}"))
}
sbt
name := "sega"
version := "2.0.0-SNAPSHOT"
scalaVersion := "2.10.1"
libraryDependencies <+= scalaVersion( "org.scala-lang" % "scala-swing" % _ )
libraryDependencies ++= Seq(
"io.spray" %% "spray-json" % "1.2.3",
"com.github.scala-incubator.io" %% "scala-io-file" % "0.4.2",
"org.scalatest" %% "scalatest" % "1.9.1" % "test")
sbt - plugins
addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-
plugin" % "2.1.2")
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.8.7")
sbteclipse
EclipseKeys.executionEnvironment := Some
(EclipseExecutionEnvironment.JavaSE16)
EclipseKeys.withSource := true
EclipseKeys.createSrc := EclipseCreateSrc.Default +
EclipseCreateSrc.Resource
sbt-assembly
import AssemblyKeys._
assemblySettings
// ... buil.sbt mostrado antes ...
mainClass in assembly := Some("uy.edu.fing.inco.invop.ancap.sega.ui.Sega")
packageOptions in assembly +=
Package.ManifestAttributes("SplashScreen-Image" ->
"uy/edu/fing/inco/invop/ancap/sega/splash.png")
Scala IDE for Eclipse
Plugin para desarrollo con Scala en Eclipse
Update site Eclipse Indigo y Scala 2.10
http://download.scala-ide.org/sdk/e37/scala210/stable/site
Lo peor
El compilador es lento
Las herramientas de desarrollo consumen
mucha memoria
Lo mejor
Se puede empezar "pequeño" y crecer a
demanda
Scala es escalable => nuestras aplicaciones
son escalables
Se puede tener tipado estático y escribir poco
al mismo tiempo :)
Referencias
Scala general
http://docs.scala-lang.org/overviews/
Scala-Swing
http://www.scala-lang.org/sid/8
http://ingomaier.blogspot.com/2010/11/scalaswing-package-in-28-and-beyond.
html
https://github.com/scala/scala/tree/master/docs/examples/swing
https://github.com/benhutchison/ScalaSwingContrib
http://www.interactivemesh.org/testspace/j3dmeetsscala.html
MVP
https://developers.google.com/web-
toolkit/doc/latest/DevGuideMvpActivitiesAndPlaces
Referencias
Reactive programming
https://github.com/ingoem/scala-react
https://github.com/nafg/reactive/tree/master/reactive-core
http://infoscience.epfl.ch/record/176887/files/DeprecatingObservers2012.pdf
http://etorreborre.blogspot.com/2011/10/counting-words-part-2.html
ScalaFX
https://code.google.com/p/scalafx/
https://github.com/rafonso/ProScalaFX
spray-json
https://github.com/spray/spray-json
Referencias
Scala IO
http://jesseeichar.github.com/scala-io-doc/
http://daily-scala.blogspot.com/2012/07/scala-io-getting-started.html (y
subsecuentes posts)
ScalaTest
http://www.scalatest.org/
http://www.scalatest.org/user_guide/using_scalatest_with_eclipse
Specs²
http://etorreborre.github.com/specs2/
Referencias
scala.sys.process
http://www.scala-lang.
org/archives/downloads/distrib/files/nightly/docs/library/index.html#scala.sys.
process.package
http://www.scala-lang.
org/archives/downloads/distrib/files/nightly/docs/library/index.html#scala.sys.
process.ProcessBuilder
PackratParsers
http://www.artima.com/pins1ed/combinator-parsing.html
http://www.scala-lang.
org/archives/downloads/distrib/files/nightly/docs/library/index.html#scala.util.
parsing.combinator.Parsers
http://www.scala-lang.
org/archives/downloads/distrib/files/nightly/docs/library/index.html#scala.util.
parsing.combinator.PackratParsers
Referencias
sbt
http://www.scala-sbt.org/
https://github.com/paulp/sbt-extras
https://github.com/sbt/sbt-assembly
https://github.com/typesafehub/sbteclipse
Scala IDE for Eclipse
http://scala-ide.org/
:)
Muchas gracias

Contenu connexe

Tendances (14)

Apache spark meetup
Apache spark meetupApache spark meetup
Apache spark meetup
 
Groovy
GroovyGroovy
Groovy
 
Presentacion6
Presentacion6Presentacion6
Presentacion6
 
Procesamiento de datos a gran escala con Apache Spark
Procesamiento de datos a gran escala con Apache SparkProcesamiento de datos a gran escala con Apache Spark
Procesamiento de datos a gran escala con Apache Spark
 
Python 4
Python 4Python 4
Python 4
 
Seguridad en PDF: Adobe ¬¬
Seguridad en PDF: Adobe ¬¬Seguridad en PDF: Adobe ¬¬
Seguridad en PDF: Adobe ¬¬
 
Lab archivos
Lab archivosLab archivos
Lab archivos
 
Introduccion a python 3
Introduccion a python 3Introduccion a python 3
Introduccion a python 3
 
ED 03 2_listas especiales
ED 03 2_listas especialesED 03 2_listas especiales
ED 03 2_listas especiales
 
Spark Hands-on
Spark Hands-onSpark Hands-on
Spark Hands-on
 
Sobrecarga de operadores
Sobrecarga de operadoresSobrecarga de operadores
Sobrecarga de operadores
 
.NET UY Meetup 6 - Integrando con C/C++ por medio de P/Invoke by Juan Ramirez
.NET UY Meetup 6 - Integrando con C/C++ por medio de P/Invoke by Juan Ramirez.NET UY Meetup 6 - Integrando con C/C++ por medio de P/Invoke by Juan Ramirez
.NET UY Meetup 6 - Integrando con C/C++ por medio de P/Invoke by Juan Ramirez
 
Introduccion A Groovy
Introduccion A GroovyIntroduccion A Groovy
Introduccion A Groovy
 
Clase1_Python-CTIC
Clase1_Python-CTICClase1_Python-CTIC
Clase1_Python-CTIC
 

Similaire à Scala en proyectos de vinculación Ancap-UR - 2013-03

Desarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo QuilónDesarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo Quilónbetabeers
 
Tutorial en Apache Spark - Clasificando tweets en realtime
Tutorial en Apache Spark - Clasificando tweets en realtimeTutorial en Apache Spark - Clasificando tweets en realtime
Tutorial en Apache Spark - Clasificando tweets en realtimeSocialmetrix
 
Java 8 introducción a expresiones lambdas y api stream
Java 8  introducción a expresiones lambdas y api streamJava 8  introducción a expresiones lambdas y api stream
Java 8 introducción a expresiones lambdas y api streamEudris Cabrera
 
Java 8: Expresiones Lambdas y API Stream BarCamp RD 2016
Java 8: Expresiones Lambdas y API Stream BarCamp RD 2016Java 8: Expresiones Lambdas y API Stream BarCamp RD 2016
Java 8: Expresiones Lambdas y API Stream BarCamp RD 2016Eudris Cabrera
 
Web services restful con JAX-RS
Web services restful con JAX-RSWeb services restful con JAX-RS
Web services restful con JAX-RSVortexbird
 
Kit de supervivencia para Java 8 : como prepararse para Java 9
Kit de supervivencia para Java 8 :  como prepararse para Java 9Kit de supervivencia para Java 8 :  como prepararse para Java 9
Kit de supervivencia para Java 8 : como prepararse para Java 9Eudris Cabrera
 
Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...
Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...
Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...Eudris Cabrera
 
Javascript Básico
Javascript BásicoJavascript Básico
Javascript Básicocamposer
 
Java fundamentos -15 consejos practicos open saturday 2018
Java fundamentos -15 consejos practicos open saturday 2018Java fundamentos -15 consejos practicos open saturday 2018
Java fundamentos -15 consejos practicos open saturday 2018Eudris Cabrera
 
Presentación Java Evolution - GlobalLogic Club
Presentación Java Evolution - GlobalLogic ClubPresentación Java Evolution - GlobalLogic Club
Presentación Java Evolution - GlobalLogic ClubGlobalLogic Latinoamérica
 

Similaire à Scala en proyectos de vinculación Ancap-UR - 2013-03 (20)

Desarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo QuilónDesarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo Quilón
 
Tutorial en Apache Spark - Clasificando tweets en realtime
Tutorial en Apache Spark - Clasificando tweets en realtimeTutorial en Apache Spark - Clasificando tweets en realtime
Tutorial en Apache Spark - Clasificando tweets en realtime
 
Java 8 introducción a expresiones lambdas y api stream
Java 8  introducción a expresiones lambdas y api streamJava 8  introducción a expresiones lambdas y api stream
Java 8 introducción a expresiones lambdas y api stream
 
Java 8: Expresiones Lambdas y API Stream BarCamp RD 2016
Java 8: Expresiones Lambdas y API Stream BarCamp RD 2016Java 8: Expresiones Lambdas y API Stream BarCamp RD 2016
Java 8: Expresiones Lambdas y API Stream BarCamp RD 2016
 
04 j flex
04 j flex04 j flex
04 j flex
 
Apuntes de XSD
Apuntes de XSDApuntes de XSD
Apuntes de XSD
 
Introducción a Scala
Introducción a ScalaIntroducción a Scala
Introducción a Scala
 
Curso Bash 3
Curso Bash 3Curso Bash 3
Curso Bash 3
 
Web services restful con JAX-RS
Web services restful con JAX-RSWeb services restful con JAX-RS
Web services restful con JAX-RS
 
Kit de supervivencia para Java 8 : como prepararse para Java 9
Kit de supervivencia para Java 8 :  como prepararse para Java 9Kit de supervivencia para Java 8 :  como prepararse para Java 9
Kit de supervivencia para Java 8 : como prepararse para Java 9
 
Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...
Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...
Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...
 
Computación distribuida usando Python
Computación distribuida usando PythonComputación distribuida usando Python
Computación distribuida usando Python
 
Javascript Básico
Javascript BásicoJavascript Básico
Javascript Básico
 
Java fundamentos -15 consejos practicos open saturday 2018
Java fundamentos -15 consejos practicos open saturday 2018Java fundamentos -15 consejos practicos open saturday 2018
Java fundamentos -15 consejos practicos open saturday 2018
 
Java 7- Java Day Guatemala
Java 7- Java Day GuatemalaJava 7- Java Day Guatemala
Java 7- Java Day Guatemala
 
Programación de código
Programación de códigoProgramación de código
Programación de código
 
ARCHIVOS
ARCHIVOS ARCHIVOS
ARCHIVOS
 
Curso prog sist
Curso prog sistCurso prog sist
Curso prog sist
 
Presentación Java Evolution - GlobalLogic Club
Presentación Java Evolution - GlobalLogic ClubPresentación Java Evolution - GlobalLogic Club
Presentación Java Evolution - GlobalLogic Club
 
23 sparql
23 sparql23 sparql
23 sparql
 

Dernier

dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaarkananubis
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxJOSEMANUELHERNANDEZH11
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxJOSEFERNANDOARENASCA
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxAlexander López
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptJavierHerrera662252
 

Dernier (20)

dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en mina
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptx
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptx
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
 

Scala en proyectos de vinculación Ancap-UR - 2013-03