DemoCritics Aplicación Android de participación poĺıtica con edición colaborativa en tiempo real Jaime Ramos Romero Javier Bastarrica Lacalle Grado en Ingenieŕıa Informática Facultad de Informática UNIVERSIDAD COMPLUTENSE DE MADRID Trabajo de Fin de Grado Madrid, Junio 2015 Directores: Samer Hassan Collado Pablo Ojanguren Menéndez Autorización de Difusión y Uso Autorizo a la Universidad Complutense de Madrid a difundir y utilizar con fines académicos, no comerciales y mencionando expresamente a su autor, tanto la propia memoria, como el código, la documentación y/o el software desarrollado. Jaime Ramos Romero Javier Bastarrica Lacalle Madrid, Junio 2015 Copyleft by Jaime Ramos Romero and Javier Bastarrica Lacalle, released under the license Creative Commons Attribution Share-Alike International 4.0 available at: https://creativecommons.org/licenses/by-sa/4.0/ III https://creativecommons.org/licenses/by-sa/4.0/ Agradecimientos Dejando a un lado su obligatoriedad, no suele ser tarea sencilla sacar adelante un proyecto de estas caracteŕısticas, cuya finalidad entendemos que es com- binar gran parte de los conocimientos que hemos aprendido durante nuestro paso por las aulas y lanzarnos por primera vez al desarrollo de un trabajo formal. Exige, entre otras cualidades, curiosidad, trabajo duro, investigación, empeño, dedicación... Queremos expresar nuestro agradecimiento a todas aquellas personas que han colaborado para que este trabajo, pese a algunas complicaciones surgidas por el camino, haya llegado a buen destino. Lo primero, a los directores Pablo y Samer, sin cuyos consejos, orientaciones y ayuda no habŕıamos sido capaces de finalizar este trabajo. Lo segundo, a los chicos de Labodemo y a Javier de la Cueva, por su inestima- ble colaboración al dedicarnos un poco de su preciado tiempo para compartir ideas, aportar nuevos puntos de vista al proyecto y de paso ponernos un poco los pies sobre la tierra. Lo tercero, a amigos y familiares, por apoyarnos y hacernos más llevadero el arduo proceso de terminar un proyecto como este. Y por último, pero no por ello menos importante, a ti, lector, por invertir un poco de tu valioso tiempo en prestar atenćıón a lo que se expone en estas páginas. Esperemos que encuentres en su lectura algo que haga volar tu imaginación, reflexionar y quién sabe si aprender tanto como nos lo ha hecho hacer a nosotros. ”Cuanto más siniestros son los deseos de un poĺıtico, más pomposa, en ge- neral, se vuelve la nobleza de su lenguaje.” Aldous Huxley. Un Mundo Feliz. V Índice general Page Autorización de Difusión y Uso III Agradecimientos V Abstract IX Resumen XI 1. Introducción 1 1.1. Antecedentes . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.1.1. Marco teórico: Poĺıtica en el mundo de la Informática . 1 1.1.2. Idea detrás de DemoCritics . . . . . . . . . . . . . . . 2 1.2. Objetivos del Proyecto . . . . . . . . . . . . . . . . . . . . . . 3 1.3. Estructura del Documento . . . . . . . . . . . . . . . . . . . . 4 2. Estado del Arte 7 2.1. Edición Colaborativa en Tiempo Real . . . . . . . . . . . . . . 7 2.1.1. APIs Centralizadas . . . . . . . . . . . . . . . . . . . . 8 2.1.1.1. Google Realtime API . . . . . . . . . . . . . . 8 2.1.1.2. Microsoft RTC Client API . . . . . . . . . . . 9 2.1.1.3. WebRTC . . . . . . . . . . . . . . . . . . . . 9 2.1.1.4. Mozilla TogetherJS . . . . . . . . . . . . . . . 9 2.1.1.5. ShareJS . . . . . . . . . . . . . . . . . . . . . 9 2.1.1.6. Goodow . . . . . . . . . . . . . . . . . . . . . 10 2.1.2. Plataformas Web y Android . . . . . . . . . . . . . . . 10 2.1.2.1. Wave: Wave In A Box (WIAB) . . . . . . . . 10 VII 2.1.2.2. Google Docs . . . . . . . . . . . . . . . . . . 10 2.1.2.3. Etherpad . . . . . . . . . . . . . . . . . . . . 12 2.1.2.4. Colorillo . . . . . . . . . . . . . . . . . . . . . 12 2.1.2.5. ShareLaTeX . . . . . . . . . . . . . . . . . . . 12 2.1.2.6. Samepage . . . . . . . . . . . . . . . . . . . . 14 2.1.2.7. Quip . . . . . . . . . . . . . . . . . . . . . . . 14 2.2. Aplicaciones de Participación Poĺıtica y Ciudadana . . . . . . 15 2.2.1. Programas Poĺıticos . . . . . . . . . . . . . . . . . . . . 15 2.2.1.1. UPyD Parla . . . . . . . . . . . . . . . . . . . 16 2.2.1.2. ]RecuperaCórdoba . . . . . . . . . . . . . . . 17 2.2.1.3. PSOE Andalućıa . . . . . . . . . . . . . . . . 18 2.2.1.4. PP Canarias . . . . . . . . . . . . . . . . . . 19 2.2.2. Participación Ciudadana . . . . . . . . . . . . . . . . . 20 2.2.2.1. Reddit . . . . . . . . . . . . . . . . . . . . . . 20 2.2.2.2. Change.org . . . . . . . . . . . . . . . . . . . 21 2.2.2.3. Programas Colaborativos de Ahora Madrid y Zaragoza en Común . . . . . . . . . . . . . . 23 2.2.2.4. Appgree . . . . . . . . . . . . . . . . . . . . . 25 3. Metodoloǵıas del Proyecto 27 3.1. Uso de Software Libre . . . . . . . . . . . . . . . . . . . . . . 27 3.2. Migración de Wave/SwellRT a Android . . . . . . . . . . . . . 28 3.3. Diseño de la Aplicación . . . . . . . . . . . . . . . . . . . . . . 28 3.3.1. Brainstorming . . . . . . . . . . . . . . . . . . . . . . . 28 3.3.2. Diseño Guiado por Objetivos (DGO) . . . . . . . . . . 29 3.3.3. Brainstorming . . . . . . . . . . . . . . . . . . . . . . . 29 3.3.4. Diseño Guiado por Objetivos (DGO) . . . . . . . . . . 29 3.4. Implementación de la Aplicación . . . . . . . . . . . . . . . . . 30 3.4.1. Control de versiones . . . . . . . . . . . . . . . . . . . 31 3.4.2. GitHub . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.4.3. Reparto de tareas . . . . . . . . . . . . . . . . . . . . . 31 3.4.4. Revisiones de código . . . . . . . . . . . . . . . . . . . 31 3.4.5. Evaluaciones de usabilidad . . . . . . . . . . . . . . . . 32 3.5. Patrones de Diseño . . . . . . . . . . . . . . . . . . . . . . . . 32 4. Tecnoloǵıas del Proyecto 33 4.1. Tecnoloǵıas de Wave . . . . . . . . . . . . . . . . . . . . . . . 35 4.1.1. Google Wave . . . . . . . . . . . . . . . . . . . . . . . 35 4.1.2. Apache Wave . . . . . . . . . . . . . . . . . . . . . . . 35 4.1.3. Caracteŕısticas de Wave . . . . . . . . . . . . . . . . . 35 4.1.3.1. Federación . . . . . . . . . . . . . . . . . . . 35 4.1.3.2. Consistencia en tiempo real . . . . . . . . . . 36 4.1.3.3. Escalabilidad . . . . . . . . . . . . . . . . . . 37 4.1.4. Servidores Wave: SwellRT . . . . . . . . . . . . . . . . 37 4.1.5. Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 4.1.6. Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 4.1.7. GWT . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 4.1.8. JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . 39 4.1.9. HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 4.1.10. WebSocket . . . . . . . . . . . . . . . . . . . . . . . . . 39 4.1.11. Git . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 4.1.12. GitHub . . . . . . . . . . . . . . . . . . . . . . . . . . 40 4.2. Tecnoloǵıas de la Aplicación Android . . . . . . . . . . . . . . 41 4.2.1. Android Studio . . . . . . . . . . . . . . . . . . . . . . 41 4.2.2. Android . . . . . . . . . . . . . . . . . . . . . . . . . . 41 4.2.3. XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 4.2.4. JSON . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 4.2.5. SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 4.2.6. MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . 44 4.2.7. PhpMyAdmin . . . . . . . . . . . . . . . . . . . . . . . 44 4.2.8. PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 4.2.9. Laravel 5 . . . . . . . . . . . . . . . . . . . . . . . . . 45 4.2.10. OpenShift . . . . . . . . . . . . . . . . . . . . . . . . . 45 4.2.11. Sublime Text . . . . . . . . . . . . . . . . . . . . . . . 46 4.2.12. POP: Prototyping On Paper . . . . . . . . . . . . . . . 47 5. Migración de SwellRT a Android 49 5.1. Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 5.1.1. Migración: Identificación y Solución de Problemas . . . 49 5.1.1.1. Construcción y Depuración . . . . . . . . . . 50 5.1.1.2. Conexión HTTP . . . . . . . . . . . . . . . . 51 5.1.1.3. Conexión WebSocket . . . . . . . . . . . . . . 53 5.1.1.4. Conexión final y Logging . . . . . . . . . . . . 55 5.1.1.5. Organización del código: Servicio Android . . 57 5.1.2. Dependencias . . . . . . . . . . . . . . . . . . . . . . . 59 5.1.3. Resultado de la Migración . . . . . . . . . . . . . . . . 60 6. Diseño de la Aplicación 63 6.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 6.2. Brainstorming de ideas . . . . . . . . . . . . . . . . . . . . . . 63 6.3. Diseño Guiado Por Objetivos (DGO) . . . . . . . . . . . . . . 65 6.3.1. Investigación . . . . . . . . . . . . . . . . . . . . . . . 66 6.3.2. Investigación . . . . . . . . . . . . . . . . . . . . . . . 66 6.3.2.1. Intención Inicial: Prototipo básico . . . . . . . 66 6.3.2.2. Hipótesis de personas . . . . . . . . . . . . . 67 6.3.2.3. Entrevistas . . . . . . . . . . . . . . . . . . . 68 6.3.3. Modelado y Definición de Personas . . . . . . . . . . . 72 6.3.4. Definición de Escenarios y Requisitos . . . . . . . . . . 75 6.3.5. Framework de diseño . . . . . . . . . . . . . . . . . . . 77 6.3.5.1. Framework de interacción . . . . . . . . . . . 77 6.3.6. Verificación: Principios de Diseño . . . . . . . . . . . . 86 7. Arquitectura del Proyecto 91 7.1. Arquitectura de Wave . . . . . . . . . . . . . . . . . . . . . . 91 7.1.1. Modelo Conversacional Wave . . . . . . . . . . . . . . 92 7.1.2. Modelo de Contenidos SwellRT . . . . . . . . . . . . . 93 7.2. Arquitectura de la aplicación . . . . . . . . . . . . . . . . . . . 94 7.2.1. Base de datos . . . . . . . . . . . . . . . . . . . . . . . 95 7.2.1.1. political party . . . . . . . . . . . . . . . . . . 97 7.2.1.2. section . . . . . . . . . . . . . . . . . . . . . . 97 7.2.1.3. proposal . . . . . . . . . . . . . . . . . . . . . 97 7.2.1.4. comment . . . . . . . . . . . . . . . . . . . . 98 7.2.1.5. opinion . . . . . . . . . . . . . . . . . . . . . 98 7.2.2. Servicio Web REST . . . . . . . . . . . . . . . . . . . . 98 7.2.2.1. Arquitectura . . . . . . . . . . . . . . . . . . 100 7.2.2.2. Rutas . . . . . . . . . . . . . . . . . . . . . . 102 7.2.2.3. Controladores . . . . . . . . . . . . . . . . . . 103 7.2.3. Cliente Android . . . . . . . . . . . . . . . . . . . . . . 105 7.2.3.1. Interfaz Gráfica . . . . . . . . . . . . . . . . . 105 7.2.3.2. Estructuración de Programas Poĺıticos . . . . 110 7.2.3.3. Conexión y Peticiones a Service REST y Base de Datos . . . . . . . . . . . . . . . . . . . . 113 7.2.3.4. Gestión de Usuarios: ID de Android . . . . . 115 7.2.3.5. Servicio Android, Conexión con Wave/SwellRT y Gestión de Propuestas Colaborativas . . . . 115 8. Evaluación con Usuarios 121 8.1. Propósitos y objetivos de la evaluación . . . . . . . . . . . . . 121 8.2. Preguntas de evaluación . . . . . . . . . . . . . . . . . . . . . 121 8.3. Requisitos para los participantes de la evaluación . . . . . . . 122 8.4. Diseño experimental . . . . . . . . . . . . . . . . . . . . . . . 123 8.5. Lista de tareas a realizar . . . . . . . . . . . . . . . . . . . . . 123 8.6. Entorno y herramientas empleadas . . . . . . . . . . . . . . . 124 8.7. Tareas del moderador . . . . . . . . . . . . . . . . . . . . . . . 125 8.8. Resultados de la evaluación con los usuarios . . . . . . . . . . 125 8.8.1. Comentarios sobre la interfaz . . . . . . . . . . . . . . 126 8.8.2. Resultados de las tareas . . . . . . . . . . . . . . . . . 127 9. Resultados y Trabajo Futuro 129 9.1. Discusión de Resultados . . . . . . . . . . . . . . . . . . . . . 129 9.1.1. Resultados de la Evaluación con usuarios . . . . . . . . 130 9.2. Reparto de Trabajo entre los componentes del grupo . . . . . 132 9.3. Trabajo Futuro . . . . . . . . . . . . . . . . . . . . . . . . . . 133 9.3.1. Mejoras a la versión actual . . . . . . . . . . . . . . . . 135 9.3.2. Nuevas caracteŕısticas . . . . . . . . . . . . . . . . . . 135 Conclusions 137 Conclusiones 139 A. Listados de Código Fuente 141 A.1. Migración de Wave a Android: SwellRT . . . . . . . . . . . . . 141 A.1.1. Esquema de conexión HTTP . . . . . . . . . . . . . . . 141 A.1.2. Esquema de conexión con AsyncTask . . . . . . . . . . 142 A.1.3. Esquema de uso de WAsync . . . . . . . . . . . . . . . 143 A.2. Servicio Web REST (Laravel) . . . . . . . . . . . . . . . . . . 144 A.2.1. Esquema de Rutas Simple . . . . . . . . . . . . . . . . 144 A.2.2. Esquema de Rutas Agrupadas . . . . . . . . . . . . . . 144 A.2.3. Esquema de Rutas de Propuestas Agrupadas . . . . . . 144 A.2.4. Esquema de Controlador de Propuestas . . . . . . . . . 145 A.3. Aplicación Android . . . . . . . . . . . . . . . . . . . . . . . . 145 A.3.1. Función de construcción del árbol de Programa Poĺıtico 145 A.3.2. Registrar Usuario en SwellRT . . . . . . . . . . . . . . 146 A.3.3. Crear nueva Wave (Model) en SwellRT . . . . . . . . . 148 A.3.4. Abrir Pad colaborativo en SwellRT . . . . . . . . . . . 150 Bibliograf́ıa 151 Índice de figuras 2.1. Tipos de Arquitecturas de Red . . . . . . . . . . . . . . . . . 8 2.2. Cliente Wave In A Box . . . . . . . . . . . . . . . . . . . . . . 11 2.3. Capturas de Google Docs . . . . . . . . . . . . . . . . . . . . . 11 2.4. Captura de TitanPad: Ejemplo de uso de EtherPad . . . . . . 12 2.5. Captura de Colorillo . . . . . . . . . . . . . . . . . . . . . . . 13 2.6. Captura de ShareLaTeX . . . . . . . . . . . . . . . . . . . . . 13 2.7. Capturas de Samepage . . . . . . . . . . . . . . . . . . . . . . 14 2.8. Capturas de Quip . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.9. Capturas de UPyD Parla . . . . . . . . . . . . . . . . . . . . . 16 2.10. Capturas de ]IURecuperaCórdoba . . . . . . . . . . . . . . . . 17 2.11. Capturas de PSOE Andalucia . . . . . . . . . . . . . . . . . . 18 2.12. Capturas de PP Canarias . . . . . . . . . . . . . . . . . . . . 19 2.13. Plaza Podemos utilizando la plataforma Reddit . . . . . . . . 21 2.14. Change.org · La mayor plataforma de peticiones del mundo . . 22 2.15. Creación colaborativa del programa de Ahora Madrid. . . . . . 24 2.16. Creación colaborativa del programa de Zaragoza en Común. . 24 2.17. Capturas de Appgree . . . . . . . . . . . . . . . . . . . . . . . 25 4.1. Nube de Tecnoloǵıas utilizadas en el Proyecto . . . . . . . . . 33 4.2. Arquitectura federada en SwellRT . . . . . . . . . . . . . . . . 36 4.3. Distribución Actual de Versiones Android (Fuente: Google) . . 43 4.4. Frameworks PHP más populares. Fuente: SitePoint . . . . . . 46 5.1. Ejemplo de Traza de Error en Logcat . . . . . . . . . . . . . . 52 5.2. Pantalla de Login de WaveAndroid . . . . . . . . . . . . . . . 56 5.3. Proceso de conexión WebSocket con Servicio . . . . . . . . . . 59 VII 5.4. Proceso de conexión Http con Servicio . . . . . . . . . . . . . 60 5.5. Esquema de Clases de SwellRT-Android con Servicio . . . . . 61 6.1. Capturas del brainstorming . . . . . . . . . . . . . . . . . . . 64 6.2. Estudiante universitario . . . . . . . . . . . . . . . . . . . . . 74 6.3. Activista poĺıtico . . . . . . . . . . . . . . . . . . . . . . . . . 74 6.4. Modelo de desarrollo de los prototipos. . . . . . . . . . . . . . 80 6.5. Primeros protitipos sobre programas electorales. . . . . . . . . 81 6.6. Prototipos para el desarrollo de propuestas. . . . . . . . . . . 82 6.7. Pantalla principal de la aplicación. . . . . . . . . . . . . . . . 85 6.8. Vista de categoŕıas. . . . . . . . . . . . . . . . . . . . . . . . . 86 6.9. Principios de diseño en la aplicación. . . . . . . . . . . . . . . 87 7.1. Arquitectura de Wave . . . . . . . . . . . . . . . . . . . . . . 92 7.2. Modelo Conversacional de Wave . . . . . . . . . . . . . . . . . 93 7.3. Modelo de Contenidos de SwellRT . . . . . . . . . . . . . . . . 94 7.4. Arquitectura general de la aplicación. . . . . . . . . . . . . . . 95 7.5. Modelo entidad-relación de la base de datos. . . . . . . . . . . 96 7.6. Arquitectura de Laravel . . . . . . . . . . . . . . . . . . . . . 101 7.7. Camino desde la ruta al método del controlador. . . . . . . . . 104 7.8. Esquema de Implementación de TopItem (Con vista de Section y Proposal) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 7.9. Esquema de Implementación de Menú Izquierdo (Con vista del Menú) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 7.10. Ejemplos de Codificación de Secciones y Subsecciones . . . . . 111 7.11. Esquema de estructura en árbol de Programa Poĺıtico . . . . . 112 7.12. Esquema de Clases de Conexión HTTP mediante AsyncTask . 114 7.13. Esquema de Uso de Wave/SwellRT . . . . . . . . . . . . . . . 117 7.14. Esquema de Registro en SwellRT . . . . . . . . . . . . . . . . 117 7.15. Esquema de Creación de Pad Colaborativo en SwellRT . . . . 118 7.16. Esquema de Apertura y Edición de Pad Colaborativo en SwellRT119 VIII Índice de tablas 3.1. Software libre utilizado durante el desarrollo. . . . . . . . . . . 27 3.2. Patrones de diseño empleados en el proyecto. . . . . . . . . . . 32 4.1. Tecnoloǵıas usadas en el Proyecto . . . . . . . . . . . . . . . . 34 5.1. Dependencias de SwellRT-Android . . . . . . . . . . . . . . . 62 7.1. Funciones CRUD . . . . . . . . . . . . . . . . . . . . . . . . . 99 7.2. Códigos de estado de la respuesta del servidor . . . . . . . . . 100 7.3. Adapters, Views y Clases utilizadas en el proyecto . . . . . . . 110 8.1. Dificultad y tiempos de las tareas para el usuario del tipo ciudadano. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 8.2. Dificultad y tiempos de las tareas para el usuario del tipo activista social. . . . . . . . . . . . . . . . . . . . . . . . . . . 128 9.1. Reparto colaborativo de tareas. . . . . . . . . . . . . . . . . . 134 Abstract Nowadays we live in a society of democratic change in which people begin to take a decisive role in the political area. There are increasingly social movements that proliferate due to the interest generated by taking part in politics. This participation has been channeled by the emergence of new technologies that allows to establish new ways for people to organize and express their opinion. The vast majority of these new tools are developed in a scope near to Web-based interfaces and interconnected network platforms. Being as we are in a time subject to several electoral events that favours the increased interest of people involved in politics, the development of such type of tools is becoming increasingly necessary. Keeping in mind this context, we contemplate the development of an appli- cation that provides access to new ways of participation from mobile devices. This application will have two clear objectives: to bring to the forefront poli- tical programmes, which usually few people read, encouraging its reading and discussion; and open a common space in which citizens express their alter- native proposals to those put forward by the political parties that represent us. We will base on the use of already existing Open-Source technologies for co- llaborative editing in real-time, adjusting them to mobile devices. Specifically we will explore the use of Web-based platform Apache Wave, carrying out a migration process that allows to take advantage of its potential in Android- based devices. This migration supposes an additional work that involves an effort to research into the development of an innovative platform, because there is no equivalent free software currently on Android. By using this tech- nology, users will have the opportunity to compose real-time collaborative texts. As a result for this work we will develop a first version of the application which, as a proof of concept, will make use of the features described above. Thus, the ultimate aim we set out for this project is to put into practice its usefulness during future electoral events. Keywords: Collaborative Writing, Politics, Democracy, Citizen Participa- tion, Real-Time, Android, Apache Wave, Elections, Election Programme, Citizen Proposals. IX Resumen Actualmente vivimos en una sociedad de cambio democrático en la que las personas comienzan a adquirir un papel determinante en el terreno poĺıtico. Son cada vez más los movimientos sociales que proliferan a ráız del interés generado por participar en politica. Esta participación se ha visto canalizada por la aparición de nuevas tecnoloǵıas que permiten establecer nuevas formas para que las personas se organicen y expresen su opinión. La gran mayoŕıa de estas nuevas herramientas se desarrollan en un ámbito cercano a plataformas interconectadas en red y basadas en una interfaz Web. Encontrándonos en un momento sujeto a varias citas electorales que propicia el aumento del interés de las personas por involucrarse en poĺıtica, el desarrollo de este tipo de herramientas se hace cada vez más necesario. Teniendo en cuenta este contexto, se plantea el desarrollo de una aplicación que proporcione acceso a nuevas formas de participación desde dispositivos móviles. Dicha aplicación tendrá dos objetivos claros: poner en un primer plano los programas electorales (que normalmente pocas personas leen) in- centivando su lectura y debate; y abrir un espacio común en el que la ciuda- dańıa exprese sus propuestas alternativas a las soluciones expuestas por los partidos poĺıticos que les representan. Nos basaremos en el uso de tecnoloǵıas de Software libre ya existentes de edi- ción colaborativa en tiempo real, adaptándolas a dispositivos móviles. Con- cretamente se explorará el uso de la plataforma Web Apache Wave, llevando a cabo un proceso de migración que permita explotar su potencial en dis- positivos basados en Android. Esta migración supone un trabajo adicional que conlleva un esfuerzo de investigación y desarrollo de una plataforma in- novadora, ya que no existe una tecnoloǵıa de software libre equivalente en Android actualmente. Haciendo uso de esta tecnoloǵıa los usuarios tendrán la oportunidad de redactar textos colaborativos en tiempo real. Como resultado de este trabajo se desarrollará una primera versión de la aplicación que, a modo de prueba de concepto, haga uso de las funcionalida- des antes descritas. De esta manera el objetivo final que nos planteamos es poner en práctica su uso durante futuras citas electorales. Palabras Clave: Escritura Colaborativa, Poĺıtica, Democracia, Participa- ción Ciudadana, Real-Time, Android, Apache Wave, Elecciones, Programas Electorales, Propuestas Ciudadanas. XI Caṕıtulo 1 Introducción A continuación se exponen algunas observaciones previas acerca del por qué de DemoCritics y la idea detras de la aplicación. Posteriormente se de- tallan los objetivos generales del proyecto y la estructura de este documento. 1.1. Antecedentes En los siguientes párrafos se discutirá acerca de una serie de consideraciones sobre el estado actual de la poĺıtica y la democracia. Se centrará la discusión sobre todo en su relación con las nuevas tecnoloǵıas como herramientas ca- paces de cambiar la manera en la que se conciben ambas disciplinas. Después se discutirá la intención detrás del desarrollo de DemoCritics. 1.1.1. Marco teórico: Poĺıtica en el mundo de la In- formática A primera vista se puede pensar que la poĺıtica no parece entusiasmar a las personas dedicadas al mundo de la informática. Se puede ubicar la poĺıtica como una parte de las ciencias sociales o la actividad poĺıtica, situando la informática en ciencias exactas o formales. Pero pensando en factores como la gestión de los privilegios de una aplicación entre los que se define de alguna forma una jerarqúıa, indirectamente se estará haciendo poĺıtica. También se pueden encontrar caracteŕısticas poĺıticas en el diseño relacional de una base de datos. Definiendo los campos de una base de datos se pueden ver algunos valores como el sexo, la nacionalidad, la edad o incluso las relaciones o restricciones que existen entre las tablas. Se estarán definiendo unas reglas básicas de funcionamiento de la base de datos establecidas por unos principios poĺıticos. Adentrándose en el mundo de las Licencias (copia, modificación, distribución, etcétera) en el desarrollo de Software se encuentra más contenido poĺıtico. Licencias que determinan el uso de un tipo de Software, ya sea para compartir, 1 CAPÍTULO 1. INTRODUCCIÓN vender o distribuir copias. Multitud de ”reglas poĺıticas” definidas en un documento de licencia de uso. Aśı como las restricciones que se establecen en la metodoloǵıa del desarrollo orientado a objetos, estableciendo las relaciones de herencia, restricción de métodos, variables, etcétera. Regresando a la actualidad y basándose en no muy lejanos acontecimientos pasados, se ha óıdo cómo algunos gobiernos recopilan datos de la actividad de los usuarios en las redes sociales [1], analizando todo el contenido que generan. Incluso cómo algunas aplicaciones móviles piden aprobar permisos con los que operar libremente en los dispositivos. Se observa por tanto que la poĺıtica está más integrada en la informática de lo que parece, sobre todo si se deja a un lado la informática más cient́ıfica y formal y se pasa a la informática más social, la de los gobiernos, la de los negocios o la de las relaciones sociales. 1.1.2. Idea detrás de DemoCritics La idea a desarrollar está generada en una época en la que la poĺıtica parece haber despertado el interés de una parte considerable de la ciudadańıa. Podŕıa ser por tanto una herramienta útil para participar en temas poĺıticos de forma sencilla y atractiva. Dejando aśı atrás los tópicos a menudo escuchados de 2o no entiendo de poĺıtica”, ”la poĺıtica es aburrida”, ”no sé a quién votar” o ”no he léıdo nunca un programa electoral” entre otros. La herramienta ofrece una nueva forma de participar en la poĺıtica y de llevar a los ciudadanos los programas electorales expuestos por las diferentes formaciones poĺıticas (Ver Sección 2.2.1). De forma que, para potenciar el uso social de la aplicación, los ciudadanos podŕıan leer aquellos puntos de los programas más vistos, debatidos, comentados, etc. Aśı, cualquier usua- rio tendŕıa a su disposición todos los programas electorales en su bolsillo, por lo que no tendŕıa que ir a la página web de cada formación poĺıtica y descargarse un documento de 200 páginas. Pensamos que es- ta forma tradicional de presentar un programa poĺıtico en un solo documento en un mundo donde las posibilidades de comunicarnos se han desarrollado exponencialmente mediante las nuevas tecno- loǵıas no es la mejor manera de generar interés por su lectura y la implicación en poĺıtica de las personas. Por otra parte, y teniendo en cuenta la tendencia actual de los nuevos movi- mientos ciudadanos de elaborar programas poĺıticos en base a propuestas de los ciudadanos, la aplicación también debe ofrecer alguna manera de 2 CAPÍTULO 1. INTRODUCCIÓN realizar Propuestas y debatirlas entre todos. De esta forma tanto la ciudadańıa como las formaciones poĺıticas pueden saber en cualquier momen- to cuáles son las principales preocupaciones de los ciudadanos y qué medidas o soluciones proponen para resolverlas. Además se pueden aprovechar las caracteŕısticas de Wave para realizar estas Propuestas de forma colaborativa y en tiempo real, aportando un valor diferenciador respecto a las actuales soluciones desarrolladas para Web (Ver sección 2.2.2). Para ello será necesario estudiar primero la migración de Wave/SwellRT a Android con el objetivo de poder utilizar esta tecnoloǵıa en DemoCritics. Por tanto, desde un primer punto de vista subjetivo, la aplicación esta di- vidida en dos partes. Por un lado se tiene la presentación estructurada de los programas poĺıticos que presentan las formaciones poĺıticas. Y por otro todas las propuestas que elaboran de forma colaborativa los ciudadanos, ya sea individualmente o en colectivos sociales. 1.2. Objetivos del Proyecto El objetivo principal de este proyecto es desarrollar una aplicación Android de utilidad social y que haga uso de una tecnoloǵıa poco utilizada en estas plataformas móviles como es la colaboración en tiempo real, que desde hace unos años śı que viene estando más presente en plataformas Web. Para ello primero se evaluará la tecnoloǵıa existente en el proyecto SwellRT (basado en Apache Wave) y se adaptará dicha tecnoloǵıa para poder hacer uso de ella de forma nativa desde Android. Después se discutirán posibles ideas de aplicación que puedan hacer uso de esta tecnoloǵıa y se diseñará y desa- rrollará una primera versión estable de esa idea de aplicación Android que pueda ser evaluable por usuarios. También se estudiará la viabilidad de se- guir desarrollando a futuro la aplicación con vistas a conseguir un producto que podamos poner a disposición del público en el marketplace de Android. 1a parte: Migración de Wave (SwellRT) a Android • Proporcionar un entorno de colaboración en tiempo real federado para Android basado en SwellRT. 2a parte: Creación de la aplicación Android. • Desarrollar una aplicación que recopile y permita interactuar con los programas electorales de los partidos poĺıticos. 3 CAPÍTULO 1. INTRODUCCIÓN • Desarrollar una aplicación que permita la participación colecti- va de ciudadanos mediante propuestas colaborativas editables en tiempo real. 1.3. Estructura del Documento En esta memoria se han querido reflejar los aspectos más destacados del proceso de desarrollo de este Trabajo de Fin de Grado. Aunque a lo largo del documento se detallen aspectos técnicos queremos dejar patente que no se trata de un tutorial de cómo funciona Wave o Android. Aunque a veces se entre en mayor detalle por cuestiones de claridad a la hora de entender el funcionamiento de la tecnoloǵıa, se anima al lector si quiere profundizar más en el tema a que haga uso de las múltiples referencias bibliográficas que se incluyen en este documento. A lo largo de este documento el lector se encontrará con una estructura ba- sada en caṕıtulos en los que se irán detallando distintas facetas del desarrollo del proyecto: Caṕıtulo 2 - Estado del Arte: se hace un pequeño análisis de las caracteŕısticas de actuales soluciones software que hacen uso de tecno- loǵıas de colaboración en tiempo real y de aplicaciones dedicadas a la participación poĺıtica. Caṕıtulo 3 - Metodoloǵıas del Proyecto: se exponen brevemente las metodoloǵıas empleadas durante todo el desarrollo del proyecto. Caṕıtulo 4 - Tecnoloǵıas del Proyecto: se repasan las tecnoloǵıas y herramientas utilizadas durante todo el desarrollo del proyecto. Caṕıtulo 5 - Migración de SwellRT a Android: se exponen aspec- tos destacados acerca de esta primera parte del proyecto, que pretende conseguir utilizar la tecnoloǵıa de Wave/SwellRT en Android. Caṕıtulo 6 - Diseño de la Aplicación: se detallan algunos aspectos acerca de la investigación previa y el diseño mediante Diseño Guiado por Objetivos (DGO) de DemoCritics. Caṕıtulo 7 - Arquitectura del Proyecto: se indaga en aspectos técnicos destacados de la organización de SwellRT y DemoCritics. 4 CAPÍTULO 1. INTRODUCCIÓN Caṕıtulo 8 - Evaluación con usuarios: se explican los procesos de evaluación con los usuarios de la versión desarrollada de DemoCritics, aśı como sus resultados. Caṕıtulo 9 - Resultados y Trabajo Futuro: se discuten los resul- tados obtenidos tras la realización del proyecto. Se discute también el reparto de trabajo y los siguientes pasos a realizar con el objetivo de mejorar o cambiar DemoCritics. Conclusiones: se extraen una serie de conclusiones acerca de lo con- seguido tras completar este Trabajo de Fin de Grado. 5 Caṕıtulo 2 Estado del Arte En este caṕıtulo se procederá a explorar las diferentes soluciones Software que se encuentran actualmente mercado. Se analizará cada una de ellas de forma resumida, obteniendo una visión general de las caracteŕısticas que lo componen y la funcionalidad que ofrece. Las plataformas quedarán dividas en dos secciones principales. Por un lado se analizarán las soluciones Software que proporcionan edición de contenidos en tiempo real (ver sección 2.1), desde un editor de texto colaborativo hasta una pizarra de dibujo. La segunda parte (ver Sección 2.2) explorará herra- mientas de contenido poĺıtico relacionado por una parte con las candidaturas o programas electorales de unas elecciones, y por otra parte con herramientas de participación ciudadana y activismo social. 2.1. Edición Colaborativa en Tiempo Real En esta sección se verán algunas de las soluciones disponibles actualmente que, al igual que Wave, permiten editar contenido de forma colaborativa y en tiempo real. Este contenido puede ser muy variado, aunque lo más usual suele ser proporcionar edición de texto en tiempo real mediante el uso de Trans- formaciones Operacionales (OT) [2]. Sin embargo, todas estas plataformas utilizan una arquitectura de servidor centralizado para ofrecer estas funcio- nalidades. Las soluciones no centralizadas actuales incluyen las arquitecturas P2P y federadas [3]. En las P2P (”Peer to Peer”) todos los participantes de la red son iguales (”peers”) a efectos de controlar los datos que circulan por la red y el Software/Hardware utilizado, pudiendo interactur directamen- te entre ellos. La arquitectura federada es una solución no centralizada que permite que múltiples nodos (servidores) centrales interactúen entre si, pu- diendo los usuarios (clientes) pertenecer a cualquier nodo sin que ello impida que se comuniquen con otros nodos distintos al que pertenecen. Wave utiliza una arquitectura federada en la que no existe un único servidor central que controle los datos de los usuarios (Ver Sección 4.1.3.1). 7 CAPÍTULO 2. ESTADO DEL ARTE Figura 2.1: Tipos de Arquitecturas de Red Para desarrollar este proyecto se ha escogido Wave porque es la única plataforma de Software libre que permite utilizar la tecno- loǵıa de colaboración en tiempo real mediante una arquitectura no centralizada de tipo federado. De esta manera, primero se verán las principales herramientas de desarrollo (APIs) más utilizadas actualmente, para después pasar a ver algunas de las plataformas que hacen uso de esta tecnoloǵıa. En su mayoŕıa son para Web, aunque existen unas pocas para Android. 2.1.1. APIs Centralizadas La mayor parte del desarrollo de tecnoloǵıas de Colaboración en Tiempo Real (RTC) se realizan mediante APIs que son propiedad de determinadas compañias y que no utilizan una arquitectura federada, sino que toda la información pasa por un servidor central que controla el RTC. A continuación veremos algunas de las más utilizadas hoy en d́ıa. 2.1.1.1. Google Realtime API Google Drive Realtime API [4] permite construir aplicaciones de colabo- ración en tiempo real utilizando la tecnoloǵıa de Transformaciones Opera- cionales (OT) [2] presente en Google Docs. Utiliza JavaScript para poder construir construir en nuestro cliente web un modelo de datos (Realtime Da- ta Model) que se guarda en sus servidores y gestiona automaticamente los cambios realizados por cualquiera de los usuarios que colaboran en tiempo real. Estos cambios en el modelo son notificados al servidor y al resto de usuarios mediante eventos que se lanzan al modificar los datos sobre los que se está colaborando. Para utilizarlo es necesario tener cuenta en la Conso- la de Desarrolladores de Google y activar el uso de esta API con nuestras credenciales de usuario. Existe asimismo una versión (privativa) de esta API compatible con Android. 8 CAPÍTULO 2. ESTADO DEL ARTE 2.1.1.2. Microsoft RTC Client API Microsoft RTC Client API [5] permite construir aplicaciones que permitan realizar llamadas de audio/video o sesiones de mensajeŕıa instantánea (IM) de texto por Internet y en tiempo real. Las aplicaciones se deben escribir en C++ o Visual Basic y pueden ser utilizadas tanto en PC como en dispositivos móviles siempre que ejecuten un sistema operativo Windows. 2.1.1.3. WebRTC WebRTC [6] (Web Real-Time Communication) es un API de Software Li- bre (bajo licencia BSD) actualmente en desarrollo por Google y la World Wide Web Consortium (W3C) y que pretende dotar a los navegadores web de capacidades de comnicación en tiempo real entre śı sin necesidad de plu- gins externos. En la actualidad se encuentra en su versión 1.0 y soporta los navegadores Firefox y Chrome. 2.1.1.4. Mozilla TogetherJS Mozilla TogetherJS [7] es una libreŕıa gratuita y de código libre (bajo licen- cia pública Mozilla v2) que permite añadir capacidades de colaboración en tiempo real a una página web. Utiliza WebRTC y webSockets para estable- cer comunicaciones peer-to-peer (P2P) entre dos o más navegadores Web. No proporciona alamcenamiento persistente de los datos y es necesario te- ner un Servidor que establezca la conexión. Con esta herramienta se puede editar texto en tiempo real (usando Transformaciones Operacionales), esta- blecer chats de audio/video y sincronizar el contenido de los navegadores. Está disponible en GitHub [8] para contribuir a su desarrollo. 2.1.1.5. ShareJS ShareJS [9] es una plataforma de Software Libre (bajo licencia MIT) que dispone de un pequeño servidor basado en Node.js y una libreŕıa de clien- te JavaScript que permiten la edición colaborativa de contenido mediante Transformaciones Operacionales. Permite actuar sobre objetos JSON o so- bre texto plano. Está disponible en GitHub para scontribuir a su desarrollo. 9 CAPÍTULO 2. ESTADO DEL ARTE 2.1.1.6. Goodow Goodow [10] es un framework de código libre de reciente desarrollo que pro- porciona un API muy similar a Google Real-Time API (Ver Sección 2.1.1.1) para colaboración en tiempo real mediante el uso de Transformaciones Ope- racionales. Dispone asimismo de dos clientes básicos para Android e iOS, utilizando una implementación del Servidor propia. 2.1.2. Plataformas Web y Android En las siguientes secciones veremos algunas de las plataformas Web y Android que hacen uso de tecnoloǵıas de Colaboración en Tiempo Real. 2.1.2.1. Wave: Wave In A Box (WIAB) Wave In a Box (WIAB) [11] es el código fuente liberado por Google y com- pletado por la comunidad de Apache tras pasar el proyecto a sus manos en el año 2012. Al igual que el resto del código de la tecnoloǵıa que heredó de Google, está implementado en Java usando OpenJDK [12]. La instalación trae consigo un cliente web desarrollado en Java usando el framework Goo- gle Web Toolkit (GWT) [13], lo que genera código JavaScript ejecutable en el navegador. Este cliente Web sirve como prueba de concepto de las funcionali- dades básicas del Modelo Conversacional de Wave, pudiendo gesionar waves, usuarios y extensiones. Actualmente cualquiera puede descargar y desplegar WIAB en su ordenador siguiendo los pasos que nos proporcionan en su wiki [14]. La aplicación se distribuye en forma de código fuente, accesible entre otras formas desde su repositorio de GitHub [15]. Existen asimismo servido- res de prueba ya desplegados en Internet sobre los que se puede observar el funcionamiento de WIAB [16]. 2.1.2.2. Google Docs Google Docs [17] es la plataforma de Google para edición de documentos de forma colaborativa y en Tiempo Real usando su API Realtime (Ver Sección 2.1.1.1). Permite que varios usuarios con cuenta de Google creen y editen colaborativamente un documento a la vez. Puedes ver los cursores de cada usuario e interactuar con ellos mediante un chat. También permite escribir sugerencias a modo de notas en el margen sobre lo ya escrito. Dispone de versión web y móvil, pudiendo interactuar entre ellas sin problemas. 10 CAPÍTULO 2. ESTADO DEL ARTE Figura 2.2: Cliente Wave In A Box (a) Interfaz Web (b) Interfaz Android Figura 2.3: Capturas de Google Docs 11 CAPÍTULO 2. ESTADO DEL ARTE Figura 2.4: Captura de TitanPad: Ejemplo de uso de EtherPad 2.1.2.3. Etherpad Etherpad [18] es un editor colaborativo en tiempo real de Software Libre (bajo licencia Apache 2.0). Permite a varios autores editar a la vez un mis- mo documento de texto, resaltando en distintos colores lo editado por cada persona y con la opción de un chat para comunicarse entre śı. Existen múlti- ples servicios que hacen uso de este editor, siendo uno de las más conocidas TitanPad [19]. 2.1.2.4. Colorillo Colorillo [20] es una aplicación web básica de dibujo colaborativo en tiempo real. Cualquier usuario puede empezar a dibujar sobre un nuevo lienzo en blanco con diversos colores y compartir este lienzo con otros usuarios para dibujar entre todos. De cada usuario podemos ver su procedencia aproximada sobre un mapa y el color que actualmente está utilizando. Existe también opción para chatear con otros usuarios. Los dibujos se pueden descargar y tienen todos licencia Creative Commons BY 3.0. 2.1.2.5. ShareLaTeX ShareLaTeX [21] es un editor web colaborativo de documentos escritos en LaTeX en tiempo real. Permite elaborar documentos LaTeX entre varias per- 12 CAPÍTULO 2. ESTADO DEL ARTE Figura 2.5: Captura de Colorillo Figura 2.6: Captura de ShareLaTeX sonas, ofreciendo una interfaz que incluye una previsualización del resultado en PDF. Desde 2014 es Software libre (bajo licencia AGPL v3) y cualquie- ra puede descargarselo de GitHub e instalar su propio servidor (escrito en Node.js) de ShareLaTeX. En su web ofrecen también opciones de pago con extras como un control de versiones o sincronización con Dropbox. 13 CAPÍTULO 2. ESTADO DEL ARTE (a) Interfaz Web (b) Interfaz Android Figura 2.7: Capturas de Samepage 2.1.2.6. Samepage Samepage [22] es una aplicación, tanto para web como para plataformas móvi- les (Android e iOS), que permite crear documentos que pueden ser editados de forma colaborativa y en tiempo real por múltiples usuarios. Para ello es necesario solo es tener una cuenta de samepage. Tanto el cliente web como el móvil permiten interactuar entre ellos para crear nuevas páginas, editar texto y hacer comentarios, aunque la versión web permite también añadir tablas, imágenes y archivos. 2.1.2.7. Quip Quip [23] es una aplicación para dispositivos móviles (Android e iOS) desa- rrollada con el objetivo de aumentar la productividad en los trabajos en grupo. Permite elaborar documentos, hojas de cálculo y listas de tareas com- partidas y editables de forma colaborativa en tiempo real, pudiendo realizar también comentarios sobre ellas. Dispone también de una versión web, pero es necesario tener cuenta para usarla. 14 CAPÍTULO 2. ESTADO DEL ARTE (a) Escritorio (b) Edición de texto (c) Comentarios Figura 2.8: Capturas de Quip 2.2. Aplicaciones de Participación Poĺıtica y Ciudadana En esta sección exploraremos algunas de las principales aplicaciones informáti- cas que existen en la actualidad destinadas a la participación ciudadana en propuestas, lectura de programas electorales o divulgación de candidaturas. 2.2.1. Programas Poĺıticos En la actualidad no existe ningún tipo de aplicación móvil orientada a debatir los programas electorales de los partidos poĺıticos en su conjunto. Concreta- mente no existe ningún tipo de plataforma que agrupe en un solo sitio los programas electorales de las diferentes candidaturas. Lo más parecido que hemos podido encontrar han sido aplicaciones elaboradas por un partido poĺıtico, orientadas a dar a conocer su candidatura. En ellas podemos ver normalmente, entre otros, la presentación de la candidatura, v́ıdeos propa- gand́ısticos y el programa electoral. Pasamos ahora a analizar algunas de las aplicaciones móviles encontradas, identificando en cada caso aspectos e ideas que nos han resultado positivos y negativos. 15 CAPÍTULO 2. ESTADO DEL ARTE 2.2.1.1. UPyD Parla La aplicación presenta [24] al candidato de UPyD Carlos Alt Bustelo para la alcald́ıa de Parla. Se trata de una alicación divulgativa donde podemos conocer todo lo esencial de la candidatura de UpyD para las elecciones del municipio de Parla en Mayo de 2015: los candidatos, el programa, v́ıdeos, etc. (a) Indice Programa (b) Sección Programa (c) Candidatos Figura 2.9: Capturas de UPyD Parla - Aspectos positivos: Presentación de Programa Electoral estructurado con Indice inicial. El Programa se lee dentro de la app, no nos lleva a leer el programa en PDF de la web. Presentación de una Sección del Programa Electoral de forma resumida, teniendo la opción de leer la sección entera al pulsar un botón. - Aspectos negativos: Posee una sección llamada ”Memes” cuyo nombre no se entiende ya que se limita a mostrar carteles propagand́ısticos de la candidatura. 16 CAPÍTULO 2. ESTADO DEL ARTE 2.2.1.2. ]RecuperaCórdoba Esta aplicación [25] presenta la candidatura de Pedro Garćıa de Izquierda Unida a la provincia de Córdoba, informando de su propuesta de gobierno de forma resumida. En la aplicación podremos encontrar la lista de los can- didatos propuestos a la comunidad cordobesa, el programa electoral de la formación, las propuestas del partido, noticias de última hora y v́ıdeos. (a) Indice Programa (b) Sección Programa (c) Candidatos Figura 2.10: Capturas de ]IURecuperaCórdoba - Aspectos positivos: Interfaz limpia y sencilla de diseño plano. Consistencia en la aplicación: la información se presenta siempre en formato de lista ofreciendo los minimos datos necesarios sin sobrecargar de información al usuario. Menú lateral disponible en cualquier pantalla con las principales accio- nes de la aplicación: Candidatos, Programa, Videos y Noticias. El programa electoral está estructurado en un indice primer nivel y a veces con segundo nivel. Aporta la opción de ver el programa completo. 17 CAPÍTULO 2. ESTADO DEL ARTE - Aspectos negativos: Utiliza a veces iconos cuyo proposito no se entiende: ¿Un avión de papel para noticias? ¿Un ”a>z” para la lista de candidatos? Las distintas secciones se abren dentro de la aplicación, pero da acceso a una navegación lateral por las páginas del PDF del programa en cuestión. Si haces zoom en una sección no permite pasar de página. 2.2.1.3. PSOE Andalućıa Esta aplicación [26] presenta la candidatura del PSOE a la junta de Andalućıa para las elecciones del 22 de Marzo, promocionando básicamente su programa electoral y a la candidata Susana Dı́az. Permite también estar al d́ıa de noticias y eventos relacionados con dicha candidatura. La navegación por el programa, aunque estructurada en un primer nivel, se realiza directamente visualizando páginas que parecen extraidas del programa en PDF. (a) Pantalla Principal (b) Indice Programa (c) Sección Programa Figura 2.11: Capturas de PSOE Andalucia - Aspectos positivos: 18 CAPÍTULO 2. ESTADO DEL ARTE Posee un indice de primer nivel para estructurar el programa. - Aspectos negativos: La interfaz y los botones no se adaptan al tamaño de pantalla y per- manecen de un tamaño pequeño que dificulta la interacción. El programa electoral se visiona en forma de una página que parece descargada directamente de la version PDF y que permanece en un tamaño pequeño e ilegible, no permitendo tampoco hacer zoom. En general, la interfaz parece hecha para una web más que para un móvil. 2.2.1.4. PP Canarias La delegación del Partido Popular en Canarias presenta su aplicación móvil [27] para promocionar a sus candidatos para las elecciones autonómicas y municipales de Mayo de 2015. La aplicación nos avisará de los eventos elec- torales, podremos consultar los candidatos, novedades, galeŕıa de imágenes y por supuesto ver el programa electoral. (a) Pantalla Principal (b) Programas (c) Candidatos Figura 2.12: Capturas de PP Canarias - Aspectos positivos: 19 CAPÍTULO 2. ESTADO DEL ARTE Interfaz limpia y atractiva con una organización clara en secciones que aparecen en una barra inferior al estilo de iOS. - Aspectos negativos: Aunque dispone de una sección para programas electorales, no dispone de ellos en local, si no que te obliga a abrir un navegador para ver la versión entera en PDF. El problema de la barra inferior de menús es que quita espacio al con- tenido principal. Se podŕıa haber puesto el menú en alun sitio menos intrusivo. 2.2.2. Participación Ciudadana Centrándonos en la participación ciudadana ya sea mediante la generación de Propuestas, el desarrollo colaborativo de programas o la recogida de firmas, existen numerosos portales en Internet y aplicaciones móviles destinadas a ello. Realizaremos un breve repaso a las aplicaciones más destacadas. 2.2.2.1. Reddit Reddit [28] es una plataforma web de código libre donde los usuarios pueden crear temas, propuestas o compartir enlaces web a otros sitios. A primera vista puede parecer un foro, aunque la principal diferencia respecto a éste último radica en que otros usuarios pueden votar a favor o en contra de los enlaces, haciendo que el sistema los haga aparecer como más o menos destacados. A esto lo denominan ”filtrado colaborativo” pues de esta forma los temas de conversación, enlaces, o propuestas aparecerán en el orden que haya escogido la comunidad según la puntuación positiva o negativa que le hayan dado. En principio el uso de reddit está destinado a todo tipo de temas, entre los que podemos encontrar algunos ejemplos fuertemente relacionados con la participación ciudadana. Es el caso de Plaza Podemos [29]: un espacio utilizado para que la ciudadańıa pueda expresar sus propuestas, compartir noticias relacionadas con la actualidad poĺıtica o debatir aquellos temas que más les preocupan. Aśı, aunque no seamos participantes de reddit, de un simple vistazo podemos saber qué es lo más debatido por la ciudadańıa, las propuestas que quieren llevar a cabo en en el gobierno o cuáles son los temas que más les preocupan. 20 CAPÍTULO 2. ESTADO DEL ARTE Figura 2.13: Plaza Podemos utilizando la plataforma Reddit - Aspectos positivos: Opción de filtrado por tipos de contenido (propuestas, noticias...) y ordenación de distintas formas (nuevos, populares, activos...) Sistema de votación sencillo desde la propia previsualización del con- tenido mediante flechas (arriba y abajo), pudiendo ver entre ellas el número actual de votos. - Aspectos negativos: Para un usuario que lo usa por primera vez puede resultar confuso que haya contenido redactado con usuarios mezclado con enlaces a noticias externas. 2.2.2.2. Change.org Change.org [30] es un portal web que permite lanzar múltiples peticiones de cambio en Internet. Podŕıamos definirlo como la evolución de la recogida 21 CAPÍTULO 2. ESTADO DEL ARTE Figura 2.14: Change.org · La mayor plataforma de peticiones del mundo de firmas en la calle: cualquiera puede realizar una petición para solicitar el apoyo de otros. Las personas que decidan apoyar la petición, dejarán sus datos personales y constarán entre el número de personas que han firmado a favor de la petición. Una vez que han alcanzado un número objetivo de apoyos se procede a entregar las firmas digitales al organismo, persona o entidad a la que va destinada la petición. Por ejemplo: en mayo de 2011, en relación con las movilizaciones del Movi- miento 15-M y Democracia Real Ya, y ante el desalojo por los Mossos de Esquadra se llevó a cabo la petición “Exige la dimisión fulminante del Con- seller de Interior Felip Puig por la violencia utilizada en Pza. Catalunya”. Desde su creación en 2007, Change.org ha logrado muchas de sus peticiones demandadas entre los que se incluyen la atención de pacientes con enfer- medades complejas, protección sobre animales y medio ambiente, derechos públicos, leyes, etc. - Aspectos positivos: Página principal con peticiones cuyo objetivo de firmas se ha consegui- do (”victoria”) y las más destacadas aun por conseguir. De cada petición se muestra un ”preview” con los aspectos más desta- 22 CAPÍTULO 2. ESTADO DEL ARTE cados: foto, titulo, autor, número de firmas y fecha de creación. - Aspectos negativos: Aunque existen filtros para peticiones (Destacadas, Populares y Re- cientes) ¿de qué depende esta clasificación? No queda claro cómo se elige la opción en dicha lista de peticiones, 2.2.2.3. Programas Colaborativos de Ahora Madrid y Zaragoza en Común Para las pasadas elecciones municipales del 24 de Mayo, la candidatura de unidad popular Ahora Madrid, desarrolló una plataforma en la web para elaborar su programa electoral de forma colaborativa. En esta plataforma, cualquier usuario teńıa la oportunidad de explorar las propuestas por cate- goŕıa o por distrito. De tal forma que podŕıa debatirlas, puntuarlas o crear sus propias propuestas. Aśı las propuestas más valoradas por la comunidad, seŕıan llevadas al programa final para las elecciones municipales del 24 de Mayo. El resultado final fue determinar las cinco propuestas más votadas que fueron incluidas en el programa final como medidas urgentes para realizar en los 100 primeros d́ıas de gobierno. También utilizaron una plataforma similar en la candidatura zaragozana de unidad popular Zaragoza en Común [31]. - Aspectos positivos: Las propuestas están organizadas por distintos temas: ”Ejes temáticos” en el caso de Zaragoza en Común y ”Areas y Objetivos” en el caso de Ahora Madrid. En ambos casos se puede filtrar la lista de propuestas de distintas for- mas (”Más valoradas”, ”Más consenso” y ”Más debatidas”) En el ”preview” de la propuesta se muestra el número de comentarios y el porcentaje de votos positivos en relación al número total de votos recibidos. - Aspectos negativos: En cada propuesta se muestra un número a la izquierda que no explica lo que significa (entendemos que es el número de votos a favor). 23 CAPÍTULO 2. ESTADO DEL ARTE Figura 2.15: Creación colaborativa del programa de Ahora Madrid. Figura 2.16: Creación colaborativa del programa de Zaragoza en Común. 24 CAPÍTULO 2. ESTADO DEL ARTE 2.2.2.4. Appgree Appgree[32] es una plataforma desarrollada con el objetivo de poner a gran- des grupos de personas de acuerdo en poco tiempo. Está disponible tanto para web como para móviles y permite que sus usuarios lancen propuestas y debatan sobre cualquier tema pudiendo votar y alcanzar un consenso, ob- teniendo los resultados de dicha votación casi en tiempo real gracias a un algoritmo estad́ıstico desarrollado por ellos llamado DemoRank[33]. En la aplicación podemos acceder a una lista de canales: que aglutinan en- cuestas, propuestas y preguntas (ya sea de respuesta abierta o de votación entre dos o mas opciones), pudiendo votar y ver los resultados actuales de votación y respuestas. Para fomentar la participación potencian mucho el uso de listas de preguntas más candentes y recientes. Además se pueden compartir preguntas por redes sociales para aumentar su difusión. (a) Canal (b) Pregunta Múltiple (c) Pregunta Abierta Figura 2.17: Capturas de Appgree - Aspectos positivos: Interfaz limpia de colores planos (blanco y azul) con pantalla principal de ultimas preguntas destacadas. Organización por canales temáticos de las preguntas. 25 CAPÍTULO 2. ESTADO DEL ARTE Opción de marcar canales como favoritos para poder seguirlos y ser notificados de las últimas preguntas añadidas. - Aspectos negativos: Las preguntas se organizan por antigüedad (activas y no activas) pero se navega de abajo hacia arriba, cuando uno esperaria hacerlo al revés. Los tipos de preguntas (abiertas, de respuesta múltiple, de śı o no, encuestas...) aparecen todas mezcladas. 26 Caṕıtulo 3 Metodoloǵıas del Proyecto A continuación se exponen las diferentes metodoloǵıas que hemos utilizado durante el desarrollo de este Trabajo de Fin de Grado. 3.1. Uso de Software Libre Para el desarrollo de todo el software que compone el proyecto siempre se ha utilizado una aproximación de software libre. Esto permite contribuir al común y que cualquier persona pueda hacer uso de nuestro código si lo necesita. Se ha usado software libre tanto con las herramientas necesarias para el desarrollo de código y documentación como para el resultado final de la aplicación. Con esto se da la posibilidad a que otros usuarios puedan visualizar el código desarrollado o utilizarlo libremente. Para ello se realizaron aportaciones a toda la comunidad subiendo el código del proyecto a GitHub bajo una licencia GNU GPLv3 [34]. En la tabla 3.1 se expone un breve resumen del software libre utilizado y las licencias que poseen. Software Licencia Eclipse Eclipse Public License Android Studio Apache License 2.0 Laravel MIT License Apache Wave Apache License phpMyAdmin GNU GPLv2 MySQL GNU GPL PHP PHP License Android Apache License 2.0 y GNU GPLv2 Java GNU GPL OpenShift Apache License 2.0 Tabla 3.1: Software libre utilizado durante el desarrollo. 27 CAPÍTULO 3. METODOLOGÍAS DEL PROYECTO 3.2. Migración de Wave/SwellRT a Android Para llevar la tecnoloǵıa de Software libre de colaboración en tiempo real ya existente en Web de SwellRT a Android, se utilizó una metodoloǵıa que implicaba los siguientes pasos: Estudiar el funcionamiento de la implementación Web actual de SwellRT en Java y GWT. Identificar los problemas de la implementación actual al desplegarla en Android. Implementar los cambios necesarios para hacer la tecnoloǵıa compatible con las caracteŕısticas nativas de Android. Probar con una aplicación sencilla que el resultado funciona. El desarrollo de esta parte del proyecto se puede ver en el caṕıtulo5.1 de este documento, dedicado en su totalidad a describir los aspectos más destacados dicha migración a Android. 3.3. Diseño de la Aplicación Tras conseguir migrar SwellRT a Android hab́ıa que llevar a cabo el diseño de la aplicación Android que utilizara las caracteŕısticas de colaboración en tiempo real de SwellRT. Para ello se utilizó una metodoloǵıa de brainstorming con el fin de dar con una idea interesante de aplicación y una metodoloǵıa formal de Diseño Guiado por Objetivos (DGO) para diseñarla. 3.3.1. Brainstorming El brainstorming [35] (o lluvia de ideas en español) es una técnica de trabajo en grupo que persigue que todos sus integrantes se junten para generar ideas originales en un ambiente distendido. El objetivo es primar la cantidad por encima de la calidad de éstas para después de la sesión realizar un proceso de selección de las más interesantes. De esta manera pueden salir ideas que a priori podrian resultar absurdas pero que otros integrantes del grupo pueden aprovechar para que surjan otras nuevas. 28 CAPÍTULO 3. METODOLOGÍAS DEL PROYECTO Con esta técnica se ha decidido la aplicación que se le dará a la tecnoloǵıa de SwellRT en Android. (Ver Sección 6.2). 3.3.2. Diseño Guiado por Objetivos (DGO) Se basará el diseño de la aplicación en la metodoloǵıa del Diseño Guiado por Objetivos (DGO o Goal-Directed Design), que implementa el proceso de la Ingenieŕıa de la Usabilidad propuesto por Alan Cooper [36]. Este proceso constará de las siguientes fases: 3.3.3. Brainstorming El brainstorming [35] (o lluvia de ideas en español) es una técnica de trabajo en grupo que persigue que todos sus integrantes se junten para generar ideas originales en un ambiente distendido. El objetivo es primar la cantidad por encima de la calidad de éstas para después de la sesión realizar un proceso de selección de las más interesantes. De esta manera pueden salir ideas que a priori podrian resultar absurdas pero que otros integrantes del grupo pueden aprovechar para que surjan otras nuevas. 3.3.4. Diseño Guiado por Objetivos (DGO) Para elaborar el diseño de la aplicación, nos hemos basado en la metodo- loǵıa del Diseño Guiado por Objetivos (DGO o Goal-Directed Design), que implementa el proceso de la Ingenieŕıa de la Usabilidad propuesto por Alan Cooper [36]. Este proceso constará de las siguientes fases: 1. Investigación Esta fase consistirá en la realización de estudios para obtener datos cualitativos sobre los usuarios y/o reales de la aplicación y cuáles son sus necesidades. Se realizarán tareas para comprender a los usuarios, saber sus inquietudes y lograr empat́ıa. A lo largo de esta fase se irán identificando patronos de comportamiento que sugerirán los objetivos y motivaciones del usuario. Por último se realizarán estudios de mer- cado, revisiones y auditoŕıas que ayudarán al diseñador a comprender el dominio, el modelo y las restricciones técnicas que el sistema debe cumplir. 29 CAPÍTULO 3. METODOLOGÍAS DEL PROYECTO 2. Modelado A lo largo de esta fase se utilizarán los datos provenientes de la fase previa para crar los modelos del dominio y los usuarios. En esta parte se crearán las personas, aquetipos de usuarios que contienen información sobre obejtivlos, motivaciones y comportamientos de los usuarios con el sistema. El resultado final de esta fase serán los tipos de persona que representarán a los usuarios del sistema, y que más adelante serán utilizados fases para proporcionar algún tipo de feedback. 3. Definición de Requisitos Durante esta fase se utilizarán las personas y los datos de la fase an- terior, para crear los escenarios de contexto e identificar los requisitos o necesidades del usuario. Estos requisitos serán definidos en tres com- ponentes: objeto, acciones y contexto. También se definirán requisitos relacionados con el negiocio, la apclicación, requisitos técnicos, etcétera. 4. Definición del framework de Diseño En esta fase se creará el concepto general del sistema, definiendo los comportamientos y diseño visual. Identificaremos el framework de interacción, como un concepto de diseño estable que define la estruc- tura del sistema a partir de patrones y principios de diseño. Por último, se definirá el framework visual, como el aspecto visual de la aplicacion (diseño, tipograf́ıa, colores, iconos, etcétera). Queremos insistir eso śı en que únicamente se ha basado este proyecto en esta metodoloǵıa para seguir el proceso del diseño de la aplicación. No se seguirán todas las fases de esta metodoloǵıa al pie de la letra ya que el alcance en tiempo de este proyecto escapa a una metodoloǵıa tan formal y laboriosa (que implica gran cantidad de pruebas y procesos) como esta. Queremos insistir eso śı en que únicamente nos hemos basado en esta me- todoloǵıa para seguir el proceso del diseño de la aplicación. No seguiremos todas las fases de esta metodoloǵıa al pie de la letra ya que el alcance en tiempo de este proyecto escapa a una metodoloǵıa tan formal y laboriosa (que implica gran cantidad de pruebas y procesos) como esta. 3.4. Implementación de la Aplicación En esta fase se llevó a cabo la implementación de un prototipo final de la aplicación basado en el estudio de los resultados de la fase de diseño previa. 30 CAPÍTULO 3. METODOLOGÍAS DEL PROYECTO Además se diseñó e implementó también el servidor que alojaŕıa la base de datos y se comunicaŕıa con la aplicación. Durante el desarrollo del código del sistema se han utilizado las metodoloǵıas que se describen a continuación. 3.4.1. Control de versiones Para mantener una copia de las versiones locales, se ha utilizado GIT co- mo herramienta de control de versiones. Realizando commits y subiendo los cambios de cada versión en un repositorio público alojado en GitHub. 3.4.2. GitHub Para compartir el código del sistema y visualizar los cambios de cada com- mit, se ha utilizado una organización pública donde se almacenan todos los repositorios de sus distintas partes. La organización está disponible en el siguiente enlace: https://github.com/Zorbel. 3.4.3. Reparto de tareas Durante la implementación del proyecto se dividieron las tareas en dos grupos principales. Por un lado se teńıa la parte de back-end, formada por la API Rest desarollada en Laravel y la base de datos. Mientras que por otro lado se encontraba la parte de front-end formada por la aplicación en Android. De cada una de estas partes y debido a la experiencia previa con las tecnoloǵıas involucradas se encargó uno de los componentes del grupo. De esta manera Jaime trabajó más en el desarrollo del back-end y Javier en el del front-end. No obstante ambos revisaban el código del otro para verificar su correcto funcionamiento. El desarrollo inicial en Wave/SwellRT y su implementación final en la aplicación se produjo en paralelo por ambos componentes del grupo. 3.4.4. Revisiones de código Cada vez que se completaba una funcionalidad se sub́ıa a GitHub y se realiza- ba una pequeña revisión de código para verificar cómo se hab́ıa implementa- do el objetivo a desarrollar. De esta forma se evitaba malinterpretar algunos aspectos que durante la implementación pueden diferir de su planteamien- to inicial. También se recibieron revisiones de código externas por parte de 31 https://github.com/Zorbel CAPÍTULO 3. METODOLOGÍAS DEL PROYECTO los directores del Trabajo de Fin de Grado, que aportaron una visión más eficiente y organizada del código desarrollado. 3.4.5. Evaluaciones de usabilidad Se recibió una evaluación de usabilidad externa por parte del director del TFG Pablo, que valoraba aspectos a mejorar de la Intefaz de Usuario (UI). Esta evaluación sivió para modificar algunos aspectos de representación gráfi- ca que mejoraraŕıan la interpretación de los elementos por parte del usuario. 3.5. Patrones de Diseño La figura 3.2 representa los patrones utilizados en el desarrollo de todo el proyecto. Tabla 3.2: Patrones de diseño empleados en el proyecto. Patrón Decripción Utilización Sección MVC Modelo-Vista-Controlador. Separa la lógica del modelo y la vista, que se comunican a través del controlador. Servicio Web REST Laravel. 7.2.2.1 Singleton Mantiene una única instan- cia de un objeto, pudiento instanciarse desde cualquier clase. Aplicación Android. 7.2.3.2 Factoŕıa Permite crear, mediante una interfaz abstracta, con- juntos o familias de objetos relacionados, sin especificar cual es la implementación concreta del objeto. Servicio SellRT. 5.1.1.3 32 Caṕıtulo 4 Tecnoloǵıas del Proyecto En las siguientes secciones se explicarán brevemente las tecnoloǵıas y herra- mientas que se han utilizado para llevar a cabo este proyecto. Concretamente se hablará de las tecnoloǵıas utilizadas durante la Migración del cliente web de SwellRT (Wave) a Android (Ver Sección 5.1) y durante el desarrollo de la aplicación Android que hará uso del resultado de dicha Migración. En el caso de Wave, al tratarse de una tecnoloǵıa bastante reciente, se expli- cará más detalladamente en qué consite esta tecnoloǵıa, pero para el resto de casos se hará una pequeña reseña sobre en qué consiste la tecnoloǵıa y sus usos. En todos los casos se intentará tamb́ıen explicar de qué manera y para qué se ha utilizado dentro de este proyecto. Para hacerse una idea general de las tecnoloǵıas utilizadas se recomienda ver el resumen que se muestra en la Tabla 4.1. Figura 4.1: Nube de Tecnoloǵıas utilizadas en el Proyecto 33 CAPÍTULO 4. TECNOLOGÍAS DEL PROYECTO Tipo Nombre Uso Sección Framework SwellRT Framework que permite desarrollar aplicaciones con la tec- noloǵıa y la infraestructura federada de Wave a través de un API JavaScript y Android. 4.1.4 Android Plataforma para la Migración y el Desarrollo de la app. 4.2.2 GWT Framework JavaScript utilizado por el antiguo Cliente web de Wave presente en SwellRT. 4.1.7 Laravel 5 Framework de desarrollo del Service REST de la App en PHP. 4.2.9 Servidor Wave In A Box (WIAB) Servidor que aloja las Waves. Migración y Desarrollo de la App. 2.1.2.1 OpenShift Servidor que aloja el Service REST y la Base de Datos de la App. 4.2.10 Lenguaje Java Lenguaje base para trabajar con Android, tanto en la Mi- gración como en la App. 4.1.6 JavaScript Lenguaje del antiguo cliente web de Wave presente en SwellRT. 4.1.8 PHP Lenguaje para definición del Service REST de la App. 4.2.8 SQL Lenguaje para definir e interactuar con la Base de Datos de la App. 4.2.5 Formato de Datos JSON Formato para intercambio de información con Servidor Wa- ve y REST. 4.2.4 XML Formato para definición de datos estructurados (y de inter- faces en Android). 4.2.3 Protocolo Wave Protocolo de intercambio de Waves basado en XMPP y usado para la migración y la App. 4.1.1 HTTP Protocolo de transferencia de datos por Internet usado por la Migración y por la app. 4.1.9 WebSocket Protocolo de transferencia de datos bidireccionales por In- ternet, usado por la Migración y por la App. 4.1.10 Base de Datos MySQL Sistema Gestor de la Base de Datos de la App 4.2.6 PhpMyAdmin Herramienta de Administración de la Base de Datos de la App. 4.2.7 Control de Versiones Git Software de control de versiones usado para la Migración y la App. 4.1.11 GitHub Plataforma web de control de versiones que aloja los desa- rrollos de la Migración y de la App. 4.1.12 Prototipado POP Aplicación para elaborar los Prototipos Interactivos basa- dos en los Prototipos en Papel de la App. 4.2.12 IDE Eclipse Luna Entorno de Desarrollo utilizado para la Migración de Wave. 4.1.5 Android Studio Entorno de Desarrollo utilizado para el desarrollo de la App. 4.2.1 Sublime Text Editor de texto y de código fuente,utilizado para desarrollar el Service REST. 4.2.11 Tabla 4.1: Tecnoloǵıas usadas en el Proyecto 34 CAPÍTULO 4. TECNOLOGÍAS DEL PROYECTO 4.1. Tecnoloǵıas de Wave 4.1.1. Google Wave Ideado y presentado en 2009 por ingenieros de Google [37], Wave es a la vez un protocolo de comunicaciones basado en XMPP [38]y una plataforma web de código libre, que permiten a sus usuarios comunicarse y colaborar entre śı en tiempo real (Ver sección 4.1.3.2) y de forma federada (Ver sección 4.1.3.1) a través de Internet. Inicialmente fue desarrollado con el objetivo de integrar en una sola plataforma servicios ampliamente utilizados como son el correo electrónico, las redes sociales y la mensajeŕıa instantánea. Pese al gran entusiasmo generado entre la comunidad de desarrolladores tras su anuncio, en el año 2010 Google anuncia el abandono del proyecto [39] debido a su poca acogida entre los desarrolladores y a que decide reorientar el uso de la tecnoloǵıa hacia sus plataformas de edición de documentos Google Docs [17] y a su red social Google + [40]. Es en este momento cuando el desarrollo libre del proyecto pasa a manos de la Apache Software Foundation bajo el nombre de Apache Wave. 4.1.2. Apache Wave Al cambiar de manos su desarrollo en 2010, la tecnoloǵıa pasa a formar parte de la incubadora de la fundación Apache [41] como software de código libre bajo licencia Apache [42]. Aśı, se produce el desarrollo de Wave In a Box (WIAB) (Ver sección 2.1.2.1), plataforma que integra un cliente web sencillo y una implementación de un servidor Wave que cualquiera puede descargar y desplegar en su ordenador. 4.1.3. Caracteŕısticas de Wave Como plataforma de código libre desarrollada para ser utilizada en red, Wa- ve hace uso de distintas tecnoloǵıas y protocolos bien conocidos. Entre sus caracteŕısticas más destacadas están las siguientes: 4.1.3.1. Federación El Protocolo Wave [38] fue desarrollado para utilizar un modelo federado [43] [44] de comunicación basado en la tecnoloǵıa XMPP [45] [38]. Se trata por 35 CAPÍTULO 4. TECNOLOGÍAS DEL PROYECTO tanto de un modelo descentralizado en el que cualquiera de los participantes en la edición del documento (o ”conversación”) es libre de actuar tanto como servidor como cliente sin que ello afecte a su participación en el documento. Por otra parte los clientes pueden interactuar entre śı independientemente de a qué servidor estén conectados. Figura 4.2: Arquitectura federada en SwellRT Además, a diferencia de otras tecnoloǵıas (como el correo electronico) en las que cada participante almacena su propia copia de la conversación y cada vez que hay cambios se debe transmitir la conversación entera a todos los participantes, Wave tiene la ventaja de que actúa de forma que es el servidor de la conversación el único que almacena la copia entera y se encarga de calcular los cambios que se han producido para transmitir solamente dichos cambios por la red a los participantes, con las consiguientes ventajas en términos de latencia que ello conlleva. 4.1.3.2. Consistencia en tiempo real El Protocolo Wave [38] utiliza la tecnoloǵıa de Transformaciones Operacio- nales (OT) [2] para garantizar la consistencia en la comunicación en tiempo real entre los participantes. Es decir, cualquier cambio producido por cual- quiera de los participantes en la conversación se transmite automáticamente y en tiempo real al resto de los participantes. Esto se hace sin pérdida de información y garantizando que, independientemente del orden en el que se 36 CAPÍTULO 4. TECNOLOGÍAS DEL PROYECTO produjeron los cambios, el estado estado final del documento será el mismo para todos y por ende verán lo mismo. [46]. 4.1.3.3. Escalabilidad Wave fue desarrollado como un protocolo de alta escalabilidad que permite gestionar la existencia de una gran cantidad de conversaciones y participantes sin que por ello se resienta la productividad del sistema. 4.1.4. Servidores Wave: SwellRT Como parte del proyecto europeo de investigación P2Pvalue [47] se ha desa- rrollado SwellRT (Swell Real Time), un fork de Wave In a Box (Ver sección 2.1.2.1) que ampĺıa las caracteŕısticas de éste último añadiendo un nuevo modelo de datos (Modelo de Datos Colaborativo) más allá del Modelo de Datos Conversacional de Wave original. Proporciona también un API escrito en Java que permite trabajar sobre los datos de ese nuevo modelo en forma de tres tipos básicos: mapas, listas y strings. Es por tanto un framework de colaboración en tiempo real que basa su funcionamiento en Apache Wave y cuyo principal popósito es permitir la integracion de la tecnoloǵıa Wave en otras aplicaciones, que podrán compartir objetos (de los tipos antes mencio- nados) de forma federada y en tiempo real. Su código fuente está disponible en GitHub [48], aśı como sus instrucciones de instalación (Ver el Readme en GitHub). Para este proyecto se ha usado el framework SwellRT como base para la migración de la tecnoloǵıa de Apache Wave a la plataforma Android [49]. Se pretende con esto que SwellRT haga uso de las funcionalidades nativas de Android. 4.1.5. Eclipse Eclipse [50] es un Entorno de Desarrollo Integrado (IDE) de código libre (bajo licencia Eclipse Public License) desarrollado por la Eclipse Foundation. Lanzado en 2003 alcanza actualmente su versión 4.4, también denominada Eclipse ”Luna”. Se trata de uno de los IDEs más utilizados que proporciona herramintas que permiten el desarrollo de código para múltiples lenguajes y tecnoloǵıas. Posee además la capacidad de extender sus capacidades gracias 37 CAPÍTULO 4. TECNOLOGÍAS DEL PROYECTO al uso de plug-ins que se pueden descargar desde su marketplace. Es el caso por ejemplo del plugin ADT (Android Developer Tools), que permite utilizar el SDK de Android para desarrollar para esta plataforma utilizando Eclipse como IDE. Hasta finales del año 2014 Eclipse + ADT era el IDE recomendado por Google para el desarrollo en su plataforma móvil, aunque recientemente ha pasado a utilizar su propio IDE llamado Android Studio (Ver Sección 4.2.1) En este proyecto usaremos Eclipse con el plugin ADT como IDE para estudiar el código del cliente web de SwellRT y llevar a cabo una migración a Android que permita hacer uso de las caracteŕısticas nativas de esta plataforma. 4.1.6. Java Java [51] es un lenguaje de programación de próposito general y orientado objetos. Fue desarrollado en 1995 por Sun Microsystems, actualmente parte de Oracle, y se distribuye en forma de JDK (Java Development Kit), cuya versión oficial privativa alcanza hoy en d́ıa la 8. Existe no obstante una ver- sión de código libre (bajo licencia GPLv2) llamada Open JDK [12] disponible actualmente en su versión 7. Java tiene como ventaja su independencia del hardware, ya que cualquier código compilado en java se traduce a un for- mato bytecode que se ejecuta en una Máquina Virtual Java (JVM) que es independiente del hardware que haya por debajo. En este proyecto se usará Java para la Migración del cliente SwellRT a An- droid, pues dicho cliente (y el que desarrollo Google inicialmente) está escrito en su mayor parte en este lenguaje de programación. Se utilizará también pa- ra el desarrollo de la aplicación Android, ya que el SDK de esta plataforma se basa en Java para desarrollar código compatible. 4.1.7. GWT GWT [13] (Google Web Toolkit) es un framework de código libre (bajo li- cencia Apache 2.0) que facilita el desarrollo de aplicaciones web basadas en AJAX y JavaScript. Concretamente el API de GWT permite desarollar cñódigo en Java que posteriormente será traducido a JavaScript. Fue creado por Google en 2006 y actualmente es un proyecto independiente de Software libre que alcanza ya su versión 2.7 En este proyecto se utilizará GWT durante la Migración de Wave a Android. Puesto que una parte significativa del cliente web de SwellRT está desarro- 38 CAPÍTULO 4. TECNOLOGÍAS DEL PROYECTO llada con esta tecnoloǵıa y es necesario estudiar el código para sustituirla por código nativo de Android, ya que la plataforma móvil de Google no es compatible con GWT. 4.1.8. JavaScript JavaScript [52] (JS) es un lenguaje de programación dinámico y débilmente tipado utilizado a menudo para la programación de aplicaciones web del lado del cliente (navegador web), aunque también existen implementaciones para el lado del servidor (como Node.js). Originalmente desarrollado en 1995 por la extinta Netscape Communications, su versión actual es la 1.8.5. En este proyecto se utilizará JavaScript para estudiar la implementación del cliente web de SwellRT hecha con GWT y JavaScript que deberemos migrar a código nativo de Android, pues la plataforma móvil de Google no es compatible de forma nativa con JavaScript. 4.1.9. HTTP HTTP [53] (HyperText Transfer Protocol) es el protocolo de capa de apli- cación más utilizado para establecer comunicaciones en la World Wide Web. Fue desarrollado en 1996 conjuntamente por la World Wide Web Consortium (W3C) y el Internet Engineering Taskforce (IETF), aunque la definición de su versión más actual (1.1) se encuentra especificada en la serie de RFCs (Request For Comments) 7230 [53]. Se trata de un protocolo orientado a transacciones que siguen un esquema de petición-respuesta entre cliente y servidor. En este proyecto se utilizará el protocolo HTTP para establecer las cone- xiones con ambos servidores: el servidor SwellRT que aloja las Waves y el servidor Openshift que aloja el Service REST y la Base de Datos de la apli- cación. Concretamente con este protocolo se realizará el proceso de login en Wave y las peticiones al Service REST en la aplicación Android. 4.1.10. WebSocket WebSocket [54] es un protocolo que permite establecer comunicaciones bidi- reccionales (de cliente a servidor y viceversa) y full-dúplex (de forma simúltánea en ambos sentidos) en la red. Permite utilizar la tecnoloǵıa de los sockets TCP 39 CAPÍTULO 4. TECNOLOGÍAS DEL PROYECTO en la capa de aplicación. Se trata de un protocolo estandarizado por la IETF en 2011 en el RFC 6455 [54]. En este proyecto se utilizará esta tecnoloǵıa para establecer un canal de comunicación basado en sockets con el servidor Wave de SwellRT, pues la caracteŕıstica de bidireccionalidad full-dúplex es necesaria para aprovechar la potencialidad de consistencia en tiempo real de Wave. Concretamente en la Migración se deberá sustituir la implementación actual de WebSocket en GWT por otra que sea compatible de forma nativa con Android. 4.1.11. Git Git [55] es un Sistema de Control de Versiones (VCS) distribuido y open- source (bajo licencia pública GNU) diseñado para gestionar las distintas ver- siones de una aplicación independientemente del tamaño de la aplicación y del número de personas que trabajan en ella. Fue creado por Linus Torvalds en 2005 para trabajar en el desarrollo del kernel de Linux, aunque su versión actual (2.4.2) es una de las herramientas de control de versiones mas utilizada para gestionar proyectos software. Su interfaz es por consola de comandos. En este proyecto se usará Git por consola de comandos como Sistema de Control de Versiones de todo el software generado, tanto de la Migración de Wave/SwellRT a Android como del desarrollo de la app y el Service REST del que hace uso. Incluso las distintas versiones del código látex de esta Memoria estarán gestionadas con Git. 4.1.12. GitHub GitHub [8] es una plataforma web lanzada en 2008 que permite alojar de forma gratuita y en sitios llamados repositorios, proyectos software que uti- licen Git como Sistema de Control de Versiones. Los repositorios gratutos son públicos y accesibles por todo el mundo, de manera que cualquiera pue- de participar en la elaboración de código, aunque existe la opción de pagar por tener acceso a repositorios privados. GitHub proporciona una interfaz web que además de gestionar los repositorios permite alojar wikis, páginas web, gestión de tareas pendientes (issues) y control de acceso entre otras funcionalidades. Para este proyecto se utilizará GitHub como plataforma para alojar todo el código de Software libre desarrollado durante el proyecto: la Migración de SwellRT a Android (cuyo cliente web antiguo también está disponible 40 CAPÍTULO 4. TECNOLOGÍAS DEL PROYECTO en GitHub [48]), el desarrollo de la aplicación Android, el Service REST y la Memoria. Todo esto está disponible en forma de repositorios bajo la organización llamada ”Zorbel” en la siguiente URL: HTTPs://github.com/Zorbel 4.2. Tecnoloǵıas de la Aplicación Android 4.2.1. Android Studio Android Studio [56] es el Entorno de Desarrollo Integrado (IDE), basado en IntelliJ IDEA [57], oficial que Google proporciona para desarrollar aplicacio- nes para Android. Fue anunciado en 2013 y en diciembre de 2014 dejó su fase de beta y pasó a ser el IDE de referencia para el desarrollo en Android, de- jando atrás el antiguo IDE de Eclipse junto al plug-in ADT. Android Studio integra en un solo lugar todas las herramientas necesarias para desarrollar en esta plataforma como un gestor de versiones de Android (SDK Manager), un gestor de emuladores virtuales (AVD Manager) o una herramienta de Debug (DDMS) entre otras. Permite asimismo trabajar tanto con código de aplica- ción como con la interfaz gráfica (XML), la cual podremos previsualizar en el propio IDE. En este proyecto, y ya que desde principio de año es el IDE de referencia, se utilizará Android Studio para el desarrollo de la aplicación Android que hará uso de las funcionalidades de Wave. 4.2.2. Android Android [49] es el Sistema Operativo de código libre (bajo licencia Apa- che 2.0) para dispositivos móviles de Google basado en el kernel de Linux. Lanzado en 2007, actualmente su API alcanza ya la versión 21 [58], también denominada Android 5.0 ”Lollipop”. Para desarrollar en esta plataforma bas- ta con descargarse su SDK [59], accesible entonces desde desde consola de comandos, aunque siempre resulta más cómodo utilizar un Entorno de Desa- rrollo como Eclipse o Android Studio (Ver Secciones 4.1.5 y 4.2.1). Android SDK [59]: paquete que integra el conjunto de herramientas ne- cesarias para desarrollar en Android. Entre estas herramientas destacan las siguientes: 41 HTTPs://github.com/Zorbel CAPÍTULO 4. TECNOLOGÍAS DEL PROYECTO Libreŕıas con el API de Android y Documentación asociada [60] Android Virtual Device Manager (AVDM) [61] herramienta para gestionar la creación, modificación, ejecución y eliminación de emulado- res en Android. Un emulador [62] es una máquina virtual que ejecuta una determinada versión de Android. Permite desplegar un dispositivo movil en el ordenador que imita las caracteŕısticas software y hardwa- re de uno real para poder hacer pruebas de desarrollo sin necesidad de poseer un dispositivo con Android. Se pueden elegir multitud de parámetros [63] para el dispositivo que emula (resolución y tamaño de pantalla, de memoria Ram, elementos hardware emulados, etcétera.) siendo lo más importante elegir un API (versión de Android) que se corresponda con el API que se haya elegido para la aplicación. Android SDK Manager [64] herramienta para gestionar las versio- nes de SDK y herramientas asociadas instaladas. Android se encuentra actualmente en la versión 5.1 (API 22), pero un desarrollador puede elegir desarrollar para una versión anterior si lo estima necesario, por lo que puede descargarse por separado dicha versión y mantener varias API si lo necesita. Dalvik Debug Monitor Server (DDMS) [65] herramienta que pro- vee las caracteŕısticas de entorno de depuración para las aplicaciones en desarrollo. Utiliza la herramienta ADB (Android Debug Bridge) [66],que permite la comunicación entre el proceso de la consola de co- mandos del IDE y el emulador/dispositivo móvil. Teniendo en cuenta la distribucion actual de versiones instaladas en dispo- sitivos Android [67] (Ver figura 4.3) se ha decidido realizar la migración de SwellRT con el API 19 de Android (Version 4.4 ”KitKat”) para no tener problemas de compatibilidad. El emulador desplegado para las pruebas de desarrollo en la Migración utilizará por tanto Android 4.4 . Por otro lado en este proyecto se utilizará Android como plataforma móvil sobre la que llevar a cabo el desarrollo de una aplicación que haga uso de las funcionalidades y caracteŕısticas de Wave. En esta aplicación se utilizará el API 21 (Android 5.0 Lollipop) para tener acceso a la interfaz gráfica de diseño plano ”Material Design” que incluye. Esto no supone un problema, ya que dicha interfaz gráfica śı que es compatible con versiones previas de Android. 42 CAPÍTULO 4. TECNOLOGÍAS DEL PROYECTO Figura 4.3: Distribución Actual de Versiones Android (Fuente: Google) 4.2.3. XML XML [68] (eXtensible Markup Language) es un formato de definición, al- macenamiento e intercambio de datos de forma estructurada. Fue definido en 1996 por el W3C y actualmente existe una versión 1.1 (2008). Se trata de un lenguaje de marcado que define dicho formato estructurado mediante marcas o ”etiquetas” que aportan información acerca del texto que rodean. En el caso particular de Android, esta plataforma define la interfaz gráfica de sus pantallas mediante documentos XML llamados Layouts [69]. En este proyecto se utilizará XML para definir la interfaz gráfica de las pan- tallas que conforman la aplicación Android. 4.2.4. JSON JSON [70] (JavaScript Object Notation) es un estándar para intercambio de datos de forma simple y ligera mediante pares clave-valor. Originalmen- te derivaba de un subconjunto de datos de JavaScript pero actualmente se encuentra definido en el RFC 7159 y el ECMA-404 y es independiente de lenguaje que se utilice para interpretar (”parsear”) los datos que contiene. En JSON se puede estructurar estos datos de dos formas: en objetos (que contienen pares clave-valor) y en arrays (que contienen objetos). En este proyecto utilizaremos JSON para intercambiar datos con el servidor 43 CAPÍTULO 4. TECNOLOGÍAS DEL PROYECTO de Wave/SwellRT y con el Service REST de la aplicación. En el caso de SwellRT no trabajaremos directamente a nivel de JSON ya que su API abs- trae el formato de intercambio de datos. Sin embargo, en la aplicaión śı que trabajaremos directamente con esta tecnoloǵıa ya que el Service REST res- ponde a las peticiones de la aplicación en forma de mensajes JSON que la propia aplicación debe tambien ”parsear” para tratarlos. 4.2.5. SQL SQL [71] (Structured Query Language) es un lenguaje diseñado espećıfica- mente para interactuar con Bases de Datos Relacionales pudiendo definir la estructura de los datos y manipularlos. Desarrollado en 1986, actualmente está estandarizado por la International Standards Organization (ISO) en el estándar ISO/IEC 9075 SQL [71]. Este lenguaje permite mediante la cons- trucción de ”consultas” crear tablas, acceder a sus datos y modificarlos entre otras cosas. En este proyecto se utilizará SQL en el Service REST para construir las consultas a Base de Datos necesarias para devolver al cliente de la aplicación Android los datos que solicite o pida cambiar. 4.2.6. MySQL MySQL [72] es un Sistema Gestor de Base de Datos (SGBD) Relacionales que permite el almacenamiento, creación y modificación de dicho tipo de Bases de Datos. Desarrollado por Oracle, su versión actual (5.7.4) se distribuye tanto en forma de Software libre (bajo licencia GPL) o de uso comercial. En este proyecto se usará MySQL como SGBD para almacenar la Base de Datos de nuestra aplicaión Android. 4.2.7. PhpMyAdmin PhpMyAdmin [73] es una herramienta de código libre (bajo licencia públi- ca GNU) escrita en PHP y que proporciona un sistema de administración de SGBD MysQL a través de una interfaz web. Fue desarrollado en 1998 y actualmente la versión 4.4.8 es desarrollada y mantenida por The PhpMyAd- min Project. Posee una interfaz sencilla que permite administrar la Base de Datos mediante las operaciones básicas de creación, modificación, elimina- ción de tablas, creación de consultas SQL y gestión de permisos y usuarios 44 CAPÍTULO 4. TECNOLOGÍAS DEL PROYECTO entre otros. En este proyecto se usará PhpMyAdmin como sistema de administración de la Base de Datos MySQL que contiene los datos de la aplicación Android. 4.2.8. PHP PHP [74] es un lenguaje de propósito general del lado del servidor diseñado originalmente para crear aplicaciones web que generaran contenido dinámico. Diseñado en 1996 por Rasmus Lerdorf, su versión actual 5.6.7 es de código libre y se distribuye bajo licencia PHP. Tiene la ventaja de poder ser fácil- mente incorporado dentro de los documentos HTML. Para este proyecto se utilizará el lenguaje PHP para programar el compor- tamiento del Service REST que hace de intermediario entre las peticiones de la aplicación Android y la Base de Datos MySQL. 4.2.9. Laravel 5 Laravel [75] es un framework que permite desarrollar aplicaciones y servicios web con PHP 5. Fue desarrollado por Taylor Otwell en 2011 y su versión actual 5.0 se distribuye en forma de código abierto (bajo licencia MIT) en su propio repositorio público en GitHub [76]. Su funcionalidad es extensible mediante módulos. En este proyecto se utilizará Laravel 5 para construir en PHP el Service REST que hará de intermediario entre las peticiones HTTP del cliente Android y la Base de Datos de la aplicación. La elección de Laravel como framework PHP se debió a su flexibilidad, la facilidad para programar la aplicación y el gran soporte que tiene de la co- munidad. Además, es uno de los frameworks más populares actualmente en uso. 4.2.10. OpenShift OpenShift [77] es una plataforma de computación en la nube que ofrece alojar servicios de forma gratuita en sus servidores mediante un modelo de arqui- tectura Software as a Service (SaaS). Disponible desde 2011, se distribuye bajo licencia Apache 2.0. Dispone también de planes de pago que aumentan las prestaciones del servidor. 45 CAPÍTULO 4. TECNOLOGÍAS DEL PROYECTO Figura 4.4: Frameworks PHP más populares. Fuente: SitePoint En este proyecto se usará OpenShift como servidor web para alojar los servi- cios de los que hace uso nuestra aplicación Android: el Servicio Web REST y la Base de Datos. Concretamente el servidor esta accesible desde la siguiente URL: HTTPs://apptfg-servicerest.rhcloud.com/ 4.2.11. Sublime Text Sublime Text [78] es un editor de texto gratuito multiplataforma muy versátil que proporciona caracteŕısticas de atajos de teclado y resaltado de código para diferentes lenguajes de programación muy útiles cuando se desarrolla sin un IDE. Fue desarrollado en 2008 por Jon Skinner y actualmente se encuentra en su versión 2.0.2. En este proyecto se utilizará Sublime como editor de texto sobre todo para configurar y programar el Service REST en PHP, pues no se ve necesario utilizar un IDE espećıfico para ello. 46 HTTPs://apptfg-servicerest.rhcloud.com/ CAPÍTULO 4. TECNOLOGÍAS DEL PROYECTO 4.2.12. POP: Prototyping On Paper POP [79] (Prototyping On Paper) es una aplicación con versiones web y para dispositivos móviles que permite elaborar en pocos pasos prototipos (mockups) interactivos basados en fotos de prototipos realizados en papel. De esta forma se puede elaborar un prototipo de interfaz gráfica de bajo coste con la que el usuario pueda interactuar. Ene este proyecto se utilizará POP durante la fase de diseño de la aplicación Android para elaborar mockups sencillos e interactivos que podamos enseñar a la gente y que nos ayuden a refinar el diseño de la interfaz gráfica de la aplicación. Tiene además la ventaja de que se puede enseñar en la aplicación móvil de POP para simular el aspecto final que tendŕıa la aplicación y que el usuario se haga una mejor idea de lo que se pretende diseñar. 47 Caṕıtulo 5 Migración de SwellRT a Android En esta parte de la memoria se hablará de los aspectos más destacados del proceso de migración de la tecnoloǵıa de colaboración en tiempo real presente en SwellRT, basada en el protocolo Wave (ver Sección 4.1.1), a Android. Para ello se identificará el objetivo de esta parte del proyecto y se detallarán los problemas encontrados y cómo se solucionaron. Al final se discutirá el resultado obtenido. 5.1. Objetivo El framework de SwellRT utiliza un servidor WIAB y el protocolo Wave, ambos desarrollados en Java/GWT. El SDK de Android [59] es compatible con Java, aśı que a priori la implantación del servidor no supone problemas en los dispositivos móviles. Sin embargo, existe un problema con el API de SwellRT, ya que el lado del cliente fue desarrollado en Javascript usando el framework GWT. Android no soporta de forma nativa estas tecnoloǵıas, aśı que es necesario estudiar el código de SwellRT para sustituir todo el código que haga uso de Javascript/GWT por código compatible con Android. El objetivo de esta parte del proyecto es conseguir que un cliente desplegado en Android sea capaz de conectarse e interactuar con un servidor Wave/SwellRT sin problemas para hacer uso de sus caracteŕısticas. 5.1.1. Migración: Identificación y Solución de Proble- mas Resumen: Construcción y Depuración de la Migración 5.1.1.1 Migrando la Conexión HTTP a Android 5.1.1.2. 49 CAPÍTULO 5. MIGRACIÓN DE SWELLRT A ANDROID Migrando la Conexión WebSocket a Android 5.1.1.3. Migrando el Logging a Android 5.1.1.4. Creando el Servicio Android 5.1.1.5. 5.1.1.1. Construcción y Depuración El objetivo de esta parte del proyecto es conseguir que el cliente de SwellRT se pueda desplegar en Android para aśı conseguir que se conecte al servi- dor Wave In a Box (Ver sección 2.1.2.1) que también incluye. Para ello lo primero que se hará será desplegar el servidor en el ordenador clonando el repositorio de GitHub [48] de SwellRT y siguiendo los pasos descritos en el Readme del proyecto. Para comprobar que el servidor se ha instalado correc- tamente, se puede ejecutar por consola (ver Readme) y abrir un navegador Web con la dirección http://localhost:9898. Se crea entonces un usuario y contraseña de prueba. Este paso es importante ya que la aplicación Android intentará conectarse contra este servidor mientras estemos haciendo pruebas de desarrollo. A continuación se crea un proyecto Android en Eclipse y se incluyen en él todas las clases de SwellRT. Existe un problema con la construcción y depuración del código de SwellRT en Eclipse. Android limita el número de métodos máximos de una aplicacion a 65K [80] por cuestiones de eficiencia. Para evitar esta limi- tación, durante el proceso de construcción el SDK de Android utiliza, entre otras, una herramienta llamada ProGuard [81]. Esta herramienta se encar- ga de optimizar el código de la aplicacion buscando remover clases que no se utilizan y ofuscando el código para prevenir la ingenieŕıa inversa. En el caso de SwellRT, el código posee un gran número de clases java necesarias para desplegar el servidor y el cliente de la herramienta, por lo que es ne- cesaria dicha optimización de código realizada por ProGuard. El sistema de compilación de aplicaciones de Android tiene dos formas: compilación de la aplicación en modo debug (para hacer pruebas cuando todav́ıa se encuentra en fase de desarrollo) y en modo release (la aplicación se encuentra en su versión final y se empaqueta y se firma digitalmente para lanzarla al públi- co). En el caso de Eclipse, ProGuard solo se ejecuta cuando se construye en modo release, por lo que cuando se intenta compilar una aplicación con tantas clases como SwellRT mientras se desarrolla (modo debug) el sistema da error y no se puede compilar el código para probarlo en el emulador. La solución que se encontró fue desarrollar en Eclipse (por las facilidades que el entorno proporciona para escribir código) pero realizar el proceso de 50 CAPÍTULO 5. MIGRACIÓN DE SWELLRT A ANDROID construcción del código por consola de comandos, ya que en este caso śı que se puede compilar la aplicación en modo debug utilizando ProGuard. Una vez aclarado el problema de la construcción y depuración se pasa a desarrollar el proyecto de la migración. Uno de los componentes principales de Android a la hora de desarrollar en esta plataforma son las Actividades [82], que representan las pantallas que se le muestran al usuario y que responden a su interacción programáticamente. Por tanto, se crea una nueva actividad principal (waveAndroid.java) que se ejecutará al lanzar la aplicación y que por el momento intentará conectarse al servidor especificando por código el usuario y contraseña que hemos creado antes en el servidor. SwellRT realiza este login contra el servidor usando dos tecnologias: HTTP [83] y WebSockets [54]. 5.1.1.2. Conexión HTTP Wave fue desarrollado para utilizar el protocolo WebSocket para la conexión al servidor, pero esta tecnoloǵıa necesita realizar una autenticación HTTP previa llamada ”handshake”. Lo primero que se hará será otorgar permisos de conexión a internet a la aplicación. Android utiliza un sistema de permisos [84] para controlar los privilegios de cada aplicación. Estos permi- sos se declaran en el Manifiesto de la aplicación [85], archivo que declara sus caracteŕısticas. Para ello basta con añadir lo siguiente al manifest.xml de la aplicación: También hay que tener en cuenta que cuando estamos en el emulador no estamos en la misma red que el ordenador en el que trabajamos, por lo que la conexión a la URL http://localhost:9898 no es válida. No obstante, esto tiene facil solución pues el emulador de Android define unas direcciones IP de red especiales [86] para este tipo de casos. Basta con sustituir localhost por la direccion 10.0.2.2 para conseguir acceder al servidor WIAB desplegado en el ordenador. La dirección URL sera por tanto: http://10.0.2.2:9898. Lo siguiente que se hará será ejecutar el código de Login del cliente SwellRT para intentar localizar dónde se lleva a cabo la conexion HTTP. Para ello se llama desde la actividad principal (WaveAndroid.java) al método startSes- sion() de la clase WaveClient.java pasándole el usuario y la contraseña antes creados. Esto provoca un error de ejecución y la aplicación se cierra. Lo siguiente que hacemos es depurar la aplicación estudiando el LogCat [87] (Ver Figura 51 CAPÍTULO 5. MIGRACIÓN DE SWELLRT A ANDROID 5.1) para ver dónde se produce el error. Se descubre que el problema esta localizado en el método login() de la misma clase, que intentaba realizar una petición POST HTTP al servidor utilizando un RequestBuilder de la libreŕıa com.google.gwt.http.client. He aqúı el primer problema: la actual conexión utiliza métodos de GWT/Javascript para hacer la petición Post y Android no es compatible con esta tecnoloǵıa. Figura 5.1: Ejemplo de Traza de Error en Logcat Hay por tanto que encontrar una libreŕıa similar compatible con Android que construya una petición HTTP POST y la env́ıe al servidor. La primera opción que sse valoró fue utilizar la libreŕıa HTTP Apache [88], incluida en el SDK de Android desde sus primeras versiones. Sin embargo, Google recomienda [89] a partir del API 10 (Android 2.3 ”Gingerbread”) utilizar la libreŕıa HttpURLConnection[90], también incluida en el API. Por tanto esta última es la que se elige para la migración. Se puede ver un esquema simplificado de la nueva estructura del login HTTP en la Sección A.1.1 del Apénd́ıce. Sin embargo, aqúı no acaba el problema. Por cuestiones de usabilidad y de respuesta a la interacción del usuario, Android establece dos reglas para trabajar con el proceso de la actividad que se le esta mostrando al usuario (llamado UI Thread) [91]: 52 CAPÍTULO 5. MIGRACIÓN DE SWELLRT A ANDROID 1. No bloquear el UI Thread 2. No acceder al UI Thread directamente desde otro Thread La conexión a un servidor es un proceso susceptible de durar un tiempo variable según las condiciones de la red, lo cual deja la aplicación en espera hasta que se realiza dicha conexión, bloqueando el UI Thread. Por tanto, se decidió usar un hilo (Thread) por separado en forma de AsyncTask [92] para llevar a cabo la tarea de Login, tal y como recomienda Google hacer para trabajar con conexiones a la red [93]. La ventaja por tanto de usar otro hilo para esto es que la actividad principal no se bloquea. Es importante también destacar que la arquitectura de SwellRT y de Wave está planteada de manera que utiliza llamadas aśıncronas (callbacks) para notificar al resto de la aplicacion del resultado de los procesos de conexión al servidor, por lo que el AsyncTask tendrá que usar el callback apropiado para notificar del éxito o fracaso de la conexión Http. Se puede ver un esquema del AsyncTask encargado del Login en la Sección A.1.2 del Apénd́ıce. Este proceso de conexión Http deberá devolver una Cookie que se tratará con el objetivo de generar un SessionId que será necesario para seguir con la conexión al servidor. Llegados a este punto, se tiene un proceso de login Http que hace uso de la libreŕıa HttpUrlConnection y de un AsyncTask para realizar esa primera conexión al servidor. Se depura la aplicación y se comprueba que efectivamente el login Http se realiza correctamente (la respuesta del servidor tiene código 200). Sin embargo la aplicación aún no funciona correctamente, pues se cierra al intentar ejecutar el código que se encarga del siguiente paso de la conexión: conectarse por WebSocket. 5.1.1.3. Conexión WebSocket Para realizar una conexión con el servidor Wave es necesaria una conexión mediante WebSockets[54], tecnoloǵıa que permite conexiones bidireccionales y aśıncronas entre el servidor y el cliente (recordemos que la conexión en el modelo cliente-servidor tradicional está definida como unidireccional de cliente a servidor), de manera que cualquiera de los dos puede iniciar una conexión con el otro en cualquier momento e intercambiar información con éste. En el caso del protocolo Wave este comportamiento es el deseable, ya que al tratarse de un protocolo de comunicaciones federado en el que cualquiera 53 CAPÍTULO 5. MIGRACIÓN DE SWELLRT A ANDROID en la red puede ser cliente o servidor, es importante que la conexión sea bidireccional. Además la asincrońıa es necesaria ya que, para mantener la consistencia en tiempo real 4.1.3.2, hace falta que el servidor que contiene las waves pueda iniciar una conexión con los clientes para notificar los cambios que se produzcan en dichas waves. Por tanto, el cliente Android debe ahora establecer una conexión WebSocket con el servidor WIAB. La metodoloǵıa a utilizar será la misma que para la conexión HTTP, se ejecutará el código de SwellRT para identificar dónde falla y por tanto cómo está estructurada la creación y gestión de WebSockets en la versión GWT. El cliente SwellRT original realiza esta conexión utilizando una libreŕıa lla- mada Atmosphere [94], que proporciona un framework para Java que permite gestionar conexiones WebSocket junto a la conexión HTTP que subyace por debajo. Sin embargo, esta libreŕıa se encarga solo de gestionar la conexión, no de crear el WebSocket propiamente dicho. En el caso de SwellRT este WebSocket se crea utilizando la implementación que proporciona GWT lla- mada también WebSocket (WebSocket.java). Esta clase define las funciones básicas que debeŕıa tener el nuevo WebSocket: onOpen() para establecer la conexión, onMessage() para recibir mensajes por el WebSocket, send() para enviar mensajes y onClose() para cerrar la conexión. Aśımismo el Web- socket deberá también implementar una serie de callbacks (definidos en la interfaz WebSocketCallback.java) para notificar a la aplicación de la llegada de estos eventos del servidor. Los callbacks son: onConnect(), onDiscon- nect() y onMessage(message) respectivamente. Este WebSocket se crea utilizando un patrón de diseño Factory, que abstrae la creación de un objeto de su implementación, de manera que el desarrollador tenga acceso al objeto sin tener que preocuparse de cómo es- te implementado el WebSocket por debajo (ver WaveSocketFactory.java en SwellRT). En este caso, como ya se ha dicho, con Atmosphere y WebSoc- ket GWT. No obstante, la aplicación no funciona tal y como está hecho en SwellRT ya que Android no soporta GWT de forma nativa. Hay que sus- tituir este código buscando una libreŕıa de Software libre que implemente un WebSocket en Android sobre Atmosphere y que porporcione las mismas funciones básicas descritas en el párrafo anterior. La solución encontrada fue utilizar wAsync[95], libreŕıa proporcionada por Atmosphere para trabajar con Websockets en Node.js, Java y Android. wAsync trabaja creando un socket que responde a eventos diversos, estando entre ellos eventos similares a los utilizados por la versión GWT de SwellRT: on(EVENT.name()), siendo EVENT el nombre del evento al que debe responder. 54 CAPÍTULO 5. MIGRACIÓN DE SWELLRT A ANDROID Se puede ver un ejemplo sencillo de utilización de wAsync en la Sección A.1.3 del Apénd́ıce. Como la arquitectura Wave utilizaba el patrón factoŕıa, fue necesario sustituir la clase de WebSocket GWT por una de nueva creación llamada WaveSoc- ketWAsync.java[96] que implementa los métodos de creación y configura- ción de un Websocket y de callback antes descritos. Asimismo se modificó la clase WaveSocketFactory.java para hacer uso ahora de esta nueva implemen- tación del WebSocket compatible con Android. Sin embargo, se ejecutó esta nueva versión de código y se encontró que la libreŕıa WAsync incluye dependencias a código que no está presente en la propia libreŕıa y que es necesario para crear el cliente AsyncHTTPClient que gestiona la conexión HTTP que subyace por debajo del WebSocket. Concre- tamente hace falta utilizar un HTTPProvider compatible con Atmosphere, tal y como recomienda hacer wAsync en su wiki [97]. Para ello basta con añadir al proyecto las librerias oportunas (Ver Tabla de Dependencias 5.1) y configurar el cliente segun lo descrito en dicha wiki: AsyncHttpClientConfig ahcConfig = new AsyncHttpClientConfig. Builder ().build(); AsyncHttpClient ahc = new AsyncHttpClient(new GrizzlyAsyncHttpProvider(ahcConfig)); Ahora, al ejecutar la aplicación se comprueba que la conexión al servidor se produce correctamente. Para completar esta parte del proyecto solo falta pedir al usuario su user y password, ya que hasta ahora se hab́ıan especificado a mano en el propio código para realizar pruebas. 5.1.1.4. Conexión final y Logging Para probar que la aplicación migrada es funcional y es capaz de utilizar las caracteŕısticas nativas de Android se creará una pequeña y sencilla pantalla de Login que pedirá al usuario la dirección del servidor Wave, un usuario y una contraseña. En el diseño de aplicaciones Android el componente principal de una app es la Actividad, que se corresponde con la pantalla con la que interactúa el usuario. La interfaz gráfica se usuario (UI) de las pantallas se encuentra separada del código de la aplicación en ficheros XML de Layout[69]. A una Actividad se le especifica cuál es su archivo de layout en su método onCreate(), responsable de la creación de la actividad y sus recursos. Se crea una Actividad llamada WaveAndroid.java que haga uso del layout 55 CAPÍTULO 5. MIGRACIÓN DE SWELLRT A ANDROID Main.xml, en el cual se incluyen tres cajas de texto (llamadas EditText en Android) para que el usuario introduzca los datos. Además se guarda una referencia a estas cajas de texto en la Actividad para poder acceder al texto introducido y pasárselo al método login de Wave que hemos migrado ante- riormente. Figura 5.2: Pantalla de Login de WaveAndroid Además fue necesario mejorar el sistema de mensajes de Log de la aplicación sustituyendo el framework de la libreŕıa SLF4J para Java usada por SwellRT por una versión más reciente desarrollada para Android[98]. Esto se debió a que las libreŕıas de las que hace uso wAsync utilizaban una versión más reciente de este logger. Por último se instaló la aplicación en el emulador o el dispositivo móvil y se probó que se mostraba la pantalla de login anterior. Se introdujeron los datos del servidor WIAB, de usuario y contraseña y comprobamos que se ha conseguido el objetivo de esta parte del proyecto: el cliente Android realiza el login contra el servidor WIAB correctamente. 56 CAPÍTULO 5. MIGRACIÓN DE SWELLRT A ANDROID 5.1.1.5. Organización del código: Servicio Android Una vez conseguida la conexión al servidor desde Android, se decidió revisar el código para intentar optimizarlo y organizarlo de manera que aprovechara mejor las caracteŕısticas de Android y la arquitectura de Wave. Además, el API que permite gestionar el modelo de datos de SwellRT (Ver Sección 4.1.4) está escrito en java, por lo que es plenamente funcional y compatible con el código de la migración a Android. A continuación se hablará de los motivos de dicha reorganización. Como ya se ha comentado anteriormente, el proceso de login se debe hacer en un hilo de ejecución separado del hilo principal o UI Thread, ya que Android no recomienda[91] que tareas que tarden mucho tiempo en ejecutarse (cómo por ejemplo descarga de datos de la red) se ejecuten en el mismo hilo que la interfaz de usuario, pudiendo bloquear dicho hilo y obstaculizando por tanto la interacción del usuario con el dispositivo. Hasta ahora se hab́ıa utilizado para ello una Actividad que coteńıa el Asyn- cTask [92] encargado de ejecutar el código de conexión al servidor en un hilo separado del UI Thread. Sin embargo, tal y como está definida la arquitectu- ra de Wave y de SwellRT, la utilización de callbacks (ver secciones 5.1.1.2 y 5.1.1.3) es necesaria para notificar al resto de la aplicación de los eventos re- lacionados con el intercambio de datos con el servidor. Un AsyncTask ejecuta de una sola vez y de forma aśıncrona el código que se le asigne a su método doInBackground(), de manera que una vez que termina su ejecución puede notificar el resultado de la conexión. Pero no queda a la espera de otros po- sibles eventos en el socket (como la recepción de mensajes o la desconexión). Es decir: aunque se definan callbacks para esperar los eventos del servidor, el socket no podrá notificarlo porque no existe un hilo que quede a la espera de estos eventos. Por otro lado, cada vez que se quisiera realizar algún tipo de interacción con el servidor habŕıa que utilizar un AsyncTask espećıfico para ello, lo cual no hace sino añadir más código a la aplicación. Otra desventaja de los AsyncTask en la implementación inicial es que si la Actividad que lo esta ejecutando pasa a segundo plano (por ejemplo si el usuario cambia de aplicación) se detiene el proceso de conexión. Considerando todo esto se decidió utilizar otro componente de Android pen- sado para ejecutar tareas en background y con la opción de hacerlo de forma independiente de la aplicación: el Servicio[99]. Un Servicio Android se diferencia de una Actividad en que es un com- ponente que se ejecuta en segundo plano y no proporciona una interfaz de 57 CAPÍTULO 5. MIGRACIÓN DE SWELLRT A ANDROID usuario con la que éste pueda interactuar. Un Servicio ejecuta tareas de larga duración (cómo la descarga de datos de la red) a petición de otros compo- nentes de la aplicación que estén suscritos (el término utilizado por Android es bind) a dicho Servicio, a modo de cliente-servidor. De esta manera la Ac- tividad (cliente) que se suscriba al Servicio (servidor) puede interactuar con éste último haciendo peticiones y recibiendo notificaciones cuando el Servi- cio obtenga resultados. Por tanto, se podrá acceder a la conexión al servidor desde cualquier punto de la aplicación, solo es necesario que la Actividad en ejecución se suscriba al Servicio para hacerlo. Pero un Servicio se ejecuta dentro del mismo proceso que el UI Thread, por lo que aun aśı habrá que utilizar métodos para ejecutar el código que nos interese en otros hilos de ejecución dentro del propio Servicio. De esta manera se dividió la reorganización en dos: la conexión Http y la conexión WebSocket. Para la conexión HTTP, se decidió utilizar un AsyncTask llamado LoginTask muy similar al ya explicado anteriormente (ver Sección 5.1.1.2) pero esta vez definido dentro del propio Servicio y con un callback que notificaba a la aplicación si la conexión se realizaba correctamente. Además, se puso el código de la conexión en una clase aparte llamada WaveHttpLogin.java para tenerlo más organizado. Como se ve, cuando se realiza esta conexión Http, la Actividad inicial (Wa- veAndroid.java) es informada de ello mediante su callback onLogin() para poder notificar al usuario e iniciar la conexión por WebSocket. Para dicha conexión se deb́ıa buscar una solución que permitiera al Web- Socket responder a eventos del servidor (véase el funcionamiento de WAsync descrito en la Sección 5.1.1.3) para, mediante callbacks, informar a la apli- cación de dichos eventos. La solución final encontrada fue combinar el uso de un Thread y un Handler. El Thread se encarga de crear el socket y configurar su respuesta a eventos en forma de mensajes, que enviará en- tonces al Handler, encargado de quedar a la espera de recibir estos mensajes de forma aśıncrona y llamar al callback adecuado. Esta implementación se puede ver concretamente dentro de la clase WaveSocketWAsync.java, donde se define el Thread llamado WebSocketRunnable y el Handler UIHandler. El siguiente es un esquema en forma de Diagrama de Secuencia de la conexión inicial con WebSocket al servidor Wave: 58 CAPÍTULO 5. MIGRACIÓN DE SWELLRT A ANDROID Figura 5.3: Proceso de conexión WebSocket con Servicio Cuando se realiza esta conexión al Servidor Wave, la Actividad es notificada de ello mediante la propagación de callbacks onConnect() que informan del éxito de la conexión. A partir de este momento el socket informará de la misma forma (mediante el env́ıo de mensajes al UIHandler) de otros eventos que se produzcan, ya sea la recepción de datos o la desconexión por ejemplo. De la misma forma la aplicación podrá enviar datos al servidor, ya que el socket se mantiene en el Servicio. 5.1.2. Dependencias El cliente Android de SwellRT migrado y desarrollado en esta parte del pro- yecto hace uso de las siguientes dependencias con libreŕıas externas a An- droid: 59 CAPÍTULO 5. MIGRACIÓN DE SWELLRT A ANDROID Figura 5.4: Proceso de conexión Http con Servicio 5.1.3. Resultado de la Migración Después de todos estos pasos se dspońıa de una versión funcional de SwellRT capaz de conectarse al servidor WIAB de forma nativa desde Android. El resultado de esto se puede ver en el GitHub de esta parte del proyecto[96]. Solo restaba poner el API de SwellRT en una capa superior para poder acce- der y trabajar a nivel de wave con el modelo de datos de SwellRT. De esto se encargó el director de proyecto Pablo, desarrollador del proyecto inicial Web de SwellRT. Con este API trabajaremos en la siguiente parte del proyecto para crear una aplicación Android que haga uso de las funcionalidades de SwellRT. El API se encuentra en el GitHub de SwellRT. El trabajo realizado para hacer compatible la tecnoloǵıa de colaboración en tiempo real de Wave presente en SwellRT con dispositivos Android, aporta por primera vez la posibilidad de utilizar estas caracteŕısticas de forma nativa en Android en un API de software libre. Hasta este momento las soluciones disponibles pasaban por utilizar libreŕıas privativas como la de Google (Real Time API). Esta nueva aportación se encuentra ahora disponible para los desarrolladores de Android en el GitHub del proyecto de SwellRT: https: //github.com/P2Pvalue/swellrt/tree/master/android 60 https://github.com/P2Pvalue/swellrt/tree/master/android https://github.com/P2Pvalue/swellrt/tree/master/android CAPÍTULO 5. MIGRACIÓN DE SWELLRT A ANDROID Figura 5.5: Esquema de Clases de SwellRT-Android con Servicio 61 CAPÍTULO 5. MIGRACIÓN DE SWELLRT A ANDROID Nombre Versión Descripción WAsync [95] 1.4.3 Libreŕıa que contiene el cliente WebSockets/HTTP para comunicación aśıncrona. AsyncHttpClient [100] 1.8.14 Libreŕıa que permite a aplicaciones Java ejecutar de forma sencilla peticiones HTTP y procesar de forma aśıncrona la respuesta HTTP recibida. Grizzly-Framework [101] 2.3.18 Framework del núcleo para aplicaciones Grizzly que proporciona conexiones TCP/UDP, gestión de me- moria, servicios/buffers, eventos NIO de bucle/cade- nas de filtro/filtros Grizzly-Http [101] Framework HTTP que contiene la lógica para el tra- tamiento de mensajes HTTP en el servidor y en el cliente. Grizzly-WebSockets [101] Websocket API que permite crear aplicaciones con WebSockets en el servidor y en el cliente. slf4j-Android [98] 1.6.1 ”Simple Logging Facade for Java”: Framework de logging compatible con Android. Tabla 5.1: Dependencias de SwellRT-Android Es además plenamente compatible con el cliente web, por lo que las posi- bilidades de desarrollo de aplicaciones multi-plataforma son claras. Además, en este proyecto se ha optado por realizar una pequeña prueba de concepto con edición de texto en tiempo real, pero el desarrollo de plataformas cola- borativas en tiempo real va más allá e incluye aplicaciones tan diversas como herramientas de dibujo, visualizado de contenidos (como v́ıdeo y música) de forma sincronizada, mapas con información en tiempo real, generación de estad́ısticas en tiempo real, ... En definitiva, se ha puesto la colaboración en tiempo real a disposi- ción de la comunidad de desarrolladores de Software libre Android para que hagan uso de estas funcionalidades en sus futuras aplica- ciones. 62 Caṕıtulo 6 Diseño de la Aplicación En este caṕıtulo se expondrá el proceso de diseño de la aplicación que hará uso de las caracteŕısticas de colaboración en tiempo real presentes en SwellRT para Android. 6.1. Introducción Tras haber adaptado (Ver Sección 5.1) la tecnoloǵıa de Wave/SwellRT a An- droid que soportaŕıa el núcleo de la aplicación, era hora de decidir qué utilidad se le iba a dar de cara a desarrollar una aplicación Android que hiciera uso de ello. Se decidió tener sobre todo en cuenta estas caracteŕısticas que nos ofrećıa Wave: Edición colaborativa. Consistencia en Tiempo Real. 6.2. Brainstorming de ideas Después de considerar posibles ideas de implementaciones que podŕıan hacer uso de estas caracteŕısticas, decidimos realizar una sesión de brainstorming junto a nuestros directores de proyecto para identificar ideas potenciales. En esta sesión aparecieron temas tan variados como wikis colaborativas, aplica- ciones de inteligencia artificial, aportaciones colaborativas en poĺıtica, edición de v́ıdeos y música, cursos de formación colaborativos, visualizacion de ma- pas, etc. Con un gran repertorio de ideas expuestas en la sesión, se decidió centrar- se primero en descartar aquellas que no motivaba llevar a cabo. De esta manera se quedaron cuatro ideas fundamentales a desarrollar en la aplica- ción: Poĺıtica, Música, Inteligencia Artificial y Mapas. Centrándose ahora solo en estos temas, surgieron varias ideas colaborativas como: desarrollar 63 CAPÍTULO 6. DISEÑO DE LA APLICACIÓN (a) Idea de Aplicación (b) Posibles Nombres Figura 6.1: Capturas del brainstorming 64 CAPÍTULO 6. DISEÑO DE LA APLICACIÓN documentos poĺıticos, programas electorales, comunicación entre colectivos en tiempo real, aprendizaje de música, edición de partituras y obras, aplica- ciones colaborativas con inteligencia artificial, edición de mapas en tiempo real, lexicalización, etc. Finalmente, ya que ambos componentes del trabajo teńıan interés por la poĺıtica, se decidió realizar una aplicación colaborativa relacionada con dicho mundo. En esta aplicación se podŕıa recurrir a la edición de contenidos en tiempo real, ya fueran propuestas poĺıticas, programas electorales u otro tipo de documentos. Más adelante también se podŕıa hacer uso incluso de algu- na herramienta de Inteligencia Artificial para automatizar algunas tareas o realizar recomendaciones sociales. Lo que śı que se tuvo claro desde el principio es la idoneidad del momento actual para desarrollar una aplicación de temática poĺıtica, dado que el actual es un año electoral. Se propuso el objetivo de desarrollar algo que pudiera tener cierta repercusión y utilidad en las próximas citas electorales de este año 2015. Se intentaŕıa pensar en la aplicación no solo como un Trabajo de Fin de Grado sino como algo que se pudiera llevar más allá y que resultara útil a la sociedad. Por otro lado, se pretend́ıa elegir un nombre para la aplicación que fuera a la vez atractivo y significativo de la participación ciudadana que representa. Para esto se hizo tambien una sesión de brainstorming con varias personas, de la cual se sacaron varias posibilidades para el nombre. Tras someter a votación estos nombres se eligió con el que más gustó a todos: DemoCritics. 6.3. Diseño Guiado Por Objetivos (DGO) Como ya se ha planteado en la metodoloǵıa del proyecto (ver Sección 3.3.4 el diseño de la aplicación se inspirará en una metodoloǵıa de Diseño Guiado por Objetivos (DGO) cuyo objetivo final es producir una versión de la aplicación usable y funcional- Para ello se llevarán a cabo las siguientes actividades: - Investigación 6.3.1 - Modelado y Definición de Personas 6.3.3 - Definición de Escenarios y Requisitos 6.3.4 - Framework de Diseño 6.3.5 - Verificación: Principios de Diseño 6.3.6 65 CAPÍTULO 6. DISEÑO DE LA APLICACIÓN 6.3.1. Investigación Durante las siguientes secciones se detallará el proceso de investigación previo realizado para concretar la funcionalidad que ofreceŕıa la aplicación, aśı como su diseño gŕafico y caracteŕısticas técnicas. En este caṕıtulo se desarrollan las fases de la metodoloǵıa del Diseño Guiado por Objetivos (ver sección 3.3.4). Cada una de ellas especificará los pasos a seguir durante su progreso y el resultado final de cada una. 6.3.2. Investigación 6.3.2.1. Intención Inicial: Prototipo básico Programas electorales Vivimos en una sociedad digital, donde cada vez son más las personas que utilizan sus smartphones para realizar todo tipo de tareas en su vida cotidia- na. En los últimos años las diferentes formaciones poĺıticas han subido sus progra- mas electorales a un documento en formato PDF que suele estar disponible para su descarga en su página web. Este documento tiene generalmente una gran extensión (los hay de 200 páginas), lo cual no hace sino dificultar que las personas se animen a leerlo. Por ello pensamos que una aplicación que pudiera visualizar las principales secciones de los programas poĺıticos podŕıa ser especialmente útil para acercar los programas a los electores. Además también intentaŕıamos darle una estructura a estos programas, de manera que el usuario pudiera navegar por ellos a nivel de Sección, a di- ferencia del método actual de leer un ”macro-documento” en PDF. Aśı, la gente podŕıa opinar sobre los programas poĺıticos a nivel de sección me- diante acciones familiares para ellos: ”Me gusta”, ”No me gusta” y realizar ”Comentarios”. Añadimos también una acción de ”No lo entiendo” que pen- samos que seria util para indicar cuándo la redacción de la sección era de significado difuso. En definitiva, queŕıamos crear un espacio donde poder informarse sobre las distintas ofertas electorales y poder debatir sobre las propuestas que propone cada formación poĺıtica, todo ello en forma una aplicación que podremos consultar en cualquier momento. 66 CAPÍTULO 6. DISEÑO DE LA APLICACIÓN Propuestas y Wave Por otro lado,y en ĺınea con los últimos movimientos poĺıticos ciudadanos, pretend́ıamos crear también un portal de propuestas ciudadanas en el móvil. Los usuarios podŕıan visualizar las propuestas de otros usuarios y tener la posibilidad de crear nuevas propuestas. Además, como queŕıamos aprovechar las caracteŕısticas de la migración de Wave previamente desarrollada, pensa- mos en la posibilidad de elaborar estas propuestas de forma colaborativa y en tiempo real entre muchos usuarios. También pensamos en la posibilidad de categorizar el contenido de la apli- cación (Programas y Propuestas) por temas, para proporcionar filtros a la hora de navegar por dicho contenido. Sin embargo no teńıamos muy clara la elección de temas, asi como si debiamos darle al usuario la posibilidad de crear nuevos temas o dar nosotros unos temas preestablecidos. Una vez pensada la intención y los principales objetivos de la aplicación, procedimos a realizar unos primeros prototipos en papel de nuestra idea y a implementar un prototipo básico en el móvil (Ver Sección 6.3.5) que mostraba programas poĺıticos estructurados y permit́ıa navegar a nivel de Sección por ellos para leer y emitir opiniones (likes, dislikes, comentarios, etcétera.). 6.3.2.2. Hipótesis de personas Para identificar a los usuarios objetivo, tenemos que encontrar a miembros representativos de esos usuarios y animarlos a que participen en nuestra investigación. Para ello reuniremos una serie de caracteŕısticas básicas que el usuario deberá cumplir para poder aportarnos los objetivos funcionales de la aplicación. Estas son algunas de las caracaeŕısticas deseadas: Edad: Entre 16 y 65 años. Sexo: Indiferente. Profesión: Indiferente. Aptidudes deseables: Activismo social, cociencia poĺıtica, trabajo colaborativo, ... . Habilidades técnicas: Usuario con experiencia media en uso de apli- caciones móviles. 67 CAPÍTULO 6. DISEÑO DE LA APLICACIÓN Simplificando el tipo de persona que queremos encontrar, lo dividiremos en dos tipos de persona. Por un lado buscaremos al activista social, activo en movimientos sociales, participación en portales con carácter social, etcétera. Mientras que por otro lado buscaremos una persona que muestre cierto interés en el mundo de la poĺıtica, pero que no participe en moviimentos sociales. Finalmente pudimos contactar con dos miembros de Labodemo [102], una organización que se dedica al desarollo de nuevas formas de participación ciudadana. Este perfil cubiŕıa en caso del activista social, mientras que para el tipo de persona entendido de la poĺıtica pero no tan involucrado, escogimos a Javier de la Cueva [103]. El siguiente paso seŕıa estudiar la viabilidad de esta aplicación entrevistando a las personas seleccionadas para realizar una investigación sobre sus nece- sidades prácticas. Por otra parte también seŕıa útil enseñarles los prototipos básicos que manejábamos para verificarlos. Entendimos que el tipo de per- sona con el que nos entrevistáramos deb́ıa de estar relacionado de alguna manera con el mundo de la poĺıtica, pues nada mejor que hablar con gente ya interesada en dichos temas para orientarnos por el buen camino. A continuación detallamos las entrevistas que realizamos en la investigación: 6.3.2.3. Entrevistas En este aparatdo se recopilarán todas las entrevistas realizadas en la fase de investigación del diseño de la aplicación. Entrevista con Labodemo Tuvimos la oportunidad de mantener una conversación con dos miembros de Labodemo [102], en la que aprovechamos para mostrarles un prototipo de la aplicación que estábamos desarrollando. Ambos teńıan experiencia en el desarrollo de plataformas de participación ciudadana en Internet: fueron los responsables del desarrollo de los portales de participación del partido poĺıtico Podemos y la candidatura ciudadana de unidad popular Ahora Madrid. En ese momento nuestro prototipo móvil se limitaba únicamente a mostrar las diferentes secciones de cada programa, lo cual les pareció útil, aunque no lo suficiente como para atraer a una cantidad considerable de usuarios. Confor- me a su linea de trabajo habitual, eran más partidarios de dar a los usuarios la posibilidad de realizar Propuestas además de ver Programas poĺıticos. Les comentamos entonces que antes de hablar con ellos ya hab́ıamos planteado 68 CAPÍTULO 6. DISEÑO DE LA APLICACIÓN desarrollar Propuestas colaborativas en tiempo real aprovechando la tecno- loǵıa de Wave. Pero ellos no eran partidarios de esta opción, ya que según ellos acabaŕıa siendo caótico tener tanta gente editando la misma propuesta de cara a generar contenido útil. Dándole una vuelta a la categorización del contenido, nos sugirieron que para atraer a usuarios, deb́ıamos considerar la posibilidad de integrar en la apli- cación a colectivos sociales que generaran y categorizaran dicho contenido. No eran partidarios de que dieramos nosotros ciertas temáticas preestableci- das, pues debido a la variedad de redaccion en los distintos programas seŕıa dificil identificar temáticas que incluyeran a todos los programas y proba- blemente acabariamos excluyendo temas. Aśı, seŕıan los colectivos los que se encargaran de ”tematizar.el contenido de la aplicación. Por ejemplo: un gru- po de animalistas podŕıa tener un espacio en la aplicación donde poder crear sus propias propuestas, e incluso hacer comparativas de lo que proponen los diferentes programas sobre los animales. De esta manera, y en relación a la aproximación a los foros tradicionales, se planteó la idea de crear ”Hilos”: elementos ”temáticos”que agruparan en un solo sitio Secciones y Propuestas que hablaran sobre un determinado tema. Estos hilos seŕıan también generados por dichos colectivos. Esto seŕıa útil también para usuarios que buscaran información sobre un determinado tema. Por ejemplo: un usuario poco activo, que resulta ser pro- fesor, podŕıa buscar un colectivo de profesores y ver las Propuestas que se llevan a cabo o visualizar una comparativa respecto las medidas de educación de los diferentes programas poĺıticos. Nos insistieron mucho en el tema de las comparativas. Seŕıa de gran utilidad que la aplicación tuviera una parte de comparativas en la que los usuarios pudieran comparar los programas poĺıticos en vez de leerlos sección por sec- ción. Resultaŕıa de gran interés a un autónomo visualizar las medidas que proponen los diferentes partidos poĺıticos para los autónomos. Pero estas comparativas no podŕıa realizarlas cualquiera, por lo que debeŕıan realizar- las periodistas o expertos que hubieran realizado algún tipo de comparativa similar anteriormente. Nos sugirieron contactar con periodistas o colectivos que hubieran publicado algún tipo de comparativa en cuanto a programas o medidas, para obtener algún tipo de ayuda o consejo a seguir. Conclusión Puntos positivos: 69 CAPÍTULO 6. DISEÑO DE LA APLICACIÓN Nueva forma de participación ciudadana de cara a las elecciones. Métodos alternativos para discutir propuestas, partidos, programas, etcétera. Ligar propuestas a programas concretos. Puntos negativos: Visualizar un programa electoral en el móvil puede no resultar dema- siado interés para los usuarios. Desarrollar propuestas colaborativas en tiempo real no maniene una estabilidad en la aplicación. La aplcación debeŕıa desarrollarse en otras plataformas móviles y de escritorio. Puntos a tener en cuenta: Dejar libertad a usuarios y colectivos creando sus propias categoŕıas o hilos como ”Espacios” que puedan elaborar segun sus intereses y generar contenido para la aplicación. Desarrollar comparativas por secciones, temas o partidos. De tal forma que un usuario pueda visualizar las diferencias de aquellos temas que le preocupan. Contactar con colectivos, asociaciones y/o periodistas que anteriormen- te hayan elaborado comparativas entre programas poĺıticos en puntos concretos Entrevista con Javier de la Cueva La entrevista con Javier de la Cueva resultó bastante productiva. Ya le co- noćıamos de algunas conferencias que impartió en la facultad. Javier es abo- gado y doctorado en Filosof́ıa, estando especializado en temas relacionados con tecnoloǵıa, Internet y propiedad intelectual. Además, en sus últimas con- ferencias Javier habla sobre acciones micropoĺıticas [104]. Estas acciones de- finen la capacidad que tienen los ciudadanos para realizar aportaciones a la sociedad, el estado o el gobierno que favorezcan la participación ciudadana en una democracia participativa. 70 CAPÍTULO 6. DISEÑO DE LA APLICACIÓN Representar los programas electorales en una aplicación móvil le pareció algo interesante y necesario para la sociedad actual. Si bien casi nadie hace el esfuerzo de visualizar un programa electoral en PDF, utilizar una herramienta que facilita el acceso al programa por secciones podŕıa ser una nueva forma de incentivar su lectura y ayudar a fomentar la participación ciudadana en poĺıtica. Además nos sugirió la posibilidad de desarrollar una Hemeroteca de progra- mas electorales. De esta forma cualquiera podŕıa consultar los programas de los anteriores gobiernos y comprobar si se cumplieron los objetivos del programa, aśı como comparar programas de distintos años entre śı, Pero si en algo nos insistió Javier, fue en la importancia de categorizar el con- tenido de la aplicación. Un usuario que no tenga conocimientos sobre diversos temas, se encontraŕıa más cómodo si pudiera visualizar las diferentes partes de un programa o las propuestas ciudadanas por categoŕıas o temas genera- les. Ya que dejar libertad a los usuarios para crear categoŕıas personalizadas podŕıa ser algo negativo para usuarios inexpertos o con pocos conocimientos sobre temas espećıficos. Por último, centrándonos en las Propuestas ciudadanas, surgió la idea de elaborar propuestas que tuvieran una especificación concreta. Es decir, a parte de tener una idea de propuesta y redactarla, esta propuesta debeŕıa ir acompañada de los recursos que seŕıan necesarios y sobre todo cómo se llevaŕıa a cabo de una forma aproximada. También resultaŕıa interesante definir un pequeño presupuesto de lo que conllevaŕıa realizar la propuesta o cómo se podŕıa financiar. Aśı evitaŕıamos una elaboración de propuestas más real, evitando un listado de propuestas infinito sin planterase cómo se llevaŕıan a cabo o cómo se financiaŕıan. Conclusión Puntos positivos: Llevar los programas poĺıticos de una forma más atractiva a la ciuda- dańıa es algo esencial en la actualidad. Categorizar las secciones de los programas poĺıticos para que se puedan explorar por temas. Incluir los recursos necesarios que hacen falta para llevar una propuesta a cabo. 71 CAPÍTULO 6. DISEÑO DE LA APLICACIÓN Puntos negativos: Tratar de convertir la aplicación en un foro inconscientemente. Dejar libertad a la hora de crear categoŕıas espećıficas o hilos puede generar confusión entre los usuarios. Puntos a tener en cuenta: Desarrollar categoŕıas semanales en función de las novedades o actua- lidad poĺıtica. Añadir la posibilidad de solicitar la ayuda de expertos sobre un tema para elaborar una propuesta. Crear una emeroteca de programas poĺıticos para realizar análisis sobre el cumplimiento de los programas en legislaturas pasadas. Informar sobre la legilación actual cuando visualicemos una propuesta o sección de un porgrama que quiera mejorar o cambiar la legislación actual. 6.3.3. Modelado y Definición de Personas Las personas son una herramienta de diseño y ayuda al diseño de la aplica- ción. El objetivo es centrar el diseño en este tipo de persona, para lograr los objetivos a la hora de utilziar un sistema. La persona será nuestro modelo, una descripción detallada de un individuo imaginario que representa a un grupo de usuarios a los que va destinada la aplicación. Es una representa- ción ficticia pero desarrollada con gran detalle, que será fruto de los datos recogidos en la investigación previa de la fase anterior. En esta fase se definirá el tipo de persona que interactuará con nuestra apli- cación. Para ello se han identificado dos tipos de personas primarias; un activista social y un ciudadano de a pie que forme parte del electorado. - Activista social, 16 años en adelante Actividad: Estudia, trabaja o realiza otras actividades de voluntariado. 72 CAPÍTULO 6. DISEÑO DE LA APLICACIÓN Frecuenta asambleas, participa en diferentes movimientos sociales y está al d́ıa de la actualidad poĺıtica. Utiliza redes sociales para comunicarse con otros colectivos, acudir a asambleas, promover ideas u otras actividades relacionadas con la poĺıtica y el activismo social. Otros: Desconoce las ideas que proponen algunos partidos Le gusta aportar nuevas soluciones a la sociedad. - Ciudadano de a pie, 18 años en adelante Actividad: Estudia, trabaja o realiza otras actividades de voluntariado. Es distante al mundo de la poĺıtica, concibe ciertos temas pero no los conoce en profundidad. Visita diferentes medios de comunicación para enterase de la actuali- dad. Utiliza redes sociales para compartir contenidos con sus amigos o esta- blecer nuevas amistades. Otros: Desconoce por completo los programas electorales. Tiene cierta indecisión a la hora de acudir a las urnas, no sabe que propone cada partido. En las figuras 6.2 y 6.3 se exponen una serie de personas ficticias que podŕıan representar en la vida real los tipos de persona a la que va dirigida la apli- cación. 73 CAPÍTULO 6. DISEÑO DE LA APLICACIÓN Figura 6.2: Estudiante universitario Figura 6.3: Activista poĺıtico 74 CAPÍTULO 6. DISEÑO DE LA APLICACIÓN 6.3.4. Definición de Escenarios y Requisitos En esta sección se definirán los posibles escenarios que puedan surgir en la aplicación. La idea es situarnos en un escenario real que pudera ocurrir en cualquier momento a lo largo del d́ıa, para detallar la solución al problema. En cada uno se especificarán los requisitos necesarios para solventar el problema o los pasos a seguir para lograr el objetivo. Diferenciaremos los términos de acción, como la actividad inmediata que requiere la solución. El objeto, como el sujeto principal del escenario. Y por último definimos contexto reflejando el objetivo final del requisito. Escenario I Se acercan las elecciones municipales y Juan aún no ha decidido a qué partido va dar su voto. No conoce las propuestas que ofertan los partidos a la ciuda- dańıa y tampoco se f́ıa mucho de lo que dicen los medios de comunicación. Juan coge su móvil y visualiza los diferentes programas electorales por cate- goŕıa, seleccionando la categoŕıa de educación que es la que más le afecta a él personalmente. La aplicación le muestra un listado de las secciones donde lso diferentes partidos hablan de las medidas que van a tomar en torno a la educación. Requisitos: 1. Visualizar (acción) las diferentes categoŕıas (objeto), para ver las sec- ciones de los programas de una determinada categoŕıa (contexto). 2. Mostrar(acción) un listado de todas las secciones de los programas de los partidos poĺıticos (objeto) en función de la categoŕıa seleccionada por el usuario (contexto). Escenario II Pablo es un empleado sanitario de Hospital Cĺınico de Madrid preocupado por la gestión de los hospitales públicos. Parece que la situación no está muy controlada, por lo que quisiera saber que propuestas o alternativas propone la ciudadańıa para mejorar la situación actual. A través de su móvil puede explorar las diferentes propuestas por categoŕıas. Eligiendo la categoŕıa de sanidad, le aparece un listado de las últimas pro- puestas desarrolladas por la ciudadańıa. Requisitos: 75 CAPÍTULO 6. DISEÑO DE LA APLICACIÓN 1. Visualizar (acción) el listado de propuestas (objeto), clasificados por la categoŕıa seleccionada por el usuario (contexto). 2. Mostrar (acción) la propuesta (objeto), seleccionada por el usuario para que pueda puntuarla y/o comentarla (contexto). Escenario III Lara es una profesora de un colegio de la Comunidad de Madrid. Se acercan las vacaciones de verano y muchos niños se quedarán sin acceso a comedor. Lara está planteándose cómo elaborar una propuesta ciudana para abrir los colegios en horario no lectivo y que todos los niños tengan derecho a comedor en los meses de verano. Lara no es una experta en gestión pública ni sabe cómo llevar a cabo la propuesta. Para ello, Laura comienza a desarrollar una propuesta ciudadana en la apli- cación, explicando la base de la propuesta. Al no saber cómo financiarlo, deja la propuesta abierta para que la comunidad la pueda ayudar a desarrollarla. Requisitos: 1. Agregar (acción) una nueva propuesta (objeto) rellenando los princi- pales campos del formulario (contexto). 2. Publicar (acción) la propuesta (objeto) como una propuesta colabora- tiva para editar (contexto) 3. Mostrar (acción) la propuesta (contexto) en la lista de propuestas co- laborativas para que puedan colaborar otros usuarios (contexto). Escenario IV Fran es un periodista de un periódico digital. Se acercan las elecciones y está redactando un pequeño art́ıculo acerca de los programas de algunos par- tidos poĺıticos. Necesita acceder a los programas compeletos de los partidos y visualizar las secciones que le resulten de interés para comentarlas en su art́ıculo. Accediendo a la aplicación, Fran puede seleccionar los programas de todos los partidos que se presentan a las elecciones. Listando el ı́ndice del programa y accediendo a sus secciones. Requisitos: 1. Visualizar (acción) todos los partidos (objeto) que se presentan a las elecciones (contexto). 76 CAPÍTULO 6. DISEÑO DE LA APLICACIÓN 2. Seleccionar (acción) un partido poĺıtco (objeto) para visualizar el pro- grama electoral (contexto). 3. Listar (acción) el ı́ndice (objeto) de secciones del programa seleccionado (contexto). 4. Visualizar (acción) la sección (objeto) del programa seleccionado por el usuario (contexto). 6.3.5. Framework de diseño En esta sección detallaremos todos los aspectos relacionados con el desa- rrollo del aspecto visual y la interacción con la aplicación. Se utilizarán los escenarios y requisitos definidos en la fase anterior para crear los bocetos y prototipos interactivos. Detallaremos los prototipos desarrollados en papel, algunos prototipos intermedios y el prototipo final de la aplicación presenta- do. 6.3.5.1. Framework de interacción Para definir el Framework de interacción realizaremos un proceso de seis etapas: Factor de forma, postura y métodos de entrada: La aplicación será visualizada en un smartphone bajo el sistema operativo Android (con API 15 como mı́nimo), con tamaños de pantalla entre 3,5 y 6 pulgadas. Que pueda visualizarse en interiores y exteriores. La postura será temporal. El usuario puede utilizarlo en periodos de tiempo muy breves como puede ser la consulta de alguna sección, propuesta o dar su valoración. Elaborando una propuesta o participando en el desarrollo de una, el usuario necesitará algo más de tiempo, pero seguirá utilizando funciones básicas. Propias de una postura temporal. Elementos y datos funcionales: Elementos de datos Programa poĺıtico 77 CAPÍTULO 6. DISEÑO DE LA APLICACIÓN • Atributos: partido, programa, secciones, ı́ndice, temas. • Relaciones: partido-programa, ı́ndice-sección. Temas • Atributos: categoŕıa, programa, sección, partido, propuesta. • Relaciones: categoŕıa-programa, categoŕıa-propuesta, partido-sección. Propuestas Ciudadanas • Atributos: propuesta, categoŕıa, usuario. • Relaciones: propuesta-usuario, propuesta-categoŕıa. Propuestas Colaborativas • Atributos: propuesta, categoŕıa, usuario, edición colaborativa. • Relaciones: usuario-propuesta, propuesta-categoŕıa. Elementos funcionales Visualizar los partidos poĺıticos que se presentan a las elecciones. Mostrar el ı́ndice de cada programa poĺıtico. Mostrar, valorar y debatir las secciones de los programas poĺıticos. Visualizar categoŕıas por temas, distinguiendo entre propuestas y sec- ciones de programas. Mostrar, valorar y debatir las propuestas de los usuarios. Crear una nueva propuesta en una categoŕıa. Mostrar las propuestas colaborativas y participar en su desarrollo. Crear una nueva propuesta incompleta para desarrollarla de forma co- laborativa. 78 CAPÍTULO 6. DISEÑO DE LA APLICACIÓN Grupos funcionales y jerarqúıas: Pantalla principal de la aplicación. Grupos de elementos funcionales que con- tiene: Lectura y valoración de Programas poĺıticos. • Visualizar programas poĺıticos. • Ver secciones de programas. • Visualización, valoración y debate de secciones de programas poĺıti- cos. Clasificación de secciones de programas y propuestas ciudadanas por categoŕıas. • Ver secciones de programas poĺıticos por tema. • Ver propuestas ciudadanas por tema. Lectura, valoración y creación de Propuestas Ciudadanas. • Ver propuestas ciudadanas. • Valorar y debatir propuestas ciudadanas. • Creación de propuesta ciudadana. Lectura, colaboración y creación de Propuestas Colaborativas. • Visualizar las propuestas ciudadanas en desarrollo. • Crear una propuesta colaborativa. • Colaborar en el desarrollo de una propuesta. Boceto del framework de interacción: El proceso de desarrollo de bocetos se ha realizado en espiral, de tal forma que una vez que identificábamos una determinada funcionalidad, la representába- mos en un mockup a papel para debatirlo y discutirlo en las entrevistas. A continuación trasladábamos el mockup a un prototipo de alto nivel desarro- llado en Android. Para las siguientes implementaciones que añad́ıan nueva funcionalidad el proceso era el mismo: 79 CAPÍTULO 6. DISEÑO DE LA APLICACIÓN 1. Desarrollo de un boceto a papel identificando los elementos funcionales. 2. Definir la interacción a través de la herramienta POP [79]. 3. Implementar un prototipo de mayor fidelidad en Android. Figura 6.4: Modelo de desarrollo de los prototipos. De esta forma tuvimos que dar un total de tres vueltas a nuestro modelo en espiral para completar el desarrollo. 1) Programas Poĺıticos En la figura 6.5 se pueden observar los primeros bocetos que defińıan la interacción de la visualización de los programas poĺıticos: Elementos del protitipo en papel a) Partidos poĺıticos b) Programas poĺıticos c) Índice de programas poĺıticos d) Secciones de proramas poĺıticos 80 CAPÍTULO 6. DISEÑO DE LA APLICACIÓN (a) Protipo en papel. (b) Protipo interactivo en POP. (c) Implementación en Android. Figura 6.5: Primeros protitipos sobre programas electorales. Funcionalidades del protitipo interactivo a) Visualizar la lista de partidos poĺıticos. b) Seleccionar un programa poĺıtico. c) Navegar por el ı́ndice de un programa poĺıtco. d) Visualizar secciones de un programa, valorarla y comentarla. Implementación en Android a) Descargar la lista de partidos poĺıticos del servidor. b) Descargar el programa seleccionado. c) Navegar por el ı́ndice del programa. d) Descargar el contenido de las secciones. e) Añadir comentarios al servidor. f ) Modificar parámetros sociales en el servidor (like, dislike, views, etc). 2) Bocetos de Propuestas Ciudadanas 81 CAPÍTULO 6. DISEÑO DE LA APLICACIÓN (a) Protipo en papel. (b) Protipo interactivo en POP. (c) Implementación en Android. Figura 6.6: Prototipos para el desarrollo de propuestas. A partir de lo desarrollado hasta el momento, se procedió a diseñar las propuestas en la aplicación. Manteniendo la coherencia con el diseño anterior, contuamos desarollando los protitipos que añad́ıan la funcio- nalidad de las propuestas ciudadanas. Elementos del protipo en papel a) Propuestas ciudadanas. b) Listado de propuestas por tops. c) Listado de secciones de programas por tops. d) Desarrollar una propuesta. e) Pantalla principal rediseñada. Funcionalidades del prototipo interactivo con POP a) Visualizar propuesta. b) Listado de propuestas por tops. c) Listado de secciones de programas por tops. 82 CAPÍTULO 6. DISEÑO DE LA APLICACIÓN d) Desarrollar una propuesta. e) Pantalla principal rediseñada. Implementación en Android a) Visualizar propuesta almacenada en el servidor. b) Listado de propuestas por tops sincronizada con el servidor. c) Agregar una nueva propuesta al sistema. d) Pantalla principal rediseñada. 3) Bocetos de Propuestas Colaborativas Escenarios key path : En esta sección describiremos los escenarios key path, que descrien cómo in- teractúa una persona con la interfaz diseñada en el framework de interacción. Son la evolución de los escenarios de contexto, pero describiendo cómo inter- actúa la persona con los elemenos de datos funcionales en la interfaz. I Escenario de cómo visualizar un programa poĺıtico de un par- tido que se presenta a las elecciones. Faltan quince d́ıas para las elecciones generales y Carlos aún no ha decidido su voto. Un amigo le recomienda que instale DemoCritics para poder leer algún programa poĺıtico y ver las propuestas de las diferentes opciones poĺıticas. Dentro de la aplicación, Carlos visualiza la lista de todos los partidos que se presentan a las próximas elecciones generales, y dentro de cada uno, puede visualiar el programa. Obteniendo un top de las secciones más populares, Carlos visualiza las partes del programa que más llaman su atención. II Escenario de cómo agregar una nueva propuesta en el sistema. Laura trabaja en la administración de la EMT y lleva varios d́ıas dis- cutiendo con sus compañeros de trabajo una forma de reestructurar las ĺıneas de autobuses. De forma que no confluyan todas en el centro, si no que alguna ĺınea recorra los barrios exteriores del centro. Lau- ra decide instalar DemoCritics para poner en conocimiento de toda la ciudadańıa la propuesta que lleva semanas trabajando. Para ello Larua se sitúa en la parte de propuestas de la aplicación y agrega una nueva. 83 CAPÍTULO 6. DISEÑO DE LA APLICACIÓN Introduciendo la descripción de la propuesta, cómo piensa llevarla a cabo y el coste que supondŕıa, Laura consigue publicar su propuesta en la aplicación para que los usuarios puedan valorarla y debatirla. III Escenario sobre cómo solicitar ayuda para elaborar una pro- puesta. Manuel es un gran aficionado a la música, y en la localidad donde vi- ve no hay escuelas de música municipales. Él quiere llevar a cabo una propuesta que se base en el desarrollo de nuevas escuelas de música municipales en puntos estratégicos y aśı fomentar la educación musi- cal. Manuel toma su móvil en la pantalal principal de DemoCritics y solicita la colaboración de una propuesta que facilite la creación de escuelas musicales. Ya que a pesar de ser un gran aficionado musical, Manuel no sabe cómo llevar a cabo esa propuesta o qué presupuesto necesitataŕıa. Aśı pidiendo ayuda a los usuarios, Manuel tendrá desa- rrollada su propuesta por aquellos interesados y expertos del tema en la comunidad. IV Escenario para colaborar en el desarrollo de una propuesta. Sof́ıa lleva varios años trabajando en la adminsitración pública del es- tado, y siempre ha querido ayudar utilizando la experiencia que le ha dado su trabajo estos años. Pero nunca ha sabido ni dónde ni cómo co- laborar. Un conocido le recomienda instalar DemoCritics en su móvil personal, aśı podŕıa ayudar a personas que necesitaran ayuda de sus conocimientos. Con la aplicación instalada, Sof́ıa se dirige a las pro- puestas colaborativas para explorar aquellas propuestas que están en desarrollo y pueden necesitar su ayuda. Seleccionada la propuesta, ac- cede a su contenido y procede a editar el documento que explica cómo se llevaŕıa a cabo la propuesta. Escenarios de validación: En esta fase se pondrán a prueba los escenarios, validando a ciertas situa- ciones que nos ayudarán a encontrar fallos o posibles mejoras en el diseño. Utilizaremos preguntas para definir la respuesta del sistema para problemas o dudas que puedan surgir. A Qué pasaŕıa si un usuario accede a la aplicación por primera vez y quisera consultar el programa poĺıtico de un partido en concreto? 84 CAPÍTULO 6. DISEÑO DE LA APLICACIÓN Figura 6.7: Pantalla principal de la aplicación. El usuario accedeŕıa a la pantalla principal de la aplicación (ver figu- ra 6.7), donde podŕıa diferenciar cuatro grupos principales: Programas Poĺıticos, Categoŕıas, Propuestas Ciudadanas y Propuestas Colabora- tivas. Accediendo sobre el icono de programas poĺıticos, la aplición mostraŕıa al usuario el listado de partidos poĺıticos para explorar los programas. Al usuario le bastaŕıa con seleccionar el partido poĺıtco del que quisiera consultar su programa electoral. Finalmente, la aplicación mostraŕıa al usuario el ı́ndice del programa electoral del partido selec- cionado. B ¿Cómo podŕıa acceder un usuario a las secciones de todos los programas donde tratan un tema en concreto Desde el menú principal, el usuario accedeŕıa al menú de categoŕıas para filtrar las secciones o propuestas por temas. Una vez alĺı, el usuario seleccionaŕıa la categoŕıa (ver figura 6.8) que deseara para obtener todas las secciones de los programas de los partidos poĺıticos que estuvieran relacionadas con esa categoŕıa en concreto. C ¿Qué tendŕıa que hacer un usuario que queire publicar una nueva propuesta relacionada con la educación? 85 CAPÍTULO 6. DISEÑO DE LA APLICACIÓN Figura 6.8: Vista de categoŕıas. Debeŕıa ir al menú de propuestas de la aplicación y seleccionar el botón de agregar situado abajo a la derecha para acceder al formulario para publicar una nueva propuesta. Dentro del formulario, el usuario de- berá de seleccionar la categioŕıa de sanidad D ¿Cómo podŕıa colaborar un experto en cultura en la aplica- ción? Para ver si alguna propuesta requiere la ayuda de alguien en el mundo de la cultura, deberá acceder al menú Propuestas Colaborativas y se- leccionar la categoŕıa Cultura entre las listadas de la aplicación. Alĺı se- leccionará aquellas propuestas que le resulten de interés para ayudar a su elaboración. Dentro de la propuesta podrá ayudar a redactar en un pad colaborativo cómo llevar a cabo la propuesta o cómo financiarla. 6.3.6. Verificación: Principios de Diseño Con el objetivo de verificar los principios de diseño que cumple la aplicación, utilizaremos los 10 principios de diseño propuestos por Jakob Nielsen [105] para evaluar la calidad del sistema. 86 CAPÍTULO 6. DISEÑO DE LA APLICACIÓN (a) Visibilidad del esta- do del sistema. (b) Control y libertad del usuario. (c) Flexibilidad y eficien- cia. Figura 6.9: Principios de diseño en la aplicación. 1. Visibilidad del estado del sistema: Siempre que el sistema ejecuta tareas o no puede continuar por algún motivo, se mantiene informado al usuario sobre lo que está pasando. Esto podemos encontrarlo cuando el usuario accede a los programas poĺıticos y el sistema procede a des- cargar la información. Mientras se descarga la información, se muestra un pequeño diálogo indicando la descarga de los datos para mantener al usuario informado. 2. Relación entre el sistema y el mundo real (Metáforas y lengua- je familiares): El sistema mantiene un lenguaje próximo al usuario, evitando terminos más formales del sistema. Cuando visualizamos una sección de un programa o una propuesta, el sistema emplea el lenguaje común de términos como like (mano con pulgar hacia arriba), dislike (mano con pulgar hacia abajo), etcétera, para valorar las secciones de un programa o una propuesta. 3. Control y libertad del usuario: La aplicación permite deshacer ac- ciones fácilmente, como puede ser cambiar la opinión de un like o dislike, o cancelar la acción de publicar una nueva propuesta o comentario. 4. Consistencia y estándares: La aplicación sigue las pautas de diseño propuestas por las pautas de diseño Material Design [106]. Este estilo de diseño plano fue propuesto por Google en 2014, y en la actualidad 87 CAPÍTULO 6. DISEÑO DE LA APLICACIÓN la mayor parte de aplicaciones móviles Android lo utilizan a la hora de diseñar sus pantallas. Por esto, los usuarios no debeŕıan tener proble- mas navegando y utilizando los controles de la aplicación, ya que son familiare al encontrarse en un amplio catálogo de aplicaciones. Agregar una propuesta desde un botón de lapiz inferior situado a la derecha, representar un listado de objetos mediante tabs deslizables, son algunas de las caracteŕısticas destacables de Material Design. 5. Prevención de errores: La aplicación muestra mensajes de error cuando algo le impide funcionar con normalidad. De esta forma se avi- sa al usuario de que algo no está funcionando como debeŕıa. Cuando ejecutamos la aplicación y el sistema detecta que no hay conexión, la aplicación notifica al usuario en un sencillo diálogo la necesidad de tener conexión a internet para operar con la aplicacion. 6. Reconocimiento mejor que recuerdo: Para agregar una nueva pro- puesta o comentario, tan sólo se necesita una transición entre dos pan- tallas. De esta forma facilitamos al usuario la generación de nuevos contenidos sin saturarle la memoria u obligarle a recordar mucha in- formación para llegar a su objetivo. Este principio se encuentra en la mayor parte de las aplicaciones móviles, pues el usuario suele interac- tuar con el dispositivo en pequeños intervalos de tiempo y además no suele tener una postura cómoda que le facilite la concentración. Por lo que se requieren pocas transiciones entre pantallas, tareas sencillas y elementos sencillos y distinguibles. Por ejemplo, también identificamos las distintas partes de la aplicaión (Secciones, Categoŕıas, Propuestas) con colores distintos para que el usuario sepa en todo momento dónde se encuentra. 7. Flexibilidad y eficiencia: Se utilizan atajos a funcionalidades dis- ponible desde la mayor parte de las pantallas del sistema. Haciendo uso del botón ”hamburguesa” en material design nos da la posibilidad de abrir un menú con accesos directos a las principales partes de la aplicación. De tal forma que no necesitemos volver hacia atrás para seleccionar otra opción. No obstante, ambos caminos pueden ser utili- zados en función de la habilidad o conocimiento del usuario respecto a la aplicación. 8. Estética y diseño minimalista: Tanto los diálogos que muestra el sistema como la información visible en la mayoŕıa de las pantallas del sistema es clara y concisa. Aśı evitamos dar información innecesaria al usuario o distraer su atención para evitar su confusión. 88 CAPÍTULO 6. DISEÑO DE LA APLICACIÓN 9. Ayudar a los usuarios a reconocer, diagnosticar y recuperar- se de los errores: Cuando el usuario da con un error inesperado, el sistema informa de lo ocurrido mendiante un sencillo diálogo de error. Simplificando el mensaje mostrado al usuario para que pueda resolverlo sin grandes problemas. 10. Ayuda y documentación: Cuando el usuario genera contenido, el sistema va indicando al usuario los pasos que tiene que seguir para completar su tarea de forma satisfactoria. Esto sucede por ejemplo en el caso en el que un usuario construye una nueva propuesta, donde el sistema le indica los campos que tiene que rellenar y la información que debe ir en cada campo. 89 Caṕıtulo 7 Arquitectura del Proyecto En este caṕıtulo se estudiarán aspectos técnicos destacados relacionados con la arquitectura y organización del Software desarrollado durante todo el pro- yecto. 7.1. Arquitectura de Wave La arquitectura que soporta Wave tal y como la diseñó originalmente Goo- gle está estructurada en forma de capas que interactuan entre śı. De forma general y de abajo hacia arriba disponemos de las siguientes capas: Capa de Conexión Cliente/Servidor: Se encarga de gestionar la cone- xión entre servidor y servidor mediante el protocolo XMPP y la cone- xión entre cliente y servidor mediante el protocolo Wave y WebSockets. Capa de Control de OT: Se encarga de gestionar la consistencia en tiempo real de los datos mediante la utilización de Transformaciones Operacionales (OT). Capa de Modelo de Datos Wave: Se encarga de gestionar los datos a nivel de las Waves que forman parte de una Conversación. Capa de Modelo Conversacional: Se encarga de gestionar los datos a nivel de las Conversaciones, junto a los documentos que las componen y los usuarios participantes (Ver Sección 7.1.1). En el caso de SwellRT se extendió este modelo a otro más generalizado llamado Modelo de Contenidos (Ver Sección 7.1.2). Capa de Interfaz de Cliente: API con operaciones para que el cliente interactue con el Modelo Conversacional subyacente mediante eventos. En el caso de SwellRT se extendió este API para utilizar el Modelo de Contenidos de esta tecnoloǵıa. 91 CAPÍTULO 7. ARQUITECTURA DEL PROYECTO Figura 7.1: Arquitectura de Wave 7.1.1. Modelo Conversacional Wave Además de definir el protocolo del que hace uso Wave, Google definió un Modelo de Datos Conversacional [107] que refleja la arquitectura de los datos que componen las conversaciones en Wave. Aśı, a grandes rasgos, se pueden ver dichas conversaciones como documentos XML sobre los que los usuarios participantes (cualquiera es libre de unirse a una conversación en cualquier momento) actúan creando nuevos elementos o modificando los ya existentes. Este modelo de datos define una nomenclatura propia para los elementos que componen esta tecnoloǵıa [108] [44]: Wave: Conjunto de wavelets (conversaciones). Wavelet: conjunto de documentos de una conversación y sus partici- pantes. Blip: documento con el contenido de un mensaje en la conversación. Un blip puede tener otros blips dentro de él y los blips pueden ser publicados o no en función de si su visibilidad se extiende o no al resto de participantes de la conversación respectivamente. Manifiesto conversacional: documento con metadatos que definen la estructura de una conversación. Hilo conversacional: conjunto de Blips consecutivos que forman parte de una conversación. 92 CAPÍTULO 7. ARQUITECTURA DEL PROYECTO Extensiones [109]: pequeñas aplicaciones que se ejecutan dentro de una Wave y aportan nuevas funcionalidades que no forman parte del modelo conversacional básico. Pueden ser de dos tipos: • Gadget: aplicación que se ejecuta en el contexto de una Wave y en la que todos sus usuarios participan. • Robot: aplicación que participa en una Wave a modo de usuario automatizado e interactúa con el contenido pudiendo modificarlo y responder a eventos por acciones de otros usuarios reales. Figura 7.2: Modelo Conversacional de Wave 7.1.2. Modelo de Contenidos SwellRT SwellRT [48] (Swell Real Time) es un framework de desarrollo para Wave que forma parte del proyecto europeo P2Pvalue [47]. Está basado en el servidor Wave In A Box [11] (WIAB) y extiende sus funcionalidades cambiando el Mo- delo Conversacional original creado por Google por uno nuevo de propósito más general llamado Modelo de Contenidos. En este modelo nuevo se pue- den intercambiar estructuras de datos de forma colaborativa, federada y en tiempo real que combinen los siguientes 4 tipos: Mapas, Listas, Strings y Documentos de Texto. De esta manera la estructura de datos intercambiada constará siempre de un Mapa inicial (llamado ”root”) del cual colgarán a modo de árbol el resto 93 CAPÍTULO 7. ARQUITECTURA DEL PROYECTO de estructuras (de cualquiera de los cuatro tipos que maneja SwellRT) cuyos datos se gestionarán en tiempo real. Para ello existe también una API nueva que se encarga de la gestión de dicho arbol mediante la utilización de eventos que notifican de cambios en las estructuras de datos. Este modelo será el que se utilizará para la aplicación Android. El siguiente es un esquema de los cambios en el modelo original introducidos por SwellRT: Figura 7.3: Modelo de Contenidos de SwellRT 7.2. Arquitectura de la aplicación La arquitectura de DemoCritics está compuesta por cuatro módulos principa- les de los que se hablará en profundidad en las siguientes subsecciones. Como Cliente móvil se tendrá la aplicación desarrollada en Android, que reali- zará peticiones HTTP al Servicio Web RESTful (PHP+Laravel+MySQL). Dicho Servicio Web RESTful será quien gestione las peticiones de la apli- cación móvil mediante el protocolo HTTP. La Base de Datos MySQL almacenará toda la información relacionada con la aplicación. El API del Servicio Web RESTful será quien actúe de intermediario entre las peticiones de la aplicación y las operaciones en Base de Datos. En este caso alojaremos la Base de Datos y el Servicio Web RESTful en caso en OpenShift [77], una plataforma que permite alojar servicios web de forma gratuita. 94 CAPÍTULO 7. ARQUITECTURA DEL PROYECTO Figura 7.4: Arquitectura general de la aplicación. Por otro lado, la aplicación hará uso del Servicio Android desarrollado en SwellRT-Android [110] para conectarse con el servidor de colaboración en tiempo real SwellRT (Java/Jetty+MongoDB) e intercambiar los datos que sea necesario mantener en tiempo real, es decir, la edición de una Propuesta de forma colaborativa entre varias personas. 7.2.1. Base de datos En la implementación de la Base de Datos se ha utilizado un Modelo Rela- cional para la definición de las tablas. Utilizando MySQL [72] como sistema de gestión de base de datos (SGBD) y phpMyAdmin [73] como herramienta de gestión gráfica de la base de datos. La base de datos está formada por un total de nueve tablas donde se almacena toda la información relacionada con los programas de los partidos poĺıticos, las propuestas ciudadanas, etc. y otros datos más técnicos como la gestión de los usuarios, la relación de los comentarios o la relación entre las secciones y comparativas entre otros. 95 CAPÍTULO 7. ARQUITECTURA DEL PROYECTO Figura 7.5: Modelo entidad-relación de la base de datos. Las tablas section y political party se utilizan para guardar información estática en la aplicación. Es decir, en la tabla political party se almacenan los partidos poĺıticos que se presentan a unas elecciones, y en la tabla section, las diferentes secciones de un programa electoral. Tan sólo modificaremos las columnas de likes, dislikes, not understood y views para obtener estad́ısticas de uso de cada sección. El resto de las columnas permanecerán intactas (salvo que la redacción del programa cambie). Definimos como datos estáticos aquellos datos que permanecen intactos en la aplicación desde el inicio. Son datos que no requieren ser modificados y siempre permanecen tal y como están, a no ser que surgiera algún fallo o im- previsto en la aplicación. Estos datos principalmente estarán formados por la información de los partidos poĺıticos y sus programas. Se entiende que de cara a unas elecciones los partidos poĺıticos no suelen cambiar su nombre, logo o lo que es el programa electoral. Por lo tanto esos datos permanecerán intactos durante el uso de la aplicación. Sin embargo, la aplicación contará con datos dinámicos como aquellos datos que se irán generando y que con el tiempo pueden cambiar o eliminarse. Este tipo de dato estará relacionado con la ma- yor parte de la actividad del usuario con la aplicación. Por ejemplo, cuando un usuario agrega una nueva propuesta, esta propuesta será añadida como 96 CAPÍTULO 7. ARQUITECTURA DEL PROYECTO una fila más de la tabla proposals. Además esta nueva fila estará sujeta a cambios que definirán su valoración, el número de comentarios, el número de visualizaciones, etcétera. A continuación se procederá a explicar las tablas más relevantes de la base de datos: 7.2.1.1. political party Esta tabla contiene la información relacionada con los partidos poĺıticos que se presentarán a las elecciones. Por tanto nos interesará guardar el nombre del partido, un logo que los identifique en formato blob y un identificador único para relacionarlos con sus programas poĺıticos. 7.2.1.2. section Esta es una de las tablas más complejas de la aplicación, pues contiene toda la información de los programas poĺıticos. Se encontrará una clave primaria compuesta definida como id political party y section, que harán referencia a una sección concreta de un partido poĺıtico. De esta forma nunca se en- contrará una fila que contenga la misma sección de un programa del mismo partido poĺıtico dos veces, ya que a cada sección le correspondeŕıa un solo partido poĺıtico (para más información sobre la estructura del campo sec- tion consultar el caṕıtulo 7.2.3.2). Por otro lado está el contenido tanto de la propia sección como del programa poĺıtico, es decir, el t́ıtulo de la sección, el contenido en texto, etc. como datos estáticos de la tabla. Y por último, los indicadores sociales de likes, not understood, dislikes y views como datos dinámicos que se irán actualizando con la actividad de los usuarios. 7.2.1.3. proposal La tabla encargada de almacenar las propuestas que se van agregando a la aplicación. Estará definida por campos como un identificador único para la propuesta, el identificador del usuario que ha publicado la propuesta y el contenido de dicha propuesta. Estos datos serán estáticos una vez que se inserten en la base de datos. Al igual que la tabla section, también tendrá co- lumnas son datos de carácter social y estad́ıstico que irán modificándose con la actividad de los usuarios en el sistema. Por último, para diferenciar una propuesta publicada de una propuesta colaborativa, siendo esta última la 97 CAPÍTULO 7. ARQUITECTURA DEL PROYECTO que hace uso de SwellRT para edición colaborativa, definiremos dos identi- ficadores que harán referencia a los identificadores Wave de dos documentos colaborativos alojados en el servidor. De esta forma se puede saber cuando una propuesta se está desarrollando o está definitivamente publicada. Ya que para las propuestas publicadas en la aplicación, estas dos columnas tendrán el valor null, ya que no harán referencia a ningún documento colaborativo. 7.2.1.4. comment Para almacenar los comentarios generados por los usuarios en la aplicación, se utilizará la tabla comment que guardará el identificador del usuario y el texto del comentario. Esta tabla guardará los comentarios realizados en las secciones, como también los comentarios en las propuestas. De tal forma que un comentario para una sección de un programa poĺıtico, irá acompañado de las columnas id political party y section, de la misma manera que se relacio- nan las secciones de programas con partidos poĺıticos. De lo contrario, si un comentario pertenece a una propuesta, deberá contener el identificador único de la misma mientras que los anteriores campos estarán a null. El resto de las columnas estarán formadadas por datos de valoración y carácter social. 7.2.1.5. opinion Esta tabla será la referencia que almacenará las opiniones o valoraciones de un usuario en las propuestas y secciones de programas de la aplicación. De tal forma que se guardará el identificador del usuario que ha añadido esa opinión, acompañado del identficador de la propuesta si es el caso o el identificador de la sección del programa y el partido poĺıtico en el caso de que se encuentre valorando una sección. Para indicar el valor de la opinión del usuario, es decir si ha valorado la sección o propuesta como like, dislike, etc, se utilizarán columnas que contendrán un entero que indicará el tipo de valoración que ha pulsado el usuario. De tal forma que el usuario siempre pueda cambiar su opinión o borrarla. 7.2.2. Servicio Web REST Para establecer la conexión de la aplicación desarrollada en Android con la Base de Datos se ha utilizado Laravel como framework para desarrollo de servicios Web. Laravel [75] es un framework de código abierto para desarrollar aplicaciones web con PHP 5. Laravel permite además desarrollar una API 98 CAPÍTULO 7. ARQUITECTURA DEL PROYECTO Petición Operación SQL Utilidad GET Leer SELECT Obtener un recurso almacenado en el servidor. POST Crear INSERT Crear un nuevo recurso en el servi- dor. PUT Actualizar UPDATE Actualizar un recurso almacenado en el servidor. DELETE Borrar DELETE Eliminar un recurso almacenado en el servidor. Tabla 7.1: Funciones CRUD REST (Representational State Transfer), un estilo de arquitectura software para sistemas hipermedia. Este término se originó en una tesis doctoral sobre la web escrita por Roy Fielding [111]. Laravel permite implementar un sistema RESTful para que el cliente móvil pueda hacer peticiones al servicio web y que dicho servicio responda a éstas de la forma que se quiera. Estas peticiones se realizan mediante el protocolo HTTP. En función de la operación que se desee hacer, se clasificarán estas funciones en el acrónimo CRUD [112] (del original en inglés: Create, Read, Update and Delete). Dependiendo de las peticiones que se realicen al servicio mediante el protocolo HTTP, el servidor devolverá un código de estado para obtener feedback de lo sucedido. Por tanto se distinguirán diferentes códigos de estado cuando se quiera obtener un recurso, actualizar un recurso, crear uno nuevo o borrarlo. En la siguiente tabla se definen los códigos de estado que puede devolver el servidor en función de las peticiones. 99 CAPÍTULO 7. ARQUITECTURA DEL PROYECTO Petición Status Code Descripción GET 200 (OK) El recurso solicitado ha sido devuelto co- rrectamente. GET 404 (Not Found) El recurso solicitado no ha sido encontra- do. POST 201 (Created) El nuevo recurso ha sido creado correcta- mente. POST 404 (Not Found) No se ha especificado el nuevo recurso a crear. POST 409 (Conflict) No se ha podido crear el recurso porque ya existe. PUT 200 (OK) El recurso ha sido actualizado correcta- mente. PUT 204 (No Content) No se ha especificado el recurso que pre- tende ser actualizado. PUT 404 (Not Found) El recurso a actualizar no ha sido encon- trado. DELETE 200 (OK) El recurso solicitado ha sido borrado. DELETE 404 (Not Found) El recurso solicitado para borrar, no ha sido encontrado. Tabla 7.2: Códigos de estado de la respuesta del servidor Usar un servicio RESTful proporciona una gran flexibilidad a la hora de independizar la tecnoloǵıa del servidor de la del cliente. Mediante la arqui- tectura basada en peticiones HTTP no solo se podrán hacer peticiones desde el cliente en Android, sino que más adelante se podŕıa desarrollar una versión web o incluso un cliente para iOS sin tener que modificar el servicio, ya que las peticiones HTTP serán las mismas. 7.2.2.1. Arquitectura Laravel utiliza e implementa un funcionamiento basado en el patrón MVC (Model–View–Controller), separando el modelo de la vista, y delegando la gestión al controlador. En este caso tendŕıamos un modelo almacenado en las tablas de la Base de Datos, donde se guardará toda la información dinámi- ca y estática de la aplicación. El controlador seŕıa en elcargado de gestionar las peticiones del cliente en Android en función del tipo de operación que re- quiera. Por último, se tendŕıa como vista el resultado devuelto por el servidor con los datos solicitados por el cliente, que a su vez los representaŕıa en la 100 CAPÍTULO 7. ARQUITECTURA DEL PROYECTO Figura 7.6: Arquitectura de Laravel aplicación móvil. Esta estructura de comportamiento hace independiente el modelo controlado por el servidor de la vista que obtiene el usuario final en su cliente móvil. Con esto se consigue elaborar un código más claro y sencillo, aśı como también evitar conflictos entre el modelo y la vista. Para comprender la arquitectura de Laravel se van a destacar tres componen- tes clave. En primer lugar está una primera capa que gestiona las peticiones del cliente. Esta capa estará compuesta por una serie de rutas a las que el cliente realizará la petición en función de la operación que desee realizar. Después, en función de la ruta a la que haya realizado la petición, se aden- trará en una nueva capa compuesta por controladores que se encargarán de procesar la petición y devolver al cliente lo que ha solicitado. El último componente será la vista, que puede ser representada de muchas formas. En este caso, la vista estará compuesta por una serie de datos en formato JSON, que posteriormente el cliente móvil se encargará de representar en su propia vista. Teniendo en cuenta todo esto, se procederá a detallar un poco más estos tres componentes fundamentales. 101 CAPÍTULO 7. ARQUITECTURA DEL PROYECTO 7.2.2.2. Rutas Cómo se citaba anteriormente, la primera capa de Laravel es un mapa de rutas que definirá todos los caminos posibles para llegar a la funcionalidad requerida de los controladores. Todas las rutas estarán definidas en el fichero routes.php, alojado en la carpeta app/Http/routes.php de nuestra insta- lación Laravel. El archivo routes.php es un fichero muy simple escrito en PHP donde se definirán todas las rutas posibles. La definición de una ruta irá acompañada de tres valores. El primero de ellos será el tipo de petición que realizará el cliente (ver tabla 7.1), seguido de la definición de la URL por la que será accesible, y por último se indicará el controlador responsable de procesar la petición. Aparte de indicar el controlador, también hay que indi- car el método que procesará la petición dentro del controlador como veremos más adelante. Para definir el conjunto de urls que forman el archivo routes.php, se han seguido una serie de buenas prácticas [113], habituales a la hora de desarrollar una RESTful API. Normalmente se utilizarán nombres en lugar de verbos para acceder a los recursos. Por ejemplo, si queremos visualizar el listado de propuestas de la aplicación, se utilizará la url /proposal. Que será definida como: Route ::get(’/proposal ’, ’ProposalController@index ’); Aśı queda definida la ruta que accede a todo el listado de propuestas como una petición GET, que se encargará de procesar el controlador ProposalController en su método index(). Para acceder a una propuesta en concreto, se pasará un id para obtener el recurso adecuado. Este id irá a continuación de la url anteriormente defini- da. Por ejemplo, si se quisiera acceder a la propuesta cuyo id es igual a 5, definiŕıamos la siguiente ruta: Route ::get(’/proposal /{id}’, ’ProposalController@show ’); Nótese que la ruta es la misma que la anterior, a la que se ha añadido un nuevo parámetro que deberá especificar el usuario. Aśı, la petición GET /proposal/5, devolveŕıa la propuesta con id 5. Se puede ver que el contro- lador también es el mismo, pero esta vez el método encargado de procesar la petición será show(). Además, este método recibirá el parámetro id que env́ıe el usuario en la petición. Para crear una nueva propuesta en la aplicación, se deberá realizar una pe- tición POST. La ruta será exactamente igual que la primera, pero antes 102 CAPÍTULO 7. ARQUITECTURA DEL PROYECTO se deberá especificar que se trata de una ruta que atenderá a una petición POST: Route ::post(’/proposal ’, ’ProposalController@create ’); Donde una vez más en controlador ProposalController se encargará de pro- cesar la petición en el método create. Se puede ver que la primera ruta dónde se obteńıan las propuestas (GET /proposal, es exactamente igual que la que se acaba de definir. Sólo les diferencia el tipo de petición que está realizando el cliente. Para definir otros tipos de peticiones como PUT o DELETE, se usará la misma metodoloǵıa. Un ejemplo del resultado final de las peticiones que podŕıan realizarse a una propuesta se puede ver en la Sección A.2.1 del Apéndice. Para organizar el código y poder visualizarlo de forma clara se utilizarán grupos de rutas. Esto resultará especialmente útil cuando se tengan varias operaciones que realizar dentro de una misma dirección, definiendo una nue- va ruta cuya función será definida a continuación, incluyendo las rutas que vienen dentro del grupo. Se puede observar en el ejemplo anterior como to- das las url comienzan con /proposal. Por ello no es necesario definir en cada ĺınea la ruta /proposal, si no que bastará con definirla en un único grupo que agrupará todas las rutas que comienzen de la misma forma. Aśı el ejemplo anterior quedaŕıa más claro y ordenado (ver Sección A.2.2 del Apéndice). De esta forma se pueden visualizar todas las posibilidades agrupadas dentro de la dirección proposal. Lo que permitirá utilizar grupos para ordenar fun- ciones comunes dentro de un mismo prefijo, y además crear subgrupos dentro de los anteriores si se tiene algún prefijo repetido varias veces. Esto podŕıa aplicarse a el ejemplo anterior, agrupando las peticiones que requieren como parámetro un id de la propuesta (ver Sección A.2.3 del Apéndice). 7.2.2.3. Controladores Los controladores son los encargados de procesar todas las operaciones que intervienen en el modelo, es decir, en la información almacenada en la base de datos. Un controlador es un fichero escrito en PHP que será almacenado en la ruta /app/Http/Controllers de la aplicación. Este fichero estará formado por una métodos y atributos que serán llamados desde las rutas definidas en la aplicación. Cada controlador hereda de una clase abstracta llamada Controller, que a su vez hereda de la clase abstracta BaseController. La cual implementa la funcionalidad básica de los controladores. Dentro de un controlador se definirán aquellos métodos que correspondan 103 CAPÍTULO 7. ARQUITECTURA DEL PROYECTO Figura 7.7: Camino desde la ruta al método del controlador. con las rutas de la aplicación. Estos métodos procesarán la información del cliente, operando con los parámetros que haya obtenido, accediendo a la base de datos, y devolviendo una respuesta en función del éxito de la operación. Un ejemplo que muestra una implementación básica del método index() del ProposalController se puede ver en la Sección A.2.4 del Apéndice). La conexión a la base de datos se encuentra configurada en el archivo /confi- g/database.php, por lo que la gestión de la conexión y desconexión será con- trolada por Laravel, lo que proporciona más independencia y versatilidad a la hora de programar. Como respuesta del método, Laravel utiliza por de- fecto un fichero JSON con los resultados de la variable a la que se asigne el resultado, o a la sentencia SQL de la consulta que se esté devolviendo. El siguiente ejemplo muestra cuál seŕıa el resultado de realizar una petición GET a la dirección /proposal : [ {"id":1,"title":"Reducir la contaminaci\u00f3n en Madrid"," text":"Actualmente la contaminaci\u00f3n en Madrid est\ u00e1 llegando a unos l\u00edmites por encima de la media de las principales ciudades de la Uni\u00f3n Europea. Por ello deber\u00edamos reducir esa contaminaci\u00f3n ambiental acerc\u00e1ndonos a la media europea.","how":"Cerrando el tr\u00e1fico en determinadas zonas de Madrid. Distrito: Zona Centro."," cost":"Hacer 7 km de calles peatonales: 750.000 \u20ac", "id_image":4,"date":"2015 -05 -06 00:00:00","id_category" :4,"id_user":"6d823fa54c6d1a12","views":4,"likes":3," not_understood":0,"dislikes":0} ] 104 CAPÍTULO 7. ARQUITECTURA DEL PROYECTO 7.2.3. Cliente Android La plataforma Android divide el desarrollo de una aplicación en dos partes: la implementación de la lógica detras de la aplicación mediante el uso de Activities [82] o Services [99], y la configuración del aspecto de la interfaz mediante Layouts XML [69]. En las siguientes secciones se hablará de algu- nos de los aspectos más destacados de este proyecto en referencia a dichas caracteŕısticas de Android. 7.2.3.1. Interfaz Gráfica En el desarrollo de esta aplicación se quiso utilizar un diseño plano basado en las últimas guias de diseño de Android disponibles en su última versión 5.0. Google denominó a este diseño plano ”Material Design”. Por tanto se usa esta versión de Android (API 21) para desarrollar la aplicación. A pesar de que aún no mucha gente utiliza Android 5.0 ”Lollipop” (Ver figura 4.3) muchas de sus caracteŕısticas son retrocompatibles con versiones anteriores, por lo que aunque la gente no posea la última versión en sus dispositivos podrá hacer uso de las caracteŕısticas de ”Material Design”. En Android, cuando se crea una Actividad (en su método ”onCreate()”) se asigna una Vista (”View”) a la actividad que representa la interfaz del usuario. Esta vista está definida en un archivo de Layout XML que se de- berá modificar para crear la interfaz gráfica añadiendo componentes gráficos [114] (”widgets”) y modificando sus atributos mediante etiquetas XML para adaptarlos a nuestras necesidades. Además se les puede asignar un identifi- cador único para poder moverse por dichos widgets luego desde el código de la aplicación mediante una navegación en árbol utilizando el método ”find- ViewById()” proporcionado por Android. Estos componentes gráficos pueden ser los básicos proporcionados por An- droid (como cajas de texto, botones, listas, etc.) o se pueden crear Vistas Personalizadas en caso de que los widgets básicos no aporten la funcionali- dad deseada. En este último caso será necesario definir un Layout para la vista personali- zada (que puede a su vez estar compuesto por widgets básicos o no) y una clase que posea referencias a los datos y a los componentes del layout que los albergarán. Sin embargo a menudo se querrán usar varias de estas vistas, ya sean bási- cas o personalizadas, juntas dentro de una lista, por lo que necesitaremos un Adaptador [115] (”Adapter”) que haga de intermediario entre el layout 105 CAPÍTULO 7. ARQUITECTURA DEL PROYECTO y la clase que lo define para ”adaptar” los datos que posee la clase a los componentes del layout que los muestran. Vamos a ver un ejemplo de esto con la vista (widget) personalizada llamada PartyWidget, creada para mostrar cada uno de los elementos de la lista de Partidos Poĺıticos que se visualiza en la aplicación. El funcionamiento de este widget personalizado esta formado por los siguientes tres elementos: party widget.xml: Layout XML que define la disposición de los dos componentes gráficos básicos que conforman esta vista: un ”Image- View” para el logo del partido y un ”TextView” para el nombre del partido. PartyWidgetView.java: Clase que define el objeto que contiene refe- rencias a los dos componentes anteriores (mediante sus IDs) y los datos de la imagen (de tipo Bitmap) y el nombre (String) del partido. PartyWidgetAdapter.java: Clase que extiende de un ”BaseAdap- ter” de Android y define el adaptador que se encargará de gestionar una lista de elementos gráficos de un mismo tipo (en este caso del tipo ”PoliticalParty”) y de crear las vistas que muestran los datos almace- nados en dicha lista. El método más importante de un Adapter es el ”getView”, que crea la vista personalizada (en este caso de tipo ”Party- WidgetView”) y le asigna los datos que hay dentro de cada elemento de la lista de la forma que nosotros le definamos. De esta manera, solo es necesario decirle al elemento que contiene la lista de Partidos Poĺıticos (en este caso un ”GridView” que permite visualizarlos en forma de una rejilla que se adapta al tamaño de pantalla) que use co- mo adaptador el PartyWidgetAdapter con los datos de la lista de Partidos Poĺıticos que previamente han sido descargados. Navegación por Tabs: Tras la fase de investigación se decidió que seŕıa interesante incluir en la apli- cación distintos filtros para ver tanto las secciones como las propuestas más valoradas positivamente, más vistas, más comentadas, etc. Para implementar la vista de esta funcionalidad se decidió utilizar un diseño muy parecido al que utiliza Google en su tienda de aplicaciones ”Google Play” para navegar de forma lateral mediante pestañas (”tabs”) deslizantes. En este caso cada 106 CAPÍTULO 7. ARQUITECTURA DEL PROYECTO Figura 7.8: Esquema de Implementación de TopItem (Con vista de Section y Proposal) una de las tabs mostraŕıa una lista (elemento ”ListView” de Android) de elementos ordenados por distinto filtro. No obstante, el método utilizado por Google en anteriores versiones de An- droid basado en añadir Tabs a la barra superior (”Action Bar”)[116] de la aplicación está actualmente obsoleto en el API 21, por lo que se tuvo que recurrir a la actual implementación de Google, que no se encuentra todav́ıa dentro del API 21 de desarrollo. Es por eso que hubo que utilizar un par de clases (”SlidingTabLayout” y ”SlidingTabStrip”) que definen las tabs uti- lizadas por Google en el diseño con ”Material Design”. Estas clases fueron extraidas del GitHub[117] de la app que Google mostró en su aplicación de prueba cuando presentó ”Material Design” a finales de 2014. Este elemen- to trabaja definiendo el contenido de cada Tab mediante la utilización de Fragmentos[118] (”Fragment”) de Android, que representan una porción de lo que se muestra dentro de una Actividad. Sin embargo, la vista (Layout) de una Sección y de una Propuesta dentro de esta lista seŕıa muy similar (con su foto, t́ıtulo e indicadores sociales de número de likes, vistas, etc.) por lo que ¿cómo hacer para utilizar la misma vista en dos objetos que son de tipos distintos? La solución que se encontró para utilizar el mismo elemento de visualización (definido en el layout llamado ”top ranking item”) en ambos casos fue utilizar una interfaz que implementaŕıan tanto la clase ”Section” como la clase ”Proposal”: la interfaz ”TopItem”. 107 CAPÍTULO 7. ARQUITECTURA DEL PROYECTO De esta forma, las clases Section y Proposal implementan los métodos ”is- Section()” e ”isProposal()” de la interfaz devolviendo true en cada caso res- pectivamente. Aśı, cuando dentro de el Adaptador (”TopItemAdapter”) se traten los elementos de su lista de TopItems en su método ”getView()”, se podrá preguntar si se trata de un Section o un Proposal para rellenar la vis- ta del ListView con los datos correspondientes a cada caso. Solo hace falta por tanto crear listas de Secciones o Propuestas y pasárselas al adaptador personalizado después de definirlo como adaptador para el ListView. Menús de Navegación: Con el objetivo de proporcionar al usuario una navegación por la aplica- ción que permita ir a cualquiera de sus secciones independientemente de en qué pantalla te encuentres actualmente, se decidió utilizar un menú lateral que se puede deslizar desde el lado izquierdo de la pantalla. Android permite añadir menús [119] a las Actividades mediante métodos espećıficos de éstas, aunque en este caso son menús fotantes sencillos a los que se accede mediante el botón de opciones del móvil o de la app. Se pretend́ıa utilizar el menú lateral deslizante presente en la mayoŕıa de apli- caciones del estilo ”Material Design” introducido por Google en su última versión de Android 5.0 (API 21), por lo que se utilizó un componente gŕafico llamado ”Navigation Drawer” para ello. Este componente está presente en todos los layouts de la aplicación y contiene dentro un ”ListView” con las entradas del menú. Cada una de estas entradas es aśımismo un componen- te personalizado, definido en el layout menu left item.xml (contiene un logo y el nombre de la entrada de menú). En consecuencia, y tal y como se ha hablado antes en esta sección, existirá también un Adapter ”MenuLeftLis- tAdapter” que se encargará de gestionar la vista de la lista de entradas del menú. Además, se le ha añadido una cabecera (”Header”) al menú, que con- tiene la información de nombre de Usuario y un botón para cambiar dicho nombre. Sin embargo, si todas las Actividades que componen la aplicación disponen de este menú, ¿Cómo hacer para evitar repetir el código de generación y con- figuración de dicho menú en todas las Actividades? La solución encontrada fue utilizar una Actividad padre llamada ”MenuActivity” que se encargaŕıa de generar y de albergar los métodos que configuran el menú. De esta ma- nera, cualquier Actividad de la aplicación extendeŕıa de ”MenuActivity” y llamaŕıa a sus métodos de generación y configuración de menú con una re- 108 CAPÍTULO 7. ARQUITECTURA DEL PROYECTO ferencia a su propia vista de Layout (véase que cada Layout contiene el elemento ”Navigation Drawer” necesario para mostrar el menú). Figura 7.9: Esquema de Implementación de Menú Izquierdo (Con vista del Menú) Existe también en la aplicación un Menú derecho deslizable que muestra un Indice del Programa de un Partido Poĺıtico para poder navegar por él de manera más sencilla (similar al que utiliza la aplicación de la ”Wikipedia” para navegar por un art́ıculo). Este menú solo está presente en la activi- dad ”SectionViewerActivity”, ya que solo es necesario acceder al indice del programa cuando se está navegando por sus secciones. Utiliza también para ello un ”Navigation Drawer” similar al del otro menú antes explicado. No obstante, en este caso se decidió utilizar un tipo distinto de lista (”Expan- dableListView”) que se diferencia de la lista normal en que posee dos niveles de navegación que se pueden expandir. De esta forma es necesario definir los layouts de los distintos niveles (”groups”) y los subniveles (”childrens”) dentro de cada uno. 109 CAPÍTULO 7. ARQUITECTURA DEL PROYECTO Adapter Layout Clase Descripción PartyWidgetAdapter party widget.xml PartyWidgetView Widget para mostrar un elemento de la lista de Partidos Poĺıticos MenuLeftListAdapter menu left item.xml MenuLeftItem Widget para mos- trar las entradas del Menú lateral izquier- do. TopItemAdapter top ranking item.xml TopItem Widget para mostrar un elemento de la lista con los Tops de Seccio- nes y Propuestas. ListIndexAdapter (solo muestra texto) No es necesario TextView (Android) que muestra los nom- bres del ı́ndice de un Programa Poĺıtico. ExpandableListAdapter list child item.xml list group item.xml No es necesario TextView que contie- nen los t́ıtulos de las distintas secciones y subsecciones (desple- gables) del ı́ndice de un Programa Poĺıtico. CommentListAdapter comment item.xml Comment Widget para mostrar un comentario de un usuario dentro de la lis- ta de comentarios de una Sección o una Pro- puesta. SampleFragmentPagerAdapter tab page *.xml TabPageFragment Widget para definir lo que contiene cada tab mediante Fragmentos cuya vista es generada de forma dinámica. Tabla 7.3: Adapters, Views y Clases utilizadas en el proyecto 7.2.3.2. Estructuración de Programas Poĺıticos A la hora de almacenar los Programas Poĺıticos en la Base de Datos hu- bo que estudiar la forma más adecuada de hacerlo para poder estructurar dichos programas en distintos niveles de secciones y subsecciones. En defini- tiva, el problema radicaba en cómo codificar la información de a qué nivel de anidamiento pertenećıa cada Sección. Además, hab́ıa dos opciones: o bien el service REST devolv́ıa un programa ya estructurado o la propia aplicación se encargaba de estructurarlos. 110 CAPÍTULO 7. ARQUITECTURA DEL PROYECTO Codificación en Base de Datos: En principio se queŕıa elegir una codificación que permitiera realizar una con- sulta a la base de Datos que devolviera las distintas secciones y subsecciones en el orden en el que aparecen en el Programa. Tras varios intentos con distintos campos de Strings y enteros como atributo de la tabla de Secciones en Base de Datos, se decidió que lo mejor seŕıa utilizar un único número ente- ro que codificara dicha información. Tras estudiar la composición de diversos programas se identificó que no seŕıan necesarios más de 4 niveles de anidamiento en subsecciones. En consecuencia, el número estaŕıa forma- do por 8 cifras, siendo cada dos cifras un nivel distinto de anidamiento. Los siguientes ejemplos muestran cómo funciona esta codificación: Figura 7.10: Ejemplos de Codificación de Secciones y Subsecciones Utilizando esta codificación se consiguió que mediante una simple consulta SQL la Base de Datos devuelva todas las secciones del programa de un de- terminado partido de forma ordenada, siendo luego el Servicio Web REST (Ver Sección 7.2.2) el que pasará los resultados de esta consulta en JSON a la aplicación Android. Estructuración y Almacenamiento de Secciones: Con dicha codificación se consiguió ordenar las secciones en el orden en el que aparecen en el programa, pero ahora se deb́ıan guardar en la aplicación en una estructura que permitiera navegar por el programa de forma estructurada, pudiendo en cada momento ver las subsecciones o volver a la sección anterior. Se decidió por tanto guardar el programa en una estructura en árbol formada por listas de listas. De esta forma cada elemento de la lista seŕıa 111 CAPÍTULO 7. ARQUITECTURA DEL PROYECTO un objeto del tipo Section que contendŕıa la información de dicha sección (t́ıtulo, texto, etc.) y otra lista con las subsecciones. Pero, ¿cómo construir esta estructura a partir de la lista ordenada que de- vuelve el Service REST? La solución encontrada fue utilizar una función que construyera dicho árbol de forma recursiva (Ver clase ”GetPrograms- Data.java”) sobre una sección ”root” vaćıa que perteneceŕıa a cada Partido Poĺıtico. Dicha función recorreŕıa la lista de secciones sin estructurar y pa- ra cada sección comprobraŕıa su nivel de anidamiento son el fin de saber si colocarlo en el nivel actual, en el siguiente o en el anterior. Se puede ver el código de esta función de construcción del árbol en la Sección A.3.1 del Apéndice. Además, como no se pretend́ıa tener que descargarse el programa continua- mente, esta estructura en forma de arbol se guardaŕıa en una clase llamada ”PoliticalGroups” que alamacenaŕıa el listado de Partidos Politicos y para cada uno de ellos almacenaŕıa la estructura en árbol de su programa (su nodo ”root”). Esta clase implementa el patrón de diseño Singleton para ase- gurar que solo exista una instancia de ella, accesible desde cualquier punto de la aplicación. Figura 7.11: Esquema de estructura en árbol de Programa Poĺıtico 112 CAPÍTULO 7. ARQUITECTURA DEL PROYECTO 7.2.3.3. Conexión y Peticiones a Service REST y Base de Datos Las peticiones de información a Base de Datos (ya sea para crear datos, des- cargarlos o modificarlos) se realizan mediante el protocolo HTTP, enviando dichas peticiones al Servicio Web REST (Ver Sección 7.2.2). Para enviar di- chas peticiones es necesario por tanto realizar una conexión HTTP al Servicio Web REST desde la aplicación Android. Aprovechando la experiencia previa adquirida durante la migración de Wave (Ver Sección 5.1.1.2), se decidió uti- lizar la libreŕıa ”HttpURLConnection” de Android y un esquema basado en AsyncTask que ejecutan el proceso de conexión y descarga de datos en un thread separado del UI Thread tal y como recomienda Google hacer para trabajar con conexiones de red[93]. Aśı, en función de la operación que se quiera hacer en Base de Datos, para cada tipo de consulta existirá un AsyncTask encargado de conectarse al ser- vidor con la URL apropiada y tratar los datos en JSON que éste le pueda devolver, ya sea para mostrarlos o guardarlos en algún objeto de la aplica- ción. De forma general se pueden identificar cuatro tipos de peticiones al servidor (Ver tabla 7.1). Con el objetivo de no repetir código se decidió estructurar el esquema de peticiones HTTP mediante herencia de AsyncTasks. El diagrama 7.12 esque- matiza la estructura. Hace falta también actualizar la vista del usuario cuando se reciban los da- tos. Como un AsyncTask se ejecuta en un hilo aparte diferente del UI Thread (para no bloquear la interacción con el usuario), a priori no tiene acceso a la vista (Layout) que se le está mostrando al usuario. Por esta razón la solu- ción que se encontró fue guardar una referencia a la vista del usuario dentro del AsyncTask (ver clase ”URLConnection”). De esta manera en su método ”onPostExecute()” que se ejecuta nada más terminar la operacion de cone- xión del ”doInbackground()”, se obtiene dicha vista y se actualiza con los datos recién descargados. Este método de actualización de la vista es el que se utiliza en todos los casos. Comprobación de Conexión a Internet: Por otro lado, para llevar a cabo un control de errores en la conexión al Ser- vicio Web REST, antes de ejecutar la tarea en el AsyncTask se comprueba el estado de la conexión del dispositivo móvil para asegurarse de que el usuario dispone de conexión a Internet. En caso contrario se le muestra un mensaje 113 CAPÍTULO 7. ARQUITECTURA DEL PROYECTO Figura 7.12: Esquema de Clases de Conexión HTTP mediante AsyncTask 114 CAPÍTULO 7. ARQUITECTURA DEL PROYECTO de aviso para que compruebe sus conexiones y no se lleva a cabo la tarea de conexión en el AsyncTask. Aprovechando que todas las actividades extienden de ”MenuActivity” dicho método de comprobación se encuentra dentro de esa clase. Además, fue necesario definir el siguiente permiso en el ”Android- Manifest.xml” de la aplicación para acceder a la información de estado de la conexión del dispositivo: 7.2.3.4. Gestión de Usuarios: ID de Android Como esta versión de la aplicación no maneja información cŕıtica y sensible del usuario se decidió utilizar un método de autenticación basado en el ID almacenado en el dispositivo móvil. En Android existen varios identificadores (IMEI, ID de dispositivo, ID de Android..) teniendo cada uno de ellos ca- racteŕısticas distintas. En este caso se decidió utilizar el ID de Android [120] ya que es único para cada instalación de sistema operativo y acceder a su valor no requiere de permisos especiales en la aplicación. Se trata de un número de 64 bits en formato hexadecimal, al cual se accede directamente mediante la variable del sistema ”Secure.ANDROID ID”. El acceso a este identificador se produce nada más ejecutar la aplicación en su actividad ”MainActivity” y se guarda de forma estática en la clase ”User” para poder acceder a él desde cualquier punto de la aplicación. Con el iden- tificador también se accede a la Base de Datos para descargar el nombre de Usuario que se corresponde con dicho identificador. Este nombre se mues- tra en el menú izquierdo de la aplicación y se puede cambiar desde ah́ı. De esta manera, todo el contenido generado por un usuario (Opiniones, comen- tarios, propuestas,...) se guarda tambien en base de datos asociado a este identificador único. 7.2.3.5. Servicio Android, Conexión con Wave/SwellRT y Gestión de Propuestas Colaborativas Al servicio (ServiceSwellRT) desarrollado durante la migración de SwellRT a Android (Ver Sección 5.1.3) se le añadió encima el API del Modelo de Contenidos de SwellRT (Ver Sección 7.1.2). Este API trabaja con Waves (o ”modelos”) con identificadores únicos, y dentro de cada modelo habrá un objeto root”del tipo Mapa del que colgarán los distintos objetos con los que 115 CAPÍTULO 7. ARQUITECTURA DEL PROYECTO podremos jugar de cada uno de los cuatro tipos básicos de datos: Mapas, Listas, Strings y Documentos de Texto. En este proyecto se utiliza SwellRT para soportar la edición de propuestas colaborativas. Este tipo de propuestas puede tener asociadas dos textos co- laborativos que se corresponden con la manera de llevar a cabo la propuesta y cómo financiarla. Para implementar esto con wave será necesario por tanto crear una wave por cada propuesta colaborativa, que tendrá asociados a su mapa ’root’ dos objetos del tipo Documento de Texto (TextType). Este tipo permite crear documentos colaborativos que pueden ser editados en tiempo real por todo aquel usuario de wave que esté registrado como participante. El funcionamiento del Servicio Android de conexión con SwellRT exige pri- mero enlazar (”bind”) la Actividad actual con el Service para poder hacer uso del API. Después de enlazar, se podrá registrarse en el servidor SwellRT y crear, abrir, cerrar o borrar waves, a las que tambien se podrán añadir participantes y nuevos objetos de los cuatro tipos antes mencionados. En SwellRT se accede a estos objetos a partir del identificador que se les otor- gue al crearlos. En este caso se creará dentro de cada wave dos TextTypes con identificadores ”howProp 2çostProp”para cada uno de los textos colabo- rativos antes mencionados. Aśımismo, cada propuesta tendrá asociada una wave con un identificador único generado por el servidor al crearse la wave. Este identificador será el que se guarde en la base de datos para que cualquier usuario pueda acceder a la edición colaborativa de la propuesta. El siguiente es un esquema del uso de SwellRT en el proyecto. En el caso de DemoCritics lo primero que se tendrá que hacer será registrar al usuario usando su ID (Ver Sección 7.2.3.4). Esto se hace en el ”MainActivity” al ejecutar la aplicación. Una vez registrado solo será necesario utilizar el ServiceSwellRT para llevar a cabo dos actividades: crear una nueva propuesta colaborativa y editar una propuesta ya creada. Un ejemplo de cómo registrarse con SwellRT se puede encontrar en el Apéndi- ce A.3.2. 116 CAPÍTULO 7. ARQUITECTURA DEL PROYECTO Figura 7.13: Esquema de Uso de Wave/SwellRT Figura 7.14: Esquema de Registro en SwellRT Crear Propuesta Colaborativa: Esta es una opción que se le ofrece al usuario en el caso de que, al hacer una propuesta nueva, deje alguno de los campos de ”¿Cómo lo haŕıa?” o de ”¿Cómo lo financiaŕıa?” en blanco. En tal caso, lo primero que se hace es hacer un login en el servidor Wave llamando al método ”startSession” 117 CAPÍTULO 7. ARQUITECTURA DEL PROYECTO del Service. Una vez que se ha iniciado sesión, se abre un nuevo modelo (wave) en el servidor (ver Sección 7.1.2) para esta propuesta y se obtiene el Id (”WaveId”) de dicho modelo creado para guardarlo en la base de datos junto al resto de datos de la propuesta. Además, se le asocian al elemento ”root” del modelo uno o dos documentos colaborativos del tipo TextType llamados ”padHow” y ”padCost”, en función de si ha dejado los dos campos vaćıos o sólo uno. Por último se añade como participante del modelo creado al usuario que lo ha creado (su ID USER). Cabe destacar que la mayor parte de la programación con el serviceSwellRT se lleva a cabo mediante callbacks que responden a eventos como iniciar sesión, crear modelos, etc. Un ejemplo simplificado del código encargado de crear el modelo se puede ver en el Apéndice A.3.3. Figura 7.15: Esquema de Creación de Pad Colaborativo en SwellRT Editar Propuesta Colaborativa: Cuando un usuario quiere echar una mano a otro en la redacción de su propuesta, puede acceder a la propuesta colaborativa y editar los campos de ”¿Cómo lo haŕıa?” o de ”¿Cómo lo financiaŕıa?” en función de en qué necesite 118 CAPÍTULO 7. ARQUITECTURA DEL PROYECTO ayuda el usuario. Para cada uno de estos campos existe un ”pad” en el servidor wave asociado a una wave (ver Sección 7.1.2) cuyo identificador ”WaveId” está guardado en la base de datos. Cuando el usuario pulsa en uno de los dos campos, se abre una nueva actividad ”EditWaveActivity” que le ofrece un campo ”EditText” de Android en el que puede escribir y ver lo que otros escriben en tiempo real. Para esto hace falta abrir una sesión en Wave, abrir el modelo con su WaveId, obtener el modelo y el pad, y asociar (”bind”) el pad a el EditText del usuario para que el servicio sea capaz de obtener los eventos de escritura del usuario. Un ejemplo simplificado del código encargado de abrir el modelo y asociar el pad colaborativo se puede ver en el Apéndice A.3.4. Figura 7.16: Esquema de Apertura y Edición de Pad Colaborativo en SwellRT 119 Caṕıtulo 8 Evaluación con Usuarios En esta última fase del proyecto, se realizarán evaluaciones de usuarios con el prototipo final desarrollado en Android. Con esto se comprobará la experien- cia de los usuarios evaluados con el resultado final del proyecto y se podrán ver los objetivos que han sido logrados y posibles mejoras y modificaciones futuras. 8.1. Propósitos y objetivos de la evaluación El objetivo principal de la evaluación pretende poner a prueba la funcionali- dad de la aplicación con los usuarios. Queremos analizar cómo se desenvuel- ven los usuarios con la aplicación y cómo utilizan las funcionalidades que ofrece. Para ello determinamos si se cumplen los siguientes objetivos: El usuario siente el control total sobre la aplicación. El usuario es capaz de comprender las actividades que realiza. Se cumplen los objetivos iniciales del proyecto (Ver Sección 1.2) 8.2. Preguntas de evaluación A continuación se expone un listado de preguntas a las que se quiere respon- der con los resultados de la evaluación. ¿Es fácil distinquir los elementos de la aplicación? • ¿Se distinguen bien los iconos y śımbolos? • ¿Es fácil acordarse de la ubicación de cada elemento? ¿Se entienden las transiciones entre pantallas? 121 CAPÍTULO 8. EVALUACIÓN CON USUARIOS • ¿Puede saberse lo que esta realizando la aplicación por detrás? ¿Se pueden llevar a cabo las acciones con pocas pulsaciones? • ¿Cuánto se tarda en realizar una acción? • ¿Hay alguna tarea que requiera muchas pulsaciones? ¿Se pueden visualizar todas las opciones disponibles de un solo vistazo? • ¿Es complicado localizar algún elemento o información a simple vista? 8.3. Requisitos para los participantes de la evaluación La evaluación será realizada por dos tipos objetivo de participantes que se co- rresponden con los definidos en la fase de modelado de personas (Ver Sección 6.3.3): Ciudadano • Ciudadano de a a pie inscrito en el censo con capacidad para votar en las próximas elecciones. • Edad: a partir de 18 años. • Familiarizados con el uso de herramientas móviles, preferiblemente en dispositivos Android. Activista social • Activista social que participa activamente en movimientos sociales afines a una causa. • Edad: a partir de 18 años. • Familiarizados con el uso de herramientas de participación ciuda- dana. 122 CAPÍTULO 8. EVALUACIÓN CON USUARIOS 8.4. Diseño experimental Las evaluaciones tendrán una duración estimada entre 4 y 7 minutos. Rea- lizando un total de 5 evaluaciones, formadas por ciudadanos y activistas sociales mayores de 18 años. En cada una se deberán cumplir las siguientes normas y pasos: 1. Se dará una breve introducción a los participantes, explicándoles la temática de la aplicación y el objetivo que se persigue con ella. 2. El usuario recibirá una lista con las tareas a realizar durante la evalua- ción. Para llevarlas a cabo, el usuario evaluado podrá tomarse todo el tiempo que estime oportuno. 3. Durante la evaluación se mantendrá una reunión en un entorno cerrado libre de distracciones con la persona evaluada para observar todas las reacciones a la hora de realizar las tareas en la aplicación. El moderador también apuntará los tiempos que tarda en finalizar las tareas. 4. Si el usuario evaluado no pudiera resolver una tarea en menos de 3-4 minutos, o quedase atascado en la misma por un tiempo superior a 45 segundos, el moderador le indicará que pase a la siguiente tarea. Se ano- tarán con especial atención las tareas que no pudieran ser completadas con éxito durante la evaluación. 5. Al final de la sesión el moderador apuntará todas las objeciones de la evaluación, aśı como las conclusiones del mismo, para posteriormente ponerlas en común y analizarlas. 8.5. Lista de tareas a realizar Este es el listado de tareas que deberá realizar el usuario en la aplicación en función del tipo: Ciudadano • Visualizar los diferentes programas poĺıticos que se prensentan a las elecciones. • Acceder a las secciones más debatidas, valoradas, comentadas, etc. 123 CAPÍTULO 8. EVALUACIÓN CON USUARIOS • Visualizar una sección de la categoŕıa cultura y realizar un comen- tario en ella. • Cambiar su nombre de usuario de ”Anónimo” por otro. • Añadir una sección a mis favoritos. • Visualizar sus secciones favoritas. • Valorar una sección después de haberla léıdo y realizar un comen- tario valorando la sección. Activista Social • Visualizar el listado de propuestas publicadas en el sistema. • Mostrar las propuestas de la categoŕıa educación publicadas hasta el momento. • Leer el contenido de una propuesta, valorarlo y realizar un comen- tario. • Añadir una propuesta a mis favoritos. • Visualizar sus propuestas favoritas. • Publicar una nueva propuesta en la categoŕıa vivienda. • Colaborar en el desarrollo de una propuesta colaborativa. • Publicar una propuesta colaborativa para que pueda desarrollarla la comunidad. 8.6. Entorno y herramientas empleadas Para realizar las evaluaciones se realizarán reuniones con los usuarios a eva- luar en un entorno cerrado y libre de distracciones que le permita realizar las tareas de evaluación explicando en voz alta sus impresiones y problemas. Toda esta información será anotada para después ser debatida y contrastada con el usuario. En cuanto a la aplicación, se utilizará un archivo .apk en modo debug que se le proporcionará al usuario evaluado para que la pueda instalar en su disposi- tivo. Como requisito fundamental, el dispositivo de la persona evaluada debe contar con una versión de Android igual o superior al API 15 (Ice Cream Sandwich), y poseer una conexión a Internet estable para interactuar con la aplicación sin problemas. 124 CAPÍTULO 8. EVALUACIÓN CON USUARIOS 8.7. Tareas del moderador El moderador será el responsable de gúıar el proceso de la evaluación con el usuario. Al comienzo de la evaluación el moderador solicitará al usuario la instalación de DemoCritics en su dispositivo. Durante la evaluación el moderador deberá realizar las siguientes acciones: 1. Mostrar al usuario la lista de tareas a realizar con la aplicación.. Se informará al usuario de que deberá realizar las tareas sin ayuda, ni interrupciones hasta el final. 2. Indicar al usuario que debe expresar en voz alta sus impresiones y problemas que encuentre durante la interacción con la aplicación. 3. El moderador interrumpirá al usuario por un motivo de fuerza mayor, es decir, si sucede algún acontecimiento que impida continuar con la evaluación (fallo en la aplicación, servidor cáıdo, etcétera). 4. Si el usuario evaluado estuviera más de 2.5 minutos para resolver una tarea, o quedara atascado más de 45 segundos en la misma, el mode- rador comunicará al usuario que procesa con la siguiente tarea. 5. El moderador tomará nota de los tiempos que el usuario tarda en reali- zar cada tarea. Aśı como también el tiempo total que dura la evaluación con todas las tareas realizadas. 6. Tras completar todas las tareas asignadas, iniciará una breve sesión de debriefing con el usuario para contrastar sus anotaciones. 8.8. Resultados de la evaluación con los usua- rios Se realizaron un total de 5 evaluaciones: 3 con usuarios ”ciudadanos” y 2 con usuarios con un perfil de ”activista social”. En la mayoŕıa de los casos se completaron las tareas asignadas con mayor o menor soltura en función de su experiencia previa con herramientas similares. La mayor parte de los usuarios respondieron de forma flúıda al uso de la aplicación. Bien porque al estar acostumbrados al utilizar aplicaciones en Android que utilizaran interfaces basadas en Material Design, los elemen- tos visuales de la aplicación les resultaron familiares. Sin embargo, algunos 125 CAPÍTULO 8. EVALUACIÓN CON USUARIOS conceptos internos en la aplicación resultaron algo confusos para algunos usuarios. Comenzando por los usuarios que representaban el papel de ciudadano, es- tos mostraban cierta confusión respecto a la representación de los programas poĺıticos. Una de las movivaciones principales del proyecto es fomentar la lectura de los programas poĺıticos por los electores, pues actualmente pocos conocen cómo se estructura un programa poĺıtico en ĺıneas generales. Ha si- do un factor determinante la incomprensión de los usuarios al ver secciones que inclúıan texto, otras que no y otras que inclúıan enlaces a otras sub- secciones. No obstante es un factor que viene condicionado de la estructura que ha establecido el partido poĺıtico para su programa electoral. Por lo que podemos encontrar programas que se adapten mejor o peor a esta forma de representarlos. Para los usuarios que juagaban el rol de activista social la interacción con la aplicacion fue más flúıda que el perfil anterior, pues normalmente estaban acostumbrados a herramientas relacionadas con el mundo de la poĺıtica y la participación ciudadana. Para las propuestas normales los usuarios reaccio- naron de forma normal, visualizando, creando, valorando o comentando las propuestas publicadas. Sin embargo, una vez más el concepto de propuesta colaborativa no fue del todo comprendido en un primer momento. Pero una vez que el usuario vió cómo su propuesta pod́ıa ser editada en tiempo real por otros usuarios, el concepto quedó más claro y les pareció bastante útil y llamativo. 8.8.1. Comentarios sobre la interfaz Respecto a la interfaz de la aplicación, su actual diseño no representó muchos problemas graves. La selección de los iconos quizá no fue la mejor para repre- sentar los elementos de la aplicación. Algunos usuarios tuvieron que leer la descripción de cada elemento para saber a qué acción les llevaŕıa pulsar ese elemento. En cuanto a la navegación y representación de los menús dentro de la aplicación, los usuarios no tuvieron demasiados problemas por estar familarizados con Material Design y el botón ”hamburguesa” de menú. Por otro lado hubo usuarios que no entendieron a primera vista el uso de los bo- tones de like, dislike, etc. pues no les quedó claro que pudieran pulsarlos para opinar. Además, el ı́ndice desplegable accesible en la parte superior derecha de las secciones solo fue utilizado por uno de los usuarios, pues los otros no se dieron cuenta de su existencia. Por otro lado los usuarios entendieron bien la navegación por tabs, y todos 126 CAPÍTULO 8. EVALUACIÓN CON USUARIOS Tabla 8.1: Dificultad y tiempos de las tareas para el usuario del tipo ciuda- dano. Tarea Dificultad Tiempo Visualizar los diferentes programas poĺıticos que se prensentan a las elecciones. 1/5 <30 s Acceder a las secciones más debatidas, valoradas, comentadas, etc. 2/5 <30 s Visualizar una sección de la catgoŕıa cultura de un partido poĺıtico en concreto. 3/5 <45 s Añadir una sección a mis favoritos. 2/5 <15 s Visualizar tus secciones favoritas. 4/5 <45 s Valorar una sección después de haberla léıdo y rea- lizar un comentario valorando la sección. 1/5 <45 s valoraron positivamente la opción de explorar el contenido por categoŕıas y de guardar secciones o propuestas en favoritos. También destacaron la elección de distintos colores para distinguir las distintas partes de la aplicación. Sin embargo, en el caso de la edición de propuestas colaborativas, el no poder diferenciar a los usuarios que estaban escribiendo en un mismo pad al mismo tiempo es un problema del que se quejaron varios usuarios, pues algunos estaban acostumbrados a utilizar herramientas como Google Docs que si que los distinguen. Diferenciar a los usuarios que están escribiendo al mismo tiempo por colores o marcadores ayuda a poder concentrarse en la escritura y a poder distinguir el contenido de todo el documento. No obstante, les gustó el uso de edición en tiempo real para colaborar unos con otros. 8.8.2. Resultados de las tareas La mayor parte de las tareas fueron completadas con éxito. En la tablas 8.1 y 8.2, podemos ver el tiempo promedio que tardaron los usuarios en realizar las tareas propuestas. En cada tabla se muestra el tiempo promedio en segundos que los usuarios consumieron en llevar a cabo la tarea, y la dificultad media sobre un total de cinco puntos (siendo 0 una tarea fácil de realizar y 5 una tarea compleja de realizar) que costó a los usuarios realizar las tareas. 127 CAPÍTULO 8. EVALUACIÓN CON USUARIOS Tabla 8.2: Dificultad y tiempos de las tareas para el usuario del tipo activista social. Tarea Dificultad Tiempo Visualizar el listado de propuestas publicadas en el sistema. 1/5 <15 s Mostrar las propuestas de la categoŕıa educación publicadas hasta el momento. 3/5 <30 s Leer el contenido de una propuesta, valorarlo y realizar un comentario. 2/5 <45 s Añadir una propuesta a mis favoritos. 2/5 <15 s Visualizar tus propuestas favoritas. 2/5 <15 s Publicar una nueva propuesta en la categoŕıa vi- vienda en el sistema. 3/5 <45 s Colaborar en el desarrollo de una propuesta cola- borativa. 4/5 <60 s Publicar una propuesta colaborativa para que pue- da desarrollarla la comunidad. 3/5 <30 s 128 Caṕıtulo 9 Resultados y Trabajo Futuro En este caṕıtulo se analizarán y discutirán los resultados en conjunto de todo el Trabajo de Fin de Grado, aśı como algunas ĺıneas de trabajo futuro para este proyecto. Todo el código de Software libre desarrollado por nosotros está disponible en el GitHub de la organización del proyecto: https://github.com/Zorbel 9.1. Discusión de Resultados SE ha desarrollado DemoCritics, una plataforma para dispositivos móvi- les Android cuyo objetivo es juntar en un único sitio el mensaje de la poĺıtica tradicional (visto en forma de su Programa Poĺıtico) con el mensaje de los ciudadanos (visto en forma de Propuestas). No podemos olvidar del ”leitmotiv” inicial de este proyecto, utilizar las capa- cidades de colaboración en tiempo real de Wave/SwellRT en Android. Aśı, na- cieron las propuestas colaborativas (o ”abiertas”). Propuestas en las que un usuario al crearlas dejaba alguno de los dos campos (”¿Cómo la llevaŕıa a cabo?” y ”¿Cómo la financiaria?”) en blanco para permitir a otros usuarios que le echaran una mano mediante la edición colaborativa y en tiempo real de esa parte de la propuesta. De esta manera utilizamos Wave/SwellRT en un contexto más lógico que el de redactar la propuesta entera, pues al me- nos dichos campos están sujetos a menos subjetividad que la declaración de intenciones de una propuesta más al uso de las que se encuentran en las pla- taformas actuales. Además, solamente el usuario inicial de la propuesta es el único capaz de convertir la propuesta en ”definitiva”, cerrando la posibilidad de su edicion con Wave cuando estime que la comunidad de ”expertos” ha podido ayudarle a proponer algo coherente y viable. Por otro lado, se ha querido aprovechar el auge de las redes sociales para ”so- cializar” la plataforma. De esta forma los usuarios pueden generar contenido e interés en el uso de la aplicación. Pueden dar su opinión mediante el uso de 129 https://github.com/Zorbel CAPÍTULO 9. RESULTADOS Y TRABAJO FUTURO ”indicadores sociales” similares a los ”Me gusta” o ”No me gusta” tan pre- sentes en las redes sociales. También pueden realizar sus propios comentarios para generar debate y marcar contenido como favorito. Todo ello aplicado tanto a secciones de programas poĺıticos como a propuestas hechas por otros usuarios. Esto, por otro lado, nos permite en cierta manera ”cuantificar” el interés de las personas, lo cual siempre resulta útil para clasificar el contenido en forma de ”tops” de lo más valorado, lo más comentado, etc. Aunque no solo es de utilidad para elaborar dichos filtros de visualización que atraigan la atención de los usuarios, sino que también los propios partidos poĺıticos podŕıan beneficiarse de ello para identificar sus propuestas poĺıticas más controvertidas o más valoradas. Al final se trata de una especie de ”red social” aplicada al ámbito poĺıtico en el que cualquiera de los actores puede intervenir y beneficiarse del contenido que genera la comunidad. También se utiliza un sistema de categorización tanto de secciones como de propuestas para llevar a cabo esa unión entre los programas politicos y las propuestas que tan necesaria nos parećıa para fomentar tanto la lectura de secciones como la elaboración de propuestas. De hecho, esto atraeŕıa a usua- rios que, lejos de querer leerse un programa poĺıtico, lo que buscan es conocer el contenido de una determinada categoŕıa de su interés. Aunque actualmen- te existen 6 categoŕıas (Sanidad, Educación, Empleo, Vivienda, Impuestos y Cultura) la intención es que existan más y que incluso los propios usuarios in- teresados puedan crear sus propias categoŕıas, tal y como se discutirá después en el trabajo a futuro. Desde un punto de vista técnico el desarrollo de DemoCritics aporta una plataforma que es independiente de la tecnoloǵıa del cliente, pues se ha desa- rrollado un Servicio Web REST que responde a peticiones HTTP accesibles desde cualquier tipo de cliente que pueda realizar este tipo de peticiones. Además se trata de un proyecto en el que se aporta una solución de Software libre que no exist́ıa previamente, pues las opciones de colaboración en tiem- po real en Android pasaban únicamente por soluciones privativas como el Real Time API de Google. Su código está disponible en GitHub y cualquiera puede estudiarlo, contribuir, copiarlo y utilizarlo libremente. 9.1.1. Resultados de la Evaluación con usuarios En ĺıneas generales se puede decir que la aplicación ha sido recibida de forma positiva por la mayor parte de los usuarios, siendo la innovación en torno a la idea el factor potencial de la aplicación. Algunos de los usuarios estaban fa- miliarizados con herramientas similares en otros entornos (Web), y valoraron 130 CAPÍTULO 9. RESULTADOS Y TRABAJO FUTURO positivamente su traslado a una plataforma móvil. Los usuarios apreciaron la posibilidad de poder leer los programas en el móvil, como si de un programa de bolsillo se tratase, y poder valorarlos y opinar sobre ellos. No obstante, la apariencia o representación de los programas es algo que no ha atráıdo demasiado su atención. Por ello, se deberá trabajar más en otra posible representación gráfica que capte más la atención del usuario. La interacción entre las tareas y la transición de las pantallas, no ha supuesto un problema para los usuarios. A excepción de las propuestas colaborativas, pues habŕıa que rediseñar el concepto para hacer la edición en tiempo real más amigable en consonancia con otras herramientas similares. Para la siguiente interacción del proceso de desarrollo, se proponen los si- guientes puntos por orden de prioridad, teniendo en cuenta las recomenda- ciones y evaluaciones de los usuarios: 1. Cambiar el aspecto de los iconos de la pantalla inicial por otros más representativos a la actividad que respresentan. 2. Dar más visibilidad a los botones de opinión en secciones y propuestas. 3. Rediseñar la visualización de las secciones para una lectura más cómoda y diferenciar bien los elementos con los que puede interactuar el usuario de los que no. 4. Estudiar la visibilidad del ı́ndice de programa expansible en cada sec- ción. 5. Mejorar el concepto de propuestas colaborativas con diferenciación de usuarios por colores o etiquetas para mejorar su comprensión durante su edición. 6. Estudiar la creación de nuevas categoŕıas que representen mejor las prouestas y secciones de la aplicación. 7. Ofrecer más funcionalidades de personalización al usuario. 131 CAPÍTULO 9. RESULTADOS Y TRABAJO FUTURO 9.2. Reparto de Trabajo entre los componen- tes del grupo DemoCritics es un proyecto desarrollado por dos personas. Para su desarrollo hemos elegido una metodoloǵıa de control de versiones que nos permite repar- tir las tareas de forma eficaz (cualquiera de los dos puede ver en pocos pasos lo hecho por el otro) y eficiente (lleva poco tiempo subir o descargarse los cambios). Para ello creamos una organización en GitHub llamada ”Zorbel” y gestionamos con git los cambios en el código de cualquiera de las partes que conforman DemoCritics. Además, esto nos permitió también facilitar la revisión del código por parte de los profesores del proyecto. En general, todas las tareas se han llevado a cabo en forma paralela y con una carga de trabajo equitativa entre ambos miembros. A continuación se detallan un poco más estas tareas: - Migración de SwellRT a Android: Tanto la investigación del funcio- namiento de la tecnoloǵıa como la metodoloǵıa de migración se llevaron a cabo por ambos miembros. Estos cambios se contrastaron en reuniones con el director Pablo Ojanguren (desarrollador de SwellRT) a medida que se pro- dućıan. De poner el API de trabajo con waves de SwellRT sobre el servicio migrado se encargó Pablo. - Desarrollo de la idea de la app: los dos miembros del proyecto nos reunimos con los directores Samer y Pablo para hacer una sesión de brains- torming y dar con una idea de aplicación que a ambos nos gustaŕıa realizar y que hiciera uso de SwellRT. - Diseño e Investigación: ambos hicimos reuniones periódicas para discutir ideas iniciales, planificar la investigación y diseñar prototipos. Durante las entrevistas de investigación procuramos estar ambos presentes para exponer las idea, discutirlas y enseñarles los prototipos básicos a los entrevistados. Posteriormente nos reunimos para sacar conclusiones y modificar los proto- tipos. En definitiva, toda la fase basada en el Diseño Guiado por Objetivos la realizamos en conjunto. - Implementación de la aplicación: En este caso śı que hubo un reparto de tareas más marcado por la poca experiencia previa que teńıamos con distintas tecnoloǵıas. El diseño general de la aplicación, el Service REST y la Base de Datos lo discutimos entre ambos. A la hora de implementarlo uno de nosotros (Javier) conoćıa mejor la arquitectura de Android y se dedicó a elaborar el funcionamiento del cliente mientras que el otro (Jaime) hab́ıa 132 CAPÍTULO 9. RESULTADOS Y TRABAJO FUTURO trabajado previamente con Laravel y se dedicó a investigar y desarrollar el Service REST y la conexión con la Base de Datos. No obstante, ambos pusimos en común los cambios realizados, de manera que los dos tuvimos un conocimiento de cómo funcionaba la aplicación en su conjunto. Durante la última fase del proyecto de prefeccionamiento de detalles de la aplicación ambos trabajamos para mejorar el cliente Android. - Evaluación con Usuarios: planificamos juntos la dinámica de las evalua- ciones y realizamos dos evaluaciones con usuarios cada uno de un total de 4 evaluaciones, procurando poner luego en común los resultados para discutir- los y sacar conclusiones. - Elaboración de la memoria: para la redacción de esta memoria pro- cedimos a realizar varios posibles ı́ndices para su estructuración hasta que obtuvimos un primer esqueleto de su estructura. Posteriormente nos reparti- mos su redacción, procurando verificar con el compañero el contenido de todo lo escrito. Esto se vió facilitado por el uso también para la memoris de git GitHub como sistema de control de versiones (ver organización del proyecto en GitHub). En general, habremos escrito ambos aproximadamente la mitad del contenido de este documento cada uno (siendo siempre verificado por el otro). La tabla 9.1 muestra el reparto colaborativo de tareas entre los integrantes del grupo. Para el seguimiento del proyecto procuramos realizar mı́nimo una reunión al mes, ya fuera con Samer, con Pablo o con ambos. Cabe destacar que, si bien a veces no pudimos reunirnos en persona, el uso de herramientas de mensajeŕıa instantánea (con especial mención a Telegram) y de videollamada como Skype y Hangouts fue constante entre los involucrados en el proyecto. 9.3. Trabajo Futuro Como ya se ha comentado con anterioridad la presente es una primera versión de DemoCritics que nos sirve para tener una primera prueba de concepto de algunas de sus funcionalidades y que haga uso de la migración de SwellRT a Android. En esta versión hemos podido evaluar el funcionamiento general de la idea y ponerla a prueba con algunos usuarios para mejorar su utilidad de cara a continuar su desarrollo. Nuestro objetivo en este momento es apro- vechar la oportunidad que se nos presenta en este año electoral para poner realmente a prueba esta plataforma en las próximas elecciones generales. De esta forma también podriamos analizar su uso antes, durante y después de 133 CAPÍTULO 9. RESULTADOS Y TRABAJO FUTURO Tabla 9.1: Reparto colaborativo de tareas. T a re a D e sc ri p ci ó n J a im e J a v ie r M ig ra ci ón d e S w el lR T A n - d ro id M ig ra r la p la ta fo rm a en d es a- rr ol lo S w el lR T a A n d ro id , ad ap ta n d o la s cl as es y co m o- p on en te s p ri n ci p al es p ar a su fu n ci on am ie n to en A n d ro id . A d ap ta r li b re ŕı a H T T P p a- ra re la li za r p et ic io n es al se r- v id or y es ta b le ce r la co n e- x ió n . E st ab le ce r la co n ex ió n b id i- re cc io n al a tr av és d e W eb - S o ck et s p ar a el in te rc am b io d e co n te n id o en ti em p o re al . D es ar ro ll o d e la id ea ap li ca ci ón E st u d ia r y va lo ra r la s p os ib le s so lu ci on es p ar a el d es ar ro ll o d e u n a ap li ca ci ón m óv il co la b or a- ti va en ti em p o re al . E va lu ar el d es ar ro ll o d e ap li ca ci on es co la b or at iv as q u e u ti li za ra n té cn ic as d e In te li ge n ci a A rt ifi ci al , d es ti n ad as a la ed u ca ci ón . P ro m ov er el d es ar ro ll o d e ap li ca ci on es re la ci on a- d as co n ge ol o ca li za ci ón en m ap as y p ro d u cc ió n au d iv is u al . D is eñ o e in ve st i- ga ci ón C on cr et ar en tr ev is ta s co n p er - so n as d e in te ré s p ar a el d is eñ o d e la ap li ca ci ón , d es ar ro ll ar lo s b o ce to s y d efi n ir su in te ra c- ci ón . S eg u im ie n to y an ál is is d e la s en tr ev is as y d es ar ro ll o y d i- se ñ o d e lo s b o ce to s a p ap el . S eg u im ie n to y an ás li si s d e la s en tr ev is ta s y d efi n ic ió n d e la in te ra cc ió n d e lo s p ro - to ti p os . Im p le m en ta ci ón d e la ap li ca ci ón D es ar ro ll o d el cl ie n te m óv il en A n d ro id , d is eñ o d e la b as e d e d at os y d es ar ro ll o d el S er v ic io W eb . D is eñ o d e la b as e d e d at os , d es ar ro ll o d el S er v ic io W eb y ap oy o en el cl ie n te A n - d ro id . D is eñ o d e la b as e d e d at os , d es ar ro ll o d el cl ie n te A n - d ro id y ap oy o en el S er v ic io W eb . E va lu ac ió n co n u su ar io s E va lu ac io n es d e la ap li ca ci ón fi n al a d if er en te s u su ar io s. E va lu ac io n es a p er so n as co n el p er fi l d e ac ti v is ta so ci al . E va lu ac io n es a p er so n as co n el p er fi l d e ci u d ad an o d e a p ie . E la b or ac ió n d e m em or ia D es ar ro ll o d e la m em or ia fi n al d el p ro ye ct o en LA T E X ˙ D is eñ o, es tr u ct u ra ci ón y re - d ac ci ón d e la m em or ia . D is eñ o, es tr u ct u ra ci ón y re - d ac ci ón d e la m em or ia . 134 CAPÍTULO 9. RESULTADOS Y TRABAJO FUTURO unas elecciones. Para ello nos proponemos seguir poniéndonos en contacto con actores relacio- nados con el mundo de la poĺıtica (activistas, poĺıticos, periodistas, académi- cos, etc.) para realizar más entrevistas y someter la plataforma a nuevas iteraciones del proceso de diseño, implementación y evaluación con los que ir poco a poco mejorando sus caracteŕısticas. De paso también iremos gene- rando interés entre los entrevistados y publicitando su uso. En cualquier caso, el proyecto está disponible en forma de software libre bajo licencia GNU GPLv3 que cualquiera puede estudiar, copiar y modificar para desarrollar sus propias ideas inspirado por las nuestras. 9.3.1. Mejoras a la versión actual Teniendo en cuenta los resultados de la evaluación con usuarios (Ver sección 9.1.1 creemos que las ĺıneas de trabajo futuro debeŕıan ir orientadas a me- jorar la experiencia de usuario, modificando aspectos de la interfaz gráfica que pudieron resultar más incomprensibles a las personas evaluadas, como los iconos de la aplicación y su significado. También habŕıa que mejorar la visualización de las distintas secciones del programa, que resultó confusa para algunos de ellos. Desde el punto de vista del desarrollo colaborativo en tiempo real de pro- puestas, se debeŕıa estudiar la posibilidad de poder distinguir a los usuarios participantes en la Wave y lo que escriben mediante el uso de indicadores de color o etiquetas al estilo de otras plataformas web como Google Docs. 9.3.2. Nuevas caracteŕısticas Durante el desarrollo del proyecto han ido surgiendo diversas ideas intere- santes que se podŕıan aplicar en un futuro próximo dentro de la plataforma de DemoCritics. Algunas de las posibilidades son: - Desarrollo de Encuestas: de intención de voto, de afinidad, etc. con posibi- lidad de obtener los resultados en tiempo real mediante SwellRT. - Abrir la creación de categoŕıas nuevas a los usuarios, de manera que demos más flexibilidad a la hora de crear y clasificar contenidos. - Permitir que los usuarios hagan comparativas por temas entre las secciones de los distintos programas de partidos poĺıticos. Buscar para ello la partici- pación de colectivos sociales interesados. 135 CAPÍTULO 9. RESULTADOS Y TRABAJO FUTURO - Creación de una hemeroteca de programas poĺıticos que permita navegar por programas poĺıticos de anteriores elecciones. Útil por ejemplo para comprobar la evolución de las propuestas de los partidos. - Integración con redes sociales y mensajeŕıa instantánea para compartir contenidos de la aplicación. - Oraganizar jerárquicamente los usuarios, pudiendo existir grupos de usua- rios que comparten las mismas inquietudes e intereses. - Uso de inteligencia artificial para integrar sistemas recomendadores de con- tenido por afinidad o de puesta en contacto entre usuarios por intereses si- milares. Asimismo, y gracias a la flexibilidad que nos permite el uso de un Service REST, se estudiará la posibilidad de desarrollar un cliente web para la aplicación, especialmente pensado para usuarios que están más familiariza- dos con la elaboración de textos largos, como los de las propuestas, usando un teclado. De esta manera enfocaŕıamos la aplicación móvil a la lectura de contenidos y generación de opiniones y comentarios, mientras que las pro- puestas se podŕıan redactar en el ordenador. Entendemos que la postura de uso de un móvil es para usarlo durante un espacio corto de tiempo, por lo que la existencia de un cliente web para ordenadores haŕıa la generación de contenidos más serios y extensos, como las propuestas, mucho más cómoda. Por otro lado, en el desarrollo de este proyecto hemos centrado la plataforma en los programas poĺıticos, pero se podŕıa utilizar para mostrar otros tipos de documentos estructurados susceptibles de ser sometidos a debate y opinión. Como por ejemplo normativas, leyes, manuales, etc. 136 Conclusions Developing a project like DemoCritics has not been simple. Being an applica- tion made from scratch from our own idea and initiative, it requires a lot of dedication in the form of time and motivation. Moreover, if we talk about a topic such as politics, which unfortunately doesn’t seem to attract all the attention and interest of the people it should really have as we are part of our society. In this sense, the time spent on the previous work of planning, research, design and evaluation of prototypes was necessary to establish a solid foundation on which to build the implementation of useful social characteristics. This process demonstrates the importance of the developer, usually used to have a fairly low vision of technical aspects, being aware of the need to involve in developing other voices. These voices may not have the exper- tise needed to ” implement ” the idea, but it does provide a broader overview that helps to better understand the real needs of the user, which ultimately is the recipient of the application. Therefore, conducting interviews and subsequent evaluations to take into account the opinion of the potential ” client ” has confronted us with a necessary reality for any developer who wants to get a serious product. Moreover when we consider DemoCritics as an application that goes beyond the scope of the Final Degree Project and will become a useful tool in the near future. The results achieved are reflected in the current state of DemoCritics. For the first time citizens have within reach a space to consult all political options (wherever they come), learn about them, discuss them and value them. As well as participate in a participatory process of citizens’ proposals, giving them the opportunity to give visibility to their proposal or collaborate in the development of others. The social potential of the application is also utilised by the possibility of review, comment and bookmark all the contents of the application. Also it makes real-time collaboration technology available for the com- munity of Free Software developers in Android, so they could use of these features in future development of applications. As well as the application that contains the Free Software platform for citizen participation DemoCritics, that any user could adapt to the needs and options of their region, country or community. 137 CAPÍTULO 9. RESULTADOS Y TRABAJO FUTURO There is still room for improvements, because this platform is a first version of a project that, with further research and development, we intend to put into practice in a real scenario of the upcoming general elections that will be held during the coming months. 138 Conclusiones Desarrollar un proyecto como DemoCritics no ha sido tarea sencilla. Al tra- tarse de una aplicación que parte de cero desde nuestra propia idea e iniciativa, exige bastante dedicación en forma de tiempo y motivación. Más aún si hablamos de una temática como es la poĺıtica, que desgraciadamente parece no atraer toda la atención e interés de las personas que realmente de- beŕıa tener como actividad de la que formamos parte como sociedad. En este sentido el tiempo dedicado a las labores previas de planificación, investi- gación, diseño y evaluación de prototipos era necesario para establecer unas bases sólidas sobre las que asentar la implementación de caracteŕısticas que resultaran de utilidad social. Este proceso demuestra la importancia de que el desarrollador, acostumbrado normalmente a tener una visión bastante reducida a aspectos técnicos, sea consciente de la necesidad de implicar en el desarrollo otras voces. Dichas voces quizás no posean los conocimientos técnicos necesarios para ”implementar” la idea, pero śı que aportan una visión de conjunto más am- plia que ayuda a entender mejor las necesidades reales del usuario, que a fin de cuentas es el destinatario de la aplicación. Realizar por tanto entrevistas y posteriores evaluaciones para tener en cuenta la opinión del futurible ”cliente” nos ha enfrentado a una realidad necesaria para cualquier desarro- llador que quiera conseguir un producto serio. Más aun cuando nos plan- teamos DemoCritics como una aplicación que trascienda el alcance del Trabajo de Fin de Grado y se convierta en una herramienta útil en el futuro próximo. Los resultados obtenidos se plasman en el estado actual de DemoCritics. Por vez primera la ciudadańıa tiene al alcance de sus manos un espacio donde consultar todas las opciones poĺıticas (vengan de donde vengan), aprender sobre ellas, debatirlas o valorarlas. Aśı como también participar en un proceso participativo de propuestas ciudadanas, dándole la posibilidad de dar visibilidad a su propuesta o colaborar en el desarollo de otras. Se explota también el potencial social de la aplicación mediante la posibilidad de opinar, realizar comentarios y marcar como favorito en todo el contenido de la aplicación. Se pone aśı tambien la tecnoloǵıa de colaboración en tiempo real a disposición de la comunidad de desarrolladores de Software libre en An- droid para que hagan uso de estas funcionalidades en sus futuras aplicaciones. 139 CAPÍTULO 9. RESULTADOS Y TRABAJO FUTURO Aśı como también la aplicación que contiene la plataforma de Software libre de participación ciudadana de DemoCritics, que cualquier usuario podŕıa adaptar a las necesidades y opciones de su región, páıs o comunidad. Existe todav́ıa margen de mejora, pues la presente plataforma es una primera versión de un proyecto en el que pretendemos seguir investigando y desarrollando para ponerla en práctica en un escenario real de cara a las próximas elecciones generales que se celebrarán durante los próximos meses. 140 Apéndice A Listados de Código Fuente En este apéndice se recogen solo algunos fragmentos de código que se estiman representativos para complementar la información que se expone a lo largo de todo este documento. Se recoge código tanto de la Migración de SwellRT a Android, del desarrollo del Servicio Web REST y de la implementación de la aplicación Android. Todo el código del proyecto es libre y está disponible en forma de repositorio bajo la organización llamada ”Zorbel” en la siguiente URL: HTTPs://github.com/Zorbel A.1. Migración de Wave a Android: SwellRT A.1.1. Esquema de conexión HTTP import java.net.HttpURLConnection; private void login(final String user , final String password , final Callback callback) { // Construct the URL String urlStr with the server , user and password parameters URL url = new URL(urlStr); // String HttpURLConnection connection = (HttpURLConnection) url. openConnection (); //Open the connection to the given URL connection.setDoOutput(true); // allow the POST connection connection.setRequestProperty("Accept -Charset", CHARSET); connection.setRequestProperty("Content -Type", " application/x-www -form -urlencoded;charset=" + CHARSET) ; OutputStream out = connection.getOutputStream (); out.write(queryStr.getBytes(CHARSET)); //Set the POST parameters 141 HTTPs://github.com/Zorbel APÉNDICE A. LISTADOS DE CÓDIGO FUENTE if (connection.getResponseCode () != 200) { //ERROR during the connection connection.disconnect (); // Disconnect from the server . } else { // Continue with the login process (WebSocket) connection.disconnect (); // Disconnect from the server . } } A.1.2. Esquema de conexión con AsyncTask private class LoginTask extends AsyncTask { @Override protected String doInBackground(String ... params) { // method that executes on the new Thread without blocking the UI Thread login(params [0], params [1], params [2]); //Do the login return sessionId // String needed for the WebSocket connection and based on the cookie received from the server. } @Override protected void onPostExecute(String result) { // method that executes on the UI Thread once doInBackground () finishes its execution. if (result != null) { callback.onLogin (); // Notify the login success using the proper callback method } else { //The doInBackGround method has had a problem and the result of its execution was null callback.onError("Wave Login Error"); // Notify the login error using the proper callback method } } } 142 APÉNDICE A. LISTADOS DE CÓDIGO FUENTE A.1.3. Esquema de uso de WAsync // Create the atmosphere client AtmosphereClient client = ClientFactory.getDefault (). newClient(AtmosphereClient.class); // Configure client with URL AtmosphereRequestBuilder requestBuilder = client. newRequestBuilder () .method(Request.METHOD.GET).trackMessageLength(true).uri( WaveSocketWAsync.this.urlBase) .transport(Request.TRANSPORT.WEBSOCKET) // Create and configure socket WaveSocketWAsync.this.socket = client.create(client. newOptionsBuilder ().runtime(ahc).build ()) .on(Event.OPEN.name(), new Function () { // Equivalent to GWT onOpen () method @Override public void on(String arg0) { // set the actions to do and call the proper callback function (callback.onConnect ()) } }).on(Event.CLOSE.name(), new Function () { // Equivalent to GWT onClose () method @Override public void on(String arg0) { // set the actions to do and call the proper callback function (callback.onDisconnect ()) } }).on(Event.MESSAGE.name(), new Function () { @Override public void on(String arg) { // Equivalent to GWT onMessage () method // set the actions to do and call the proper callback function (callback.onMessage ()) } }).on(new Function () { @Override public void on(Throwable t) { // catch possible exceptions } }); try { 143 APÉNDICE A. LISTADOS DE CÓDIGO FUENTE // connect to the server socket.open(requestBuilder.build()); } catch (IOException e) { // catch possible exceptions } //send a given message to the server , equivalent to GWT send( msg) method socket.fire(Data); A.2. Servicio Web REST (Laravel) A.2.1. Esquema de Rutas Simple // Posibles operaciones con el objeto "propuesta" Route ::get(’/proposal ’, ’ProposalController@index ’); // Obtiene el listado de todas las propuestas Route ::get(’/proposal /{id}’, ’ProposalController@show ’); // Obtiene la prupuesta pasada por el campo {id} Route ::post(’/proposal ’, ’ProposalController@create ’); // Crea una nueva propuesta en el servidor Route ::put(’/proposal /{id}’, ’ProposalController@update ’); // Actualiza la propuesta pasada por {id} Route :: delete(’/proposal /{id}’, ’ProposalController@destroy ’) ; // Borra la propuesta pasada por {id} A.2.2. Esquema de Rutas Agrupadas Route ::group ([’prefix ’ => ’proposal ’], function () { Route ::get(’/’, ’ProposalController@index ’); Route ::get(’/{id}’, ’ProposalController@show ’); Route ::post(’/’, ’ProposalController@create ’); Route ::put(’/{id}’, ’ProposalController@update ’); Route :: delete(’/{id}’,’ProposalController@destroy ’); }); A.2.3. Esquema de Rutas de Propuestas Agrupadas 144 APÉNDICE A. LISTADOS DE CÓDIGO FUENTE Route ::group ([’prefix ’ => ’proposal ’], function () { Route ::get(’/’, ’ProposalController@index ’); Route ::post(’/’, ’ProposalController@create ’); Route ::group ([’prefix ’ => ’/{id}’], function () { Route ::get(’/’, ’ProposalController@show ’); Route ::put(’/’, ’ProposalController@update ’); Route :: delete(’/’,’ProposalController@destroy ’); }); }); A.2.4. Esquema de Controlador de Propuestas JSONResult , int index) { // X = currentSection Section currentSection = JSONResult.get(index); 145 APÉNDICE A. LISTADOS DE CÓDIGO FUENTE if (parent.getlSections () == null) { parent.setlSections(new ArrayList
()); } parent.addSubSection(currentSection); // c = nextIndex int nextIndex = index + 1; while (( nextIndex < JSONResult.size()) && (getLevel( JSONResult.get(nextIndex)) >= getLevel(currentSection) )) { if (getLevel(JSONResult.get(nextIndex)) == getLevel( currentSection)) { currentSection = JSONResult.get(nextIndex); nextIndex ++; parent.addSubSection(currentSection); } else if (getLevel(JSONResult.get(nextIndex)) > getLevel(currentSection)) nextIndex = createIndex(currentSection , JSONResult , nextIndex); } return nextIndex; } protected int getLevel(Section sec) { int id_sec = sec.getmSection (), level; if (id_sec % 100 != 0) { level = 4; } else if (id_sec % 10000 != 0) { level = 3; } else if (id_sec % 1000000 != 0) { level = 2; } else level = 1; return level; } A.3.2. Registrar Usuario en SwellRT 146 APÉNDICE A. LISTADOS DE CÓDIGO FUENTE public class MainActivity implements ServiceConnection , SwellRTServiceCallback { private SwellRTService mSwellRT; protected void bindSwellRTService () { if (mSwellRT == null) { final Intent mWaveServiceIntent = new Intent(this , SwellRTService.class); bindService(mWaveServiceIntent , this , Context. BIND_AUTO_CREATE); } } @Override protected void onCreate(Bundle savedInstanceState) { // Create view and get view references bindSwellRTService (); //Bind to the service } // AsyncTask for registering the user. public void registerWaveUser () { AsyncTask mRegisterTask = new AsyncTask () { @Override protected Boolean doInBackground( String ... params) { return mSwellRT.registerUser(params [0], params [1], params [2]); } @Override protected void onPostExecute(Boolean result) { if (result) Toast.makeText(MainActivity.this , " User created successfully", Toast. LENGTH_LONG).show(); else Toast.makeText(MainActivity.this , "Error creating user", Toast.LENGTH_LONG).show(); } }; // Execute task with the server , user and password 147 APÉNDICE A. LISTADOS DE CÓDIGO FUENTE mRegisterTask.execute(WAVE_SERVER , "" + User.ID_USER + "@local.net", "password"); } // Callback called when the service is connected. @Override public void onServiceConnected(ComponentName name , IBinder service) { mSwellRT = (( SwellRTService.SwellRTBinder) service). getService(this); Log.d(this.getClass ().getSimpleName (), "SwellRT Service Bound"); registerWaveUser (); //Do the register. } @Override public void onServiceDisconnected(ComponentName name) { mSwellRT = null; Log.d(this.getClass ().getSimpleName (), "SwellRT Service unBound"); } } A.3.3. Crear nueva Wave (Model) en SwellRT public class NewProposalActivity extends SwellRTActivity { @Override protected void onCreate(Bundle savedInstanceState) { //Get the proposal info from the user view , if there is no ’’how ’’ or ’’cost ’’, create a new wave model. } public void doStartSession () { // Open Session with ID_USER try { mSwellRT.startSession(MainActivity.WAVE_SERVER , "" + User.ID_USER + "@local.net", " password"); } catch (MalformedURLException e) { e.printStackTrace (); } catch (InvalidParticipantAddress invalidParticipantAddress) { invalidParticipantAddress.printStackTrace (); 148 APÉNDICE A. LISTADOS DE CÓDIGO FUENTE } } // SwellRT Service Callbacks @Override public void onServiceConnected(ComponentName name , IBinder service) { mSwellRT = (( SwellRTService.SwellRTBinder) service). getService(this); doStartSession (); Log.d(this.getClass ().getSimpleName (), "SwellRT Service Bound"); } @Override public void onStartSessionSuccess(String session) { getService ().createModel (); } @Override public void onCreate(Model model) { // Callback called when a model is created. // Get the Id of the wave/model to store in the database WaveId idW = model.getWaveId (); String idWave = idW.toString (); String id = ""; id = idWave.substring(8, idWave.length () - 1); //Store the proposal (with the Wave Id) in the database. postCollaborativeProposal(id); // Create a text document for each Pad TextType padHow = model.createText(" Cmo lo h a r a s ?"); TextType padCost = model.createText(" Cmo lo financiarias?"); // Include the document as part of the wave/model in the "root" map. if(createHowWave) model.getRoot ().put("padHow", padHow); if(createCostWave) model.getRoot ().put("padCost", padCost); // Allow current user to read/write the text of the Pad 149 APÉNDICE A. LISTADOS DE CÓDIGO FUENTE model.addParticipant("" + User.ID_USER + "@local.net" ); } } A.3.4. Abrir Pad colaborativo en SwellRT public class EditWaveActivity extends SwellRTActivity implements ServiceConnection , SwellRTService. SwellRTServiceCallback { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_edit_wave); //Get the id of the model from the intent if (mModelId == null) mModelId = getIntent ().getStringExtra("MODEL_ID") ; //Get the id of the model from the intent padName = getIntent ().getStringExtra("PAD_NAME"); //Get the reference to the editable EditText mEditor = (EditText) findViewById(R.id.textWave); } //Start the session in the SwellRT Server public void doStartSession () { try { getService ().startSession(MainActivity. WAVE_SERVER , "" + User.ID_USER + "@local.net", " password"); } catch (MalformedURLException e) { e.printStackTrace (); } catch (InvalidParticipantAddress invalidParticipantAddress) { invalidParticipantAddress.printStackTrace (); } } // Connection and Events Callbacks @Override public void onConnect () { doStartSession (); } 150 @Override public void onDisconnect () { // Eventually unbind the EditText from the Doc mDocBinder.unbind (); } @Override public void onStartSessionSuccess(String s) { getService ().openModel(mModelId); } @Override public void onOpen(Model model) { // Gets a reference to an already open Model mModel = getService ().getModel(mModelId); //Add actual participant mModel.addParticipant("" + User.ID_USER + "@local.net "); // Get the text document supporting the Pad from the Model Type instance = mModel.getRoot ().get(padName); mText = (TextType) instance; // Connect the EditText component to the Wave’s Doc mDocBinder = WaveDocEditorBinder.bind(mEditor , getService ().getReadableDocument(mText)); } @Override protected void onDestroy () { super.onDestroy (); } @Override public void onBackPressed () { getService ().closeModel(mModelId); getService ().stopSession (); super.onBackPressed (); } } 151 152 Bibliograf́ıa [1] Glenn Greenwald and Ewen MacAskill. NSA Prism program taps in to user data of Apple, Google and others — US news — The Guardian. http://www.theguardian.com/world/2013/jun/06/ us-tech-giants-nsa-data. [2] Understanding Operational Transformation. http://www.codecommit.com/blog/java/ understanding-and-applying-operational-transformation. [3] Paul Baran. On distributed communications networks. 1964. Article available at https://www.rand.org/content/dam/rand/ pubs/research_memoranda/2006/RM3420.pdf. [4] Google Inc. Realtime API: Add Realtime collaboration to your app. https://developers.google.com/google-apps/realtime/. [5] Microsoft. RTC Client API. https://msdn.microsoft.com/en-us/library/ms775893%28v=vs. 85%29.aspx. [6] Google Inc. WebRTC. http://www.webrtc.org/. [7] Mozilla Foundation. TogetherJS: Collaboration made easy. https://togetherjs.com/. [8] GitHub Inc. GitHub · Build software better, together. https://github.com/. [9] Joseph Gentle. ShareJS. http://sharejs.org/. [10] Chianwu Tian. Goodow: Google Docs–style collaboration via the use of operational transforms. https://github.com/goodow/realtime. [11] Apache. Wave In A Box. http://www.waveprotocol.org/wave-in-a-box/. 153 http://www.theguardian.com/world/2013/jun/06/us-tech-giants-nsa-data http://www.theguardian.com/world/2013/jun/06/us-tech-giants-nsa-data http://www.codecommit.com/blog/java/understanding-and-applying-operational-transformation http://www.codecommit.com/blog/java/understanding-and-applying-operational-transformation https://www.rand.org/content/dam/rand/pubs/research_memoranda/2006/RM3420.pdf https://www.rand.org/content/dam/rand/pubs/research_memoranda/2006/RM3420.pdf https://developers.google.com/google-apps/realtime/ https://msdn.microsoft.com/en-us/library/ms775893%28v=vs.85%29.aspx https://msdn.microsoft.com/en-us/library/ms775893%28v=vs.85%29.aspx http://www.webrtc.org/ https://togetherjs.com/ https://github.com/ http://sharejs.org/ https://github.com/goodow/realtime http://www.waveprotocol.org/wave-in-a-box/ [12] Oracle Corporation. OpenJDK. http://openjdk.java.net/. [13] Google Inc. Google Web Toolkit. http://www.gwtproject.org/. [14] Apache. Install WIAB. https://cwiki.apache.org/confluence/display/WAVE/Install+ WIAB. [15] Apache. WIAB Repository. https://github.com/apache/incubator-wave. [16] WIAB Server Example. http://waveinabox.net/. [17] Google Inc. Google Docs. https://drive.google.com/. [18] The Etherpad Foundation. Etherpad. http://etherpad.org/. [19] TitanPad Authors. TitanPad: lets people work on one document si- multaneously. https://titanpad.com. [20] Alexander Kirk. Colorillo. http://colorillo.com/. [21] Henry Oswald and James Allen. ShareLaTex: LaTeX, Evolved. https://www.sharelatex.com/. [22] Samepage Labs Inc. Samepage — The num. 1 Online Collaboration Tool. https://www.samepage.io/. [23] Quip. Quip: Trabaja con personas, no con archivos. https://quip.com/. [24] Google. UPyD Parla - Aplicaciones de Android en Google Play. https://play.google.com/store/apps/details?id=es. kiketurry.upydparla. [25] Google. RecuperaCórdoba - Aplicaciones de Android en Google Play. https://play.google.com/store/apps/details?id=iucordoba. com.recuperacordoba. 154 http://openjdk.java.net/ http://www.gwtproject.org/ https://cwiki.apache.org/confluence/display/WAVE/Install+WIAB https://cwiki.apache.org/confluence/display/WAVE/Install+WIAB https://github.com/apache/incubator-wave http://waveinabox.net/ https://drive.google.com/ http://etherpad.org/ https://titanpad.com http://colorillo.com/ https://www.sharelatex.com/ https://www.samepage.io/ https://quip.com/ https://play.google.com/store/apps/details?id=es.kiketurry.upydparla https://play.google.com/store/apps/details?id=es.kiketurry.upydparla https://play.google.com/store/apps/details?id=iucordoba.com.recuperacordoba https://play.google.com/store/apps/details?id=iucordoba.com.recuperacordoba [26] Google. PSOE Andalućıa - Aplicaciones de Android en Google Play. https://play.google.com/store/apps/details?id=com. phonegap.psoeandalucia. [27] Google. PP Canarias - Aplicaciones de Android en Google Play. https://play.google.com/store/apps/details?id=es. ppdecanarias.app. [28] Plaza Podemos: ¡Śı se puede! https://www.reddit.com/. [29] Reddit: the front page of the internet. https://www.reddit.com/r/podemos/. [30] Change.org · La mayor plataforma de peticiones del mundo. https://www.change.org/. [31] Programa colaborativo de Zaragoza en Común. http://programa.ganemoszaragoza.com/. [32] S.A. APPGREE. Appgree. http://www.appgree.com/que-es-appgree/. [33] S.A. APPGREE. DemoRank: El Algoritmo. http://www.appgree.com/el-proceso-paso-a-paso/. [34] Free Software Foundation. The GNU General Public License v3.0 - GNU Project - Free Software Foundation. https://www.gnu.org/licenses/gpl.html. [35] The Bill and Melinda Gates Foundation. Human-Centered Design Tool- kit: An Open-Source Toolkit to Inspire New Solutions in the Developing World. Ideo, 2011. [36] Alan Copper. The Inmates Are Running the Asylum: Why High Tech Products Drive Us Crazy and How to Restore the Sanity. Sams Publis- hing, 2004. [37] Inc. Google. Meet Google Wave. http://googlecode.blogspot.com.es/2009/05/ hello-world-meet-google-wave.html. [38] Inc. Google. Google Wave Federation Protocol Over XMPP. http://wave-protocol.googlecode.com/hg/spec/federation/ wavespec.html. 155 https://play.google.com/store/apps/details?id=com.phonegap.psoeandalucia https://play.google.com/store/apps/details?id=com.phonegap.psoeandalucia https://play.google.com/store/apps/details?id=es.ppdecanarias.app https://play.google.com/store/apps/details?id=es.ppdecanarias.app https://www.reddit.com/ https://www.reddit.com/r/podemos/ https://www.change.org/ http://programa.ganemoszaragoza.com/ http://www.appgree.com/que-es-appgree/ http://www.appgree.com/el-proceso-paso-a-paso/ https://www.gnu.org/licenses/gpl.html http://googlecode.blogspot.com.es/2009/05/hello-world-meet-google-wave.html http://googlecode.blogspot.com.es/2009/05/hello-world-meet-google-wave.html http://wave-protocol.googlecode.com/hg/spec/federation/wavespec.html http://wave-protocol.googlecode.com/hg/spec/federation/wavespec.html [39] Inc. Google. End of Google Wave. https://support.google.com/answer/1083134?hl=en. [40] Google+. https://plus.google.com/. [41] Apache. Apache Wave (Incubating). http://incubator.apache.org/wave/about.html. [42] Apache. Apache License 2.0. http://www.apache.org/licenses/LICENSE-2.0. [43] Inc. Google. Wave Federation. http://www.waveprotocol.org/federation. [44] Google. Google Wave Federation Architecture White Paper. http://wave-protocol.googlecode.com/hg/whitepapers/ google-wave-architecture/google-wave-architecture.html. [45] Peter Saint-Andre. Extensible messaging and presence protocol (xmpp): Core. 2011. RFC 6120 Available at http://tools.ietf.org/html/rfc6120. [46] Inc. Google. Google Wave Operational Transformation. http://www.waveprotocol.org/whitepapers/ operational-transform. [47] P2PValue. P2P Value European Project. http://www.p2pvalue.eu/. [48] P2PValue. SwellRT, a real-time federated collaboration framework. https://github.com/P2Pvalue/swellrt. [49] Google Inc. Android Developers Site. http://developer.android.com/index.html. [50] Eclipse Foundation. Eclipse IDE. https://eclipse.org/ide/. [51] Oracle Corporation. Java. https://www.java.com/es/. [52] Mozilla Foundation. JavaScript. https://developer.mozilla.org/es/docs/Web/JavaScript. 156 https://support.google.com/answer/1083134?hl=en https://plus.google.com/ http://incubator.apache.org/wave/about.html http://www.apache.org/licenses/LICENSE-2.0 http://www.waveprotocol.org/federation http://wave-protocol.googlecode.com/hg/whitepapers/google-wave-architecture/google-wave-architecture.html http://wave-protocol.googlecode.com/hg/whitepapers/google-wave-architecture/google-wave-architecture.html http://tools.ietf.org/html/rfc6120 http://www.waveprotocol.org/whitepapers/operational-transform http://www.waveprotocol.org/whitepapers/operational-transform http://www.p2pvalue.eu/ https://github.com/P2Pvalue/swellrt http://developer.android.com/index.html https://eclipse.org/ide/ https://www.java.com/es/ https://developer.mozilla.org/es/docs/Web/JavaScript [53] Roy Fielding. Hypertext transfer protocol (http/1.1): Message syntax and routing. 2014. RFC 7230 Available at https://tools.ietf.org/html/rfc7230. [54] Ian Fette and Alexey Melnikov. Hypertext transfer protocol (http/1.1): Authentication. 2011. RFC 6455 Available at https://tools.ietf.org/html/rfc6455. [55] Linus Torvalds. Git. https://git-scm.com/. [56] Google Inc. Android Studio IDE. https://developer.android.com/tools/studio/index.html. [57] JetBrains. IntelliJ IDEA IDE. https://www.jetbrains.com/idea/. [58] Google Inc. Android 5.0 APIs. https://developer.android.com/about/versions/android-5.0. html. [59] Google Inc. Android SDK. https://developer.android.com/sdk/index.html. [60] Google Inc. Android API Reference. http://developer.android.com/reference/packages.html. [61] Google Inc. Android Virtual Device Manager. http://developer.android.com/tools/devices/managing-avds. html. [62] Google Inc. Using the Android Emulator. http://developer.android.com/tools/devices/emulator.html. [63] Google Inc. Managing AVDs with AVD Manager. https://developer.android.com/tools/devices/managing-avds. html. [64] Google Inc. Android SDK Manager. https://developer.android.com/tools/help/sdk-manager.html. [65] Google Inc. Android Dalvik Debug Monitor Server. http://developer.android.com/tools/debugging/ddms.html. 157 https://tools.ietf.org/html/rfc7230 https://tools.ietf.org/html/rfc6455 https://git-scm.com/ https://developer.android.com/tools/studio/index.html https://www.jetbrains.com/idea/ https://developer.android.com/about/versions/android-5.0.html https://developer.android.com/about/versions/android-5.0.html https://developer.android.com/sdk/index.html http://developer.android.com/reference/packages.html http://developer.android.com/tools/devices/managing-avds.html http://developer.android.com/tools/devices/managing-avds.html http://developer.android.com/tools/devices/emulator.html https://developer.android.com/tools/devices/managing-avds.html https://developer.android.com/tools/devices/managing-avds.html https://developer.android.com/tools/help/sdk-manager.html http://developer.android.com/tools/debugging/ddms.html [66] Google Inc. Android Debug Bridge. http://developer.android.com/tools/help/adb.html. [67] Google Inc. Android Versions Distribution. https://developer.android.com/about/dashboards/index.html. [68] World Wide Web Consortium. Extensible Markup Language (XML). http://www.w3.org/XML/. [69] Google Inc. Android Layouts. https://developer.android.com/guide/topics/ui/ declaring-layout.html. [70] Introducing JSON. http://json.org/. [71] ISO. ISO/IEC 9075-1:2011 - Information technology – Database languages – SQL. http://www.iso.org/iso/home/store/catalogue_tc/catalogue_ detail.htm?csnumber=53681. [72] Oracle Corporation. MySQL :: The world’s most popular open source database. https://www.mysql.com/. [73] The PhpMyAdmin Project. PhpMyAdmin: Bringing MySQL to the web. http://www.phpmyadmin.net/. [74] The PHP Group. PHP: Hypertext Preprocessor. https://php.net/. [75] Taylor Otwell. Laravel - The PHP Framework For Web Artisans. http://laravel.com/. [76] Taylor Otwell. The Laravel PHP Framework. https://github.com/laravel. [77] Inc. Red Hat. OpenShift by Red Hat. https://www.openshift.com/. [78] Jon Skinner. Sublime Text: The text editor you’ll fall in love with. https://www.sublimetext.com/. 158 http://developer.android.com/tools/help/adb.html https://developer.android.com/about/dashboards/index.html http://www.w3.org/XML/ https://developer.android.com/guide/topics/ui/declaring-layout.html https://developer.android.com/guide/topics/ui/declaring-layout.html http://json.org/ http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=53681 http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=53681 https://www.mysql.com/ http://www.phpmyadmin.net/ https://php.net/ http://laravel.com/ https://github.com/laravel https://www.openshift.com/ https://www.sublimetext.com/ [79] WooMoo Inc. POP - Prototyping on Paper — Mobile App Prototyping Made Easy. https://popapp.in/. [80] Google Inc. Building Apps with Over 65K Methods. https://developer.android.com/tools/building/multidex. html. [81] Google Inc. ProGuard. http://developer.android.com/tools/help/proguard.html. [82] Google Inc. Activities. https://developer.android.com/guide/components/activities. html. [83] Roy Fielding. Hypertext transfer protocol (http/1.1): Authentication. 2014. RFC 7235 Available at https://tools.ietf.org/html/rfc7235. [84] Google Inc. System Permissions. https://developer.android.com/guide/topics/security/ permissions.html. [85] Google Inc. App Manifest. https://developer.android.com/guide/topics/manifest/ manifest-intro.html. [86] Google Inc. Emulator Networking: Network Address Space. https://developer.android.com/tools/devices/emulator.html# emulatornetworking. [87] Google Inc. Android LogCat. https://developer.android.com/tools/help/logcat.html. [88] Google Inc. Apache HTTP Library. https://developer.android.com/reference/org/apache/http/ package-summary.html. [89] Google Inc. Android’s HTTP Clients. http://android-developers.blogspot.com.es/2011/09/ androids-http-clients.html. [90] Google Inc. HttpURLConnection Library. https://developer.android.com/reference/java/net/ HttpURLConnection.html. 159 https://popapp.in/ https://developer.android.com/tools/building/multidex.html https://developer.android.com/tools/building/multidex.html http://developer.android.com/tools/help/proguard.html https://developer.android.com/guide/components/activities.html https://developer.android.com/guide/components/activities.html https://tools.ietf.org/html/rfc7235 https://developer.android.com/guide/topics/security/permissions.html https://developer.android.com/guide/topics/security/permissions.html https://developer.android.com/guide/topics/manifest/manifest-intro.html https://developer.android.com/guide/topics/manifest/manifest-intro.html https://developer.android.com/tools/devices/emulator.html#emulatornetworking https://developer.android.com/tools/devices/emulator.html#emulatornetworking https://developer.android.com/tools/help/logcat.html https://developer.android.com/reference/org/apache/http/package-summary.html https://developer.android.com/reference/org/apache/http/package-summary.html http://android-developers.blogspot.com.es/2011/09/androids-http-clients.html http://android-developers.blogspot.com.es/2011/09/androids-http-clients.html https://developer.android.com/reference/java/net/HttpURLConnection.html https://developer.android.com/reference/java/net/HttpURLConnection.html [91] Google Inc. Processes and Threads. https://developer.android.com/guide/components/ processes-and-threads.html. [92] Google Inc. Android AsyncTask. https://developer.android.com/reference/android/os/ AsyncTask.html. [93] Google Inc. Connecting to the Network. https://developer.android.com/training/basics/network-ops/ connecting.html. [94] Async-IO.org. Atmosphere: The Asynchronous WebSocket/Comet Fra- mework. https://github.com/Atmosphere/atmosphere. [95] Async-IO.org. wAsync: A WebSockets/HTTP Client Library for Asyn- chronous Communication. https://github.com/Atmosphere/wasync. [96] Wave Client for Android. https://github.com/Zorbel/swell-android. [97] Async-IO.org. Configuring the underlying AHC provider. https://github.com/Atmosphere/wasync/wiki/ Configuring-the-underlying-AHC-provider. [98] QOS.ch. SLF4J for Android. http://www.slf4j.org/android/. [99] Google Inc. Android Services. https://developer.android.com/guide/components/services. html. [100] Async-IO.org. Async Http Client. https://github.com/AsyncHttpClient/async-http-client. [101] Project Grizzly. Project Grizzly: NIO Event Development Simplified. https://grizzly.java.net/index.html. [102] Labodemo. http://labodemo.net/es/. 160 https://developer.android.com/guide/components/processes-and-threads.html https://developer.android.com/guide/components/processes-and-threads.html https://developer.android.com/reference/android/os/AsyncTask.html https://developer.android.com/reference/android/os/AsyncTask.html https://developer.android.com/training/basics/network-ops/connecting.html https://developer.android.com/training/basics/network-ops/connecting.html https://github.com/Atmosphere/atmosphere https://github.com/Atmosphere/wasync https://github.com/Zorbel/swell-android https://github.com/Atmosphere/wasync/wiki/Configuring-the-underlying-AHC-provider https://github.com/Atmosphere/wasync/wiki/Configuring-the-underlying-AHC-provider http://www.slf4j.org/android/ https://developer.android.com/guide/components/services.html https://developer.android.com/guide/components/services.html https://github.com/AsyncHttpClient/async-http-client https://grizzly.java.net/index.html http://labodemo.net/es/ [103] Javier de la Cueva. Javier de la Cueva: abogado, doctor en Filosof́ıa y estudioso de las relaciones entre el Derecho y la Tecnoloǵıa. http://www.javierdelacueva.es/bio/. [104] Javier de la Cueva. Manual del ciberactivista. Teoŕıa y práctica de las acciones micropoĺıticas. Bandaàparte Editores, 2015. [105] Jakob Nielsen. 10 Heuristics for User Interface Design: Article by Jakob Nielsen. http://www.nngroup.com/articles/ten-usability-heuristics/. [106] Google Inc. Material design - Google design guidelines. http://www.google.com/design/spec/material-design/ introduction.html. [107] Inc. Google. Google Wave Conversation Model. https://wave-protocol.googlecode.com/hg/spec/conversation/ convspec.html. [108] Inc. Google. Google Wave API Overview. http://www.waveprotocol.org/wave-apis. [109] Inc. Google. Google Wave Extensions. http://www.waveprotocol.org/wave-apis/extensions. [110] P2PValue. SwellRT Client for Android. https://github.com/P2Pvalue/swellrt/tree/master/android. [111] Roy Thomas Fielding. Architectural Styles and the Design of Network- based Software Architectures. PhD thesis, University of California, Ir- vine, 2000. [112] Martin Heller. REST and CRUD: the Impedance Mismatch — InfoWorld. http://www.infoworld.com/article/2640739/ application-development/rest-and-crud--the-impedance-mismatch. html. [113] Stefan Jauker. 10 Best Practices for Better RESTful API — Thinking Mobile. http://blog.mwaysolutions.com/2014/06/05/ 10-best-practices-for-better-restful-api/. 161 http://www.javierdelacueva.es/bio/ http://www.nngroup.com/articles/ten-usability-heuristics/ http://www.google.com/design/spec/material-design/introduction.html http://www.google.com/design/spec/material-design/introduction.html https://wave-protocol.googlecode.com/hg/spec/conversation/convspec.html https://wave-protocol.googlecode.com/hg/spec/conversation/convspec.html http://www.waveprotocol.org/wave-apis http://www.waveprotocol.org/wave-apis/extensions https://github.com/P2Pvalue/swellrt/tree/master/android http://www.infoworld.com/article/2640739/application-development/rest-and-crud--the-impedance-mismatch.html http://www.infoworld.com/article/2640739/application-development/rest-and-crud--the-impedance-mismatch.html http://www.infoworld.com/article/2640739/application-development/rest-and-crud--the-impedance-mismatch.html http://blog.mwaysolutions.com/2014/06/05/10-best-practices-for-better-restful-api/ http://blog.mwaysolutions.com/2014/06/05/10-best-practices-for-better-restful-api/ [114] Google Inc. Android Widget. https://developer.android.com/reference/android/widget/ package-summary.html. [115] Google Inc. Android Adapter. https://developer.android.com/reference/android/widget/ Adapter.html. [116] Google Inc. Android Action Bar. https://developer.android.com/guide/topics/ui/actionbar. html. [117] Google Inc. IOsched app Sliding Tabs. https://github.com/google/iosched/blob/master/android/ src/main/java/com/google/samples/apps/iosched/ui/widget/ SlidingTabLayout.java. [118] Google Inc. Android Fragments. https://developer.android.com/guide/components/fragments. html. [119] Google Inc. Android Menus. https://developer.android.com/guide/topics/ui/menus.html. [120] Google Inc. Android Secure Settings. https://developer.android.com/reference/android/provider/ Settings.Secure.html. 162 https://developer.android.com/reference/android/widget/package-summary.html https://developer.android.com/reference/android/widget/package-summary.html https://developer.android.com/reference/android/widget/Adapter.html https://developer.android.com/reference/android/widget/Adapter.html https://developer.android.com/guide/topics/ui/actionbar.html https://developer.android.com/guide/topics/ui/actionbar.html https://github.com/google/iosched/blob/master/android/src/main/java/com/google/samples/apps/iosched/ui/widget/SlidingTabLayout.java https://github.com/google/iosched/blob/master/android/src/main/java/com/google/samples/apps/iosched/ui/widget/SlidingTabLayout.java https://github.com/google/iosched/blob/master/android/src/main/java/com/google/samples/apps/iosched/ui/widget/SlidingTabLayout.java https://developer.android.com/guide/components/fragments.html https://developer.android.com/guide/components/fragments.html https://developer.android.com/guide/topics/ui/menus.html https://developer.android.com/reference/android/provider/Settings.Secure.html https://developer.android.com/reference/android/provider/Settings.Secure.html Autorización de Difusión y Uso Agradecimientos Abstract Resumen Introducción Antecedentes Marco teórico: Política en el mundo de la Informática Idea detrás de DemoCritics Objetivos del Proyecto Estructura del Documento Estado del Arte Edición Colaborativa en Tiempo Real APIs Centralizadas Google Realtime API Microsoft RTC Client API WebRTC Mozilla TogetherJS ShareJS Goodow Plataformas Web y Android Wave: Wave In A Box (WIAB) Google Docs Etherpad Colorillo ShareLaTeX Samepage Quip Aplicaciones de Participación Política y Ciudadana Programas Políticos UPyD Parla RecuperaCórdoba PSOE Andalucía PP Canarias Participación Ciudadana Reddit Change.org Programas Colaborativos de Ahora Madrid y Zaragoza en Común Appgree Metodologías del Proyecto Uso de Software Libre Migración de Wave/SwellRT a Android Diseño de la Aplicación Brainstorming Diseño Guiado por Objetivos (DGO) Brainstorming Diseño Guiado por Objetivos (DGO) Implementación de la Aplicación Control de versiones GitHub Reparto de tareas Revisiones de código Evaluaciones de usabilidad Patrones de Diseño Tecnologías del Proyecto Tecnologías de Wave Google Wave Apache Wave Características de Wave Federación Consistencia en tiempo real Escalabilidad Servidores Wave: SwellRT Eclipse Java GWT JavaScript HTTP WebSocket Git GitHub Tecnologías de la Aplicación Android Android Studio Android XML JSON SQL MySQL PhpMyAdmin PHP Laravel 5 OpenShift Sublime Text POP: Prototyping On Paper Migración de SwellRT a Android Objetivo Migración: Identificación y Solución de Problemas Construcción y Depuración Conexión HTTP Conexión WebSocket Conexión final y Logging Organización del código: Servicio Android Dependencias Resultado de la Migración Diseño de la Aplicación Introducción Brainstorming de ideas Diseño Guiado Por Objetivos (DGO) Investigación Investigación Intención Inicial: Prototipo básico Hipótesis de personas Entrevistas Modelado y Definición de Personas Definición de Escenarios y Requisitos Framework de diseño Framework de interacción Verificación: Principios de Diseño Arquitectura del Proyecto Arquitectura de Wave Modelo Conversacional Wave Modelo de Contenidos SwellRT Arquitectura de la aplicación Base de datos political_party section proposal comment opinion Servicio Web REST Arquitectura Rutas Controladores Cliente Android Interfaz Gráfica Estructuración de Programas Políticos Conexión y Peticiones a Service REST y Base de Datos Gestión de Usuarios: ID de Android Servicio Android, Conexión con Wave/SwellRT y Gestión de Propuestas Colaborativas Evaluación con Usuarios Propósitos y objetivos de la evaluación Preguntas de evaluación Requisitos para los participantes de la evaluación Diseño experimental Lista de tareas a realizar Entorno y herramientas empleadas Tareas del moderador Resultados de la evaluación con los usuarios Comentarios sobre la interfaz Resultados de las tareas Resultados y Trabajo Futuro Discusión de Resultados Resultados de la Evaluación con usuarios Reparto de Trabajo entre los componentes del grupo Trabajo Futuro Mejoras a la versión actual Nuevas características Conclusions Conclusiones Listados de Código Fuente Migración de Wave a Android: SwellRT Esquema de conexión HTTP Esquema de conexión con AsyncTask Esquema de uso de WAsync Servicio Web REST (Laravel) Esquema de Rutas Simple Esquema de Rutas Agrupadas Esquema de Rutas de Propuestas Agrupadas Esquema de Controlador de Propuestas Aplicación Android Función de construcción del árbol de Programa Político Registrar Usuario en SwellRT Crear nueva Wave (Model) en SwellRT Abrir Pad colaborativo en SwellRT Bibliografía