Sobre las jornadas

Las Jornadas de Ciencias de la Computación (JCC) se presentan como una iniciativa del Departamento de Ciencias de la Computación de la Facultad de Ciencias Exactas, Ingeniería y Agrimensura de la Universidad Nacional de Rosario, de carácter abierto y gratuito con el objetivo de promover el contacto de los alumnos de la Facultad con investigadores y profesionales en temas relacionados con el ámbito de las ciencias de la computación, al mismo tiempo que nos permite mantenernos actualizados sobre las tendencias en investigación y desarrollo que se realizan en la región.

La edición 2017 de las JCC se llevará a cabo los días 25, 26 y 27 de Octubre en la Facultad de Ciencias Exactas, Ingeniería y Agrimensura de Rosario

Las JCC se llevaron a cabo por primera vez en noviembre del año 2000. Año tras año han participado decenas de personas provenientes de empresas de desarrollo de software local, estudiantes e investigadores de esta casa de estudios y de universidades destacadas de la zona, entre las cuales podemos mencionar a la Universidad Nacional de La Plata, Universidad Nacional de Córdoba, Universidad Nacional de Río Cuarto y la Universidad de la República (Montevideo-Uruguay). La realización de las JCC es un proceso que continúa año a año y constituye un logro significativo del cuerpo de docentes y de estudiantes de la carrera Licenciatura en Ciencias de la Computación.

Localización y Mapeo Simultáneo (SLAM)

La robótica móvil es una de las áreas de investigación que más importancia ha cobrado en los últimos años debido a su gran campo de aplicación: desde robots hogareños de limpieza y robots de asistencia médica hasta automóviles autónomos y robots de exploración espacial.

Para que un robot móvil pueda navegar en un entorno este debe contar con una representación del entorno (mapa) y conocer su pose (orientación y posición) en dicho mapa. En el caso general, donde el robot debe operar en un entorno desconocido y no cuenta con un sistema de localización global que permita conocer su pose de manera precisa, ambos problemas suelen abordarse de manera simultánea y lleva el nombre de SLAM (por las siglas en inglés de Localización y Mapeo Simultáneo). En esta charla se describirá el problema de SLAM, y se comentarán los desarrollos realizados en el CIFASIS para abordar dicho problema.

por Taihú Pire (CIFASIS)

Assembly is not dead

En las Ciencias de la Computación suele ser mala palabra hablar de assembler.

Dificil, enmarañado, poco estructurado, tedioso pueden ser algunas de las palabras que surgen en charlas informales.

Vamos a mostrar una experiencia simple en la materia Organización del Computador de FaMAF-UNC que se dá en segundo año. Ahi propusimos un cambio en el paradigma en los labs, pasando de MIPS corriendo sobre un simulador a ARMv8 corriendo sobre bare-metal de la Raspberry Pi 3 y de un enunciado superestructurado a uno absolutamente libre: "armá una demo de al menos 10 segundos en este framebuffer de 512x512x16".

Los resultados fueron muy alentadores y la lección que aprendimos es que: "Assembly is not dead".

por Nicolás Wolovick (FaMAF - UNC)

Event Sourcing + CQRS, un enfoque funcional

Event Sourcing es un estilo arquitectónico en el cual el estado del sistema se persiste como la historia de todos los cambios (llamados eventos) que sucedieron desde su estado inicial.

Command Query Responsibility Segregation (CQRS) es un patrón que busca dividir el modelo de un sistema en dos, un modelo de escritura responsable de validar y persistir cambios, y uno de lectura, encargado de las consultas. En la charla vamos a introducir ambos modelos, mostraremos cómo pueden combinarse para obtener una arquitectura escalable, que en particular se adapta muy bien al contexto de los lenguajes funcionales y al modelo de actores.

por Cristian Rosa (Surhive)

Lógica en acción

La representación del conocimiento tiene sin dudas motivaciones desde diferentes áreas de las ciencias de la computación. Por ejemplo, las ontologías son objetos formales para organizar información, frecuentemente utilizadas en inteligencia artificial, informática médica, semántica web, y muchos otros campos. Además de encontrar maneras eficientes o elegantes de representar el conocimiento, nos interesa razonar sobre el mismo, es decir, extraer nueva información y/o modificarla de manera tal que podemos razonar sobre su evolución. La lógica epistémica es un formalismo dedicado a razonar sobre el conocimiento, expresado en términos de agentes. El conocimiento de un agente se puede representar por su información accesible (básicamente en un grafo etiquetado), y cambiando el acceso resulta en un cambio de la información, dando origen a las lógicas dinámicas epistémicas.

