Slide 1

Slide 1 text

Inside TIPI Universidad Politécnica de Valencia 25 de noviembre de 2016

Slide 2

Slide 2 text

Pablo Martín Muñoz Hacker Cívico | @pr3ssh Socio trabajador de Enreda.Coop Programador de TipiCiudadano.es Cofundador de Openkratio.Org

Slide 3

Slide 3 text

A modo de intro...

Slide 4

Slide 4 text

#CowCorollary Las vacas se alimentan de hierba en el campo y todo lo que comen es procesado y desechado en forma de heces. Dichas heces son depositadas en el campo, el cual las utiliza como nutriente para generar más hierba y por ello generar más alimento para las vacas. Las aplicaciones consumen datos para su funcionamiento y al final generan datos que serán

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

BigData MediumData SmallData TinyData MicroData NanoData

Slide 7

Slide 7 text

● Rendición de cuentas ● Apertura de procesos participativos ● Investigación ● Internet de las cosas ● Infomediarios ● Marketing ● Nuevas economías ● … ● Incidencia política Proyectos basados en datos

Slide 8

Slide 8 text

tipiciudadano.es

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

Arquitectura de TIPI ● Aplicación web ● API ● Motor ● Base de datos ● Sistema de notificaciones Nota: Muchos de estos elementos son básicos para un proyecto basado en datos.

Slide 11

Slide 11 text

La web de TIPI ● Web orientada a datos ● Buscador básico y avanzado ● Exportación de datos a CSV (formato reutilizable) ● Navegación completa ● Gráfica resumen ● Sistema de rankings ● Perfil de usuario ● Suscripción temática

Slide 12

Slide 12 text

El motor de TIPI ● Obtención de datos ● Limpieza de datos ● Procesamiento de datos ● Análisis de datos ● Resumen ● Notificaciones

Slide 13

Slide 13 text

SQL vs NoSQL ● Sistema relacional vs Sistema no relacional ● Implicaciones en velocidad de lectura/escritura ● Tipo y coste de escalabilidad ● Estructuramiento fuerte de datos vs Schemaless

Slide 14

Slide 14 text

MongoDB almacena los datos ● Sistema NoSQL con una gran comunidad ● Gran ecosistema de servicios ● API muy potente (sobretodo la v3) ● Integración con muchos frameworks y lenguajes ● Instalación sencilla ● Lenguaje JSON (BSON para compresión) ● Integración directa con MeteorJS ;) ● mongodb.com

Slide 15

Slide 15 text

MeteorJS en la capa de aplicación ● Javascript como lenguaje de la web ● MeteorJS habla javascript tanto en cliente como en servidor ● Mecanismo de publicación y suscripción ● Real time (data) apps (usando websockets) ● Bindings entre el elemento HTML y el dato ● Sistema de paquetes (atmospherejs.com) ● Integración directa con MongoDB ;) ● www.meteor.com

Slide 16

Slide 16 text

D3js para la visualización ● Sistema de visualización basado en javascript ● Construye elementos SVG (renderizables por navegadores modernos) ● Facilidad de uso ● Amplio número de librerías y ejemplos ● d3js.com

Slide 17

Slide 17 text

D3js para la visualización Un pequeño consejo: piensa en el usuario y elige y valida la visualización

Slide 18

Slide 18 text

La rebelión de los crones ● Cron: tarea programable en el tiempo y que se ejecuta en background crontab -l # for listing crontab -e # for editing ● El tiempo, su mayor enemigo: ○ ¿Cuánto tiempo tarda su ejecución? ○ ¿Ha terminado ya la tarea de la que depende otra?

Slide 19

Slide 19 text

Luigi to the rescue ● Herramienta creada por Spotify ● Usada gestionar tareas relacionadas en proyectos de BigData ● Construye sistema de ejecución basado en tuberías de procesos ● Liberado en Github para su uso ● github.com/spotify/luigi

Slide 20

Slide 20 text

Scrapy obtiene los datos ● Obtención de información mediante webscraping ● Scrapy como librería base ● Python como lenguaje ● Muy potente y versátil ● Fácil integración con otras librerías Python ● scrapy.org

Slide 21

Slide 21 text

El etiquetado de los datos ● Minería de textos básica ● Basada en reconocimiento de patrones (pcre) ● Casi 3000 expresiones regulares ● Implementación de “barajado de expresiones”

Slide 22

Slide 22 text

Envío de alertas ● En el etiquetado se generan las diferentes alertas ● Se obtienen los usuarios y sus preferencias de temáticas ● Se envían los emails con las diferentes alertas a cada uno ● Usamos Sparkpost para el envío

Slide 23

Slide 23 text

Las estadíßticas deTIPI ● Método de agregación de MongoDB db.iniciativas.aggregate({ $match: … }, { $unwind: … }, { $group: … } ) ● Estadísticas que calculamos ○ Sumatorio de iniciativas de cada temática ○ Diputadas/os más activas/os por cada temática ○ Grupos más activos por temática ○ Últimas iniciativas de cada temática

Slide 24

Slide 24 text

La API de TIPI ● REST API ● Mecanismo de reutilización (además de la exportación a CSV) ● Integración con otras aplicaciones ● tipiciudadno.es/api-doc ● Obtener las últimas 5 iniciativas de Sanidad: curl http://www.tipiciudadano.es/api/v1/tipis?limit=5&dict=sanidad ● Obtener las/os diputadas/os más activas/os en Sanidad: curl http://www.tipiciudadano.es/api/v1/stats/bydeputies/sanidad

Slide 25

Slide 25 text

Código 100% libre ● Web: http://github.com/ciecode-madrid/tipi ● Motor: http://github.com/ciecode-madrid/tipi-engine

Slide 26

Slide 26 text

más en: tipiciudadano.es enreda.coop/trabajos/tipi-ciudadano/