KEPLER Diseño y ejecución automatizada de flujos de trabajo científico Blas M. Benito de Pando Departamento de Botánica Universidad de Granada
17 de noviembre de 2009
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6
Contenidos 1 2 3 4 5 6 7 8 9 10 11
Inicio Introducción Kepler: Fundamentos Básicos Prácticas con Kepler Práctica 1: ¡Hola Mundo! Práctica 2: Procesamiento de texto Práctica 3: Busca la bomba Práctica 4: Acceso a Servicio Web WSDL Práctica 5: Acceso a Servicio Web REST Práctica 6: Consultas sobre mapas Contacto
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6
Contacto
Objetivos
Dar a conocer Kepler como una herramienta útil para la investigación en ecología Mostrar los fundamentos básicos y el potencial del sistema diseñando y ejecutando varios flujos de trabajo (FT) sencillos
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
INTRODUCCIÓN: Flujos de Trabajo
P6
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6
Contacto
¿Qué es un FT? Es una descripción del contexto y las relaciones entre todas las operaciones necesarias para culminar un proyecto...
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6
Contacto
¿Qué es un FT? Es una descripción del contexto y las relaciones entre todas las operaciones necesarias para culminar un proyecto... ...que se compone de: entradas (datos) algoritmos (procesamiento de datos) resultados (información) parámetros y constantes canales (circulación de datos) un modo de hacer las cosas
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
Representación visual de un FT
P5
P6
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6
Contacto
Diseño y ejecución de FTs Diseño: análisis de la tarea a realizar herramientas de apoyo: diagramas de flujo Ejecución: Tarea sencilla: trabajo artesanal Tarea compleja: ejecución automática > scripts o programa de diseño y ejecución de FTs
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
KEPLER: Fundamentos Básicos
P6
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
¿Qué es Kepler? Entorno de modelado y resolución de problemas
P5
P6
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6
¿Qué es Kepler? Entorno de modelado y resolución de problemas Características: colaborativo, de código abierto y multiplataforma diseño visual y ejecución automatizada de FTs acceso a programas, datos y servicios locales o remotos
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6
Un poco de cine: actores y directores Un flujo de Kepler está compuesto (entre otras cosas) por un Director y varios Actores
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6
Contacto
El Director Define el Modelo computacional del FT número de iteraciones ejecución secuencial o paralela ejecución síncrona o asíncrona
Distinto Director para cada modelo computacional (SDF, PN, y otros) Calcula el orden de ejecución de los actores Comprueba la coherencia del flujo de trabajo
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
El Director Selección del Director adecuado:
P4
P5
P6
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6
Los Actores Elemento fundamental de Kepler (+350 actores) Puertos de entrada y salida de datos Comportamiento polimórfico: cambia según el tipo de Director Actor Compuesto: opaco o transparente
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6
Tipos de actores Gestión de ficheros: Crear directorios, copiar, pegar, comprimir, etc.
Contacto
Inicio
Introducción
Kepler
Prácticas
Tipos de actores Captura de datos
P1
P2
P3
P4
P5
P6
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6
Tipos de actores Flujo de cadenas de caracteres (texto plano)
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6
Tipos de actores Procesamiento de ficheros XML (Extensible Markup Language): estándar para el intercambio de información estructurada
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6
Contacto
Tipos de actores Procesamiento de imágenes: mediante ImageJ: http://rsbweb.nih.gov
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
Tipos de actores Conversión entre formatos de datos
P5
P6
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
Tipos de actores Cálculo numérico y estadístico
P3
P4
P5
P6
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
Tipos de actores Procesamiento de información geográfica
P6
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
Tipos de actores Control y estructura del flujo de trabajo
P5
P6
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
Los puertos: distintos tipos Tipos: puerto singular o múltiple entrada, salida y entrada-salida
P3
P4
P5
P6
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6
Los puertos: casos especiales Entrada de datos desde un canal, o desde la ventana de configuración del propio actor
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
Los datos: señales, tipos y estructuras token (señal): datos encapsulados de control de datos: simples o estructuras
P6
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6
Los datos: tipos Conversión automática entre ellos cuando no hay pérdida de información. int → números enteros long → grandes números enteros float → decimales (poco usado) double → decimales (mayor precisión) string → cadenas de caracteres boolean → (true o false) xmltoken → xml
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6
Los datos: estructuras vector (array ) {1, 2, 6} → enteros (int) {1.0, 2.3, 6.5} → decimales (double) {“a”, “b”, “c”} → cadena (string) matriz (matrix) [1, 1; 3, 4] registro (record) {a = 1, b = “foo”} secuencia: columma de valores object: objetos variados (imagen y otros)
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6
Contacto
Los puertos: configuración de tipos de datos Los puertos pueden recibir datos de distinto tipo: cadenas de texto, números enteros, etc. Dos puertos interconectados por un canal deben tener el mismo tipo de datos: si no es así, ¡ERROR! Kepler puede solucionar incongruencias automáticamente, con algunas condiciones El tipo GENERAL acepta cualquier tipo de token
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
PRÁCTICAS Diseño y Ejecución de Flujos de Trabajo
P6
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
Destrezas básicas Durante las prácticas desarrollaremos los siguientes temas: 1 familiarización con el interfaz 2 búsqueda de componentes 3 diseño básico de FTs 4 configuración de actores y directores 5 conexión a servicios web 6 FTs iterativos
P6
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
PRÁCTICA 1 ¡Hola Mundo!
P4
P5
P6
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P1: ¡Hola Mundo! Objetivo: FT que muestre la cadena ¡Hola Mundo!. Destrezas: familiarización con el interfaz de Kepler búsqueda de componentes diseño básico de un FT configuración de iteraciones animación del FT uso de parámetros anotaciones
P6
Contacto
Inicio
Introducción
Kepler
Prácticas
P1: ¡Hola Mundo! Interfaz de Kepler
P1
P2
P3
P4
P5
P6
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6
P1: ¡Hola Mundo! Diseño inicial: 1 buscar y arrastrar actor String Constant 2 escribir ¡Hola Mundo! en String Constant 3 añadir actor Display 4 comprobar puertos pasándoles el puntero 5 crea un canal entre ambos actores 6 añadir director SDF 7 pulsa botón RUN 8 ¿que ocurre?
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6
P1: ¡Hola Mundo! Iteraciones y animación: 1 pulsa botón STOP 2 cambia parámetro iterations del director a 1 3 pulsa de nuevo el botón RUN 4 menú Tools > Animate at runtime: 500 ms 5 pulsa RUN Animate at Runtime ralentiza la ejecución del FT; solo es útil para búsqueda de errores y demostración
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6
Contacto
P1: ¡Hola Mundo! Usando parámetros: 1 añade el elemento StringParameter 2 dale “¡Hola Mundo!” como valor 3 cambia su nombre a CADENA 4 cambia el valor de String Constant a $CADENA 5 pulsa RUN 6 cambia el valor del parámetro CADENA 7 pulsa RUN NOTA: Podemos invocar un parámetro usando su nombre (+ $) desde cualquier punto de un FT
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6
P1: ¡Hola Mundo! Anotando el flujo de trabajo 1 añade el elemento Annotation 2 escribe “¡HOLA MUNDO!” (textSize = 18; textColor (Choose) = negro) 3 copia y pega el elemento Annotation 4 escribe “Este es mi primer flujo de trabajo con Kepler” (textSize = 14; textColor = a tu gusto) 5 guarda el flujo como “1_hola_mundo.xml”
Contacto
Inicio
Introducción
Kepler
Prácticas
P1: ¡Hola Mundo! Resultado final:
P1
P2
P3
P4
P5
P6
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
PRÁCTICA 2 Procesamiento de texto: Reemplazar cadenas
P6
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6
P2: Procesamiento de texto
Objetivo: FT para buscar y reemplazar una cadena de texto por otra en un fichero. Destrezas: lectura y escritura de ficheros bifurcaciones (= relaciones)
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6
P2: Procesamiento de texto Preparación 1 añade actores File Reader (1), String Replace (1), Text File Writer (1) y String Constant (3) 2 añade el director SDF 3 añade StringParameter (3) 4 consulta la documentación de cada actor (botón derecho > Documentation > Display)
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6
P2: Procesamiento de texto Configuración 1 2
3
4
5 6 7
Director: iteraciones = 1 StringParameter: nombre = OBJETIVO; valor = Granada StringParameter2: nombre = REEMPLAZO; valor = Mérida StringParameter3: nombre = RUTA_FICHERO; valor = C:\sk\mat\p1\texto.txt String Replace: replaceAll = marcado Text File Writer: Change existing = Overwrite ¿qué debe ir en los String Constant si el objetivo es reemplazar “Granada” por “Mérida”?
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P2: Procesamiento de texto Conexión de actores:
P3
P4
P5
P6
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
PRÁCTICA 3 Procesamiento de texto: Busca la bomba
P6
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6
P3: Busca la bomba
Objetivo: FT para buscar una palabra clave dentro de un grupo de ficheros y devolver la ruta del fichero que la contiene Destrezas: monitorización de valores trabajo con vectores (arrays) control de ejecución del FT
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6
Contacto
P3: Busca la bomba
Preparación 1 añade actores Directory Listing (1), Ramp (1), Array Element (1), Monitor Value (1), File Reader (1), String Compare (1), Stop (1) y String Constant (2) 2 añade el director SDF 3 añade StringParameter (2)
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6
P3: Busca la bomba Configuración 1 Director: iteraciones = 0 (infinitas) 2 StringParameter: nombre = CLAVE; valor = bomba 3 StringParameter2: nombre = DIRECTORIO; valor = C:\sk\mat\p3 4 String Constant: $DIRECTORIO 5 String Constant2: $CLAVE 6 Monitor Value: displayWidth = 50 7 String Compare: function = contains
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6
Contacto
P3: Busca la bomba Claves del FT: 1 10 ficheros txt en un directorio. Uno contiene la palabra clave 2 Directory Listing devuelve un vector con rutas de ficheros txt 3 Array Element extrae un elemento del vector según su parámetro index 4 Ramp emite sucesión aritmética de valores 5 Monitor Value muestra lo que le llega en tiempo real 6 Stop detiene el flujo si le llega un valor “true”
Inicio
Introducción
Kepler
Prácticas
P1
P3: Busca la bomba Conexión de actores:
P2
P3
P4
P5
P6
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6
Contacto
P3: Busca la bomba Mejora del FT: 1 si no se encuentra la palabra clave, ERROR porque a Array Element le llega valor índice mayor que el array que está leyendo. 2 añadir Array Length (1), Comparator (1), Stop (1) y dos relaciones 3 Comparator: comparison = “==” 4 le diremos: “si el tamaño del array es igual al valor emitido por Ramp, detén la ejecución”
Inicio
Introducción
Kepler
Prácticas
P1
P3: Busca la bomba Conexión de actores:
P2
P3
P4
P5
P6
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6
PRÁCTICA 4 Acceso a un Servicio Web basado en WSDL: Conversión de unidades de temperatura
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6
Contacto
P4: Acceso a Servicio Web WSDL
Objetivo: FT para convertir entre unidades de temperatura usando un Servicio Web basado en WSDL Destrezas: acceso a un Servicio Web basado en WSDL iteraciones mediante actor Line Reader
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6
Contacto
P4: Acceso a Servicio Web WSDL Los Servicios Web basados en WSDL Servicio Web: facilita la interacción entre ordenadores en una red. Permite usar BBDD y aplicaciones de un servidor remoto. WSDL (Web Service Description Languaje): describe las funciones del SW (fichero XML) Kepler lee el fichero WSDL mediante el Web Service Actor y lo configura automáticamente para usar el SW.
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6
Contacto
P4: Acceso a Servicio Web WSDL
Preparación 1 añade actores Web Service Actor (1), String Constant (3), Monitor Value (1) y Display (1) 2 añade el director SDF 3 añade StringParameter (3)
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6
Contacto
P4: Acceso a Servicio Web WSDL Configuración: 1 2
Director: iteraciones = 1 Web Service Actor: wsdlUrl = http://www.webservicex.net/ ConvertTemperature.asmx?WSDL methodName = ConvertTemp
3 4 5 6 7 8
StringParameter1: TEMPERATURA; 25 StringParameter2: UNIDADES_ORIGEN; Celsius StringParameter3: UNIDADES_DESTINO; Fahrenheit String Constant1: $TEMPERATURA String Constant2: degree$UNIDADES_ORIGEN String Constant3: degree$UNIDADES_DESTINO
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P4: Acceso a Servicio Web WSDL Conexión de actores:
P5
P6
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6
P4: Acceso a Servicio Web WSDL Mejora del FT: Lectura de valores desde fichero y escritura de los resultados. 1 2
3 4
5
6 7
eliminar Monitor Value añadir Line Reader (1), Line Writer (1), Display (1), String Constant (1), stringParameter (2) y una relación Director SDF: iteraciones = 0 stringParameter: nombre = RUTA_LISTA; valor = C:\sk\p4\temperaturas.txt stringParameter2: nombre = RUTA_RESULTADOS; valor = C:\sk\p4\resultados.txt Line Reader: fileOrUrl = $RUTA_LISTA String Constant1: $RUTA_RESULTADOS
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P4: Acceso a Servicio Web WSDL Conexión de actores:
P5
P6
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6
PRÁCTICA 5 Acceso a Servicio Web REST: Monitorización meteorológica según coordenadas
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6
P5: Acceso a Servicio Web REST Objetivo: FT para monitorizar registros meteorológicos de estaciones remotas desde un SW basado en REST Destrezas: acceso a un Servicio Web basado en REST creación de puertos procesamiento de ficheros XML monitorización de sensores
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6
P5: Acceso a Servicio Web REST Los Servicios Web basados en REST REST: Representational State Transfer Las peticiones al SW se hacen mediante una URL El SW devuelve la respuesta como un fichero XML Kepler no tiene actores específicos para acceder a SW tipo REST, pero es sencillo implementar las peticiones mediante una combinación de actores
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6
Contacto
P5: Acceso a Servicio Web REST
Preparación: 1 añade actores URL To Local File (1), File Reader (1), Display (1) y String Constant (2) 2 añade el director SDF 3 añade StringParameter (2)
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6
Contacto
P5: Acceso a Servicio Web REST Configuración: 1 Director: iteraciones = 1 2 URL To Local File: overwrite = marcado 3 StringParameter: LATITUD; 37.16 4 StringParameter2: LONGITUD; -3.59 5 String Constant: http://ws.geonames.org/ findNearByWeatherXML?lat=$LATITUD&lng =$LONGITUD (¡todo seguido!) 6 String Constant2: C:\tempfile
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5: Acceso a Servicio Web REST Conexión de actores:
P5
P6
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P5: Acceso a Servicio Web REST Resultado: fichero xml
LEGA ... 2009-11-15 13:00:00 <stationName>Granada / Armilla ES <elevation>686 37.1166666666667 -3.61666666666667 27 19 <windDirection>220.0 <windSpeed>15
P6
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6
P5: Acceso a Servicio Web REST I Mejora del FT: 1
2 3
4 5 6 7
añadir String to XML (1), XPath Processor (2), Token to String converter (2), String Replace (5), String Accumulator (1), Monitor Value (2), RExpression (1), String Constant (4), Line writer (1), StringParameter (1), Parameter (1) y tres relaciones Director SDF: iteraciones=0 StringParameter: FICHERO_SALIDA; C:\sk\mat\p5 \resultados.txt Parameter: LAG; 20 (segundos entre medidas) String Constant3: “//observationTime” String Constant4: “//temperature” String Constant5: $LAG
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6
P5: Acceso a Servicio Web REST II 8 9
10 11 12 13 14 15 16
String Constant6: $FICHERO_SALIDA String Replace: patrón = \{
; reemplazo=en blanco String Replace2: p = \}; r = nada String Replace3: p = \{
; r = nada String Replace4: p = \}; r = nada String Replace5: p = \“; r = nada String Accumulator: Substring separator=”;“ Line Writer: append = marcado RExpression: borrar todo y escribir ”Sys.sleep(lag)“ (sin comillas) Crear puerto: botón derecho sobre RExpression > Configure ports > Add: name = lag; Input = marcado > Commit
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5: Acceso a Servicio Web REST Conexión de actores:
P5
P6
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6
PRÁCTICA 6 Trabajo con Información Geográfica: Consulta sobre un mapa raster
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6
P6: Consultas sobre mapas
Objetivo: FT para consultar valores de mapas raster para un listado de localidades Destrezas: trabajo con vectores consulta sobre mapas raster añadir parámetro a un actor expresiones sencillas de R
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6
P6: Consultas sobre mapas Preparación: 1 añade actores Line Reader (1), Counter (1), String Splitter (1), Array To Elements (1), String Replace (2), String To Int (2), AscGridValue (1), File Writer (1), RExpression (1), String Constant (2), Monitor Value (5) y una relación 2 añade el director SDF 3 añade StringParameter (3)
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6: Consultas sobre mapas I Configuración: 1 2
3
4
5
6
Director: iteraciones = 0 StringParameter: MAPA; C:\sk\mat\p6\mapas \precipitacion.asc StringParameter2: LOCALIDADES; C:\sk\mat\p6\presencia \Abies_pinsapo.txt StringParameter3: RESULTADOS; C:\sk\mat\p6\presencia\resultados.txt Line Reader: fileOrURL = $LOCALIDADES; numberOfLinesToSkip = 1 String Splitter: Regular expression = ”, “ (coma espacio)
P6
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6
Contacto
P6: Consultas sobre mapas II 7
8
9 10
11
String Replace: patrón = ” (comilla); replaceAll = marcado String Replace2: patrón = ” (comilla); replaceAll = marcado AscGridValue: algorithm = Nearest Neighbor File Writer: añadir parámetro > doble click > Add > Name = requiredFiringsPerIteration; Default value = 1 > OK > Commit RExpression: nuevo puerto: nombre = entrada; input = marcado nuevo puerto: nombre = maximo; output = marcado; tipo = double nuevo puerto: nombre = media; output = marcado; tipo = double
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6: Consultas sobre mapas III
12 13
nuevo puerto: nombre = minimo; output = marcado; tipo = double puerto graphicsFileName: hide = marcado puerto output: hide = marcado borrar código existente añadir nuevo código: datos = scan(entrada) media = mean(datos) minimo = min(datos) maximo = max(datos) String Constant: $RESULTADOS String Constant2: $MAPA
P6
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P6: Consultas sobre mapas Conexión de actores:
P3
P4
P5
P6
Contacto
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6
Contacto
Documentación adicional
Ejemplos de la carpeta demos en la instalación de Kepler https://kepler-project.org http://ptolemy.berkeley.edu/ptolemyII/
Inicio
Introducción
Kepler
Prácticas
P1
P2
P3
P4
P5
P6
Y ESO HA SIDO TODO... Gracias por tu atención Si tienes alguna cuestión, puedes contactar conmigo en
[email protected] [email protected] o a través del blog http://siguiendoelcambio.blogspot.com/
Contacto