En esta charla discutiremos este enfoque clásico para representar el conocimiento desde el punto de vista lógico, y revisaremos las herramientas existentes. Sobre el final de la charla nos centraremos en analizar qué otras formas de conocimiento podrían resultar interesantes, y presentaremos nuevas líneas de investigación referidas a esto, como por ejemplo las lógicas de saber cómo (knowing how logics).

por Raúl Fervari (FaMAF-UNC)

Sistemas distribuidos reconfigurables basados en servicios

Los nuevos paradigmas de computación Cloud/Fog, como así también la Internet de las cosas, han impulsado lo que hoy se denomina economía de las APIs. La idea que subyace es la posibilidad de construir nuevos servicios utilizando APIs provistas por terceras partes y, a su vez, hacer disponibles estos nuevos servicios publicando sus propias APIs. Una de las grandes promesas de la economía de las APIs es proveer medios que, entre otras cosas, permitan ayudar a las personas en sus actividades diarias, especialmente, automatizando interacciones business-to-business. Las aplicaciones y los dipositivos están cada vez más interconectados para poder asistir a las personas, por lo cual requerimientos tales como self-adaptiveness y reconfiguración dinámica son requerimientos esenciales de las aplicaciones actuales. En el modelos de las API, se vuelven cada vez más presentes los microservicios, donde se desplaza el desarrollo tradicional de software monolítico para dar lugar al uso de interfaces que permiten acceder a servicios y recursos distribuidos. De esta manera, las APIs posibilitan a los proveedores de software controlar cuáles son los aspectos de sus plataformas que desean hacer públicos y cuáles privados, posibilitando de esta manera la interoperabilidad.

Llevar a la práctica este paradigma solo es plausible en la medida que contemos con lenguajes que acompañen el proceso de desarrollo de software que tengan la capacidad de expresar los SLAs declarando: a) las condiciones de interoperabilidad entre servicios, b) los requerimientos funcionales como condiciones sobre los valores intercambiados a través de los canales de comunicación, y c) los requerimientos no-funcionales como condiciones sobre variables cuantificables que reflejen métricas de calidad sobre los servicios. El ideal detrás de este paradigma se apoya en la capacidad real que tenga el middleware de realizar las tareas relativas al establecimiento de Service Level Agreements en forma completamente autónoma; particularidad que necesariamente prescribe que todo análisis de contratos, sean estos de interoperabilidad, funcionales o no-funcionales, se realice en forma automática.

En la charla visitaré los avances que hemos alcanzado y, muy especialmente, los trabajos que nos planteamos a futuro con la ambición de poner en práctica la construcción de brocker digital que pueda intervenir en forma autónomo en la llamada economía de las APIs.

por Carlos Gustavo Lopez Pombo (UBA - CONICET)

Taller: ¡Mirá mamá, estoy compilando un kernel!

El kernel Linux es un sistema tremendamente complejo, que soporta una variedad asombrosamente amplia de hardware y de tipos de usos diferentes. Paradójicamente (o tal vez no) compilar Linux, meterse en el código y realizar cambios es muy fácil... rídiculamente fácil.

En esta oportunidad, vamos a usar el port User-Mode Linux (UML), es decir ejecutando el kernel como un proceso de usuario, en forma nativa, sobre otro kernel Linux. Este modo permite hacer cambios y probarlos rápidamente, en un entorno aislado y seguro.

Este es un taller del tipo 'manos en la masa', cuyo objetivo es el de introducirse al desarrollo kernel. Vamos a proponer ejercicios con diferentes grados de dificultad, tanto cambios simples como cambios más complejos, de modo que pueden participar personas con experiencia en sistemas operativos, o sin ella. La actividad requiere conocimiento de lenguaje C.

¡¡Cupos limitados!!

por Ezequiel García (VanguardiaSur)

Fusionando paradigmas de lenguajes de programación cuánticos

Dentro de la familia de extensiones al cálculo lambda para computación cuántica, existen dos paradigmas marcadamente diferentes. Por un lado, están los lenguajes que consideran que la computadora cuántica será una especie de co-procesador cuántico anexo a una computadora clásica, y que es la computadora clásica la que llevará el control de qué operaciones aplicar sobre cuales qubits. A esto se lo conoce como el paradigma de control clásico y datos cuánticos. Por otro lado, están los lenguajes que siguen el paradigma de control y datos cuánticos. En este paradigma la idea es proveer una definición computacional de las nociones de espacio vectorial y funciones bilineares. La conexión entre ambos paradigmas es difícil de ver. En un paper aceptado para APLAS 2017 [1] introdujimos un lenguaje con control clásico y datos cuánticos usando un formalismo cuántico llamado matrices densidad. Utilizando este formalismo, y haciendo una modificación a dicho lenguaje, hemos podido convertirlo en un lenguaje con un control que podemos llamar "control cuántico débil" (o control probabilista). Este es el primer cálculo lambda cuántico en el que se puede ver la conexión entre ambos paradigmas.

En esta charla voy a presentar las ideas básicas de la computación cuántica en el formalismo de matrices densidad. Luego, voy a introducir las ideas básicas de lambda cálculo, y ambos paradigmas de lambda cálculos cuánticos. Finalmente, mostraré el lambda cálculo cuántico de matrices densidad introducido en [1].

[1] A. Díaz-Caro. "A lambda calculus for density matrices with classical and probabilistic controls", aceptado en APLAS 2017, Suzhou, China, 27-29 de noviembre de 2017.

por Alejandro Díaz-Caro (UNQ - CONICET)

Darcs: Cambios correctamente tipados

Los sistemas de tipos sirven para hacer programas correctos e impedir que se puedan representar estados incorrectos. Darcs es un sistema de control de versiones en el cual el usuario tiene una gran libertad para intercambiar commits entre distintas ramas de desarrollo, operando una reescritura automática de estos cuando cambian de contexto.

En esta charla vamos a ver como se usa el sistema de tipos de GHC (Glasgow Haskell Compiler) para garantizar la corrección de esa reescritura. Aprovecharé para hablar de la situación actual de Darcs como proyecto de software libre.

por Guillaume Hoffmann (UNC - CONICET)

Una semántica formal para el lenguaje de programación Lua

El lenguaje de programación dinámico Lua es muy utilizado en la industria. Con varios intérpretes en existencia, sin embargo, no cuenta con una descripción formal que defina qué debe hacer cada frase del lenguaje, mas allá del siempre ambiguo y limitado manual de referencia. Nosotros nos hemos embarcado en la ardua tarea de dar una semántica formal a casi todo Lua, utilizando la herramienta PLT Redex. En esta charla vamos a introducir la herramienta, su marco teórico (esencialmente semántica operacional de reducción), y las particularidades de la formalización de este peculiar lenguaje. Finalmente, vamos a hablar de la posibilidad de aplicar esta técnica para formalizar el lenguaje Crystal, hecho en Argentina.

por Beta Ziliani (FaMAF - UNC)

Ese tipo sabe dónde está el error!

Todos* los programas tienen errores. Es por eso que su búsqueda se ha vuelto una de las principales preocupaciones en el desarrollo de software. En esta charla veremos como los tipos de datos pueden guiarnos en la (complicada) búsqueda de errores mediante pruebas aleatorias. Presentamos QuickFuzz, una herramienta que implementa estas ideas y es capaz de detectar errores en software complejo como navegadores web, librerías de procesamiento de imágenes y compresores de archivos. Finalmente, realizaremos un demostración de uso de QuickFuzz, extendiéndolo para soportar la generación de un nuevo tipo de datos, con el cual buscaremos errores en un proyecto de software real.

por Gustavo Grieco, Martín Ceresa, Agustín Mista (CIFASIS)

La(s) tesis de Church-Turing

Discutiré fundamentos ontológicos y epistemológicos de la ciencia de la computación, considerando dos nociones diferentes pero históricamente entrelazadas: la de efectividad y la de programabilidad. La efectividad puede caracterizarse a partir de una posición mecanicista, mientras que la programabilidad puede analizarse desde un abordaje relacional de la computación. Ambas han sido caracterizadas axiomáticamente. Consideramos aquí dichas nociones y axiomatizaciones, separándolas analíticamente y presentando una noción gradual de computación que depende del grado de programabilidad de un sistema. Mostramos también como ciertas cuestiones fundamentales de filosofía de la computación pueden abordarse desde esta perspectiva

por Javier Blanco (FaMAF - UNC)

Entrega de diplomas

El Departamento de Ciencias de la Computación reconoce a aquellos alumnos que han completado el cursado de la Licenciatura en Ciencias de la Computación en el año 2017

Cena de camaradería

Valor: A confirmar.

Lugar: A confirmar.

Para consultas, contactarse con la organización: jcc [@] fceia.unr.edu.ar

Patrocinan

Auspiciantes