Escola Tècnica Superior d’Enginyeria Informàtica Universitat Politècnica de València Análisis de información mediante la plataforma free open source de crowdsourcing PyBossa Trabajo Fin de Máster Máster Oficial Universitario en Gestión de la Información Autor: JORGE ISNARDO ALTAMIRANO Tutor: DIEGO ÁLVAREZ SÁNCHEZ [2013/2014] Análisis de información mediante la plataforma free open source de crowdsourcing PyBossa Jorge Isnardo Altamirano ii Análisis de información mediante la plataforma free open source de crowdsourcing PyBossa Agradecimientos En primer lugar, quiero das las gracias a mi tutor, Diego Álvarez Sánchez, por haberme dirigido en este proyecto fin de máster. En segundo lugar, quiero agradecer a mis padres, a mi novia y a mis amigos el apoyo que me han dado durante la realización del mismo. También quiero dar las gracias a David Pardo Gimilio miembro cofundador de analizo.info, a Daniel Lombraña González, desarrollador y líder principal de PyBossa y a Juan Cortés por su colaboración. Finalmente a todas las demás personas que, durante su curso, se han visto involucradas y por tanto han pasado a formar parte del proyecto de forma directa o indirecta. Jorge Isnardo Altamirano iii Análisis de información mediante la plataforma free open source de crowdsourcing PyBossa Jorge Isnardo Altamirano iv Análisis de información mediante la plataforma free open source de crowdsourcing PyBossa Resumen Cada día, en el mundo en que vivimos, grandes cantidades de información son generadas y almacenadas como resultado de todos los procesos informatizados de nuestra sociedad. Dentro del campo de la gestión de la información, el hecho de poseer grandes volúmenes de datos ociosos ha derivado en plantearse su análisis para tratar de sacarles nuevamente valor con independencia de cuál fuera su propósito inicial. Por ello, tanto la necesidad de infraestructuras técnicas como disponer o desarrollar herramientas software propietarias o de código abierto oportunas para su análisis, se han convertido en los instrumentos imprescindibles para posibilitar esta tarea propiciando el auge de las tecnologías de la información (TI). En este trabajo, particularmente, se presenta el procedimiento llevado a cabo para diseñar, desarrollar e implantar una solución de análisis de información basada en crowdsourcing mediante la plataforma free open source PyBossa como base para la comunidad online de analistas de información analizo.info. Por medio de la externalización del proceso de tratamiento de la información y gracias a la colaboración abierta y distribuida, adaptando y empleando herramientas software de código abierto, se pueden resolver proyectos de interés común social segmentando en tareas individuales su resolución a través de un llamamiento colectivo libre. Esto se hace posible mediante el desarrollo de proyectos de crowdsourcing capaces de gestionar y de tratar de forma eficiente la información que nos rodea en cualquiera de sus formas (texto, imágenes, audio, vídeo etc.), utilizando la herramienta PyBossa en analizo.info como solución de análisis de información en este caso particular. De esta forma, socializando el análisis de grandes volúmenes de información para extraer su valor, es el propio colectivo social interesado quien promueve y trabaja en proyectos de análisis de información a través de cualquier dispositivo conectado a Internet (ordenadores, tabletas, teléfonos inteligentes, etc.) Palabras clave: Tecnologías de la información (TI), análisis de información, crowdsourcing, PyBossa, analizo.info. Jorge Isnardo Altamirano v Análisis de información mediante la plataforma free open source de crowdsourcing PyBossa Jorge Isnardo Altamirano vi Análisis de información mediante la plataforma free open source de crowdsourcing PyBossa Abstract Every day, in the world we live in, large amounts of data are generated and stored as a result of all computerized processes of our society. Within the field of information management, the fact of having large volumes of idle data has resulted in consider their analysis to get them out a new value regardless of their original purpose. Therefore, the need of technical infrastructures and have or develop proprietary or open source software tools appropriate for analysis, have become the essential instruments to facilitate this task propitiating the emergence of information technology (IT). This work, particularly, presents the procedure carried out to design, develop and implement an information analysis solution based on crowdsourcing using the free open source platform PyBossa as the basis for the online community of intelligence analyst’s analizo.info. By outsourcing the process of information processing and through the open, distributed collaboration, adapting and using open source software tools, is possible to solve social projects of common interest segmenting their resolution into individual tasks through a free collective call. This is possible through the development of crowdsourcing projects capable of managing and efficiently treat the information that surrounds us in any form (text, images, audio, video etc.), using the PyBossa tool on analizo.info as information analysis solution in this particular case. By this way, socializing the analysis of large volumes of data to extract their value is the interested social group itself who promotes and works in information analysis projects through any device connected to the Internet (computers, tablet pc, smartphones, etc.) Keywords: Information Technology (IT), information analysis, crowdsourcing, PyBossa, analizo.info. Jorge Isnardo Altamirano vii Análisis de información mediante la plataforma free open source de crowdsourcing PyBossa Jorge Isnardo Altamirano viii Análisis de información mediante la plataforma free open source de crowdsourcing PyBossa ÍNDICE GENERAL 1. Introducción ........................................................................................................................ 21 1.1 Justificación ..................................................................................................................... 24 1.2 Objetivos ......................................................................................................................... 25 1.3 Metodología .................................................................................................................... 26 1.4 Tecnologías empleadas ................................................................................................... 28 1.5 Estructura ........................................................................................................................ 30 2. La comunidad online de analistas de información analizo.info .......................................... 31 2.1 Estructura organizativa ................................................................................................... 32 2.2 Recursos técnicos ............................................................................................................ 33 2.3 Gestión de procesos de análisis de información ............................................................. 36 2.4 Características de la nueva plataforma ........................................................................... 38 2.5 PyBossa como solución de análisis de información open source.................................... 39 3. Revisión de plataformas crowdsourcing basadas en microtareas ...................................... 41 3.1 El concepto de crowdsourcing ........................................................................................ 41 3.2 Tipos de crowdsourcing................................................................................................... 44 3.3 Exploración de plataformas realizada y resultados ........................................................ 46 4. Adaptación de analizo.info al entorno PyBossa .................................................................. 57 4.1 Instalación local y configuración específica de PyBossa ................................................. 57 4.2 Contratación de un servidor privado virtual ................................................................... 63 4.3 Migración de usuarios de analizo.info al nuevo entorno ................................................ 64 4.4 Creación del subdominio proyectos.analizo.info ............................................................ 64 4.5 Personalización de PyBossa ............................................................................................ 65 4.6 Mejoras generales introducidas ...................................................................................... 68 5. Pautas para la implementación de aplicaciones de análisis de información ...................... 73 5.1 Consideraciones para la creación de aplicaciones .......................................................... 73 5.2 Desarrollo de una aplicación prototipo........................................................................... 80 6. Proyectos reales de análisis de información implementados ............................................. 91 6.1 Análisis de programas electorales................................................................................... 91 6.2 Análisis de noticias ........................................................................................................ 106 6.3 Análisis de ortofotos ..................................................................................................... 122 7. Resultados y discusión ...................................................................................................... 141 8. Conclusiones y trabajo futuro ........................................................................................... 143 Jorge Isnardo Altamirano ix Análisis de información mediante la plataforma free open source de crowdsourcing PyBossa 9. Anexos ............................................................................................................................... 147 9.1 Anexo I: Aspectos generales ......................................................................................... 147 9.1.1 Acceso a un servidor a través de SSH ........................................................................ 147 9.1.2 Instalación de Ubuntu Server 12.04.3 LTS x64 en Oracle VM VirtualBox ................. 149 9.1.3 Acceso desde el ordenador host al servidor Ubuntu en Oracle VM VirtualBox ....... 171 9.1.4 Instalación del servidor de correo Postfix compatible con Ubuntu Server .............. 173 9.1.5 Saltos de línea de un archivo en diferentes sistemas operativos ............................. 178 9.1.6 Redirección de un registro A (IP) a un nombre de dominio (Empresa 1&1) ............. 179 9.1.7 Comandos PostgreSQL de interés en Linux ............................................................... 182 9.1.8 Restaurar una base de datos PostgreSQL en Linux ................................................... 183 9.1.9 Comandos básicos del editor vim ............................................................................. 184 9.2 Anexo II: PyBossa .......................................................................................................... 185 9.2.1 Instalación de un servidor PyBossa (v0.2.1 - v0.23) .................................................. 185 9.2.2 Desplegar PyBossa mediante el servidor Web Apache y mod_wsgi......................... 193 9.2.3 Configurar una página Web para el modo mantenimiento del servidor PyBossa .... 196 9.2.4 Actualizar a nuevas versiones de PyBossa ................................................................ 197 9.2.5 Gestión de las traducciones en PyBossa ................................................................... 198 9.2.6 Administración de PyBossa ....................................................................................... 199 9.3 Anexo III: La instancia PyBossa en proyectos.analizo.info ............................................ 213 9.3.1 Script pyadmin para la administración del servidor PyBossa de analizo.info ........... 213 9.3.2 Visión general del servidor PyBossa de analizo.info ................................................. 215 9.3.3 Creación de una copia de seguridad del servidor PyBossa de analizo.info .............. 216 9.3.4 Migrador de usuarios de analizo.info a PyBossa ....................................................... 217 9.3.5 Generar listado de correos de los miembros de la comunidad de analizo.info ....... 220 9.3.6 Configuración de la CDN CloudFlare con el dominio analizo.info ............................. 222 9.3.7 Purgar la cache de CloudFlare ................................................................................... 226 9.3.8 Optimización de recursos en el servidor Web Apache ............................................. 228 9.3.9 Script para la personalización del servidor PyBossa de analizo.info ......................... 230 9.3.10 Menú de información para los proyectos de análisis de información ...................... 234 9.3.11 Conjunto de scripts pyanalizo para la gestión de información en analizo.info ........ 235 9.3.12 Integración de Google Analytics y motor de búsqueda personalizada de Google ... 243 9.4 Anexo IV: Reconocimiento en los medios ..................................................................... 244 9.5 Anexo V: Jornada de información, datos y empoderamiento ciudadano..................... 256 10. Bibliografía .................................................................................................................... 257 Jorge Isnardo Altamirano x Análisis de información mediante la plataforma free open source de crowdsourcing PyBossa ÍNDICE DE TABLAS Tabla 1. Clasificaciones de crowdsourcing basadas en tareas. Estellés y González (2012). ....... 44 Tabla 2. Tipologías de crowdsourcing. Pérez y Jiménez (2013). ................................................. 45 Tabla 3. Exploración de plataformas crowdsourcing. ................................................................. 47 Tabla 4. Aplicación de criterios de selección en plataformas crowdsourcing candidatas. ......... 48 Tabla 5. Plataformas crowdsourcing definitivas a analizar. ........................................................ 48 Tabla 6. Ficha plataforma MTURK. .............................................................................................. 49 Tabla 7. Ficha plataforma REPARACIUDAD. ................................................................................ 50 Tabla 8. Ficha plataforma INNOCENTIVE. ................................................................................... 51 Tabla 9. Ficha plataforma ARTICLEONEPARTNERS...................................................................... 52 Tabla 10. Ficha plataforma CHANGE.ORG................................................................................... 53 Tabla 11. Ficha plataforma TOPCODER. ...................................................................................... 54 Tabla 12. Consideraciones migrador MySQL PostgreSQL analizo.info. .................................... 219 Jorge Isnardo Altamirano xi Análisis de información mediante la plataforma free open source de crowdsourcing PyBossa Jorge Isnardo Altamirano xii Análisis de información mediante la plataforma free open source de crowdsourcing PyBossa ÍNDICE DE FIGURAS Figura 1. analizo.info. Infografía.................................................................................................. 32 Figura 2. analizo.info. Recursos técnicos. ................................................................................... 33 Figura 3. analizo.info. Página de inicio. ....................................................................................... 34 Figura 4. analizo.info. Sección “Noticias” en el back-end. .......................................................... 34 Figura 5. analizo.info. Panel de análisis de un proyecto. ............................................................ 35 Figura 6. analizo.info. Gestión de procesos de análisis de información. .................................... 36 Figura 7. Secciones aplicaciones proyectos de análisis de información. .................................... 38 Figura 8. Comunidad PyBossa analizo.info instalación local. ...................................................... 60 Figura 9. Fallo comunidad PyBossa analizo.info instalación local............................................... 60 Figura 10. Instalación finalizada PyBossa. ................................................................................... 62 Figura 11. Mensaje denegación acceso PyBossa (1). .................................................................. 66 Figura 12. Mensaje denegación acceso PyBossa (2). .................................................................. 66 Figura 13. Menú PyBossa original (superior) y menú adaptado analizo.info (inferior). ............. 66 Figura 14. Botón crear cuenta. .................................................................................................... 66 Figura 15. Clave API en el perfil de usuario administrador. ........................................................ 67 Figura 16. Funcionalidades disponibles según perfil / rol. .......................................................... 67 Figura 17. CloudFlare. ................................................................................................................. 68 Figura 18. Estructura por niveles de analizo.info. ....................................................................... 70 Figura 19. Esquema directorios aplicaciones. ............................................................................. 79 Figura 20. Análisis de tuits. Esquema de preguntas. ................................................................... 80 Figura 21. Análisis de tuits. Proyecto. ......................................................................................... 81 Figura 22. Análisis de tuits. Partes de la aplicación..................................................................... 82 Figura 23. Análisis de tuits. Mensajes de la aplicación. .............................................................. 82 Figura 24. Análisis de tuits. Parte izquierda de la aplicación. ..................................................... 82 Figura 25. Análisis de tuits. Parte derecha de la aplicación. ....................................................... 83 Figura 26. Análisis de tuits. Confirmación respuesta. ................................................................. 83 Figura 27. Análisis de tuits. Plantilla tareas. ................................................................................ 84 Figura 28. Análisis de tuits. Alta de aplicación. ........................................................................... 85 Figura 29. Análisis de tuits. Importar tareas. .............................................................................. 86 Figura 30. Análisis de tuits. Compartir hoja de cálculo (1). ......................................................... 86 Figura 31. Análisis de tuits. Compartir hoja de cálculo (2). ......................................................... 86 Figura 32. Análisis de tuits. Compartir hoja de cálculo (3). ......................................................... 86 Jorge Isnardo Altamirano xiii Análisis de información mediante la plataforma free open source de crowdsourcing PyBossa Figura 33. Análisis de tuits. Objeto task. ..................................................................................... 88 Figura 34. Análisis de tuits. Error 400 Bad Request (1). .............................................................. 89 Figura 35. Análisis de tuits. Error 400 Bad Request (2). .............................................................. 89 Figura 36. Logo ACPE. .................................................................................................................. 91 Figura 37. Análisis de programas electorales. Proyectos. ........................................................... 93 Figura 38. Análisis de programas electorales. Partes de la aplicación. ....................................... 94 Figura 39. Análisis de programas electorales. Mensajes de la aplicación................................... 94 Figura 40. Análisis de programas electorales. Parte izquierda de la aplicación. ........................ 95 Figura 41. Análisis de programas electorales. Parte derecha de la aplicación. .......................... 96 Figura 42. Análisis de programas electorales. Plantilla tareas. ................................................... 98 Figura 43. Análisis de programas electorales. Estructura de directorios. ................................... 99 Figura 44. Análisis de programas electorales. Función pybosssa.taskLoaded. ......................... 102 Figura 45. Análisis de programas electorales. Objeto task. ...................................................... 103 Figura 46. Logo OCMC. .............................................................................................................. 106 Figura 47. Análisis de noticias. Proyectos. ................................................................................ 108 Figura 48. Análisis de noticias. Partes de la aplicación. ............................................................ 109 Figura 49. Análisis de noticias. Mensajes de la aplicación. ....................................................... 109 Figura 50. Análisis de noticias. Parte izquierda de la aplicación. .............................................. 110 Figura 51. Análisis de noticias. Parte derecha de la aplicación. ................................................ 111 Figura 52. Análisis de noticias. Plantilla tareas. ........................................................................ 113 Figura 53. Análisis de noticias. Estructura de directorios. ........................................................ 114 Figura 54. jQuery UI v1.9.2. ....................................................................................................... 116 Figura 55. Análisis de noticias. Objeto task. .............................................................................. 118 Figura 56. Análisis de noticias. Noticia con imagen. ................................................................. 119 Figura 57. Análisis de noticias. Notica con vídeo. ..................................................................... 119 Figura 58. Aplicación para gestionar los resultados de análisis de noticias - XiP multimedia. . 121 Figura 59. Logo Per l’Horta. ....................................................................................................... 122 Figura 60. Análisis de ortofotos. Proyectos............................................................................... 124 Figura 61. Análisis de ortofotos. Partes de la aplicación........................................................... 124 Figura 62. Análisis de ortofotos. Mensajes de la aplicación. .................................................... 124 Figura 63. Análisis de ortofotos. Parte izquierda de la aplicación. ........................................... 125 Figura 64. Análisis de ortofotos. Selector de capas. ................................................................. 125 Figura 65. Análisis de ortofotos. Parte derecha de la aplicación. ............................................. 126 Figura 66. Análisis de ortofotos. Archivo dbf. ........................................................................... 129 Jorge Isnardo Altamirano xiv Análisis de información mediante la plataforma free open source de crowdsourcing PyBossa Figura 67. Análisis de ortofotos. Plantilla tareas. ...................................................................... 129 Figura 68. OpenLayers (ol). v2.13.1........................................................................................... 130 Figura 69. Análisis de ortofotos. Tesela. ................................................................................... 131 Figura 70. Análisis de ortofotos. Código fuente de la imagen de la tesela (1). ......................... 132 Figura 71. Análisis de ortofotos. Código fuente de la imagen de la tesela (2). ......................... 132 Figura 72. Análisis de ortofotos. Detalle del código fuente de la imagen de la tesela (1). ....... 132 Figura 73. Análisis de ortofotos. Detalle del código fuente de la imagen de la tesela (2). ....... 133 Figura 74. Análisis de ortofotos. Tesela de ejemplo. ................................................................ 133 Figura 75. Análisis de ortofotos. Terrasit Web Map Service (WMS). ........................................ 134 Figura 76. Análisis de ortofotos. Per L'Horta Web Map Service (WMS). .................................. 135 Figura 77. Análisis de ortofotos. Terrasit Web Map Service (WMS). ........................................ 135 Figura 78. Análisis de ortofotos. Ortofoto resultado. ............................................................... 136 Figura 79. Análisis de ortofotos. Objeto task. ........................................................................... 137 Figura 80. Análisis de ortofotos. Ejemplo (1). ........................................................................... 139 Figura 81. Análisis de ortofotos. Ejemplo (2). ........................................................................... 139 Figura 82. Análisis de ortofotos. Resultado ESRI Shapefile (equivalente a GeoJSON). ............. 140 Figura 83. Análisis de ortofotos. Resultado GeoJSON (equivalente a ESRI Shapefile). ............. 140 Figura 84. PuTTY Free Telnet SSH Client (1). ............................................................................. 147 Figura 85. PuTTY Free Telnet SSH Client (2). ............................................................................. 147 Figura 86. PuTTY Free Telnet SSH Client (3). ............................................................................. 148 Figura 87. PuTTY Free Telnet SSH Client (4). ............................................................................. 148 Figura 88. PuTTY Free Telnet SSH Client (5). ............................................................................. 148 Figura 89. Instalación Ubuntu Server VirtualBox (1). ................................................................ 149 Figura 90. Instalación Ubuntu Server VirtualBox (2). ................................................................ 149 Figura 91. Instalación Ubuntu Server VirtualBox (3). ................................................................ 150 Figura 92. Instalación Ubuntu Server VirtualBox (4). ................................................................ 150 Figura 93. Instalación Ubuntu Server VirtualBox (5). ................................................................ 151 Figura 94. Instalación Ubuntu Server VirtualBox (6). ................................................................ 151 Figura 95. Instalación Ubuntu Server VirtualBox (7). ................................................................ 152 Figura 96. Instalación Ubuntu Server VirtualBox (8). ................................................................ 152 Figura 97. Instalación Ubuntu Server VirtualBox (9). ................................................................ 152 Figura 98. Instalación Ubuntu Server VirtualBox (10). .............................................................. 153 Figura 99. Instalación Ubuntu Server VirtualBox (11). .............................................................. 153 Figura 100. Instalación Ubuntu Server VirtualBox (12). ............................................................ 154 Jorge Isnardo Altamirano xv Análisis de información mediante la plataforma free open source de crowdsourcing PyBossa Figura 101. Instalación Ubuntu Server VirtualBox (13). ............................................................ 154 Figura 102. Instalación Ubuntu Server VirtualBox (14). ............................................................ 155 Figura 103. Instalación Ubuntu Server VirtualBox (15). ............................................................ 155 Figura 104. Instalación Ubuntu Server VirtualBox (16). ............................................................ 156 Figura 105. Instalación Ubuntu Server VirtualBox (17). ............................................................ 156 Figura 106. Instalación Ubuntu Server VirtualBox (18). ............................................................ 156 Figura 107. Instalación Ubuntu Server VirtualBox (19). ............................................................ 157 Figura 108. Instalación Ubuntu Server VirtualBox (20). ............................................................ 157 Figura 109. Instalación Ubuntu Server VirtualBox (21). ............................................................ 158 Figura 110. Instalación Ubuntu Server VirtualBox (22). ............................................................ 158 Figura 111. Instalación Ubuntu Server VirtualBox (23). ............................................................ 159 Figura 112. Instalación Ubuntu Server VirtualBox (24). ............................................................ 159 Figura 113. Instalación Ubuntu Server VirtualBox (25). ............................................................ 160 Figura 114. Instalación Ubuntu Server VirtualBox (26). ............................................................ 160 Figura 115. Instalación Ubuntu Server VirtualBox (27). ............................................................ 161 Figura 116. Instalación Ubuntu Server VirtualBox (28). ............................................................ 161 Figura 117. Instalación Ubuntu Server VirtualBox (29). ............................................................ 162 Figura 118. Instalación Ubuntu Server VirtualBox (30). ............................................................ 162 Figura 119. Instalación Ubuntu Server VirtualBox (31). ............................................................ 163 Figura 120. Instalación Ubuntu Server VirtualBox (32). ............................................................ 163 Figura 121. Instalación Ubuntu Server VirtualBox (33). ............................................................ 164 Figura 122. Instalación Ubuntu Server VirtualBox (34). ............................................................ 164 Figura 123. Instalación Ubuntu Server VirtualBox (35). ............................................................ 165 Figura 124. Instalación Ubuntu Server VirtualBox (36). ............................................................ 165 Figura 125. Instalación Ubuntu Server VirtualBox (37). ............................................................ 166 Figura 126. Instalación Ubuntu Server VirtualBox (38). ............................................................ 166 Figura 127. Instalación Ubuntu Server VirtualBox (39). ............................................................ 167 Figura 128. Instalación Ubuntu Server VirtualBox (40). ............................................................ 167 Figura 129. Instalación Ubuntu Server VirtualBox (41). ............................................................ 168 Figura 130. Instalación Ubuntu Server VirtualBox (42). ............................................................ 168 Figura 131. Instalación Ubuntu Server VirtualBox (43). ............................................................ 169 Figura 132. Instalación Ubuntu Server VirtualBox (44). ............................................................ 169 Figura 133. Instalación Ubuntu Server VirtualBox (45). ............................................................ 169 Figura 134. Instalación Ubuntu Server VirtualBox (46). ............................................................ 170 Jorge Isnardo Altamirano xvi Análisis de información mediante la plataforma free open source de crowdsourcing PyBossa Figura 135. Acceso host Oracle VM VirtualBox (1). .................................................................. 171 Figura 136. Acceso host Oracle VM VirtualBox (2). .................................................................. 171 Figura 137. Acceso host Oracle VM VirtualBox (3). .................................................................. 171 Figura 138. Acceso host Oracle VM VirtualBox (4). .................................................................. 172 Figura 139. Acceso host Oracle VM VirtualBox (5). .................................................................. 172 Figura 140. Instalación Postfix (1). ............................................................................................ 173 Figura 141. Instalación Postfix (2). ............................................................................................ 173 Figura 142. Instalación Postfix (3). ............................................................................................ 174 Figura 143. Instalación Postfix (4). ............................................................................................ 174 Figura 144. Instalación Postfix (5). ............................................................................................ 174 Figura 145. Instalación Postfix (6). ............................................................................................ 175 Figura 146. Instalación Postfix (7). ............................................................................................ 175 Figura 147. Instalación Postfix (8). ............................................................................................ 175 Figura 148. Instalación Postfix (9). ............................................................................................ 176 Figura 149. Instalación Postfix (10). .......................................................................................... 176 Figura 150. Instalación Postfix (11). .......................................................................................... 176 Figura 151. Instalación Postfix (12). .......................................................................................... 177 Figura 152. Conversión saltos de línea Windows...................................................................... 178 Figura 153. Conversión saltos de línea Unix. ............................................................................ 178 Figura 154. Conversión saltos de línea MAC. ............................................................................ 178 Figura 155. Redirección registro A (IP) a nombre de dominio (1&1) (1). ................................. 179 Figura 156. Redirección registro A (IP) a nombre de dominio (1&1) (2). ................................. 179 Figura 157. Redirección registro A (IP) a nombre de dominio (1&1) (3). ................................. 179 Figura 158. Redirección registro A (IP) a nombre de dominio (1&1) (4). ................................. 180 Figura 159. Redirección registro A (IP) a nombre de dominio (1&1) (5). ................................. 180 Figura 160. Redirección registro A (IP) a nombre de dominio (1&1) (6). ................................. 180 Figura 161. Redirección registro A (IP) a nombre de dominio (1&1) (7). ................................. 181 Figura 162. Poedit. .................................................................................................................... 198 Figura 163. Administración de PyBossa (1). .............................................................................. 199 Figura 164. Administración de PyBossa (2). .............................................................................. 200 Figura 165. Administración de PyBossa (3). .............................................................................. 200 Figura 166. Administración de PyBossa (4). .............................................................................. 201 Figura 167. Administración de PyBossa (5). .............................................................................. 201 Figura 168. Administración de PyBossa (6). .............................................................................. 202 Jorge Isnardo Altamirano xvii Análisis de información mediante la plataforma free open source de crowdsourcing PyBossa Figura 169. Administración de PyBossa (7). .............................................................................. 202 Figura 170. Administración de PyBossa (8). .............................................................................. 203 Figura 171. Administración de PyBossa (9). .............................................................................. 204 Figura 172. Administración de PyBossa (10). ............................................................................ 204 Figura 173. Administración de PyBossa (11). ............................................................................ 204 Figura 174. Administración de PyBossa (12). ............................................................................ 205 Figura 175. Administración de PyBossa (13). ............................................................................ 205 Figura 176. Administración de PyBossa (14). ............................................................................ 206 Figura 177. Administración de PyBossa (15). ............................................................................ 206 Figura 178. Administración de PyBossa (16). ............................................................................ 207 Figura 179. Administración de PyBossa (17). ............................................................................ 207 Figura 180. Administración de PyBossa (18). ............................................................................ 208 Figura 181. Administración de PyBossa (19). ............................................................................ 208 Figura 182. Administración de PyBossa (20). ............................................................................ 209 Figura 183. Administración de PyBossa (21). ............................................................................ 209 Figura 184. Administración de PyBossa (22). ............................................................................ 209 Figura 185. Administración de PyBossa (23). ............................................................................ 210 Figura 186. Administración de PyBossa (24). ............................................................................ 210 Figura 187. Administración de PyBossa (25). ............................................................................ 211 Figura 188. Administración de PyBossa (26). ............................................................................ 211 Figura 189. Administración de PyBossa (27). ............................................................................ 212 Figura 190. Administración de PyBossa (28). ............................................................................ 212 Figura 191. Visión general servidor PyBossa analizo.info. ........................................................ 215 Figura 192. Migrador MySQL PostgreSQL analizo.info (1). ....................................................... 217 Figura 193. CDN CloudFlare analizo.info (1). ............................................................................ 222 Figura 194. CDN CloudFlare analizo.info (2). ............................................................................ 222 Figura 195. CDN CloudFlare analizo.info (3). ............................................................................ 223 Figura 196. CDN CloudFlare analizo.info (4). ............................................................................ 223 Figura 197. CDN CloudFlare analizo.info (5). ............................................................................ 224 Figura 198. CDN CloudFlare analizo.info (6). ............................................................................ 224 Figura 199. CDN CloudFlare analizo.info (7). ............................................................................ 224 Figura 200. CDN CloudFlare analizo.info (8). ............................................................................ 224 Figura 201. CDN CloudFlare analizo.info (9). ............................................................................ 225 Figura 202. Purgar cache CloudFlare (1). .................................................................................. 226 Jorge Isnardo Altamirano xviii Análisis de información mediante la plataforma free open source de crowdsourcing PyBossa Figura 203. Purgar cache CloudFlare (2). .................................................................................. 226 Figura 204. Purgar cache CloudFlare (3). .................................................................................. 226 Figura 205. Purgar cache CloudFlare (4). .................................................................................. 226 Figura 206. Purgar cache CloudFlare (5). .................................................................................. 227 Figura 207. Purgar cache CloudFlare (6). .................................................................................. 227 Figura 208. Optimización Apache (1). ....................................................................................... 229 Figura 209. Optimización Apache (2). ....................................................................................... 229 Figura 210. Optimización Apache (3). ....................................................................................... 229 Figura 211. Personalización del servidor PyBossa (1). .............................................................. 230 Figura 212. Personalización del servidor PyBossa (2). .............................................................. 230 Figura 213. Personalización del servidor PyBossa (3). .............................................................. 230 Figura 214. Personalización del servidor PyBossa (4). .............................................................. 231 Figura 215. Personalización del servidor PyBossa (5). .............................................................. 231 Figura 216. Personalización del servidor PyBossa (6). .............................................................. 231 Figura 217. Personalización del servidor PyBossa (7). .............................................................. 232 Figura 218. Personalización del servidor PyBossa (8). .............................................................. 232 Figura 219. Personalización del servidor PyBossa (9). .............................................................. 233 Figura 220. Personalización del servidor PyBossa (10). ............................................................ 233 Figura 221. Personalización del servidor PyBossa (11). ............................................................ 233 Figura 222. Personalización del servidor PyBossa (12). ............................................................ 233 Figura 223. Menú información proyectos (1). .......................................................................... 234 Figura 224. Menú información proyectos (2). .......................................................................... 234 Figura 225. Menú información proyectos (3). .......................................................................... 234 Figura 226. pyanalizo (1). .......................................................................................................... 235 Figura 227. pyanalizo (2). .......................................................................................................... 235 Figura 228. pyanalizo (3). .......................................................................................................... 235 Figura 229. pyanalizo (4). .......................................................................................................... 236 Figura 230. pyanalizo (5). .......................................................................................................... 236 Figura 231. pyanalizo (6). .......................................................................................................... 236 Figura 232. pyanalizo (7). .......................................................................................................... 239 Figura 233. pyanalizo (8). .......................................................................................................... 241 Figura 234. get_tile_list.py (1)................................................................................................... 242 Figura 235. get_tile_list.py (2)................................................................................................... 242 Figura 236. get_tile_list.py (3)................................................................................................... 242 Jorge Isnardo Altamirano xix Análisis de información mediante la plataforma free open source de crowdsourcing PyBossa Figura 237. Motor de búsqueda personalizada de Google. ..................................................... 243 Figura 238. Noticia publicada en el portal Web Nonada (1). .................................................... 244 Figura 239. Noticia publicada en el portal Web Nonada (2). .................................................... 245 Figura 240. Noticia publicada en el portal Web Nonada (3). .................................................... 245 Figura 241. Noticia publicada en el portal Web Nonada (4). .................................................... 246 Figura 242. Noticia aplicación Per L’Horta publicada en el periódico ABC. .............................. 247 Figura 243. Noticia aplicación Per L’Horta publicada en el periódico Levante. ........................ 248 Figura 244. Noticia aplicación Per L’Horta publicada en el periódico Las Provincias. .............. 249 Figura 245. Noticia aplicación Per L’Horta publicada en el periódico digital La Veu (1)........... 250 Figura 246. Noticia aplicación Per L’Horta publicada en el periódico digital La Veu (2)........... 251 Figura 247. Noticia aplicación Per l'Horta publicada en el periódico La Vanguardia................ 252 Figura 248. Noticia Levante TV del 13 de mayo de 2014 - ACPE/analizo.info. ......................... 253 Figura 249. Noticia La Sexta Noticias del 14 de abril de 2014 - ACPE/analizo.info. .................. 254 Figura 250. Noticia Levante TV del 3 de junio de 2014 - Per L’Horta/analizo.info. .................. 255 Figura 251. Desarrollo de aplicaciones para análisis de datos en PyBossa/analizo.info. ......... 256 Jorge Isnardo Altamirano xx Capítulo 1 Introducción 1. Introducción El mundo en el que vivimos cada vez más se encuentra ligado a la tecnología1 dado que sin ella sería prácticamente imposible gestionar el gran volumen de información que se genera, mueve y almacena cada día2. Big Data3 es el término con el que se acuña a esta vorágine de datos que superan la capacidad del software habitual para ser capturados, gestionados, procesados y analizados en un tiempo razonable4. Dentro del campo de la gestión de la información, el hecho de que particularmente empresas e instituciones públicas posean grandes volúmenes de datos ociosos, ha propiciado que se planteen tratar de sacarles nuevamente valor5 con independencia de cuál fuera su propósito inicial. Esta situación ha planteado multitud de nuevos paradigmas sobre cómo es posible afrontar el reto de buscar formas que permitan extraer beneficio de toda esa información almacenada, justificando pues la necesidad de nuevas infraestructuras y aplicaciones software en el ámbito de las tecnologías de la información (TI)6. Así pues, el análisis de la información se convierte en el punto de partida para decidir que se podría hacer con ella, es decir, cómo sería posible aprovechar su valor para favorecer la toma de decisiones tal y como recogen los términos del inglés, Business Analytics7 y Business Intelligence8 desde diferentes perspectivas. Ambos términos hacen hincapié en el uso de tecnologías, aplicaciones y prácticas orientando el análisis de información hacia la toma de decisiones para impulsar la planificación empresarial, pero, mientras que Business Analytics afronta el análisis desde un punto de vista cuantitativo empleando modelos explicativos y predictivos basados en hechos para impulsar la toma de decisiones, Business Intelligence se centra 1 Los Trabajos Del Futuro: El Mundo Cada Vez Más Tecnológico [en línea]. (16 de mayo de 2014). Disponible en: http://codigonuevo.com/los-trabajos-del-futuro-el-mundo-cada-vez-mas-tecnologico/ [Consulta: 22 de mayo de 2014]. 2 El volumen de información digital alcanzará los 35,2 Zettabytes en 2020 [en línea]. (19 de junio de 2014). Disponible en: http://www.siliconweek.es/noticias/el-volumen-de-informacion-digital-alcanzaralos-352-zettabytes-en-2020-38677 [Consulta: 22 de mayo de 2014]. 3 Big data - Wikipedia, la enciclopedia libre [en línea]. (9 de junio de 2014). Disponible en: http://es.wikipedia.org/wiki/Big_data [Consulta: 11 de junio de 2014]. 4 Jano. El procesamiento de datos en el CERN (Video) [en línea]. (n.d.). Disponible en: http://www.fayerwayer.com/2013/04/el-procesamiento-de-datos-en-el-cern-video/ [Consulta: 22 de mayo de 2014]. 5 Datos Abiertos - Sede electrónica del Ministerio [en línea]. (n.d.). Disponible en: https://sede.minetur.gob.es/es-es/datosabiertos/Paginas/index.aspx [Consulta: 11 de junio de 2014]. 6 Las Tecnologías de Información (TI) se entienden como aquellas herramientas y métodos empleados para recabar, retener, manipular o distribuir información. Se encuentran generalmente asociadas con las computadoras y las tecnologías afines aplicadas a la toma de decisiones (Bologna y Walsh, 1997). 7 Business analytics - Wikipedia, the free encyclopedia [en línea]. (9 de junio de 2014). Disponible en: http://en.wikipedia.org/wiki/Business_analytics [Consulta: 11 de junio de 2014]. 8 Business intelligence - Wikipedia, the free encyclopedia [en línea]. (21 de mayo de 2014). Disponible en: http://en.wikipedia.org/wiki/Business_intelligence [Consulta: 11 de junio de 2014]. 21 Capítulo 1 Introducción en un análisis de tipo cualitativo, tratando de visualizar grandes cantidades no estructuradas de datos para alcanzar el mismo propósito. Generalizando, el análisis de información principalmente se puede realizar de forma automatizada o manual. En el área del análisis de información automatizada, se encontrarían los sistemas capaces de procesar sin intervención alguna grandes volúmenes de datos con una finalidad concreta, dependiendo del propósito y complejidad de las tareas a realizar valiéndose únicamente de la programación de los mismos. En este caso, por ejemplo, convendría destacar el aprendizaje automatizado, en inglés machine learning9, como técnica y herramienta novedosa para analizar información de forma autónoma. Respecto al análisis manual de la información, una de sus principales motivaciones reside en que puede hacer frente a tareas que, dada su complejidad, precisen de la cognición humana para poder realizarse tales como la transcripción de documentos antiguos o la identificación de patrones en fotografías. En este ámbito en el que intervendrían tanto personas como herramientas software, una forma de posibilitar realizar las tareas de análisis de información pertinentes sería mediante crowdsourcing10. El término crowdsourcing proviene del inglés crowd (multitud) y outsourcing (externalización). Este se puede definir como colaboración abierta distribuida mediante la externalización de tareas que, tradicionalmente, realizaba un empleado o contratista, a un grupo numeroso de personas o una comunidad, a través de una convocatoria abierta. Jeff Howe11, fue uno de los primeros autores en emplear el término, estableció que el concepto de crowdsourcing depende esencialmente del hecho de que, debido a que es una convocatoria abierta a un grupo indeterminado de personas, reúne a los más aptos para ejercer las tareas, para responder ante problemas complejos y contribuir aportando las ideas más frescas y relevantes. La popularidad del crowdsourcing ha aumentado especialmente entre las empresas, autores y periodistas siendo conocida como la tendencia que suscita y trata de impulsar la colaboración en masa posibilitada por las tecnologías Web 2.0 para lograr objetivos de negocio. 9 Aprendizaje automático - Wikipedia, la enciclopedia libre [en línea]. (23 de abril de 2014). Disponible en: http://es.wikipedia.org/wiki/Aprendizaje_autom%C3%A1tico [Consulta: 22 de mayo de 2014]. 10 Crowdsourcing - Wikipedia, la enciclopedia libre [en línea]. (4 de abril de 2014). Disponible en: http://es.wikipedia.org/wiki/Crowdsourcing [Consulta: 7 de abril de 2014]. 11 Howe, J. Crowdsourcing - Wikipedia, la enciclopedia libre [en línea]. (3 de junio de 2014). Disponible en: http://es.wikipedia.org/wiki/Crowdsourcing#Historia [Consulta: 11 de junio de 2014]. 22 Capítulo 1 Introducción Otros autores tales como Daren Brabham12 han dado su versión particular de la definición. Este afirma que el crowdsourcing es un modelo estratégico para atraer una multitud interesada y motivada de individuos capaz de proporcionar soluciones superiores en calidad y cantidad a aquellas que pueden proporcionar formas de negocio tradicionales. Generalmente, siempre se trata de aplicaciones o servicios informáticos que permiten a sus usuarios participar en proyectos que hacen uso del potencial de las nuevas tecnologías de la información para ser resueltas de una forma más rápida y eficiente dada su complejidad. Por ello, cada vez es más común encontrarse noticias con titulares tales como “Decenas de miles de voluntarios clasifican 300.000 galaxias”13, “Manifestantes sudaneses usan el crowdmapping para organizarse y evitar la censura” 14, “El 4º Poder en Red - Crowdcrafting al servicio del periodismo”15 o “Miles de ojos buscan el avión desaparecido de Malaysian Airlines” 16. Finalmente, en este aspecto caracterizado por la realización de un análisis efectuado por personas, resulta imposible no pensar el uso de esas herramientas para procesar los datos. De igual forma que los algoritmos, estas deben de ser implementadas para posibilitar analizar los diferentes tipos de información que nos rodean (texto, audio, vídeo etc.) en sus diferentes formatos (PDF, JSON, DOCX etc.). Así pues, es interesante destacar la contribución que hace el mundo del software libre en esta labor, posibilitando herramientas de código abierto, en inglés, open source17 al alcance de todos, para poder llevar a cabo el análisis de información deseado, y, a la vez impulsar el desarrollo y particularización de las mismas de forma totalmente libre y desinteresada. A lo largo del desarrollo de este trabajo, se plasman todos estos conceptos de forma práctica dentro de la comunidad online analizo.info, adaptando y empleando PyBossa como herramienta open source base de análisis de información para sus analistas. 12 Brabham, D. Crowdsourcing - Wikipedia, la enciclopedia libre [en línea]. (3 de junio de 2014). Disponible en: http://es.wikipedia.org/wiki/Crowdsourcing#El_problema_de_la_definici.C3.B3n [Consulta: 11 de junio de 2014]. 13 Decenas de miles de voluntarios clasifican 300.000 galaxias [en línea]. (24 de septiembre de 2013). Disponible en: http://www.tendencias21.net/Decenas-de-miles-de-voluntarios-clasifican-300-000galaxias_a24364.html [Consulta: 24 de septiembre de 2013]. 14 Andrade, J. Manifestantes sudaneses usan el "crowdmapping" para organizarse y evitar la censura [en línea]. (28 de septiembre de 2013). Disponible en: http://es.engadget.com/2013/09/28/sudanprotestas-crowdmapping/ [Consulta: 29 de septiembre de 2013]. 15 Lombraña, G. D. (teleyinex). El 4º Poder en Red » ‘Crowdcrafting’ al servicio del periodismo [en línea]. (10 de febrero de 2014). Disponible en: http://blogs.publico.es/el-cuarto-poder-enred/2014/02/10/crowdcrafting-al-servicio-del-periodismo/ [Consulta: 17 de febrero de 2014]. 16 Miles de ojos buscan el avión desaparecido de Malaysian Airlines - RTVE.es [en línea]. (12 de marzo de 2014). Disponible en: http://www.rtve.es/noticias/20140312/miles-ojos-buscan-avion-desaparecidomalaysian-airlines/894540.shtml [Consulta: 6 de mayo de 2014]. 17 Código abierto - Wikipedia, la enciclopedia libre [en línea]. (10 de mayo de 2014). Disponible en: http://es.wikipedia.org/wiki/C%C3%B3digo_abierto [Consulta: 22 de mayo de 2014]. 23 Capítulo 1 Introducción 1.1 Justificación La justificación para la realización del presente trabajo se argumenta básicamente desde los puntos de vista académico y profesional. Desde la perspectiva académica, el planteamiento de este trabajo es interesante porque contribuye a consolidar mi formación al permitir poner en práctica los conocimientos estudiados durante el transcurso del máster en gran parte de sus asignaturas. Durante su ejecución, por ejemplo, se emplean técnicas de recuperación de información optimizada en la Web y se aplican técnicas de diseño Web sobre una plataforma para gestionar contenidos (proyectos crowdsourcing individuales de análisis de información, como se verá más adelante) todo ello bajo un enfoque de gestión de proyectos. A nivel profesional, puesto que se realiza dentro de la organización sin ánimo de lucro analizo.info, a la que se dedica un capítulo de la memoria, ofrece la posibilidad de trabajar en un entorno real permitiendo así participar de forma activa en la toma de decisiones que afectan al proyecto desarrollado. Esto permite adquirir las habilidades propias de un máster ya que los proyectos que se implementan tienen restricciones y condiciones como horarios, reuniones, especificación de requisitos, plazos de entrega, etc. También posibilita enfrentarse a retos tecnológicos relacionados con la resolución de problemas de análisis de información desde el campo de las herramientas open source haciendo uso de la plataforma PyBossa recogida en la memoria. Este hecho ha propiciado adaptar, implementar y publicar en abierto el código fuente de las aplicaciones desarrolladas contribuyendo a PyBossa y a la comunidad open source en el repositorio de código abierto GitHub18, ya que cada tipo de información requiere de una aplicación específica para posibilitar su análisis. También hay que destacar que, tanto su elaboración como ejecución sirven para definir un perfil profesional de experto en materia de análisis de información19, alguien que es capaz de tratar con diferentes tipos de información y dispone de la capacidad para utilizar herramientas o crear nuevas para posibilitar analizarla. En definitiva, este proyecto final de máster sirve para consolidar, validar y poner en práctica en un entorno real conocimientos propios y adquiridos en el máster universitario en gestión de la información. 18 GitHub · Build software better, together [en línea]. (n.d). Disponible en: https://github.com [Consulta: 12 de junio de 2014]. 19 Se puede decir que está en línea con el siguiente perfil profesional pero que no es equiparable. Chief Information Officer [en línea]. (n.d). Disponible en: http://www.gartner.com/it-glossary/cio-chiefinformation-officer [Consulta: 22 de mayo de 2014]. 24 Capítulo 1 Introducción 1.2 Objetivos El objetivo principal que pretende alcanzar este trabajo fin de máster es el de diseñar, desarrollar e implantar una solución de análisis de información basada en crowdsourcing mediante la plataforma free open source PyBossa como base para la comunidad online de analistas de información analizo.info. Por ello, se proponen los siguientes objetivos secundarios para lograrlo: 1. Estudio de los procesos de análisis de información en analizo.info. 2. Revisión de plataformas crowdsourcing basadas en microtareas. 3. Adaptación de analizo.info al entorno de desarrollo de aplicaciones de análisis de información PyBossa. 4. Definición de pautas para la implementación de aplicaciones de análisis de información en el nuevo sistema. 5. Implementación de proyectos reales de análisis de información en la renovada comunidad analizo.info. 25 Capítulo 1 Introducción 1.3 Metodología El punto de partida de este trabajo se centra en estudiar los procesos de análisis de información en analizo.info, es decir, conocer de qué forma gestiona la información para saber cómo aportar mejoras a sus procedimientos particulares. Esto implica entender tanto su estructura organizativa como la infraestructura técnica (hardware y software) de la que dispone, puesto que para decidir cambiar su actual sistema de análisis de información por PyBossa, se ha de conocer su punto de partida para poder mejorarlo. A continuación, puesto que la solución de análisis de información open source PyBossa propuesta por los promotores de analizo.info no se trata de una herramienta a medida, se profundiza en el concepto de crowdsourcing y sus tipos, realizando una revisión de plataformas basadas en microtareas. Conocer cómo funcionan otros proyectos es clave para poder decidir sobre cómo poder orientar, adaptar y mejorar las funcionalidades de PyBossa en base a las necesidades particulares de analizo.info. El siguiente asunto consiste en diseñar y validar todos los pasos requeridos en el proceso de adaptación de analizo.info al entorno de desarrollo de proyectos de análisis de información PyBossa. Por ello, antes de pasar a un entorno de producción funcional, se efectúa su instalación de forma local para realizar todas las pruebas pertinentes. En este apartado es dónde posteriormente se procede a la contratación de un servidor privado virtual20 apropiado para instalar PyBossa, se unifican sus sistemas de gestión de base de datos21 diseñando un proceso de migración de usuarios de analizo.info al nuevo entorno, se crea el subdominio proyectos.analizo.info para posibilitar el acceso a la nueva plataforma y, por último, se incluyen aspectos relacionados con su personalización y una serie de mejoras de funcionamiento generales como el uso de la red de distribución de contenidos CloudFlare como se verá más adelante. Una vez finalizado el proceso de adaptación, se pasa a definir una serie de pautas para la implementación de aplicaciones de análisis de información en el nuevo sistema (independientemente del tipo que traten) junto una primera aplicación prototipo que las utiliza. Para poder fijarlas, se revisaron las aplicaciones existentes para PyBossa cuyo código fuente se encuentra público en GitHub22. La etapa final del proyecto culmina con la implementación de tres proyectos reales de análisis de diferentes tipos de información en la renovada comunidad online de analistas de información analizo.info para ratificar que las consideraciones definidas previamente son apropiadas. 20 Se conoce como servidor virtual a una partición dentro de un servidor que habilita varias máquinas virtuales dentro de dicha máquina por medio de varias tecnologías. 21 Conjunto de programas que permiten el almacenamiento, modificación y extracción de la información contenida en una base de datos, además de proporcionar herramientas para gestionarlos. 22 Search · pybossa app · GitHub [en línea]. (n.d.). Disponible en: https://github.com/search?q=pybossa+app [Consulta: 23 de mayo de 2014]. 26 Capítulo 1 Introducción Concretamente, en cada uno de esos proyectos, se trabajó con una de las siguientes tres organizaciones de la sociedad civil: Asociación de Consumidores/as de Productos Electorales (ACPE)23. Observatorio de Cooperación y Medios de Comunicación24. Asociación Per l'Horta25. Durante la elaboración del trabajo, se ha contado con la colaboración de las siguientes personas y entidades: David Pardo Gimilio y Diego Álvarez Sánchez cofundadores de analizo.info. Daniel Lombraña González, líder y desarrollador de PyBossa. Respecto a la implementación de los proyectos finales, estos se han terminado en el tiempo previsto conforme a la planificación estimada, contando con reuniones periódicas de control con los implicados. Además, se ha mantenido una conversación constante del progreso vía correo electrónico para facilitar el seguimiento de cada proyecto. Adicionalmente, se desarrollan un conjunto de scripts al que se ha denominado pyanalizo para gestionar, adecuar y presentar la información que generan y manejan las aplicaciones de los proyectos de análisis de la nueva plataforma. 23 ACPE - Asociación de Consumidoræs de Productos Electorales [en línea]. (n.d.). Disponible en: http://www.acpe.es/ [Consulta: 23 de mayo de 2014]. 24 Observatorio de Cooperación y Medios de Comunicación [en línea]. (n.d.). Disponible en: http://observatoriocooperacionymedios.info/ [Consulta: 23 de mayo de 2014]. 25 Per l’Horta [en línea]. (n.d.). Disponible en: http://www.perlhorta.info/ [Consulta: 23 de mayo de 2014]. 27 Capítulo 1 Introducción 1.4 Tecnologías empleadas En lo que corresponde a la parte tecnológica, se ha precisado tanto de hardware como de software específicos. En el caso de la instalación local de PyBossa para pruebas, se ha utilizado el software de creación de máquinas virtuales26 Oracle VM VirtualBox. Para el desarrollo de las aplicaciones, por regla general, se han empleado como base los siguientes elementos: Lenguaje HTML para el diseño estático. Hojas de estilo CSS. Javascript y la librería / framework jQuery para simplificar la implementación de funcionalidades requeridas. Particularmente, alguna de las aplicaciones creadas ha requerido de otros componentes tales como: jQuery UI27 para incorporar elementos tales como menús desplegables o de selección múltiple. La librería OpenLayers28 para posibilitar el trabajo con servidores de mapas. Sobre el conjunto de scripts pyanalizo hay que destacar que ha sido elaborado empleando el lenguaje de programación python. También, en algunos casos, se ha requerido de ciertas librerías ya programadas como por ejemplo twython, para simplificar el acceso a la API de Twitter y pyshp para poder gestionar archivos en formato ESRI Shapefile de sistemas de información geográfica. 26 Una máquina virtual es un software que simula a una computadora y puede ejecutar programas como si de una real se tratase. 27 jQuery UI [en línea]. (n.d.). Disponible en: http://jqueryui.com/ [Consulta: 19 de junio de 2014]. 28 OpenLayers [en línea]. (n.d.). Disponible en: http://openlayers.org/ [Consulta: 19 de junio de 2014]. 28 Capítulo 1 Introducción Finalmente, se han utilizado el siguiente conjunto de utilidades: PuTTY: A Free Telnet/SSH Client29: Cliente SSH30 modo terminal utilizado para realizar las conexiones con el servidor VPS. WinSCP - Free SFTP, SCP and FTP client for Windows31: Cliente SFTP con entorno gráfico utilizado para subir y descargar archivos del servidor VPS. Notepad++: Editor de texto avanzado32. Poedit - Gettext Translations Editor33: Aplicación utilizada para generar las traducciones de PyBossa. Free DBF Viewer | xBaseView DBF Viewer and DBF Converter34: Aplicación utilizada para poder visualizar el contenido de archivos .DBF. Oracle VM VirtualBox35: Aplicación para creación de máquinas virtuales. WinMerge36: Comparador de archivos. 29 PuTTY: A Free Telnet/SSH Client [en línea]. (n.d.). Disponible en: http://www.chiark.greenend.org.uk/~sgtatham/putty/ [Consulta: 19 de junio de 2014]. 30 Intérprete de órdenes seguro, Secure Shell (SSH), en inglés, es el nombre de un protocolo y del programa que lo implementa. Sirve para acceder a máquinas remotas a través de una red permitiendo manejarlas por completo mediante un intérprete de comandos. 31 WinSCP - Free SFTP, SCP and FTP client for Windows [en línea]. (n.d.). Disponible en: http://winscp.net/eng/docs/start [Consulta: 19 de junio de 2014]. 32 Notepad++ [en línea]. (n.d.). Disponible en: http://notepad-plus-plus.org/ [Consulta: 19 de junio de 2014]. 33 Poedit - Gettext Translations Editor [en línea]. (n.d.). Disponible en: http://poedit.net/ [Consulta: 19 de junio de 2014]. 34 Free DBF Viewer | xBaseView DBF Viewer and DBF Converter [en línea]. (n.d.). Disponible en: http://dbfviewer.org/ [Consulta: 19 de junio de 2014]. 35 Oracle VM VirtualBox [en línea]. (n.d.). Disponible en: https://www.virtualbox.org/ [Consulta: 19 de junio de 2014]. 36 WinMerge [en línea]. (n.d.). Disponible en: http://winmerge.org/ [Consulta: 19 de junio de 2014]. 29 Capítulo 1 Introducción 1.5 Estructura Tras el primer capítulo de introducción, justificación, objetivos a lograr y metodología empleada, el resto de la memoria del trabajo se configura de la siguiente forma: El segundo capítulo se centra en el estudio de los procesos de análisis de información de la comunidad online analizo.info, su estructura organizativa, los recursos técnicos de los que dispone y se presenta la solución de análisis de información open source PyBossa. En el tercer capítulo se expone y se reflexiona sobre el concepto y tipos de crowdsourcing para contextualizar el ámbito de actividad de analizo.info junto a una revisión de plataformas de esta índole basadas en microtareas. En el cuarto capítulo se recogen minuciosamente todos los pasos requeridos y validados para la adaptación de analizo.info al entorno PyBossa, además de aspectos relacionados con su personalización y una serie de mejoras generales introducidas. En el quinto capítulo se enumeran una serie de pautas a tener en cuenta para facilitar la creación de aplicaciones de análisis independientemente del tipo de información que gestionen, incluyendo una primera aplicación prototipo implementada. En el sexto capítulo se detallan los proyectos reales de análisis de información implementados en la nueva etapa de la renovada comunidad analizo.info. El séptimo capítulo está dedicado a la discusión de los resultados obtenidos. En el octavo capítulo se incluyen las conclusiones extraídas y líneas de trabajo futuro que puedan abrirse a partir del proyecto realizado. Finalmente, se incluyen los anexos y a las referencias bibliográficas utilizadas. 30 Capítulo 2 La comunidad online de analistas de información analizo.info 2. La comunidad online de analistas de información analizo.info analizo.info37 es una iniciativa crowdsourcing de emprendimiento social creada para facilitar la participación activa de la ciudadanía en procesos de análisis de información que persigan la construcción de una sociedad más justa. Su primera versión fue lanzada el 22 de noviembre de 2012 cuya implementación particular se inspiraba en otros movimientos y proyectos globales tales como OpenKnowledge Foundation38, Shuttleworth Foundation39, Sunlight Foundation40, datakind.org41, unglobalpulse.org42, change.org43, access-info.org44, Fundación Civio45, socialnest.org46, goteo.org47 o verkami.com48. La característica diferencial que define el tipo de plataforma que es analizo.info y la distingue de otras plataformas es la naturaleza de sus proyectos de análisis de información, ya que deben perseguir la mejora de la sociedad en el ámbito político, social, económico y/o medioambiental, rechazando pues cualquier intención comercial tales como pudieran ser los estudios de marketing con fines económicos. La segunda versión de esta comunidad de analistas de información que se pretende crear al desarrollar este trabajo, se fundamenta desde la perspectiva del crowdsourcing para posibilitar la resolución de sus proyectos de análisis de información, los cuales estarán sustentados por el software de carácter open source PyBossa con el fin de posibilitar su relanzamiento, expandir su alcance y facilitar así su posterior gestión y mantenimiento. 37 analizo.info: Conviértete en analista de información por el cambio social [en línea]. (n.d.). Disponible en: http://analizo.info/ [Consulta: 28 de septiembre de 2013]. 38 OKFN Spain [en línea]. (n.d.). Disponible en: http://es.okfn.org/ [Consulta: 12 de febrero de 2014]. 39 Shuttleworth Foundation [en línea]. (n.d.). Disponible en: http://www.shuttleworthfoundation.org/ [Consulta: 12 de febrero de 2014]. 40 Sunlight Foundation [en línea]. (n.d.). Disponible en: http://sunlightfoundation.com/ [Consulta: 12 de febrero de 2014]. 41 DataKind [en línea]. (n.d.). Disponible en: http://www.datakind.org/ [Consulta: 12 de febrero de 2014]. 42 United Nations Global Pulse [en línea]. (n.d.). Disponible en: http://unglobalpulse.org/ [Consulta: 12 de febrero de 2014]. 43 Change.org · La mayor plataforma de peticiones del mundo [en línea]. (n.d.). Disponible en: http://www.change.org/es [Consulta: 12 de febrero de 2014]. 44 Access Info Europe, Eventos, Información, Puntos de ayuda, Derecho a saber, Consejo de Europa [en línea]. (n.d.). Disponible en: http://www.access-info.org/ [Consulta: 12 de febrero de 2014]. 45 civio.es | Fundación Ciudadana Civio - Tecnología y Periodismo aplicados a la Transparencia y Apertura de Datos [en línea]. (n.d.). Disponible en: http://www.civio.es/ [Consulta: 12 de febrero de 2014]. 46 Socialnest [en línea]. (n.d.). Disponible en: http://socialnest.org/ [Consulta: 12 de febrero de 2014]. 47 Goteo.org · Crowdfunding the commons [en línea]. (n.d.). Disponible en: http://goteo.org/ [Consulta: 12 de febrero de 2014]. 48 Verkami: Crowdfunding para amantes de la creación [en línea]. (n.d.). Disponible en: http://www.verkami.com/ [Consulta: 12 de febrero de 2014]. 31 Capítulo 2 La comunidad online de analistas de información analizo.info 2.1 Estructura organizativa El proyecto analizo.info se configura como una comunidad online formada por los siguientes tres grupos de personas: Ciudadanos y ciudadanas que quieran transformar su entorno, apoyando los procesos de análisis iniciados por otras personas, colectivos y/o instituciones. Activistas, investigadores/as, ONGs y asociaciones civiles interesados en poner en marcha procesos de análisis sin ánimo de lucro, que tengan como objetivo la construcción de una sociedad más justa y donde los resultados se publiquen de forma abierta (Open Data49 y Open Research50). Desarrolladores y desarrolladoras que quieran participar en la creación de herramientas de análisis mediante software libre y de código abierto. Esta configuración se representa gráficamente en su página Web51 empleando la infografía recogida en la figura 1. Figura 1. analizo.info. Infografía. 49 La filosofía y práctica de datos abiertos persigue que determinados datos estén disponibles de forma libre a todo el mundo, sin restricciones de copyright, patentes u otros mecanismos de control. 50 La investigación llevada al terreno de la ideología abierta y distribuida. 51 analizo.info: Conviértete en analista de información por el cambio social [en línea]. (n.d.). Disponible en: http://analizo.info/ [Consulta: 28 de septiembre de 2013]. 32 Capítulo 2 La comunidad online de analistas de información analizo.info 2.2 Recursos técnicos Esta iniciativa, en su versión inicial, fue implementada y contaba con la infraestructura tecnológica que se menciona a continuación: Se trataba de una aplicación Web que contaba con un front-end y un back-end, es decir, una parte visible para los usuarios dónde podían interactuar con los diversos elementos de la plataforma y el panel de gestión para los administradores. Fue desarrollada con el lenguaje de programación PHP, utilizando el framework CakePHP por sus características (scaldfolding52, generación de código, arquitectura Modelo Vista Controlador MVC, validación integrada, plantillas rápidas y flexibles, ayudantes para AJAX, Javascript, formularios HTML, CSS y más, etc. 53). Como sistema de almacenamiento de datos empleaba el motor MySQL54. Hacía uso del servidor Web Apache. Utilizaba como base el sistema operativo Linux. Se encontraba hospedada en un servicio de hosting Web de la empresa 1&1. Para tener una idea global visual, se han plasmado todos ellos en la siguiente figura a modo de esquema: Figura 2. analizo.info. Recursos técnicos. El despliegue de estas tecnologías posibilitó el lanzamiento de la versión 1.0 de la plataforma de análisis de información analizo.info. 52 Scaffolding en programación de aplicaciones es una técnica que permite a un desarrollador definir y crear aplicaciones básicas que pueden crear, leer, actualizar y borrar objetos. 53 CakePHP: the rapid development php framework. [en línea]. (n.d.). Disponible en: http://cakephp.org/ [Consulta: 24 de mayo de 2014]. 54 MySQL :: The world's most popular open source database. [en línea]. (n.d.). Disponible en: http://www.mysql.com/ [Consulta: 24 de mayo de 2014]. 33 Capítulo 2 La comunidad online de analistas de información analizo.info A continuación, en las siguientes figuras, se pueden ver algunas capturas de pantalla de su versión inicial: Figura 3. analizo.info. Página de inicio. Figura 4. analizo.info. Sección “Noticias” en el back-end. 34 Capítulo 2 La comunidad online de analistas de información analizo.info Figura 5. analizo.info. Panel de análisis de un proyecto. 35 Capítulo 2 La comunidad online de analistas de información analizo.info 2.3 Gestión de procesos de análisis de información Los procesos de análisis de información en analizo.info (Figura 6) hay que entenderlos como proyectos individuales que se implementan particularmente para posibilitar gestionar el análisis un determinado tipo de información mediante el uso de una herramienta (aplicación informática) diseñada e implementada para su propósito. Figura 6. analizo.info. Gestión de procesos de análisis de información. A continuación, se recoge cómo se lleva a cabo el procedimiento estándar de alta de un proyecto de análisis de información en analizo.info: 1. La entidad promotora interesada en poner en marcha un proyecto de análisis de información contacta con analizo.info. 2. Se entabla una conversación para: a. Conocer qué tipo de información se quiere analizar y en que formato se encuentra. b. Definir la metodología de análisis que posibilite segmentar la información a analizar en unidades individuales para facilitar su análisis. 3. analizo.info recurre a desarrolladores y desarrolladoras para implementar una solución informática en su plataforma para resolver el proyecto de análisis planteado acorde a la metodología definida. 4. El proyecto de análisis se presenta a la entidad promotora antes de ser lanzado para corregir los aspectos que se consideren oportunos. 5. Se publica el proyecto para posibilitar las ciudadanas y ciudadanos interesados (analistas) participar en él. 6. Una vez termina el análisis de toda la información del proyecto, se publican en abierto sus resultados. 36 Capítulo 2 La comunidad online de analistas de información analizo.info Pese a todo el trabajo realizado, la versión inicial de analizo.info no llegó a funcionar como se esperaba, apuntando principalmente a las siguientes razones: La plataforma implementada, al ser un desarrollo a medida, precisaba de programadores experimentados en plantilla para continuar con su mantenimiento. La dificultad que plantea enfrentarse al reto de gestionar el análisis de diferentes tipos de información demandaba de personal cualificado para poder desarrollar las aplicaciones pertinentes en cada caso concreto. En definitiva, su sistema de gestión de información era dependiente del desarrollo de la plataforma que a su vez contenía los diferentes proyectos de análisis. 37 Capítulo 2 La comunidad online de analistas de información analizo.info 2.4 Características de la nueva plataforma A continuación se recogen los requisitos que debe cumplir la nueva versión de la comunidad de analistas de información analizo.info: Emplear el software de código abierto PyBossa como base. Disponer de una sección con todos los usuarios miembros de la comunidad. Incluir un sistema de gamificación en la plataforma para fomentar la participación (ranking de participación de usuarios, aplicaciones más activas etc.). Información sobre las aplicaciones de los proyectos de análisis de información. o Tienen que tener una ficha de presentación y todas deben responder a las siguientes cuestiones: ¿Quién promueve el proyecto? ¿Qué objetivo se persigue? ¿Por qué se persigue? ¿Cómo acceder a los resultados? o Han de estar estructuradas en partes o secciones para facilitar su comprensión tal y como recoge la figura 7. Figura 7. Secciones aplicaciones proyectos de análisis de información. Los resultados de los proyectos de análisis de información han de publicarse empleando formatos abiertos tales como JSON, XML, CSV etc. Se han de proponer unas condiciones para garantizar la implementación homogénea de las aplicaciones. El código fuente de las aplicaciones creadas y demás scripts implementados ha de publicarse en GitHub. 38 Capítulo 2 La comunidad online de analistas de información analizo.info 2.5 PyBossa como solución de análisis de información open source En este apartado se introduce que es PyBossa ya que parte de la justificación para la realización de este trabajo fin de máster se debe a que la nueva etapa de analizo.info se quiere caracterizar por utilizar esta solución de análisis de información open source. Así pues, este hecho de pretender migrar a PyBossa desde su plataforma obsoleta pasa a formar parte como un objetivo de la definición del problema a resolver. PyBossa es un framework gratuito y open source (disponible en el repositorio de código público GitHub) escrito en el lenguaje de programación python (de ahí su nombre) para el desarrollo y despliegue de proyectos crowdsourcing creados por sus usuarios en lugar de ser una aplicación de análisis de información en sí mismo. Fue inspirado por el motor de crowdsourcing Bossa55 cuya finalidad era la de ayudar a los científicos y otros investigadores a resolver problemas mediante la programación de scripts PHP para generar, mostrar y manejar tareas. A su vez, Bossa, hacía uso de Bolt56, un conjunto de herramientas para la formación basada en la Web y la educación. Los proyectos en PyBossa se caracterizan por ser aplicaciones crowdsourcing individuales que permiten la resolución de tareas que precisan de la intervención humana (su conocimiento o inteligencia) tales como la transcripción de documentos, la clasificación de imágenes o la interpretación de información en diversos formatos entre otros. Por lo general trabajos que un ordenador no es capaz de solucionar con la precisión o la destreza esperada. Estas aplicaciones se implementan con los lenguajes de programación Javascript y HTML de una forma rápida y sencilla para, posteriormente, desplegarse en una instancia PyBossa (como por ejemplo CrowdCrafting57 o ForestWatchers58), permitiendo así que cualquier persona del mundo con tiempo, interés y una conexión a Internet pueda participar en ellas. Así pues, en posteriores capítulos de la memoria, se verán cuales han sido los pasos realizados para la adaptación y uso de esta herramienta open source en la comunidad online de analistas de información analizo.info. 55 BossaIntro – BOINC [en línea]. (n.d.). Disponible en: http://boinc.berkeley.edu/trac/wiki/BossaIntro/ [Consulta: 6 de febrero de 2014]. 56 BoltIntro – BOINC [en línea]. (n.d.). Disponible en: http://boinc.berkeley.edu/trac/wiki/BoltIntro/ [Consulta: 6 de febrero de 2014]. 57 Instancia PyBossa de referencia en la que se pueden ver funcionando multitud de aplicaciones. Crowdcrafting [en línea]. (n.d.). Disponible en: http://crowdcrafting.org/ [Consulta: 9 de febrero de 2014]. 58 Iniciativa que trata sobre un proyecto apoyado en la ciudadanía para vigilar bosques. ForestWatchers [en línea]. (n.d.). Disponible en: http://forestwatchers.net/pybossa [Consulta: 9 de febrero de 2014]. 39 Capítulo 2 La comunidad online de analistas de información analizo.info 40 Capítulo 3 Revisión de plataformas crowdsourcing basadas en microtareas 3. Revisión de plataformas crowdsourcing basadas en microtareas 3.1 El concepto de crowdsourcing El término crowdsourcing apareció por primera vez en el año 2006 en la revista Wirred donde el periodista Jeff Howe59 lo definió como el acto de externalización por parte de una empresa o institución, de una función realizada normalmente por un empleado, a un grupo indefinido (y habitualmente grande) de personas mediante una convocatoria abierta. Esta externalización puede tratarse de una producción-de-iguales (peerproduction) cuando el trabajo se realiza de forma colaborativa, pero también puede llevarse a cabo de forma individual. Desde entonces, han surgido multitud de nuevas definiciones que han ido recogiendo la evolución seguida por los distintos tipos de crowdsourcing que han aparecido en los últimos años. Por ejemplo, Daren Brabham (2009) afirma que el crowdsourcing es “un modelo estratégico para atraer una multitud interesada y motivada de individuos capaz de proporcionar soluciones superiores en calidad y cantidad a aquellas que pueden proporcionar formas de negocio tradicionales”. Gabriella Kazai (2011) se centra más en la retribución que reciben los participantes y lo define como “una convocatoria abierta para recibir contribuciones de miembros de la multitud para resolver un problema o llevar a cabo tareas inteligentes, normalmente a cambio de micropagos, reconocimiento social o entretenimiento”. Crowdsourcing también puede definirse un conjunto de iniciativas de tipo participativo que se nutren de otros fenómenos como la innovación abierta (Chesbrough, 2003) o la inteligencia colectiva (Schenk; Guittard, 2011) llevada a cabo en Internet con las aplicaciones de la Web 2.0. Estas tareas que pueden abarcar diversos ámbitos, en muchos casos se trata de tareas modulables, lo que permite su realización por varios usuarios en paralelo. Estellés y González60 (2012) presentan una definición que permite identificar cualquier tipo de iniciativa crowdsourcing en base a 8 elementos facilitando su clasificación: tarea concreta a realizar, multitud que participará con sus aportaciones (crowdworkers), beneficio para dicha multitud, iniciador, beneficio para el iniciador, utilización de un proceso participativo, uso de una convocatoria abierta y flexible y uso de Internet como infraestructura fundamental. 59 Wired 14.06: The Rise of Crowdsourcing [en línea]. (junio de 2006). Disponible en: http://archive.wired.com/wired/archive/14.06/crowds.html [Consulta: 16 de junio de 2014]. 60 Towards an integrated crowdsourcing definition [en línea]. (2012). Disponible en: http://www.ebooksmagz.com/pdf/towards-an-integrated-crowdsourcing-definition-researchgate339078.pdf [Consulta: 16 de junio de 2014]. 41 Capítulo 3 Revisión de plataformas crowdsourcing basadas en microtareas Pérez y Jiménez (2013) socios cofundadores del portal Web infocrowdsourcing.com61, definen este término que surge de crowd (conjunto de personas) + outsourcing (externalización) como “la práctica de hacer una llamada más o menos abierta a una comunidad para resolver un problema, mediante una competición o mediante una colaboración”62. Para cerrar el abanico de definiciones, en el contexto de este proyecto, el concepto de crowdsourcing se puede definir como un llamamiento al emprendimiento social abierto a todo el público, caracterizado por facilitar la participación de la ciudadanía en procesos de análisis de información sin ánimo de lucro, que persigan la mejora de la sociedad en el ámbito político, social, económico y/o medioambiental. Así mismo, dado que esta convocatoria abierta pretende atraer a una multitud de individuos motivados e interesados en resolver un determinado trabajo por el bien común, la definición de microtarea se correspondería a su vez con el número finito de unidades individuales coherentes de información (tareas escuetas) secuenciales o aleatorias, en las que se pueda participar de forma autónoma y concurrente que constituirían dicho trabajo. Considerando la especial relevancia del crowdsourcing para este trabajo, resulta interesante plantearse para ser consciente y comprender cuáles son las ventajas e inconvenientes que plantea, ya que no resultaría lógico llevar a la práctica una solución sin hacer previamente una reflexión crítica. Dentro del ámbito de analizo.info, a continuación se recogen los inconvenientes que, en mi opinión, plantea el análisis de información crowdsourcing: Para que un proyecto crowdsourcing de análisis de información se pueda llevar a cabo, es necesario que el trabajo a realizar pueda dividirse en unidades individuales coherentes de información en un período de tiempo que se determine de forma particular en cada proyecto para posibilitar su análisis. No existe una garantía real de que el análisis de información realizado en cada una de las microtareas cumpla con los criterios de calidad que se espera en todos los proyectos. Si no se controla el número de respuestas a obtener en cada análisis, posteriormente y dependiendo del tipo de información analizada, procesar los resultados obtenidos puede resultar inviable. Si el proyecto de análisis de información no resulta de interés para la comunidad de analistas, puede que nunca se complete pese a todos los esfuerzos previamente realizados. 61 Crowdsourcing y Crowdfunding en España y Latinoamérica [en línea]. (n.d.). Disponible en: http://www.infocrowdsourcing.com/ [Consulta: 2 de julio de 2014]. 62 ¿Qué es Crowdsourcing? ¿Crau qué? Aplicaciones y ejemplos [en línea]. (9 de febrero de 2013). Disponible en: http://www.infocrowdsourcing.com/que-es-el-crowdsourcing-crau-que/ [Consulta: 2 de julio de 2014]. 42 Capítulo 3 Revisión de plataformas crowdsourcing basadas en microtareas El hecho de que realizar un determinado trabajo no esté premiado por algún tipo de recompensa puede influir en el nivel de interés de participación en los proyectos de análisis de información. Por otra parte sus ventajas son las siguientes: Los resultados obtenidos de los proyectos de análisis de información pueden ser de mayor calidad ya que participan un mayor número de personas comparado con un entorno de trabajo tradicional cerrado. La diversidad de las soluciones aportadas puede proporcionar nuevas ideas para nuevos proyectos de análisis de información. Es posible finalizar los proyectos de análisis de información planteados en un tiempo récord si son de gran interés para el bien común de la comunidad. Este sistema facilita a promotores de proyectos de análisis de información un colectivo entusiasta interesado en participar en la resolución de problemas que de otro modo, sin la ayuda comunitaria, tardarían más tiempo en resolverse. Los costes para la implementación de los proyectos de análisis de información son relativamente bajos o incluso nulos, ya que simplemente se ha de invertir en infraestructura tecnológica física, pudiendo desarrollar las herramientas y aplicaciones pertinentes haciendo uso de software open source. Permite otorgar oportunidades a talentos emergentes que de otra manera les sería imposible obtener. Los proyectos de análisis de información desarrollados pueden divulgarse a través de cualquier medio o canal de comunicación (prensa, redes sociales, etc.) para captar a nuevos analistas que pudieran estar interesados en participar. Mediante el desarrollo de herramientas informáticas intuitivas y simples, es posible hacer que participe cualquier persona sin solicitar ningún tipo de requisitos previos. Este enfoque otorga un potencial empoderador a los ciudadanos y ciudadanas que participan en la resolución de los proyectos de análisis de información. Así pues, siendo consciente de que analizo.info pretende ser una plataforma de análisis de información crowdsourcing, esta deberá aprender a superar las desventajas y aprovechar las ventajas que ello plantea, sabiendo que estas últimas son más favorables lo cual justifica que su intención es acertada. 43 Capítulo 3 Revisión de plataformas crowdsourcing basadas en microtareas 3.2 Tipos de crowdsourcing Estellés y González (2012) proponen en su estudio la siguiente clasificación de iniciativas crowdsourcing basadas en las tareas que estas llevan a cabo (Tabla 1). Un individuo, empresa u organización plantea a la multitud Crowdcasting un problema o tarea, siendo recompensado quien lo resuelva antes o mejor. Se produce una comunicación entre los individuos de la multitud, mientras la empresa iniciadora del proceso queda relativamente al margen. Los individuos aportan su Crowdcollaboration conocimiento para resolver problemas o plantear ideas de forma colaborativa y normalmente no existe una recompensa económica. Sesiones de tormenta de ideas online, en la que se plantean soluciones y la Crowdstorming multitud participa con sus comentarios y votos. Los propios clientes son los que solucionan las dudas o problemas de Crowdsupport otros, sin necesidad de acudir al servicio técnico o posventa de atención al cliente. La gente aporta su mano de obra y su conocimiento para crear o encontrar contenido de diversa naturaleza. Se Crowdcontent diferencia del crowdcasting en que no es una competición, sino que cada individuo trabaja de forma individual y al final se reúne el resultado de todos. La multitud debe crear contenido Crowdproduction colaborando con otros (Wikipedia) Los colaboradores buscan contenidos Crowdsearching disponibles en internet con algún fin. Parecido al crowdsearching pero la búsqueda no se realiza en internet, sino Crowdanalyzing en documentas multimedia como imágenes o vídeos. Un individuo u organización buscan la financiación por parte Crowdfunding de la multitud a cambio de alguna recompensa. Se intenta conocer la opinión de los usuarios sobre un tema o Crowdopinion producto. Tabla 1. Clasificaciones de crowdsourcing basadas en tareas. Estellés y González (2012). 44 Capítulo 3 Revisión de plataformas crowdsourcing basadas en microtareas Por otra parte, Pérez y Jiménez (2013), en su portal Web, enumeran las tipologías de crowdsourcing63 que se presentan a continuación (Tabla 2). Crowdfunding Participación ciudadana Creatividad colectiva Conocimiento colectivo Open innovation Trabajo en la nube Comunidad social Consumo colaborativo Crowdsourcing Contribuciones financieras de inversores online, patrocinadores o donantes para financiar iniciativas o empresas (financiación colectiva). Acciones colectivas para resolver asuntos de carácter público. Aunar a talentos de gran imaginación para desarrollar actividades creativas como arte, música, diseños o contenidos. Desarrollo conjunto de conocimientos o de información por parte de un grupo de individuos. Uso de recursos externos para generar, desarrollar e implementar ideas. Aprovechar el trabajo de múltiples personas para conseguir uno o varios objetivos, más o menos complejos. Desarrollo de una comunidad por parte de individuos que comparten pasiones, creencias o intereses comunes. La manera tradicional de compartir, intercambiar, prestar, alquilar y regalar, potenciada a través del acceso rápido a grandes comunidades. Tabla 2. Tipologías de crowdsourcing. Pérez y Jiménez (2013). Como se puede apreciar, en ambas clasificaciones mencionadas anteriormente no resulta posible ubicar a analizo.info de forma precisa, hecho que conlleva a pensar que la situación actual de la Web 2.0 las ha dejado desactualizadas habiendo que proponer una nueva categoría en la cual quede recogida. En este caso, dentro del contexto de este trabajo, la comunidad online de analistas de información analizo.info se encontraría en una categoría crowdsourcing que estuviera entre participación ciudadana y trabajo en la nube con algunos aspectos de crowdcollaboration (no existe una recompensa económica) y crowdcontent (el resultado es el trabajo de todos). 63 Un mismo perro con distinto collar: Tipologías de Crowdsourcing [en línea]. (12 de febrero de 2013). Disponible en: http://www.infocrowdsourcing.com/un-mismo-perro-con-distinto-collar-tipologias-decrowdsourcing/ [Consulta: 3 de julio de 2014]. 45 Capítulo 3 Revisión de plataformas crowdsourcing basadas en microtareas 3.3 Exploración de plataformas realizada y resultados Teniendo en cuenta que se iba a cambiar el sistema original desarrollado de análisis de información de analizo.info por PyBossa y que esta no era una solución a medida, sino, que iba a requerir de un proceso de adaptación, se realizó un análisis de plataformas crowdsourcing para conocer de qué forma funcionaban otros proyectos con el fin de incorporar y/o mejorar sus funcionalidades más relevantes en la nueva plataforma. Para realizar el análisis, se utilizaron como punto de partida64 los sitios mencionados en el documento Crowdsourcing Industry Landscape65 publicado por el portal Web crowdsourcing.org66 junto a los recogidos en infocrowdsourcing.com67 con el fin de disponer de un conjunto acotado y popular. Además, para complementar la lista, se realizó una búsqueda con el buscador Web Google empleando las siguientes palabras clave (crowdsourcing open source platform) con el fin de obtener algún signo de relevancia significativa sobre el uso de alguna plataforma similar a PyBossa de una forma más directa. Respecto a los criterios de selección empleados, en general y dada la particularidad de los mismos, los sitios a elegir debían de ser aquellos que se aproximaran tanto a la definición de microtarea especificada para el contexto de este proyecto, como a su vez fueran semejantes a los tipos de crowdsourcing entre los que se podría encontrar a analizo.info mencionados en este capítulo. A continuación se definen los criterios principales y secundarios utilizados para seleccionar las plataformas a analizar: Criterios principales: o Criterio principal 1: La plataforma posibilita definir las tareas que se han de realizar para resolver el trabajo especificado de forma controlada. o Criterio principal 2: La plataforma permite aprovechar el trabajo de múltiples personas por medio de acciones colectivas para resolver objetivos concretos. 64 También se tuvieron presentes las plataformas del sitio Web crowdsourcing.org recogidas en el directorio http://www.crowdsourcing.org/directory el cual incluía un total de 2.767 entradas a fecha de 4 de julio de 2014. 65 November 2011 "Crowdsourcing Industry Landscape" Infographic [en línea]. (n.d.). Disponible en: http://www.crowdsourcing.org/editorial/november-2011-crowdsourcing-industry-landscapeinfographic/7680 [Consulta: 18 de junio de 2014]. 66 Crowdsourcing and Crowdfunding - The Industry Website [en línea]. (n.d.). Disponible en: http://www.crowdsourcing.org/ [Consulta: 18 de junio de 2014]. 67 Directorio de plataformas de Crowdfunding y Crowdsourcing [en línea]. (n.d.). Disponible en: http://www.infocrowdsourcing.com/plataformas/ [Consulta: 4 de julio de 2014]. 46 Capítulo 3 Revisión de plataformas crowdsourcing basadas en microtareas Criterios secundarios: o Criterio secundario 1: La plataforma no está orientada a un público específico. o Criterio secundario 2: Las tareas planteadas pueden ser resueltas empleando exclusivamente la cognición humana. Hay que destacar que todas las plataformas seleccionadas se encuentran activas a fecha del 4 de julio de 2014, por ello, el hecho de estar en desuso no se incluye como criterio de selección. Las plataformas candidatas preseleccionadas para realizar su estudio se recogen a continuación (Tabla 3). Plataforma Descripción Destinada a toda clase de público. Se ofrecen tareas que solo un humano podría resolver. Las tareas incluidas pueden ser resueltas en muy poco tiempo. MTURK68 IDEAS4ALL69 Destinada a todo tipo de público. Los usuarios publican sus ideas o trabajos y buscan a gente capaz de resolverlas. REPARACIUDAD70 Destinada a todo tipo de público. Permite denunciar cualquier incidencia que ocurra en las diferentes ciudades para que el resto de usuarios estén enterados. INNOCENTIVE71 Destinada a investigadores. Se presentan retos, sobre todo de investigación, que puedan ser resueltos por los usuarios. 72 ARTICLEONEPARTNERS Destinada a ingenieros e investigadores. Se publican ideas de patentes para que los usuarios puedan llevar a cabo la documentación necesaria para poder realizar la misma. CHANGE.ORG73 Destinada a todo tipo de público. Se publican peticiones para que el resto de usuarios las secunden. TOPCODER74 Destinada a programadores. Se ofertan trabajos de tipo software para ser resueltos. Tabla 3. Exploración de plataformas crowdsourcing. 68 MTURK [en línea]. (n.d.). Disponible en: https://www.mturk.com [Consulta: 18 de junio de 2014]. IDEAS4ALL [en línea]. (n.d.). Disponible en: http://www.ideas4all.com [Consulta: 18 de junio de 2014]. 70 REPARACIUDAD [en línea]. (n.d.). Disponible en: http://reparaciudad.com [Consulta: 18 de junio de 2014]. 71 INNOCENTIVE [en línea]. (n.d.). Disponible en: http://www.innocentive.com [Consulta: 18 de junio de 2014]. 72 ARTICLEONEPARTNERS [en línea]. (n.d.). Disponible en: https://www.articleonepartners.com [Consulta: 18 de junio de 2014]. 73 CHANGE.ORG [en línea]. (n.d.). Disponible en: http://www.change.org [Consulta: 18 de junio de 2014]. 74 TOPCODER [en línea]. (n.d.). Disponible en: http://www.topcoder.com [Consulta: 18 de junio de 2014]. 69 47 Capítulo 3 Revisión de plataformas crowdsourcing basadas en microtareas La siguiente relación (Tabla 4) contiene la aplicación de los criterios de selección en cada una de las plataformas candidatas. Plataforma MTURK IDEAS4ALL REPARACIUDAD INNOCENTIVE ARTICLEONEPARTNERS CHANGE.ORG TOPCODER Criterios de selección principales Criterio 1 Criterio 2 SÍ SÍ NO NO SÍ SÍ SÍ SÍ SÍ SÍ SÍ SÍ SÍ SÍ Criterios de selección secundarios Criterio 1 Criterio 2 SÍ SÍ SÍ SÍ* SÍ SÍ NO SÍ* NO SÍ SÍ SÍ NO SÍ Tabla 4. Aplicación de criterios de selección en plataformas crowdsourcing candidatas. *Nota: dependiendo del tipo de trabajo planteado. Después de aplicar los criterios de selección, las plataformas definitivas a analizar que cumplen al menos tres de los cuatro criterios establecidos se recogen en la Tabla 5. Plataforma MTURK REPARACIUDAD INNOCENTIVE ARTICLEONEPARTNERS CHANGE.ORG TOPCODER Tabla 5. Plataformas crowdsourcing definitivas a analizar. Para el análisis de las plataformas seleccionadas se definieron los siguientes aspectos relacionados con su funcionamiento con el fin de obtener una visión general de cada una de ellas: Información de las microtareas: o Aspectos sobre los trabajos. Procedimiento de alta. Como se resuelven. Recompensa por su realización. Información de la comunidad: o Aspectos sobre interacciones. Relaciones entre usuarios. Relaciones entre usuarios y plataforma. Rankings o sistemas para fomentar la participación. Estos aspectos se recogen a continuación en fichas de análisis individuales junto a observaciones sobre las mismas. 48 Capítulo 3 Nombre URL Descripción Revisión de plataformas crowdsourcing basadas en microtareas INFORMACIÓN DE LA PLATAFORMA MTURK https://www.mturk.com/ Destinada a toda clase de público. Se ofrecen tareas que solo un humano podría resolver. Las tareas incluidas pueden ser resueltas en muy poco tiempo. INFORMACIÓN DE LAS TAREAS ¿Quién publica los trabajos? ¿Cómo se publican? ¿Quién resuelve los trabajos? ¿Cómo se resuelven? ¿Hay algún tipo de recompensa? Los interesados en que éste sea resuelto. Los interesados se registran creando una cuenta e introducen sus tareas. El resto de usuarios que decide participar en ellos. El tiempo de realización de los trabajos varía según la complejidad de la tarea a realizar (Duración media 30 minutos). Los usuarios que deciden participar los eligen y los solventan. Sí, de carácter económico. INFORMACIÓN DE LA COMUNIDAD Existen dos tipos de usuarios: ¿Cómo interactúan los Los usuarios interesados que ofertan trabajos. usuarios con la Web? Los usuarios que resuelven los trabajos ofertados. ¿Cómo interactúan los La interacción es prácticamente nula. usuarios entre ellos? ¿Hay algún sistema de Hay una calificación de usuarios pero su utilidad no es lo popularidad? suficientemente aclaratoria. OBSERVACIONES Es muy sencillo publicar y comenzar a realizar trabajos, pero no da la sensación de que se está en una comunidad. En la Web resalta la sensación de que la información de los trabajos no va más allá de tiempo / recompensa. Su diseño está obsoleto. Tabla 6. Ficha plataforma MTURK. 49 Capítulo 3 Nombre URL Descripción ¿Quién publica los trabajos? Revisión de plataformas crowdsourcing basadas en microtareas INFORMACIÓN DE LA PLATAFORMA REPARACIUDAD http://reparaciudad.com/ Destinada a todo tipo de público. Permite denunciar cualquier incidencia que ocurra en las diferentes ciudades para que el resto de usuarios estén enterados. INFORMACIÓN DE LAS TAREAS Los interesados en que éste sea resuelto. ¿Cómo se publican? Los interesados se registran creando una cuenta e introducen sus incidencias (tareas) para una determinada ciudad. ¿Quién resuelve los trabajos? Los ayuntamientos de cada ciudad respectivamente. ¿Cómo se resuelven? ¿Hay algún tipo de recompensa? Cada ayuntamiento resolverá la incidencia en base a su planificación y priorización. No. INFORMACIÓN DE LA COMUNIDAD Existen dos tipos de usuarios: ¿Cómo interactúan los Los usuarios interesados que publican incidencias (tareas). usuarios con la Web? Los usuarios que resuelven los trabajos ofertados (ayuntamientos y entidades públicas). ¿Cómo interactúan los Los usuarios pueden apoyar incidencias (tareas) de otros usuarios entre ellos? usuarios. ¿Hay algún sistema de Sí, un ranking de los usuarios que más participan. popularidad? OBSERVACIONES Es muy sencillo publicar incidencias (tareas), pero no da la sensación de que se está en una comunidad. No hay garantía del plazo de resolución de las incidencias reportadas por los ciudadanos. Es posible seguir el estado de una indecencia (tarea) reportada. Diseño visualmente atractivo y moderno. Tabla 7. Ficha plataforma REPARACIUDAD. 50 Capítulo 3 Nombre URL Descripción ¿Quién publica los trabajos? Revisión de plataformas crowdsourcing basadas en microtareas INFORMACIÓN DE LA PLATAFORMA INNOCENTIVE http://www.innocentive.com/ Destinada a investigadores. Se presentan retos, sobre todo de investigación, que puedan ser resueltos por los usuarios. INFORMACIÓN DE LAS TAREAS Los interesados en que éste sea resuelto. ¿Cómo se publican? Los interesados se registran creando una cuenta e introducen sus tareas. ¿Quién resuelve los trabajos? El resto de usuarios. ¿Cómo se resuelven? ¿Hay algún tipo de recompensa? Los usuarios eligen el trabajo en que están interesados y lo realizan. Sí, económica. INFORMACIÓN DE LA COMUNIDAD Existen dos tipos de usuarios: ¿Cómo interactúan los Los usuarios interesados que ofertan trabajos. usuarios con la Web? Los usuarios que resuelven los trabajos ofertados. ¿Cómo interactúan los Existe poca interacción a nivel comunidad. usuarios entre ellos? ¿Hay algún sistema de No. popularidad? OBSERVACIONES Es muy sencillo publicar y comenzar a realizar trabajos, pero no da la sensación de que se está en una comunidad. Diseño visualmente atractivo y moderno. Tabla 8. Ficha plataforma INNOCENTIVE. 51 Capítulo 3 Nombre URL Descripción ¿Quién publica los trabajos? Revisión de plataformas crowdsourcing basadas en microtareas INFORMACIÓN DE LA PLATAFORMA ARTICLEONEPARTNERS https://www.articleonepartners.com/ Destinada a ingenieros e investigadores. Se publican ideas de patentes para que los usuarios puedan llevar a cabo la documentación necesaria para poder realizar la misma. INFORMACIÓN DE LAS TAREAS Las compañías interesadas en realizar una patente. ¿Cómo se publican? Las compañías dan la información sobre la patente que desean realizar para que los usuarios trabajen en ella. ¿Quién resuelve los trabajos? Los usuarios de la plataforma. ¿Cómo se resuelven? ¿Hay algún tipo de recompensa? Los usuarios de la plataforma realizan una investigación de acuerdo al tipo de trabajo ofertado. Sí, económica. INFORMACIÓN DE LA COMUNIDAD Existen dos tipos de usuarios: ¿Cómo interactúan los Los usuarios interesados que ofertan trabajos. usuarios con la Web? Los usuarios que resuelven los trabajos ofertados. ¿Cómo interactúan los Existe poca interacción a nivel comunidad. usuarios entre ellos? ¿Hay algún sistema de No. popularidad? OBSERVACIONES Es muy sencillo publicar y comenzar a realizar trabajos, pero no da la sensación de que se está en una comunidad. Es una Web un tanto simple dónde la información de los trabajos es tan extensa y completa que puede saturar al lector. El diseño está obsoleto. Tabla 9. Ficha plataforma ARTICLEONEPARTNERS. 52 Capítulo 3 Nombre URL Descripción ¿Quién publica los trabajos? Revisión de plataformas crowdsourcing basadas en microtareas INFORMACIÓN DE LA PLATAFORMA CHANGE.ORG https://www.change.org/ Destinada a todo tipo de público. Se publican peticiones para que el resto de usuarios las secunden. INFORMACIÓN DE LAS TAREAS Los interesados en que éste sea resuelto. ¿Cómo se publican? Los interesados se registran creando una cuenta e introducen sus tareas (peticiones). ¿Quién resuelve los trabajos? Los usuarios de la plataforma. ¿Cómo se resuelven? ¿Hay algún tipo de recompensa? Los usuarios eligen el trabajo en el que están interesados y lo realizan aportando sus datos junto a su firma. No. INFORMACIÓN DE LA COMUNIDAD Existen dos tipos de usuarios: ¿Cómo interactúan los Los usuarios interesados que crean peticiones. usuarios con la Web? Los usuarios que resuelven las peticiones. ¿Cómo interactúan los Mediante un tablón de publicaciones. usuarios entre ellos? ¿Hay algún sistema de Sí, de las tareas (peticiones) con más firmas. popularidad? OBSERVACIONES Es muy sencillo publicar y comenzar a realizar trabajos, pero no da la sensación de que se está en una comunidad. El sistema para iniciar peticiones es muy claro y solo tiene tres pasos. El desplazamiento del histórico de una petición puede ser muy extenso. Diseño visualmente atractivo y moderno. Tabla 10. Ficha plataforma CHANGE.ORG. 53 Capítulo 3 Nombre URL Descripción ¿Quién publica los trabajos? ¿Cómo se publican? ¿Quién resuelve los trabajos? ¿Cómo se resuelven? ¿Hay algún tipo de recompensa? Revisión de plataformas crowdsourcing basadas en microtareas INFORMACIÓN DE LA PLATAFORMA TOPCODER http://www.topcoder.com/ Destinada a programadores. Se ofertan trabajos de tipo software para ser resueltos. INFORMACIÓN DE LAS TAREAS Los interesados en que éste sea resuelto. Un usuario interesado en un diseño publica el tipo de trabajo que quiere y ha de pagar previamente el tipo de "paquete" por el que recibirá varios sets. Los usuarios concursan de forma que el interesado recibe varios trabajos de distintos usuarios dependiendo la cuenta contratada. El usuario interesado elige un ganador. Sí, económica y de reconocimiento. INFORMACIÓN DE LA COMUNIDAD Existen dos tipos de usuarios: ¿Cómo interactúan los Los usuarios interesados, que ofertan trabajos. usuarios con la Web? Los desarrolladores que resuelven los trabajos. Los perfiles de los usuarios ofrecen una gran cantidad de ¿Cómo interactúan los información sobre los trabajos de los mismos, puntuación, usuarios entre ellos? premios, etc. Sí, hay puntuaciones, galardones, concursos mensuales, ¿Hay algún sistema de gráficas y una enorme cantidad de información sobre los popularidad? desarrolladores. OBSERVACIONES Pese a la gran cantidad información que se ofrece sobre los desarrolladores de la plataforma es realmente poco usable y complicado guiarse por la misma. El diseño está obsoleto y poco cuidado. No está nada claro dónde encontrar la secciones o como publicar un trabajo. Tabla 11. Ficha plataforma TOPCODER. 54 Capítulo 3 Revisión de plataformas crowdsourcing basadas en microtareas Finalmente, después de la revisión de plataformas crowdsourcing realizada, a continuación se enumeran aquellos aspectos más relevantes a tener en cuenta obtenidos a partir de conocer cómo funcionan otros proyectos. Estos se incorporarán y/o perfeccionarán en la nueva plataforma de análisis de información de analizo.info asentada en PyBossa. Hacer más notoria la sensación de estar en una comunidad. Cuidar el diseño de la plataforma (aspecto visual). Adaptabilidad a de la plataforma y/o aplicaciones a diferentes dispositivos (Responsive Web Design). Proporcionar información de los proyectos de una forma sencilla y bien estructurada para facilitar su comprensión. Incluir, en la medida de lo posible, instrucciones para orientar la participación en las tareas a resolver. Posibilitar consultar el estado de un proyecto determinado en todo momento. Ofrecer estadísticas globales o rankings en la plataforma de usuarios y proyectos para resaltar su actividad. 55 Capítulo 3 Revisión de plataformas crowdsourcing basadas en microtareas 56 Capítulo 4 Adaptación de analizo.info al entorno PyBossa 4. Adaptación de analizo.info al entorno PyBossa Para comenzar a instalar, personalizar y utilizar PyBossa en un entorno para producción abierto a todo el mundo como base para la comunidad online de analistas de información analizo.info, previamente se estableció un procedimiento de trabajo propio que consistió en realizar su instalación de forma local para poder conocerlo en profundidad. En este capítulo de la memoria, se recoge como ha sido dicho procedimiento partiendo del punto en el cual la instalación local y todas las pruebas pertinentes fueron realizadas explicando cada parte del proceso junto a comentarios oportunos. Cabe destacar que la parte técnica de cada uno de los procesos se encuentra en los anexos del trabajo, lo cuales se mencionan a lo largo de las explicaciones para facilitar su seguimiento y reproducción. 4.1 Instalación local y configuración específica de PyBossa Para entender mejor el proceso de instalación y configuración de PyBossa se tomó como guía su manual de instalación para establecer los pasos a seguir. A pesar de que aparentara ser un procedimiento sencillo, durante el proceso se tuvieron algunos contratiempos como se verá más adelante. Por ello, conviene recordar que como bien se especifica prácticamente en todos los software open source, estos se ofrecen sin garantía alguna, aludiendo a que si algo no funciona como se espera nadie se hace responsable. Toda la información acerca de PyBossa se puede encontrar dentro de su página Web en la sección DOCS75. La clave fue leer y entender la sección que hace referencia a instalar un servidor PyBossa, en inglés Install your own PyBossa server76. Así pues, se elaboró un manual de instalación más completo y detallado que el original (anexo Instalación de un servidor PyBossa (v0.2.1 - v0.23)). A continuación, se recoge la experiencia resultante de la instalación de PyBossa de cada uno de sus apartados. 75 Welcome to PyBossa’s documentation - PyBossa v0.2.1 documentation [en línea]. (n.d.). Disponible en: http://docs.pybossa.com/en/latest/ [Consulta: 7 de junio de 2014]. 76 Install your own PyBossa server - PyBossa v0.2.1 documentation [en línea]. (n.d.). Disponible en: http://docs.pybossa.com/en/latest/installing_pybossa.html [Consulta: 7 de junio de 2014]. 57 Capítulo 4 Adaptación de analizo.info al entorno PyBossa 4.1.1. Pre-requisites (Identificación de prerrequisitos). Qué hace falta tener para poder empezar: Python >= 2.7.2, <3.0 PostgreSQL version 9.1 and the Python bindings for PostgreSQL database. Redis >= 2.6 pip for installing python packages (e.g. on ubuntu python-pip) En primer lugar, después de conocer los requisitos para poder comenzar con la instalación de PyBossa, se procedió con la preparación de un entorno para poder probarlo. Para poder probar PyBossa de forma local, se hizo uso del software Oracle VM VirtualBox con el fin de crear una máquina virtual que sirviera de entorno para pruebas. En este primer punto, también se hace referencia a que se necesita un sistema operativo, en este caso la versión del sistema operativo para servidores Ubuntu Server 12.04.3 LTS se menciona como lo más recomendable. Las siglas LTS significan en inglés Long Term Support, que viene a querer decir que se trata de una distribución con soporte a largo plazo, en concreto hasta abril de 2017. Así pues, antes de proseguir, se creó una máquina virtual y se instaló dicho sistema operativo en ella (anexo Instalación de Ubuntu Server 12.04.3 LTS x64 en Oracle VM VirtualBox) para poder empezar con la instalación de PyBossa. 4.1.2. Setting things up (Preparación previa). Qué cosas van a hacer falta: Git77: Installing git -a distributed version control system. PostgreSQL: Installing the PostgreSQL database. virtualenv78: Installing virtualenv (optional, but recommended) Una vez se tuvo la máquina virtual creada con el sistema operativo funcionando, este apartado no presentó ningún inconveniente, simplemente se instaló lo que se pedía. 4.1.3. Installing the PyBossa Python requirements (Instalación de librerías python requeridas por PyBossa). En este caso, tampoco hay nada a destacar, se trata de una serie de paquetes indispensables para que PyBossa pueda funcionar. 77 Sistema de control de versiones libre y de código abierto distribuido. Permite crear entornos virtuales de Python para manejar diferentes dependencias y versiones sin tener que requerir de permisos de administrador y sin afectar al sistema operativo huésped. 78 58 Capítulo 4 Adaptación de analizo.info al entorno PyBossa 4.1.4. Virtualenv env (Creación de un entorno virtual con virtualenv). Este apartado es importante, puesto que aunque se puede omitir resulta de gran interés. Un entorno virtual no es más que un directorio especial que permite contener de forma aislada librerías y demás paquetes indispensables para que funcione una determinada aplicación (en este caso PyBossa) sin afectar al sistema operativo. Esto simplifica y reduce los problemas que pueden aparecer a la hora de gestionar las dependencias entre paquetes en el sistema operativo Linux. Si algo sale mal, deshabilitando y eliminado el entorno virtual creado es como si no hubiera pasado nada puesto que esas librerías no son las mismas que usa el sistema operativo. 4.1.5. # get the source (Obtención del código fuente de PyBossa). Haciendo uso del software git instalado previamente se obtuvo el código fuente de PyBossa. 4.1.6. Configuración de PyBossa. Aquí el manual oficial de PyBossa no contaba con tanto detalle como en pasos anteriores. Lo que se pretende en este punto es editar los archivos settings_local.py y alembic.ini para configurar los parámetros que PyBossa necesita para funcionar. Para facilitar posteriores instalaciones, la configuración de estos dos archivos se encuentra ampliada en el nuevo manual proporcionado. Al editarlos, se descubre, que PyBossa precisa también de un servidor de correo (anexo Instalación del servidor de correo Postfix compatible con Ubuntu Server), así que antes de continuar se incorporó a la máquina virtual creada. 4.1.7. Installing Redis (Instalación de Redis). En este punto surgió un contratiempo con la instalación que impidió continuar de forma inmediata. El problema fue que cuando se trató de instalar Redis79 de la forma tradicional mediante el gestor de paquetes, en los repositorios por defecto del sistema operativo no se encontraba la última versión del software disponible o al menos una superior o igual a la 2.6 requerida por PyBossa, algo que ya se avisaba en el manual “Redis can be installed via your GNU/Linux distribution package system (check that it is at least version 2.6) or downloading the package directly from its official Redis site.” 79 Introduction to Redis [en línea]. (n.d.). Disponible en: http://redis.io/topics/introduction [Consulta: 24 de junio de 2014]. 59 Capítulo 4 Adaptación de analizo.info al entorno PyBossa Para solventarlo, la primera idea consistió en añadir otro repositorio no oficial al sistema operativo que si ofrecía versiones más actuales. Esto no dio buen resultado puesto que al proceder con la instalación se corrompió un paquete del sistema operativo causando un funcionamiento general inestable del mismo. La segunda, esta vez la acertada, consistió en ir a la página oficial de Redis, descargar el código fuente, compilarlo e instalarlo. Una vez instalado, la configuración se hizo siguiendo el manual de la página oficial de Redis, ya que en el de PyBossa no figuraba todo el proceso. Lo más destacable en este caso tuvo que ver con el script de inicio que arranca Redis al iniciar el sistema operativo. No se trató de copiar y pegar un archivo y ya está, en este caso se tuvo que crear uno nuevo adaptado tomando como base el que proporcionaba la instalación de PyBossa y el que se encontraba en el propio código fuente de Redis descargado. El hecho de no haber instalado o configurado de forma correcta Redis se reflejaba en la plataforma causando entre otras muchas cosas que por ejemplo en el apartado comunidad no se mostraran los usuarios debidamente (Figuras 8 y 9). Figura 8. Comunidad PyBossa analizo.info instalación local. Figura 9. Fallo comunidad PyBossa analizo.info instalación local. 60 Capítulo 4 Adaptación de analizo.info al entorno PyBossa 4.1.8. Configuring the DataBase (Configurando la base de datos). En este apartado se configuró el sistema de gestión de base de datos PostgreSQL que utiliza PyBossa. En primer lugar se creó el usuario que accedería a la base de datos, seguidamente se creó la base de datos asociada y finalmente se generaron las tablas en dicha base de datos que PyBossa necesita para funcionar. Lo que hay que tener en cuenta es que hay que usar los mismos que se han especificado en el paso 6 de configuración de PyBossa en los archivos de configuración settings_local.py y alembic.ini. 4.1.9. Arrancar PyBossa. En el punto final del manual, se muestra como arrancar PyBossa y a qué url hay que acceder para poder comenzar a usarlo. Para poder realizar la prueba, se tuvieron que realizar cambios en la configuración de la máquina virtual (anexo Acceso desde el ordenador host al servidor Ubuntu en Oracle VM VirtualBox) para poder hacer que formara parte de la red local. Hay que destacar que estos pasos corresponderían a la instalación base de PyBossa, pero aún existen dos más para poder tener una instalación en buenas condiciones de funcionamiento. Puesto que estos apartados no presentaron ningún inconveniente durante su ejecución, se procederá a hacer simplemente una serie de comentarios respecto a ellos dado que el procedimiento detallado se puede consultar en los anexos: Desplegar PyBossa mediante el servidor Web Apache y mod_wsgi. Configurar una página Web para el modo mantenimiento del servidor PyBossa. 4.1.10. Desplegar PyBossa mediante el servidor Web Apache 2 y mod_wsgi. Respecto a este procedimiento sólo hay dos comentarios cuya aportación se considera pertinente destacar: Solo se mencionaba habilitar un módulo de Apache (wsgi) pero en realidad hacían falta dos más (headers y rewrite) que se tuvieron que deducir del error que se mostraba. Cuando se termina el proceso de instalación se ha de detener el servidor Apache y volver a iniciar, no basta con usar la opción de reiniciar. Esto es un caso peculiar dado que puede causar confusión respecto a si se ha seguido bien el proceso descrito. 61 Capítulo 4 Adaptación de analizo.info al entorno PyBossa 4.1.11. Configurar una página Web para el modo de mantenimiento del servidor PyBossa. Este apartado explica cómo se puede especificar una página Web estática para cuando se desee deshabilitar el acceso al servidor PyBossa. En el manual oficial de PyBossa se hace referencia a hacer un pequeño script para poder cambiar entre lo que vendría a ser el modo normal de funcionamiento y el modo de mantenimiento. A partir de esta idea se decidió crear dicho script pero no solo con estas dos funcionalidades sino con todas las que se fueron considerando indispensables para poder administrar todos los aspectos relacionados con el servidor. Este programa se denominó pyadmin (anexo Script pyadmin para la administración del servidor PyBossa de analizo.info). En su elaboración se ha tenido en cuenta desde primer momento la diferencia que puede suponer entre detener y reiniciar citada anteriormente (punto 4.1.10), por ello hay dos versiones de cada opción, la normal y la que comienza por forzar que para y arranca el servidor Web Apache. Llegado a este punto, se puede decir que al analizar el resultado final se obtuvo por una parte una instalación funcional del software elegido (Figura 10) y por otra una documentación detallada para poder reproducir el procedimiento de una forma más precisa. Figura 10. Instalación finalizada PyBossa. 62 Capítulo 4 Adaptación de analizo.info al entorno PyBossa 4.2 Contratación de un servidor privado virtual Una vez se tuvo claro el procedimiento de instalación local de PyBossa, se procedió a la búsqueda de un hosting Web que cumpliera los requisitos mínimos para poder realizar su instalación en un entorno para producción. Después de hacer una búsqueda en Internet, se decidió optar por contratar un servidor privado virtual de la compañía OVH debido a que era indispensable poder gestionar cualquier aspecto de su configuración sin tener que depender de la empresa que lo ofreciera. Sus características son las siguientes: Modelo: VPS Classic 1 Precio: 1,99 € / mes + IVA (2,41 € IVA incl.) Procesador: 1 vCore RAM: 1 GB Disco duro: 10 GB Raid 10 Localización: Europa > Roubaix (FR) Sistema operativo: Linux Distribución: Ubuntu Versión: Ubuntu 12.04.4 Server 64 bits Idioma: Inglés Básicamente lo indispensable era poder contar con el sistema operativo Linux (preferiblemente Ubuntu Server) y, al menos, 1 GB de RAM para que PyBossa pudiera funcionar con cierta fluidez. El porqué de elegir OVH se fundamentó en primer lugar porque se trataba de una compañía conocida y con buena reputación y, en segundo lugar, por el precio (116,02 € IVA incl. por año). Este desembolso económico corrió a cargo de los cofundadores de analizo.info. 63 Capítulo 4 Adaptación de analizo.info al entorno PyBossa 4.3 Migración de usuarios de analizo.info al nuevo entorno En esta fase se quiso contemplar la posibilidad de exportar los usuarios que contenía la base de datos de la versión inicial de analizo.info a la nueva plataforma. Para este propósito se diseño un script de migración de usuarios que extraía la información deseada de la antigua base de datos MySQL y la preparaba para darla de alta en la base de datos PostgreSQL de PyBossa. La parte técnica del procedimiento se encuentra recogida en los anexos que se listan a continuación: Migrador de usuarios de analizo.info a PyBossa. Comandos PostgreSQL de interés en Linux. Restaurar una base de datos PostgreSQL en Linux. Este procedimiento, pese a que inicialmente pudiera parecer tedioso y/o problemático, se pudo realizar sin ningún tipo de inconvenientes reincorporando satisfactoriamente a los 241 usuarios que albergaba la base de datos antigua con la información particular de cada uno de ellos (nombre, dirección de correo electrónico etc.). 4.4 Creación del subdominio proyectos.analizo.info Una vez se tuvo instalado PyBossa el servidor privado virtual contratado e importados sus antiguos usuarios, hacía falta que se pudiera acceder a la nueva plataforma. Para ello, dado que ya se contaba con el dominio analizo.info, se decidió crear el subdominio proyectos.analizo.info para poder acceder al servidor PyBossa instalado sin utilizar la IP del servidor ni el nombre vpsXXXXX.ovh.net proporcionado por OVH. El proceso de cómo se hizo la redirección se encuentra detallado en el siguiente anexo: Redirección de un registro A (IP) a un nombre de dominio (Empresa 1&1). 64 Capítulo 4 Adaptación de analizo.info al entorno PyBossa 4.5 Personalización de PyBossa Una vez se tuvo prácticamente todo a punto, antes de comenzar con la implementación de proyectos de análisis de información, se procedió a modificar tanto la parte visual como la funcional que viene de serie en la instalación de PyBossa. En esta fase, cabe destacar que modificar el aspecto visual no comportó ningún tipo de inconveniente puesto que el tema por defecto de PyBossa está desarrollado con Twitter Bootstrap80 v2.2.1, un framework popular para el desarrollo de proyectos Web adaptables a diferentes dispositivos (Responsive Web Design81). La parte más complicada fue la restricción de funcionalidades específicas de PyBossa que no se deseaba utilizar por el momento. Respecto a esto último, hay que decir que no es que se eliminara el acceso visual a algunas opciones de los menús, sino que se modificó el código fuente de PyBossa para evitar que un usuario malintencionado pudiera acceder a estas funciones conociendo las direcciones Web puesto que se pueden deducir a partir de una instalación base. En general, los cambios realizados fueron los siguientes: Visuales: o Logo de analizo.info en el menú principal. o Cambio de los colores según el manual de estilo de analizo.info o Reordenación del las aplicaciones destacadas por orden de creación descendente (de más nuevas a menos). o Ocultación del botón crear cuenta cuando se ha iniciado sesión. o Optimización del tamaño de página de inicio para su visualización en diferentes dispositivos. o Mejora de la traducción general al castellano de la plataforma. o Inclusión del apartado “código ético”. o Modificación de los menús de la plataforma. o La clave de acceso a la API sólo se muestra en el perfil a los usuarios administradores. 80 Bootstrap - The most popular front-end framework for developing responsive, mobile first projects on the web. [en línea]. (n.d.). Disponible en: http://getbootstrap.com/ [Consulta: 30 de febrero de 2014]. 81 Técnica de implementación de sitios Web caracterizada por su adaptabilidad a diferentes dispositivos. 65 Capítulo 4 Adaptación de analizo.info al entorno PyBossa Funcionales: o Solo los usuarios con rol administrador pueden: Acceder a la función “crear aplicación” de la plataforma82. Hacer uso de la API de la plataforma para la creación de aplicaciones. Solicitar una nueva clave de acceso a la API83. Acceder a ver sus aplicaciones creadas84. Si un usuario sin privilegios de administrador trata de acceder a alguna funcionalidad restringida aparecen los siguientes mensajes (Figuras 11 y 12): Figura 11. Mensaje denegación acceso PyBossa (1). Figura 12. Mensaje denegación acceso PyBossa (2). A continuación, en las siguientes figuras, se pueden ver algunos ejemplos de las modificaciones introducidas: Figura 13. Menú PyBossa original (superior) y menú adaptado analizo.info (inferior). Figura 14. Botón crear cuenta. 82 Crear aplicación: http://proyectos.analizo.info/app/new Solicitar nueva clave de acceso a la API: http://proyectos.analizo.info/account/profile/resetapikey 84 Aplicaciones creadas: http://proyectos.analizo.info/account/profile/applications 83 66 Capítulo 4 Adaptación de analizo.info al entorno PyBossa Figura 15. Clave API en el perfil de usuario administrador. Figura 16. Funcionalidades disponibles según perfil / rol. Para hacerse una idea de los cambios introducidos puede optarse a realizar las comparaciones pertinentes con otras instancias de PyBossa tales como: Crowdcrafting85. ForestWatchers86. Dado que en un futuro sería preciso conocer cuáles fueron los cambios realizados y en que archivos se habían hecho se realizó lo siguiente. Por una parte se agruparon todos los archivos modificados junto a sus versiones originales para ofrecer la posibilidad de comprarlos y así poder ver las modificaciones realizadas. Por otra, se diseñó un script que permitiera aplicarlos de forma automática sobre una versión instalada de PyBossa. Otro de los aspectos más importantes planteados llegado a este punto del trabajo, era la cuestión de cómo hacer copias de seguridad tanto de la instalación como de la base de datos. Por ello, se diseñó un procedimiento para la creación de copias de seguridad. La información referente a todo lo mencionado previamente en este apartado se recoge en los siguientes anexos: Gestión de las traducciones en PyBossa. Script para la personalización del servidor PyBossa de analizo.info. Creación de una copia de seguridad del servidor PyBossa de analizo.info. 85 Crowdcrafting [en línea]. (n.d.). Disponible en: http://crowdcrafting.org [Consulta: 9 de febrero de 2014]. 86 ForestWatchers [en línea]. (n.d.). Disponible en: http://forestwatchers.net/pybossa [Consulta: 9 de febrero de 2014]. 67 Capítulo 4 Adaptación de analizo.info al entorno PyBossa 4.6 Mejoras generales introducidas Adicionalmente, una vez se tuvo PyBossa instalado y adaptado se pensó en que dado que el servidor contratado era de gama baja y puesto que se iban a implementar proyectos en los que un número indeterminado de personas podrían participar de forma simultánea, se consideró oportuno incluir las siguientes mejoras a la plataforma para poder afrontar una avalancha de peticiones de forma simultánea en un momento dado. La primera de ellas consistió en utilizar la CDN CloudFlare por su popularidad y por ofrecer un plan de uso gratuito. Una red de distribución de contenido, en inglés, Content Delivery Network, no es más que una red de ordenadores que mantienen copias de datos en diversos puntos de la red que forman, para agilizar su consulta disminuyendo su tiempo de acceso (Figura 17). De esta forma se reduce la carga soportada por el servidor Web que los contiene. Figura 17. CloudFlare. Algunas de sus ventajas más destacables son las siguientes: Permite acelerar la carga de las páginas. Mejorar los tiempos de respuesta. Protege los datos. Mejorar el posicionamiento de los sitios Web. Reducir el consumo de ancho de banda. 68 Capítulo 4 Adaptación de analizo.info al entorno PyBossa A continuación se explica su funcionamiento básico: 1. Los usuarios acceden a los contenidos desde cualquier lugar del mundo. Las peticiones se envían a los servidores DNS. Se redirige la petición al CDN más cercano al usuario y con un tiempo de respuesta más bajo. 2. Envío de los archivos al usuario y comunicación entre la CDN y los servidores de alojamiento. Una vez enviada al usuario la petición de la CDN, pueden darse tres situaciones: Los archivos solicitados aún no están disponibles en caché en cuyo caso la CDN los recupera del hosting y los reenvía al usuario. Los archivos solicitados están en la caché (en función de las reglas configuradas), en cuyo caso se reenvían desde la caché sin tener que recurrir a los servidores donde están alojados, liberándolos de una parte de la carga. Los archivos o páginas solicitados son dinámicos o están excluidos por las reglas de caché configuradas. Entonces la CDN redirige la petición al servidor, que, a su vez, envía los contenidos solicitados directamente al usuario. Cuando expira el tiempo de vida (TTL) de los archivos cacheados, la CDN vacía la caché y vuelve a llenarla cuando otro usuario solicita el archivo. La información técnica se encuentra en el siguiente anexo: Configuración de la CDN CloudFlare con el dominio analizo.info. Finalmente, la segunda mejora introducida tuvo que ver con la optimización de recursos en el servidor Web Apache. En una ocasión, a causa de que el servidor virtual contratado sólo disponía de 1GB de memoria RAM, este se quedó colapsado instalando una serie de actualizaciones de seguridad del sistema operativo referentes al servidor Web Apache. La causa, aunque no se pudo determinar con exactitud, apuntaba a que se trataba de los servicios que hacían funcionar el servidor Web dado que era el proceso que más recursos consumía en ese instante del sistema operativo. En ese momento, reiniciando el servidor Web el problema se solucionó, pero se decidió investigar al respecto sobre cómo hacer que gestionara los recursos del sistema de forma más eficiente. 69 Capítulo 4 Adaptación de analizo.info al entorno PyBossa Básicamente, con la configuración de fábrica lo que pasa es que los procesos y subprocesos que se crean están preparados para no terminar en un período determinado de tiempo, causando que en determinadas situaciones el sistema operativo así como otras aplicaciones no dispongan de suficientes recursos para funcionar. La solución aportada consiste en hacer que pasadas un número de peticiones servidas por subproceso estos mueran liberando los recursos que utilizan y no se vuelvan a crear a menos que se requieran. De esta forma es menos probable que se repita la situación descrita. La información técnica se encuentra en el siguiente anexo: Optimización de recursos en el servidor Web Apache. Finalmente, analizo.info queda estructurado tal y como muestra el siguiente dibujo explicativo (Figura 18): Figura 18. Estructura por niveles de analizo.info. En el primer nivel se encuentra la CDN CloudFlare. En el segundo nivel se encuentran: o El dominio analizo.info y el subdominio proyectos.analizo.info gestionados por la empresa 1&1. o El servidor privado virtual con la instalación de PyBossa gestionados por la empresa OVH. 70 Capítulo 4 Adaptación de analizo.info al entorno PyBossa De forma paralela a personalización de PyBossa y mejoras generales introducidas, también se fueron desarrollando otros aspectos de interés que fueron surgiendo y que se recogieron en los siguientes anexos: Acceso a un servidor a través de SSH. Comandos básicos del editor vim. Saltos de línea de un archivo en diferentes sistemas operativos. Administración de PyBossa. Actualizar a nuevas versiones de PyBossa. Visión general del servidor PyBossa de analizo.info. Generar listado de correos de los miembros de la comunidad de analizo.info. Purgar la cache de CloudFlare. Menú de información para los proyectos de análisis de información. Integración de Google Analytics y motor de búsqueda personalizada de Google. 71 Capítulo 4 Adaptación de analizo.info al entorno PyBossa 72 Capítulo 5 Pautas para la implementación de aplicaciones de análisis de información 5. Pautas para la implementación de aplicaciones de análisis de información En este capítulo de la memoria, se recogen las pautas definidas para la implementación de aplicaciones de análisis de información independientemente del tipo que traten en el nuevo sistema junto una primera aplicación prototipo que las utiliza. 5.1 Consideraciones para la creación de aplicaciones A continuación, se describen las fases a ejecutar que componen el procedimiento para el desarrollo de una primera aplicación prototipo y que se proponen como punto de partida para la implementación de nuevas aplicaciones en la plataforma. 5.1.1. Estudio del código fuente de diversas aplicaciones existentes para PyBossa. El primer paso, puesto que se desconocía el funcionamiento interno elemental de una aplicación PyBossa, consistió en examinar detalladamente alrededor de 33 aplicaciones existentes elegidas independientemente de en qué consistieran (preguntas sobre imágenes, reconocimiento de patrones de sonido, transcripción de documentos PDF, geolocalización, etc.) con el fin de comprender cuál era identificando partes comunes de código en las mismas. Las aplicaciones revisadas se obtuvieron de los siguientes sitios: GitHub87: Crowdcrafting88. ForestWatchers89. Obtener el código fuente de las aplicaciones de GitHub no presentó ningún inconveniente ya que es posible descargarlo por medio del enlace que se ofrece. Sin embargo, obtener el código de proyectos que están en Crowdcrafting o ForestWatchers también fue posible. 87 PyBossa · GitHub [en línea]. (n.d.). Disponible en: https://github.com/PyBossa [Consulta: 9 de febrero de 2014]. 88 Crowdcrafting [en línea]. (n.d.). Disponible en: http://crowdcrafting.org [Consulta: 9 de febrero de 2014]. 89 ForestWatchers [en línea]. (n.d.). Disponible en: http://forestwatchers.net/pybossa [Consulta: 9 de febrero de 2014]. 73 Capítulo 5 Pautas para la implementación de aplicaciones de análisis de información Esto se debe a que las aplicaciones están programadas mediante lenguajes interpretados90 de tal forma que el código fuente se ejecuta en la parte del cliente, es decir, en su navegador Web no en el servidor PyBossa y por tanto ha de estar disponible al visualizar el código fuente de la página de la aplicación. Finalmente, el proceso permitió deducir que las aplicaciones por regla general están desarrolladas básicamente con HTML, CSS, Javascript y jQuery, ya que siempre siguen la misma lógica pese a su forma diferente de estar programadas internamente. Las funciones principales que las componen y su descripción es la siguiente: Cargar la información con la que se va a pedir hacer algo: o pybossa.taskLoaded(function(task, deferred) {...} Presentar la información al usuario: o pybossa.presentTask(function(task, deferred) {...} Mostrar el progreso general de la aplicación: o pybossa.userProgress(app_short_name); Guardar los resultados generados de la actividad realizada: o pybossa.saveTask(task.id, answer).done(function() {...} Ejecutar la aplicación: o pybossa.run(app_short_name); Teniendo claro esto, a falta de la parte visual y otras funciones propias de cada aplicación, se decidió hacer un esquema base de aplicación con el fin de programar todas las aplicaciones estructuralmente de forma similar. Esta plantilla se ha ido mejorando conforme se han ido creando todas las aplicaciones para este trabajo. 5.1.2. Definición de un esquema base de aplicación. Las partes que debería de tener una aplicación PyBossa desarrollada para analizo.info son las que se enumeran a continuación: Iniciar y terminar indicando la versión de la aplicación: <!-- app v1.8 --> ... <!-- app v1.8 --> 90 Los lenguajes compilados son lenguajes de alto nivel en los que las instrucciones se traducen del lenguaje utilizado a código máquina para una ejecución rápida. Por el contrario un lenguaje interpretado es aquel en el que las instrucciones se traducen o interpretan una a una siendo típicamente unas 10 veces más lentos que los programas compilados. 74 Capítulo 5 Pautas para la implementación de aplicaciones de análisis de información Especificar el nombre y dirección de correo del programador: <!-- Jorge Isnardo Altamirano <contacto AT analizo DOT info> --> Indicar (si es necesario) dónde comienza o si se incluye alguna hoja de estilo: <!-- css --> ... Indicar los mensajes que va a mostrar la aplicación: <!-- Messages for the user --> ... <!-- Loading alert box --> ... <!-- Success alert box --> ... <!-- Finish alert box --> ... Indicar los elementos que conforman la parte visual de la aplicación: <!-Task DOM for loading the needed information. It uses the class="skeleton" to identify the elements that belong to the task. --> <!-- Items for the user --> ... <!-- Left --> / <!-- Right --> / <!-- Center --> ... <!-- Feedback --> ... <!-- Progress bar --> ... Incluir (si la aplicación lo requiere) otros elementos que precisa para su funcionamiento: <!-- jQuery plugin Chosen v1.1.0 --> <!-- http://harvesthq.github.io/chosen/ --> <link type="text/css" rel="stylesheet" href="http://proyectos.analizo.info/static/apps/omc/chosen_v1.1.0/chosen.min .css"/> <script type="text/javascript" src="http://proyectos.analizo.info/static/apps/omc/chosen_v1.1.0/chosen.jquer y.min.js"></script> ... 75 Capítulo 5 Pautas para la implementación de aplicaciones de análisis de información <!-- OpenLayers v2.13.1 --> <script type="text/javascript" src="http://proyectos.analizo.info/static/ol/OpenLayers.js"></script> ... <!-- Google Maps Server --> <script type="text/javascript" src="http://maps.google.com/maps/api/js?v=3.6&amp;sensor=false"></script> Indicar dónde comienza el código que hacer funcionar la aplicación: <!-- code --> ... En referencia a este último apartado, se propone la siguiente estructura para la programación del código: Indicar el nombre (identificador único) para la aplicación: var app_short_name = "app-xxxx-YYYY"; Incluir (si es necesario) otros elementos que sirvan para configurar la aplicación de forma particular: var base_url = "http://proyectos.analizo.info/static/apps/app/YYYY/xxxx/tasks/"; Incluir (si es necesario) otras funciones particulares de la aplicación: // Disable mouse right clic $(document).bind("contextmenu", function(e) { e.preventDefault(); }); Implementar las funciones elementales que ha de tener cada aplicación descritas en el apartado anterior en el orden estipulado: // When the task is loaded, do... pybossa.taskLoaded(function(task, deferred) {...} /* Present the current task to the user. Load the task data into the HTML DOM. */ function loadUserProgress(task_id) { pybossa.userProgress(app_short_name).done(function(data) {...} ... } 76 Capítulo 5 Pautas para la implementación de aplicaciones de análisis de información pybossa.presentTask(function(task, deferred) { ... pybossa.saveTask(task.id, answer).done(function() {...} ... } pybossa.run(app_short_name); Con esta propuesta de plantilla, lo que se pretende es homogeneizar el desarrollo de futuras aplicaciones tratando de que aunque manejen diferentes tipos de información, al estar diseñadas internamente con la misma estructura, su comprensión y mantenimiento sea mucho más sencillo. 5.1.3. Especificación de la metodología de desarrollo de software utilizada para la creación de las aplicaciones. Antes de comenzar a desarrollar proyectos es conveniente plantearse una serie de etapas para proceder a su desarrollo de forma organizada. En este caso particular, se ha optado por utilizar la metodología clásica de desarrollo de software (metodología en cascada). Las fases que se han definido han sido las siguientes: 1. Especificación de requisitos (reuniones). 2. Descripción de la información a analizar. 3. Elaboración del diseño visual y funcional (centrado en el usuario). 4. Implementación (programación del código). 5. Pruebas unitarias91 y funcionales92. 6. Presentación de los resultados del análisis. A continuación, se procede a explicar los conceptos que hay que tener en mente para desarrollar aplicaciones en la instalación de PyBossa de analizo.info. Para que sea posible analizar algún tipo de información (texto, audio, vídeo, imágenes etc.) por medio de una aplicación PyBossa, esta ha de poderse segmentar en unidades de información individuales y coherentes denominadas microtareas para permitir su análisis particular. 91 En programación, una prueba unitaria es una forma de probar el correcto funcionamiento de un módulo de código. 92 En programación, una prueba funcional se basa en la ejecución, revisión y retroalimentación de las funcionalidades previamente diseñadas para el software. 77 Capítulo 5 Pautas para la implementación de aplicaciones de análisis de información Estas tareas breves son las que se presentan a los usuarios cada vez que acceden a las aplicaciones indicándoles en cada caso que han de hacer para ser resueltas. Así pues, una aplicación PyBossa se puede entender como una página HTML con Javascript que carga una tarea de un servidor PyBossa para presentarla a un voluntario pidiéndole, por ejemplo, clasificar una imagen, transcribir un documento escrito a mano, etc. Estas aplicaciones se pueden crear utilizando la interfaz Web o mediante la API que proporciona PyBossa. En este caso, se decidió optar por emplear la interfaz Web por los siguientes motivos: Requiere inicialmente de menos conocimientos para poder crear de forma satisfactoria aplicaciones. El desarrollo de la aplicación está totalmente centrado en código que la hace funcionar. No hay que programar el sistema para cargar las tareas en la aplicación ya que desde la misma interfaz Web de PyBossa se puede hacer. Desde el principio, el objetivo era desarrollar de la forma más rápida posible aplicaciones funcionales hasta dominar el proceso, dejando en segundo plano todo aquello que pese a que estuviera relacionado con la creación de las mismas fuera prescindible. Dejando esto claro, el modo de cómo crear las tareas es bastante sencillo dado que PyBossa permite importarlas desde diferentes formatos y lugares. Los formatos que maneja son CSV y JSON, caracterizados por tratarse de formatos abiertos que no requieren de ningún software en particular para su manejo. Uno de los puntos interesantes que ofrece PyBossa es el hecho de poder utilizar las hojas de cálculo de Google Drive para poder crear la lista de tareas que posteriormente se importará a la aplicación creada en la plataforma. Dado que esta es la opción más versátil por el factor de que permite a múltiples usuarios trabajar en el diseño de las mismas este es el sistema que se ha utilizado. Una vez se importan estas tareas, ya es cuestión particular de cada aplicación decidir qué hacer con ellas, por ello, este aspecto se detalla particularmente en cada aplicación posteriormente. Finalmente, respecto a los resultados que se obtienen después del proceso de análisis, lo que vienen a ser todas las respuestas que se han dado a cada unas de las tareas, 78 Capítulo 5 Pautas para la implementación de aplicaciones de análisis de información PyBossa ya dispone de una funcionalidad que permite exportarlos nuevamente en formato CSV o JSON. Pese a esto, no supone ningún inconveniente adaptar la lógica de generación de resultados por una que se adecue al objetivo que persiga la aplicación deseada. Por tanto, la clave está en decidir de qué forma se van a estructurar los datos de entrada, qué se va a pedir hacer con ellos y finalmente pesar cómo se quieren organizar las respuestas en forma de resultado. Toda esta información que se obtiene al exportar tareas o respuestas al estar incrustada en el sistema interno de PyBossa contiene otros datos incluidos por la plataforma que no son deseables en los resultados. Para poder salvaguardar este hecho, se diseñó el conjunto de scripts en python pyanalizo para la gestión de la información de las aplicaciones de analizo.info (ver anexo correspondiente). Cada aplicación creada posee el suyo dado que los resultados de análisis son diferentes como se verá más adelante. Finalmente, cabe mencionar que los recursos que precisan las aplicaciones se alojan en el servidor PyBossa en siguiente esquema de directorios: Figura 19. Esquema directorios aplicaciones. /app: Directorio que contiene elementos comunes para las aplicaciones tales como los archivos para el funcionamiento del menú de información (anexo Menú de información para los proyectos de análisis de información). /apps: Directorio que contiene elementos que precisan las aplicaciones tales como la información a analizar segmentada en tareas (ficheros html, imágenes etc.). 79 Capítulo 5 Pautas para la implementación de aplicaciones de análisis de información 5.2 Desarrollo de una aplicación prototipo El primer proyecto modelo de análisis de información creado consistió en un sistema de análisis de tuits. 5.2.1 Ficha del proyecto. Esta aplicación se implementó para asentar las bases y facilitar una primera toma de contacto con todo el procedimiento que conlleva el proceso de desarrollo de proyectos de análisis de información. Por regla general, recordar que todos los proyectos PyBossa de análisis de información creados para analizo.info deberán de responder a las siguientes cuestiones en el apartado de información de cada uno de ellos para justificarse: ¿Quién promueve el proyecto? ¿Qué objetivo se persigue? ¿Por qué se persigue? ¿Cómo acceder a los resultados? 5.2.2. Especificación de requisitos. En este caso, aunque se trató de un proyecto prototipo, se decidió como aportación original que los tuits fueran los que publicaron los miembros de la lista de parlamentarios miembros del congreso de los diputados de España con perfil en la red social Twitter93. El proceso de análisis de información que debía implementar la aplicación para cada tuit consistía en contestar al siguiente esquema de preguntas (Figura 20): Figura 20. Análisis de tuits. Esquema de preguntas. 93 @Congreso_Es/Congreso de los Diputados en Twitter. [en línea]. (n.d.). Disponible en: https://twitter.com/Congreso_Es/congreso-de-los-diputados/members [Consulta: 6 de febrero de 2014]. 80 Capítulo 5 Pautas para la implementación de aplicaciones de análisis de información Concretamente, este proyecto de análisis se compone de 6201 tuits (tareas) publicados del 7 de enero al 7 de febrero de 2014 (un mes) por 211 diputados y diputadas. 5.2.3. Descripción de la información a analizar. La información de entrada con la que se trabaja en este proyecto de análisis de información son tuits. Un tuit es un mensaje de texto plano el cual se compone como máximo de 140 caracteres. Esto se debe a que inicialmente la red social Twitter fue pensada y diseñada únicamente para ser usada en teléfonos móviles. La fisionomía de un tuit viene definida por Twitter y se compone de una serie de campos con su información pertinente asociada94. Para este proyecto en concreto, únicamente se obtiene la información de los campos que se mencionan a continuación: El nombre del usuario que ha publicado el tuit (screen_name); La fecha de publicación (created_at): El tuit publicado (text). 5.2.4. Elaboración del diseño visual y funcional. La imagen principal y título del proyecto de análisis de tuits desarrollado se puede ver en la siguiente figura: Figura 21. Análisis de tuits. Proyecto. 94 Tweets | Twitter Developers. [en línea]. (n.d.). Disponible en: https://dev.twitter.com/docs/platform-objects/tweets [Consulta: 7 de agosto de 2014]. 81 Capítulo 5 Pautas para la implementación de aplicaciones de análisis de información La aplicación consta de las siguientes partes (Figura 22): Figura 22. Análisis de tuits. Partes de la aplicación. En la parte superior (Figura 23) se muestran los mensajes que la aplicación presenta al usuario: Figura 23. Análisis de tuits. Mensajes de la aplicación. La parte izquierda está compuesta por los siguientes elementos (Figura 24): La pregunta que se realiza. Los botones para permitir responderla. Información acerca de las tareas de la aplicación. Barra de progreso. Figura 24. Análisis de tuits. Parte izquierda de la aplicación. 82 Capítulo 5 Pautas para la implementación de aplicaciones de análisis de información En la parte derecha aparece la información referente al tuit que contiene la tarea presentada (Figura 25): Figura 25. Análisis de tuits. Parte derecha de la aplicación. El funcionamiento general de la aplicación consta de las siguientes fases: Al participar en la aplicación se carga una tarea con información de un tuit. El usuario decide que responder al esquema de preguntas. Si el usuario confirma el envío de la respuesta (Figura 26), la aplicación la guarda y vuelve a presentarle otro tuit. Figura 26. Análisis de tuits. Confirmación respuesta. 5.2.5. Implementación. Para comprender mejor la lógica de funcionamiento de la aplicación, en este apartado se detalla cómo se ha diseñado internamente. a. Disposición de la información. El primer punto a resolver consistió en recuperar los tuits publicados por los miembros de la lista de parlamentarios miembros del congreso de los diputados de España con perfil en la red social Twitter desde el 7 de enero al 7 de febrero de 2014 (un mes) empleando técnicas de recuperación optimizada en la Web. Para ello se siguió el siguiente procedimiento: Obtener acceso a la API de Twitter recurriendo para ello a la información disponible en la página oficial para desarrolladores de Twitter95. 95 Twitter Developers [en línea]. (n.d.). Disponible en: https://dev.twitter.com [Consulta: 6 de febrero de 2014]. 83 Capítulo 5 Pautas para la implementación de aplicaciones de análisis de información Revisar los métodos de acceso a la información de Twitter ofrecidos por la API en su documentación96. Elaborar una lista con los nombres de los diputados y diputadas que figuraban en la lista mencionada anteriormente. Para ello se implementó el script get_user_screen_name.py que extrae de la lista guardada en formato HTML congreso_de_los_diputados.html los nombres en el fichero diputados.txt. Recuperar los tuits publicados durante el período de tiempo estipulado. Para realizar dicha tarea se implementó el script get_tweets_between_dates.py. Una vez se disponía de todos los tuits recolectados, se implementó el script to_tcsv.py cuya ejecución generaba el archivo tdata.csv que contenía toda la información recuperada estructurada en forma de tareas para el proyecto. b. Preparación de las tareas. El segundo punto a tratar consistió en trasladar a una hoja de cálculo de Google Drive toda la información que precisaba cada una de las tareas para cargarlas posteriormente en la aplicación. En este caso, simplemente importando el archivo tdata.csv. Los datos de cada tarea se estructuraron de la siguiente forma (Figura 27): Figura 27. Análisis de tuits. Plantilla tareas. user: Nombre de usuario en Twitter. url: Enlace al perfil de usuario de Twitter. date: Fecha y hora de publicación del tuit. tweet: El texto publicado. Cada fila corresponde a una tarea y las columnas son los datos de los que dispone. c. Alta de aplicación y tareas en PyBossa. El siguiente paso para todos los proyectos de análisis de información consiste en dar de alta en PyBossa la aplicación e importar las tareas. En este caso se especifica de forma completa a modo de referencia (para más información consultar el anexo Administración de PyBossa). 96 REST API v1.1 Resources | Twitter Developers [en línea]. (n.d.). Disponible en: https://dev.twitter.com/docs/api/1.1 [Consulta: 6 de febrero de 2014]. 84 Capítulo 5 Pautas para la implementación de aplicaciones de análisis de información 1. Entrar como administrador en la plataforma y seleccionar la opción de crear aplicación (Figura 28): Figura 28. Análisis de tuits. Alta de aplicación. 2. Rellenar los datos del formulario de alta: Nombre: ¿Están alejados los diputados y diputadas españoles de la ciudadanía? Identificador: politicxs-tweets-ciudadanxs Descripción breve: Clase política, tweets y ciudadanía. Miniatura: http://proyectos.analizo.info/static/apps/politicxs-tweetsciudadanxs/miniatura.png Permitir colaboradores anónimos: Sí Category: Pensamiento Ocultar la aplicación: No Task Redundancy: 397 Programador de tareas: Random98 97 La opción Task Redundancy permite configurar el número de respuestas que se ha de esperar para cada tarea para que se considere como terminada. 98 El programador de tareas permite gestionar la forma en que se presentan las tareas en la aplicación. Default or Depth First: Devuelve una tarea que no se ha completado (excluye al usuario que participa en la aplicación). Breadth First: Devuelve una tarea que tenga el menor número de respuestas (excluye al usuario que participa en la aplicación). Random: Devuelve una tarea de forma aleatoria (puede devolver la misma tarea n veces al usuario que participa en la aplicación). 85 Capítulo 5 Pautas para la implementación de aplicaciones de análisis de información 3. Para importar las tareas previamente creadas en Google Drive, dirigirse al apartado tareas, Import Tasks y elegir Google Drive Spreadsheet (Figuras 29 a 32): Figura 29. Análisis de tuits. Importar tareas. En esta sección usar la url que se obtiene al compartir una hoja de Google Drive (Debe de especificarse el permiso de acceso “Cualquier usuario que reciba el enlace”). Figura 30. Análisis de tuits. Compartir hoja de cálculo (1). Figura 31. Análisis de tuits. Compartir hoja de cálculo (2). Figura 32. Análisis de tuits. Compartir hoja de cálculo (3). 86 Capítulo 5 Pautas para la implementación de aplicaciones de análisis de información d. Programación de la aplicación. Una vez dada de alta la aplicación e importadas sus tareas, el siguiente punto consistió en implementar la aplicación, es decir, el código que permite a los usuarios interactuar con la información de las tareas para realizar el análisis (Task Presenter en PyBossa). Esta, como todas las aplicaciones, se ha diseñado empleando el esquema base propuesto en el capítulo 5.1.2. Por ello, la explicación se centrará en detallar los aspectos más relevantes de este proyecto ya que el código completo 99 se puede consultar en la cuenta de GitHub de analizo.info100. Los elementos que conforman la parte visual de la aplicación se encuentran bajo la etiqueta <!-- Items for the user --> y se distribuyen de la siguiente forma: La columna izquierda <!-- Left --> contiene: Las preguntas que formula la aplicación: <!-- Question 1 --> y <!-- Question 2 --> Información referente a la tarea en la que se está trabajando: <!-- Feedback --> La barra de progreso general: <!-- Progress bar --> La columna derecha <!-- Right --> contiene los elementos que se van a usar para mostrar la información sobre cada tuit. Respecto a las funciones de la aplicación que comienzan bajo la etiqueta <!-- code --> destaca lo siguiente: pybossa.taskLoaded(function(task, deferred) {} En esta función es posible comprender cómo acceder a la información de cada tarea. task_date.html("<strong>Fecha:</strong> " + task.info.date); Como se puede apreciar en el extracto de código anterior, el objeto task, dentro del campo info contiene la información que figura en las columnas de cada una de las tareas importadas previamente. task.info.user task.info.url task.info.date task.info.tweet 99 proyectos-analizo-info/app-tuits · GitHub [en línea]. (n.d.). Disponible en: https://github.com/proyectos-analizo-info/app-tuits [Consulta: 8 de julio de 2014]. 100 proyectos.analizo.info · GitHub [en línea]. (n.d.). Disponible en: https://github.com/proyectosanalizo-info [Consulta: 8 de julio de 2014]. 87 Capítulo 5 Pautas para la implementación de aplicaciones de análisis de información pybossa.presentTask(function(task, deferred) {} Este otro método se encarga de gestionar el funcionamiento principal de la aplicación. Mostrar el progreso de la aplicación: o loadUserProgress(task.id); Mostrar y ocultar los mensajes y partes de la aplicación: o $("#loading").fadeIn(1000); o $(".skeleton").fadeOut(1000); Mostrar y ocultar las preguntas: o $("#step2").hide(); o $("#step1").show(); Mostrar la información del tuit preparada previamente: o $("#task-user").html(task.task_user); o $("#task-date").html(task.task_date); o $("#task-tweet").html(task.task_tweet); Gestionar la lógica de los botones asociados a las preguntas y respuestas: o $(".btn-answer").off("click").on("click", function(e) {...} Guardar la respuesta a cada tarea: o pybossa.saveTask(task.id, answer).done(function() {} Finalmente, a modo de ejemplo, se muestra la información que contiene el objeto task de PyBossa al ejecutarse la aplicación para una determinada tarea (Figura 33): Figura 33. Análisis de tuits. Objeto task. 88 Capítulo 5 Pautas para la implementación de aplicaciones de análisis de información 5.2.6. Pruebas. En concreto, para dar por estable esta aplicación, se han publicado 9 versiones de la misma desde la v1.0 hasta la v1.8. Durante las pruebas de funcionamiento realizadas, este proyecto de análisis permitió descubrir que al incluir en las tareas gran cantidad de información, dado que se recuperan del servidor Web PyBossa se mostraba el error 400 Bad Request de forma arbitraria al participar en el análisis de entre 3 y 7 tuits. Básicamente, este contratiempo, tenía que ver con el tamaño de las cookies que aceptan los navegadores Web y la caché en las que son almacenadas (Figuras 34 y 35). Figura 34. Análisis de tuits. Error 400 Bad Request (1). Figura 35. Análisis de tuits. Error 400 Bad Request (2). 89 Capítulo 5 Pautas para la implementación de aplicaciones de análisis de información Para solventar esto, bastaba con borrar la caché del navegador Web pero esto obviamente no solucionaba el problema. Para ello, se introdujeron una serie de cambios la configuración del servidor Web Apache aumentando el tamaño de las cookies que gestiona (estas modificaciones se incluyen en el anexo Desplegar PyBossa mediante el servidor Web Apache 2 y mod_wsgi). Días después de hallar la solución, apareció reportada en casos similares en el proyecto de GitHub de PyBossa especificando la misma medida adoptada para hacer frente al problema101. La aplicación creada para el proyecto de análisis de tuits es accesible desde el siguiente enlace: http://proyectos.analizo.info/app/politicxs-tweets-ciudadanxs/ 5.2.7. Presentación de los resultados del análisis. Una vez concluido el análisis del proyecto, para obtener los resultados hay que utilizar los scripts creados que forman parte del conjunto de utilidades pyanalizo que se mencionan a continuación. Esto se debe hacer puesto que cada proyecto de análisis genera un resultado determinado y por ello requiere de un script particular para su procesado. Pasos a seguir: Exportar las tareas de la aplicación en formato JSON al archivo tasks.json. Exportar las respuestas a las tareas de aplicación en formato JSON al archivo answers.json. Ejecutar el script results_to_json_v2.py que hace uso de los dos archivos generados previamente para obtener el fichero results_v2.json. Este contiene la unión de las tareas y sus respuestas respectivamente como resultado final. Opcionalmente, ejecutar el script get_tweets_info.py para generar el archivo tweets.txt con los resultados del análisis en formato de texto plano. Los resultados del análisis realizado se pueden encontrar publicados y detallados en el apartado información, sección resultados de cada proyecto para favorecer su reutilización. 101 Cookie size · Issue #660 · PyBossa/pybossa · GitHub [en línea]. (26 de febrero de 2014). Disponible en: https://github.com/PyBossa/pybossa/issues/660 [Consulta: 21 de febrero de 2014]. 90 Capítulo 6 Proyectos reales de análisis de información implementados 6. Proyectos reales de análisis de información implementados En este capítulo de la memoria, se da paso a explicar cada uno de los tres proyectos de análisis de información reales desarrollados en los que se ha trabajado con diferentes asociaciones para analizar diferentes tipos de información en diversos formatos. 6.1 Análisis de programas electorales 6.1.1 Ficha del proyecto. Figura 36. Logo ACPE. Este proyecto se ha desarrollado en colaboración con la Asociación de Consumidores y Consumidoras de Productos Electorales102 (Figura 36), una agrupación para la defensa de los derechos de los y las electoras y un mecanismo para ejercer presión a los partidos y a los cargos electos. En este proyecto se analizan los programas electorales a las elecciones al Parlamento Europeo de 2014. El objetivo del análisis es identificar a qué se comprometen los partidos políticos. En el marco de la democracia representativa de la Unión Europea los partidos que obtienen representación participan en las decisiones que manan de su parlamento. Estas decisiones influyen en la vida de millones de personas, tanto dentro como fuera de la Unión Europea. Conocer a qué se comprometen los partidos políticos nos permitirá ejercer nuestro derecho de voto con mayor conocimiento, compromiso y responsabilidad. A partir de ahí, podremos ejercer el derecho a la rendición de cuentas. Estaremos en mejor disposición de exigir que los partidos informen sobre sus decisiones, justifiquen sus acciones en público y demandar que reciban sanción en caso de que haber violado sus compromisos. Las propuestas identificadas serán publicadas en formato abierto para facilitar que cualquier persona pueda utilizarlas y redistribuirlas sin ninguna limitación. Toda la información publicada y/o generada en analizo.info está bajo licencia Open Data Commons License. 102 ACPE - Asociación de Consumidoræs de Productos Electorales [en línea]. (n.d.). Disponible en: http://www.acpe.es/ [Consulta: 4 de junio de 2014]. 91 Capítulo 6 Proyectos reales de análisis de información implementados 6.1.2. Especificación de requisitos. A continuación se proporciona la lista con las especificaciones que debía cumplir el proyecto de análisis de información siguiendo las directrices de la entidad promotor. Permitir identificar propuestas electorales de un programa electoral. Para ello, en lugar de pedir escribirlas de forma manual, se planteó seleccionarlas directamente desde el texto del programa analizado con el fin de facilitar el posterior procesado de los resultados del análisis, ya que sería más sencillo obtener conclusiones de entre todas las propuestas seleccionadas obtenidas. Contemplar la posibilidad opcional de aportar comentarios junto a las propuestas identificadas. Criterios para la identificación de las proposiciones: 1. Sintaxis. Las proposiciones han de estar construidas con las siguientes estructuras: a. Con oraciones en las que el sujeto es el propio partido103, o puede deducirse por la terminación del verbo que se trata del partido, y el predicado contiene: i. un verbo activo, por ejemplo: trabajar, contribuir, establecer, promover, progresar, impulsar, profundizar, etc.; es decir, el partido político es quien desarrollará la acción propuesta. ii. un verbo que indique una toma de posición clara sobre aspectos concretos, por ejemplo: (no) defender, (no) apoyar, (no) estar por, manifestarse a favor o en contra, etc. b. Con oraciones en las que el partido político propone que otro sujeto (Unión Europea, Comunidades Autónomas, etc.) realice la acción (“subrogar el pago”, “acordar ayudas al pago”, etc.). c. Con oraciones en las que se expliciten medidas concretas, por ejemplo: limitación de mandatos, desarrollo del Estatuto del Defensor, promoción de la competencia y la innovación, etc. No se consideran proposiciones las oraciones impersonales, por ejemplo: es necesario avanzar, hay que hacer, etc. o aquellas en las que se emplean verbos relacionados con la reflexión, o la consideración, sin incorporar ninguna acción concreta, por ejemplo: considerar, entender o reflexionar. 2. Extensión. Las proposiciones debían ser oraciones completas, comenzando en mayúscula y finalizando en punto. 103 Como ejemplo en el caso del PSOE se aceptaría como sujeto el término "los progresistas". Y, en el caso de IU, se aceptaría "la izquierda europea" a la que se encuentra adherido ese partido. 92 Capítulo 6 Proyectos reales de análisis de información implementados 6.1.3. Descripción de la información a analizar. La información de entrada con la que se trabaja en este proyecto de análisis de información son archivos en formato PDF. Un PDF, en inglés, portable document format, es un formato de almacenamiento de documentos digitales independiente de plataformas de software o hardware. Se trata de un formato de tipo compuesto (imagen vectorial, mapa de bits y texto), el cual fue inicialmente desarrollado por la empresa Adobe Systems104 y oficialmente lanzado como un estándar abierto el 1 de julio de 2008 por la Organización Internacional de Estandarización como ISO 32000-1. La fisionomía de un programa electoral viene definida por el partido político o agrupación que se presenta a unas elecciones y se compromete a cumplirlo si sale elegido. Para este proyecto en concreto, hay que destacar que este tipo de documentos pese a que todos se dividen en capítulos, no poseen ni los mismos puntos ni la misma extensión, por lo que cada uno tiene su información estructurada de manera diferente. 6.1.4. Elaboración del diseño visual y funcional. Las imágenes principales y títulos de los proyectos de análisis de programas electorales creados se pueden ver en la siguiente figura: Figura 37. Análisis de programas electorales. Proyectos. 104 Software y servicios creativos en la nube | Adobe Creative Cloud [en línea]. (n.d.). Disponible en: http://www.adobe.com/ [Consulta: 8 de agosto de 2014]. 93 Capítulo 6 Proyectos reales de análisis de información implementados La plantilla de aplicación consta de las siguientes partes (Figura 38): Figura 38. Análisis de programas electorales. Partes de la aplicación. En la parte superior (Figura 39) se muestran los mensajes que la aplicación presenta al usuario: Figura 39. Análisis de programas electorales. Mensajes de la aplicación. 94 Capítulo 6 Proyectos reales de análisis de información implementados La parte izquierda está compuesta por los siguientes elementos (Figura 40): Información general acerca de que pretende el análisis de la aplicación. Información sobre el capítulo del programa electoral que se analiza. Páginas a las que corresponde la parte del programa electoral que se analiza. Enlace al programa electoral completo. Texto completo del capítulo del programa electoral a analizar. Figura 40. Análisis de programas electorales. Parte izquierda de la aplicación. 95 Capítulo 6 Proyectos reales de análisis de información implementados La parte derecha de la aplicación está compuesta por los siguientes elementos (Figura 41): Información acerca de las tareas de la aplicación. Barra de progreso. Elementos requeridos para poder realizar el análisis: o Área donde aparecen las propuestas identificadas. o Área de comentarios. Botón enviar. Figura 41. Análisis de programas electorales. Parte derecha de la aplicación. 96 Capítulo 6 Proyectos reales de análisis de información implementados El funcionamiento general de la aplicación consta de las siguientes fases: Al participar en la aplicación se carga una tarea con la información de un capítulo del programa electoral a analizar. El usuario decide seleccionando del texto las propuestas electorales que considera oportunas para el análisis. Si el usuario confirma el envío de la respuesta, la aplicación la guarda y vuelve a presentarle otro capítulo. 6.1.5. Implementación. Para comprender mejor la lógica de funcionamiento de la aplicación, en este apartado se detalla cómo se ha diseñado internamente. a. Disposición de la información. El primer punto a resolver consistió en decidir cómo se iban a gestionar los programas electorales dado que por lo general se presentan en formato PDF. La primera idea consistió en tratar de utilizar directamente los programas electorales en PDF para realizar el análisis, dado que existían ya aplicaciones en PyBossa que trabajaban con ellos105. Sin embargo, esta opción fue descartada para evitar diseñar una aplicación para un determinado formato de archivo puesto que podría darse el caso de que los programas electorales se presentaran en otros formatos. Por ello, se optó por trascribir los programas electorales a archivos HTML. Esta decisión principalmente se tomó los siguientes motivos: Para homogeneizar la información y el formato de entrada. Para posibilitar segmentar el programa electoral a analizar en capítulos individuales bien delimitados que conformarían cada una de las tareas de las aplicaciones de análisis. Para solventar el inconveniente que presentó el proyecto prototipo en relación al error 400 Bad Request. Ahora sólo se guardaría una referencia al archivo del capítulo en cada una de las tareas de la aplicación en lugar de todo su contenido. Para seleccionar y copiar automáticamente el texto. 105 Lombraña, G. D. Transcribing Tables in PDF files with CrowdCrafting/PyBossa - YouTube. [en línea]. (13 de septiembre de 2013). Disponible en: https://www.youtube.com/watch?v=yfnJHALzlZc [Consulta: 7 de agosto de 2014]. 97 Capítulo 6 Proyectos reales de análisis de información implementados De esta forma, al preparar la información que maneja la aplicación se consigue simplificar su gestión, resultando muy sistemático el proceso de pasar todos los capítulos de un programa electoral a formato HTML. La estructura de los archivos HTML diseñados se compone básicamente de una serie de elementos comunes de este lenguaje de programación: Título correspondiente al capítulo del programa electoral analizado. Hoja de estilos para el programa electoral. Contenido del capítulo (etiquetas h1, h2, p etc.). Otro de los aspectos que se tuvo presente al realizar esto, fue que para no perder el diseño o carácter que poseen los programas electorales originales de cada partido, se incorporó a los ficheros HTML (cada uno de los capítulos) cualquier elemento que contuvieran (colores, imágenes etc.) para representarlos fielmente. b. Preparación de las tareas. El segundo punto a tratar consistió en trasladar a una hoja de cálculo de Google Drive toda la información que precisaba cada una de las tareas para cargarlas posteriormente en la aplicación. Los datos de cada tarea se estructuraron de la siguiente forma (Figura 42): Figura 42. Análisis de programas electorales. Plantilla tareas. 98 Capítulo 6 Proyectos reales de análisis de información implementados file: El nombre del fichero .html que contiene el texto del capítulo del programa electoral a analizar. pdf_page_start: La página inicial del capítulo del programa electoral a analizar. pdf_page_end: La página final del capítulo del programa electoral a analizar. pdf_title_X: Títulos y subtítulos correspondientes del capítulo del programa electoral a analizar para indicar a que parte corresponde. Cada fila corresponde a una tarea y las columnas son los datos de los que dispone. Los ficheros .html tienen por nombre el de la tarea a la que se corresponden task_01.html siguiendo el orden a su vez de cada uno de los capítulos del programa electoral. Dado que esta aplicación precisaba ahora de estos archivos para funcionar, siendo necesario ubicarlos en algún sitio, para este propósito se diseñó la siguiente estructura de directorios en el servidor PyBossa (Figura 43): Figura 43. Análisis de programas electorales. Estructura de directorios. Este entramado de carpetas se encuentra en la siguiente ruta del servidor PyBossa: /home/pybossa/pybossa/themes/default/static/apps 99 Capítulo 6 Proyectos reales de análisis de información implementados A continuación se explica su contenido: ape: Proyectos de análisis de propuestas electorales. 2014: El año al que corresponden los proyectos. equo, iu, partidox etc.: Directorios con la información para cada proyecto. data: Este directorio se utiliza para almacenar la siguiente información: o answers_pretty.json: Propuestas electorales identificadas para cada uno de los capítulos del programa electoral analizado (tareas) en formato JSON. o equo-2014.pdf: El programa electoral original. o propuestas_v5.2.txt: Los resultados del análisis realizado en formato de texto plano (tareas + respuestas). o results_v2_pretty.json: Propuestas electorales identificadas junto a cada uno de los capítulos del programa electoral analizado en formato JSON (tareas + respuestas). o tasks_pretty.json: Cada una de las tareas (capítulos del programa electoral analizado) en formato JSON. tasks: Este directorio se utiliza para almacenar los ficheros HTML generados que corresponden a cada capítulo individual a analizar. Adicionalmente los archivos ACPE_analizo_EQUO.png, css.css y equo_header.jpg se corresponde al logo de la aplicación, su hoja de estilos y una imagen de cabecera para cada capítulo respectivamente. En referencia a la configuración del proyecto en la plataforma PyBossa, se han tenido en cuenta aspectos que se mencionan a continuación. Cada una de las tareas había de presentarse secuencialmente para analizarla, por ello se utilizó la configuración del programador de tareas por defecto, ya que no tendría sentido leer los capítulos de un programa electoral de forma aleatoria. Por otra parte, para dar por analizado cada capítulo, se especificó que este debía de ser analizado al menos por un total de 3 personas para que el análisis fuera válido y consistente. c. Programación de la aplicación. Una vez dada de alta la aplicación e importadas sus tareas, el siguiente punto consistió en implementar la aplicación, es decir, el código que permite a los usuarios interactuar con la información de las tareas para realizar el análisis (Task Presenter en PyBossa). 100 Capítulo 6 Proyectos reales de análisis de información implementados Esta, como todas las aplicaciones, se ha diseñado empleando el esquema base propuesto en el capítulo 5.1.2. Por ello, la explicación se centrará en detallar los aspectos más relevantes de este proyecto ya que el código completo106 se puede consultar en la cuenta de GitHub de analizo.info. Los elementos que conforman la parte visual de la aplicación se encuentran bajo la etiqueta <!-- Items for the user --> y se distribuyen de la siguiente forma: La columna izquierda <!-- Left --> contiene: Información general acerca de que pretende el análisis de la aplicación: <h1>…</h1> Información sobre el capítulo del programa electoral que se analiza: <h5 id="breadcrumbs"… </h5> Páginas a las que corresponde la parte del programa electoral que se analiza: <h5 id="pdf_pages" … </h5> Enlace al programa electoral completo: <h6 id="pdf_url" … </h6> Elemento en el que se cargará el archivo HTML generado que contiene el texto del capítulo del programa electoral a analizar: <div id="page"></div> La columna derecha <!-- Right --> contiene los siguientes elementos: Información referente a la tarea en la que se está trabajando: <!-- Feedback --> La barra de progreso general: <!-- Progress bar --> Bajo la etiqueta <!-- Submission --> se encuentran los elementos requeridos para poder realizar el análisis: o Área donde aparecen las propuestas electorales que se van identificando. o Área de comentarios. o Botón de enviar. Respecto a las funciones de la aplicación que comienzan bajo la etiqueta <!-- code --> destaca lo siguiente: Variable para definir el nombre del proyecto particular: var app_short_name = "ape-xxxx-YYYY"; 106 proyectos-analizo-info/app-ape · GitHub [en línea]. (n.d.). Disponible en: https://github.com/proyectos-analizo-info/app-ape [Consulta: 8 de julio de 2014]. 101 Capítulo 6 Proyectos reales de análisis de información implementados Variable para definir la ruta donde se encuentran los ficheros HTML para cada una de las tareas del proyecto particular: var base_url = "http://proyectos.analizo.info/static/apps/ape/YYYY/xxxx/tasks/"; Dos funciones adicionales que sirven para deshabilitar el botón secundario del ratón y habilitar únicamente el funcionamiento de las teclas suprimir y retroceso respectivamente: // Disable mouse right clic $(document).bind("contextmenu", function(e) {...} // Allow only backspace and delete $("#answer").keydown(function(e) {...} pybossa.taskLoaded(function(task, deferred) {} Esta función se encarga de preparar para mostrar la información descrita anteriormente para cada tarea (Figura 44): Figura 44. Análisis de programas electorales. Función pybosssa.taskLoaded. Además, cabe destacar que incluye el mecanismo de identificación de propuestas electorales mediante la selección de texto asociado al evento mouseup del ratón. pybossa.presentTask(function(task, deferred) {} De este otro método principalmente hay que enfatizar el funcionamiento del sistema de carga y presentación de las tareas que hace uso de los ficheros HTML mencionados con anterioridad. Cuando se va a mostrar la tarea en cuestión, el servidor PyBossa sólo devuelve el nombre del archivo .html (task_xx.html) que contiene la información completa para la tarea. Entonces, mediante el uso de la función .load() de jQuery se carga en el elemento <div id="page"></div> el archivo HTML asociado a la tarea con el texto completo del capítulo a analizar mediante el siguiente código: $("#page").load(task.file_url, function(responseText, textStatus, XMLHttpRequest) {...} Este sistema minimiza la cantidad información que el servidor PyBossa debe devolver al usuario que participa en la aplicación ya que esta acción de recuperación y carga del archivo HTML la efectúa el usuario para cada tarea de forma independiente al servidor PyBossa. 102 Capítulo 6 Proyectos reales de análisis de información implementados Finalmente, a modo de ejemplo, se muestra la información que contiene el objeto task de PyBossa al ejecutarse la aplicación para una determinada tarea (Figura 45): Figura 45. Análisis de programas electorales. Objeto task. 103 Capítulo 6 Proyectos reales de análisis de información implementados 6.1.6. Pruebas. En concreto, para dar por estable esta aplicación, se han publicado 11 versiones de la misma desde la v1.0 hasta la v2.0. Durante las pruebas de funcionamiento realizadas a las aplicaciones de cada uno de los proyectos de análisis de información de programas electorales, no se detectó ningún funcionamiento indeseado referente a errores de programación. Sin embargo, si se fueron incorporando las características que se mencionan a continuación derivadas de un uso no deseado de las mismas: La restricción de escritura en el área de identificación de propuestas. (Sólo se permite el borrado mediante las teclas suprimir y retroceso). La desactivación del botón derecho del ratón. El restablecimiento de la barra de desplazamiento del texto cada vez que se carga una tarea nueva. La limitación a X caracteres (10 por defecto) para considerar que el texto seleccionado es una propuesta admisible. Las aplicaciones que han sido creadas para cada uno de los proyectos de análisis de programas electorales son las siguientes: Análisis programa electoral Podemos107. Análisis programa electoral Partido Popular (PP) 108. Análisis programa electoral Izquierda Unida (IU) 109. Análisis programa electoral Partido X110. Análisis programa electoral EQUO111. Análisis programa electoral Unión Progreso y Democracia (UPyD) 112. Análisis programa electoral Partido Socialista Obrero Español (PSOE) 113. 107 Análisis programa electoral Podemos: http://proyectos.analizo.info/app/ape-podemos-2014/ Análisis programa electoral Partido Popular (PP): http://proyectos.analizo.info/app/ape-pp-2014/ 109 Análisis programa electoral Izquierda Unida (IU): http://proyectos.analizo.info/app/ape-iu-2014/ 110 Análisis programa electoral Partido X: http://proyectos.analizo.info/app/ape-partidox-2014/ 111 Análisis programa electoral EQUO: http://proyectos.analizo.info/app/ape-equo-2014/ 112 Análisis programa electoral Unión Progreso y Democracia (UPyD): http://proyectos.analizo.info/app/ape-upyd-2014/ 113 Análisis programa electoral Partido Socialista Obrero Español (PSOE): http://proyectos.analizo.info/app/ape-psoe-2014/ 108 104 Capítulo 6 Proyectos reales de análisis de información implementados 6.1.7. Presentación de los resultados del análisis. Una vez concluido el análisis del proyecto, para obtener los resultados hay que utilizar los scripts creados que forman parte del conjunto de utilidades pyanalizo que se mencionan a continuación. Esto se debe hacer puesto que cada proyecto de análisis genera un resultado determinado y por ello requiere de un script particular para su procesado. Pasos a seguir: Exportar las tareas de la aplicación en formato JSON al archivo tasks.json. Exportar las respuestas a las tareas de aplicación en formato JSON al archivo answers.json. Ejecutar el script results_to_json_v2.py que hace uso de los dos archivos generados previamente para obtener el fichero results_v2.json. Este contiene la unión de las tareas y sus respuestas respectivamente como resultado final. Opcionalmente, ejecutar el script get_propuestas_electorales_v5.2.py para generar el archivo propuestas_v5.2.txt con los resultados del análisis en formato de texto plano. Los resultados del análisis realizado se pueden encontrar publicados y detallados en el apartado información, sección resultados de cada proyecto para favorecer su reutilización. 105 Capítulo 6 Proyectos reales de análisis de información implementados 6.2 Análisis de noticias 6.2.1 Ficha del proyecto. Figura 46. Logo OCMC. Este proyecto se ha desarrollado en colaboración con el Observatorio de Cooperación y Medios de Comunicación114 (Figura 46), una iniciativa de la Fundación Instituto Sindical de Cooperación al Desarrollo (ISCOD) 115; ONGD creada en 1990 por la Unión General de Trabajadores de España (UGT) como instrumento para canalizar la solidaridad y la cooperación con las organizaciones trabajadores y trabajadoras de los países en desarrollo. Para este proyecto en concreto ISCOD cuenta con el apoyo de la Generalitat Valenciana y de XiP Multimedia. Reflexionar sobre el tratamiento informativo que se realiza en la prensa sobre las temáticas vinculadas a la cooperación al desarrollo: ver el enfoque que se da a las informaciones, las fuentes que se utilizan, ver que asuntos priorizan, y el seguimiento o no que se da a esta temática. Por ello, desde el “Observatorio de Medios”, se analizan diariamente noticias extraídas de la prensa en la materia y por lo mismo se considera fundamental complementar este trabajo con el análisis social de las noticias para aportar valor agregado y una visión más amplia. Porque los medios de comunicación son referente fundamental para estructurar la opinión pública y el pensamiento colectivo que conforma nuestra visión; y solo en la medida en que la ciudadanía ejerza seguimiento sobre los mismos, se podrán impulsar procesos de transformación y mejora de prácticas periodísticas, muchas veces cuestionadas. Los resultados serán publicados en formato abierto para facilitar que cualquier persona pueda utilizarlos y redistribuirlos sin ninguna limitación. Toda la información publicada y/o generada en analizo.info está bajo licencia Open Data Commons License. Además de ello se presentará un informe de resultados por parte de ISCOD, que estará accesible a través de su portal Web y que será presentado públicamente a través de diferentes foros y espacios. 114 Observatorio de Cooperación y Medios de Comunicación [en línea]. (n.d.). Disponible en: http://observatoriocooperacionymedios.info/ [Consulta: 4 de junio de 2014]. 115 Instituto Sindical de Cooperación al Desarrollo [en línea]. (n.d.). Disponible en: http://www.iscod.org/ [Consulta: 4 de junio de 2014]. 106 Capítulo 6 Proyectos reales de análisis de información implementados 6.2.2. Especificación de requisitos. A continuación se proporciona la lista con las especificaciones que debía cumplir el proyecto de análisis de información siguiendo las directrices de la entidad promotor: Permitir clasificar la noticia mostrada en una o varias de las siguientes categorías: o Cooperación al Desarrollo. o Ayuda humanitaria. o Derechos Humanos. o Objetivos de Desarrollo del Milenio. o Trabajo de ONGD. o Pobreza y desigualdad. Para cada noticia, posibilitar contestar a las siguientes preguntas seleccionado de ella la información deseada: o ¿Qué personas, grupos y/o asociaciones identificas en la noticia? o ¿Quién o qué organismo ha facilitado la información al periodista para redactar la noticia? o ¿Aparece una voz del sur (testimonio directo) que cuente su opinión en la noticia? o ¿La noticia identifica y/o explica las causas de la problemática planteada? Facilitar una forma para saltar una noticia que no se deseara analizar. Contemplar la posibilidad opcional de aportar comentarios junto a la noticia analizada. 107 Capítulo 6 Proyectos reales de análisis de información implementados 6.2.3. Descripción de la información a analizar. La información de entrada con la que se trabaja en este proyecto de análisis de información son archivos en formato XML. Un archivo XML, en inglés, eXtensible Markup Language, es un lenguaje de marcas desarrollado por el World Wide Web Consortium (W3C)116 utilizado para almacenar datos en forma legible. Este deriva del lenguaje SGML y permite definir la gramática de lenguajes específicos (de la misma manera que HTML es a su vez un lenguaje definido por SGML) para estructurar documentos grandes. XML se propone como un estándar para el intercambio de información estructurada entre diferentes plataformas, ya que se puede usar en bases de datos, editores de texto, hojas de cálculo etc. La fisionomía de los archivos XML pretende dar solución al problema de expresar información estructurada de la manera más abstracta y reutilizable posible puesto que permite mediante etiquetas señalar los elementos que los componen. Para este proyecto en concreto, hay que destacar que se proporcionaron una serie de ficheros XML de noticias agrupadas por meses. 6.2.4. Elaboración del diseño visual y funcional. Las imágenes principales y títulos los proyectos de análisis de noticias creados se pueden ver en la siguiente figura: Figura 47. Análisis de noticias. Proyectos. 116 World Wide Web Consortium (W3C) - España [en línea]. (n.d.). Disponible en: http://www.w3c.es/ [Consulta: 7 de agosto de 2014]. 108 Capítulo 6 Proyectos reales de análisis de información implementados La plantilla de aplicación consta de las siguientes partes (Figura 48): Figura 48. Análisis de noticias. Partes de la aplicación. En la parte superior (Figura 49) se muestran los mensajes que la aplicación presenta al usuario: Figura 49. Análisis de noticias. Mensajes de la aplicación. 109 Capítulo 6 Proyectos reales de análisis de información implementados La parte izquierda está compuesta por los siguientes elementos (Figura 50): Información general acerca de que pretende el análisis de la aplicación. Información acerca de la noticia que se está visualizando. La noticia completa que se pide analizar. Figura 50. Análisis de noticias. Parte izquierda de la aplicación. 110 Capítulo 6 Proyectos reales de análisis de información implementados La parte derecha de la aplicación está compuesta por los siguientes elementos (Figura 51): Información acerca de las tareas de la aplicación. Barra de progreso. Elementos requeridos para poder realizar el análisis: o Sistema para clasificar la noticia en diferentes categorías. o Acordeón con un área independiente para cada una de las preguntas donde se irán guardando las respuestas seleccionadas del texto de la noticia. o Área de comentarios. Botón enviar. Botón para saltar la noticia. Figura 51. Análisis de noticias. Parte derecha de la aplicación. 111 Capítulo 6 Proyectos reales de análisis de información implementados El funcionamiento general de la aplicación consta de las siguientes fases: Al participar en la aplicación se carga una tarea con la información de una notica a analizar. El usuario decide cómo clasificar la noticia además de responder seleccionando del texto las respuestas a las preguntas que considera oportunas para el análisis. Si el usuario confirma el envío de la respuesta, la aplicación la guarda y vuelve a presentarle otra noticia. 6.2.5. Implementación. Para comprender mejor la lógica de funcionamiento de la aplicación, en este apartado se detalla cómo se ha diseñado internamente. a. Disposición de la información. El primer punto a resolver consistió en decidir cómo se iban a presentar las noticias en la aplicación. Para ello, había que conocer la estructura interna de los ficheros de noticias que se habían proporcionado. Concretamente, para cada noticia, figuraba la siguiente información: <item_noticia_mesAÑO> Identificador único de noticia: <ID></ID> Título de la noticia: <Titulo></Titulo> Fecha de publicación de la noticia: <Fecha></Fecha> Subtítulo de la noticia: <Subtitulo></Subtitulo> Enlace a la noticia: <URL></URL> Medio en el cual se publicó la noticia: <Medio></Medio> Autor de la noticia: <Autor></Autor> Imagen adjunta a la noticia: <Imagen></Imagen> </item_noticia_mesAÑO> Como se puede observar, el texto de la noticia completa no se encontraba incluido entre ellos. Así pues, puesto que por una parte se pretendía mostrar para cada noticia su información de referencia asociada que se encontraba en el fichero XML correspondiente y por otra se necesitaba obtener el texto completo de cada noticia, se implementó el script get_omc_xml_to_json.py para lograrlo. El script diseñado tiene en cuenta que no todas las noticias poseen todos los campos enumerados anteriormente, posibilitando seleccionar en su configuración cuales se quiere extraer para cada noticia del fichero XML. 112 Capítulo 6 Proyectos reales de análisis de información implementados Este programa incluido en el conjunto de utilidades pyanalizo, para cada noticia del fichero XML proporcionado, genera un archivo JSON con toda su información que lleva por nombre el id de cada noticia y, a la vez, un listado con el id y la url de cada noticia. De esta forma, posteriormente, simplemente había que acceder a la url de cada una de las noticias y empleando el sistema de creación de ficheros HTML mencionado en el proyecto de análisis anterior trasladar la noticia completa a ellos. Finalmente, lo que se obtiene para cada noticia son dos archivos con toda la información deseada: ID_noticia.json (Se genera automáticamente) ID_noticia.html (Se ha de construir de forma manual) b. Preparación de las tareas. El segundo punto a tratar consistió en trasladar a una hoja de cálculo de Google Drive toda la información que precisaba cada una de las tareas para cargarlas posteriormente en la aplicación. Los datos de cada tarea se estructuraron de la siguiente forma (Figura 52): Figura 52. Análisis de noticias. Plantilla tareas. Cada fila corresponde a una tarea y las columnas son los datos de los que dispone. Para este proyecto en particular, única y exclusivamente se precisó una lista con los identificadores únicos de cada noticia. Esto permitió minimizar la información que debían contener las tareas de PyBossa externalizando a los ficheros JSON y HTML todos los datos que se necesitaban para el análisis. 113 Capítulo 6 Proyectos reales de análisis de información implementados Dado que esta aplicación precisaba ahora de estos archivos para funcionar, siendo necesario ubicarlos en algún sitio, para este propósito se diseñó la siguiente estructura de directorios en el servidor PyBossa (Figura 53): Figura 53. Análisis de noticias. Estructura de directorios. Este entramado de carpetas se encuentra en la siguiente ruta del servidor PyBossa: /home/pybossa/pybossa/themes/default/static/apps A continuación se explica su contenido: omc: Proyectos de análisis del Observatorio de Cooperación al Desarrollo en los medios de comunicación. chosen_v1.1.0: Plugin incorporado para posibilitar la clasificación de noticias en las diferentes categorías mencionadas anteriormente. enero, febrero, marzo etc.: Directorios con la información para cada proyecto. data: Este directorio se utiliza para almacenar la siguiente información: o answers_pretty.json: Resultados del análisis realizado para cada una de las noticias (tareas) en formato JSON. 114 Capítulo 6 Proyectos reales de análisis de información implementados o noticias-enero.txt: Los resultados del análisis realizado en formato de texto plano (tareas + respuestas). o results_v2_pretty.json: Resultados del análisis realizado junto a cada una de las noticias en formato JSON (tareas + respuestas). o tasks_pretty.json: Cada una de las tareas (noticias) en formato JSON. Adicionalmente, los archivos logo_ISCOD.png y css.css corresponden al logo de la aplicación y la hoja de estilos que emplean los ficheros HTML de las noticias respectivamente. En referencia a la configuración del proyecto en la plataforma PyBossa, se han tenido en cuenta aspectos que se mencionan a continuación. Para posibilitar la acción de saltar una noticia que no se deseara analizar, se cambió la configuración del programador de tareas del proyecto al modo aleatorio. Por otra parte, para dar por analizada cada noticia, se especificó que esta debía de ser analizada al menos por un total de 3 personas para que el análisis fuera válido y consistente. En este caso, dado que las noticias ya eran por sí mismas unidades independientes de información, no era necesario que se presentaran en un orden determinado. De esta forma era posible que desde una determinada tarea se solicitara una nueva permitiendo así saltar de noticia. c. Programación de la aplicación. Una vez dada de alta la aplicación e importadas sus tareas, el siguiente punto consistió en implementar la aplicación, es decir, el código que permite a los usuarios interactuar con la información de las tareas para realizar el análisis (Task Presenter en PyBossa). Esta, como todas las aplicaciones, se ha diseñado empleando el esquema base propuesto en el capítulo 5.1.2. Por ello, la explicación se centrará en detallar los aspectos más relevantes de este proyecto en particular ya que el código completo117 se puede consultar en la cuenta de GitHub de analizo.info. Los elementos que conforman la parte visual de la aplicación se encuentran bajo la etiqueta <!-- Items for the user --> y se distribuyen de la siguiente forma: La columna izquierda <!-- Left --> contiene: Instrucciones generales acerca de qué hacer para realizar el análisis de la noticia presentada: <h1>...</h1> 117 proyectos-analizo-info/app-omc · GitHub [en línea]. (n.d.). Disponible en: https://github.com/proyectos-analizo-info/app-omc [Consulta: 8 de julio de 2014]. 115 Capítulo 6 Proyectos reales de análisis de información implementados Elemento en el que se cargará la información de la noticia a analizar que se encontraba en el fichero original XML desde el fichero JSON generado posteriormente: <h5 id="xml" ... </h5> Elemento en el que se cargará el archivo HTML generado que contiene el texto completo de la noticia a analizar: <div id="news"></div> La columna recha <!-- Right --> contiene los siguientes elementos: Información referente a la tarea en la que se está trabajando: <!-- Feedback --> La barra de progreso general: <!-- Progress bar --> Bajo la etiqueta <!-- Submission --> se encuentran los elementos requeridos para poder realizar el análisis: o Clasificador de noticias en las diversas categorías. o Acordeón de preguntas. o Área de comentarios. o Botón de enviar. En este proyecto en particular, dado que el clasificador de noticias utilizado es un plugin de jQuery se han tenido que hacer dos cosas para posibilitar su funcionamiento: Incluir en el código de la aplicación la carga del plugin: <!-- jQuery plugin Chosen v1.1.0 --> Incluir en código fuente de la plantilla principal de aplicación de PyBossa la librería de interfaz de usuario de jQuery compatible con la versión utilizada de jQuery requerida por el plugin utilizado. Como se puede ver en la siguiente figura, en el servidor PyBossa se incluye librería jQuery UI en un directorio general distinto al del proyecto actual para facilitar su uso en futuras aplicaciones: Figura 54. jQuery UI v1.9.2. 116 Capítulo 6 Proyectos reales de análisis de información implementados Respecto a las funciones de la aplicación que comienzan bajo la etiqueta <!-- code --> destaca lo siguiente: Variable para definir el nombre del proyecto particular: var app_short_name = "omc-xxxx-YYYY"; Variable para definir la ruta donde se encuentran los ficheros JSON y HTML para cada una de las tareas del proyecto particular: var base_url = "http://proyectos.analizo.info/static/apps/omc/YYYY/xxxx/tasks/"; Dos funciones adicionales que sirven para deshabilitar el botón secundario del ratón y habilitar únicamente el funcionamiento de las teclas suprimir y retroceso respectivamente: // Disable mouse right clic $(document).bind("contextmenu", function(e) {...} // Allow only backspace and delete $("#answer").keydown(function(e) {...} pybossa.taskLoaded(function(task, deferred) {} Esta función se encarga de construir la ruta absoluta a cada uno de los ficheros JSON y HTML que conforman la tarea que se va a presentar para analizar. task.news_html = base_url + "/html/" + task.info.id_noticia + ".html"; task.news_json = base_url + "/json/" + task.info.id_noticia + ".json"; pybossa.presentTask(function(task, deferred) {} De este otro método principalmente hay que destacar la reutilización por partida doble del sistema de carga y presentación de los archivos JSON y HTML de cada tarea. En este caso, la carga de los dos archivos se hace en paralelo para agilizar la presentación de la información, pero teniendo en cuenta que si uno falla la aplicación aborta mediante el siguiente código: $.getJSON(task.news_json, function(data, textStatus, jqXHR) {...} $("#news").load(task.news_html, function(responseText, textStatus, XMLHttpRequest) {...} 117 Capítulo 6 Proyectos reales de análisis de información implementados Finalmente, a modo de ejemplo, se muestra la información que contiene el objeto task de PyBossa al ejecutarse la aplicación para una determinada tarea (Figura 55): Figura 55. Análisis de noticias. Objeto task. 6.2.6. Pruebas. En concreto, para dar por estable esta aplicación, se han publicado 3 versiones de la misma desde la v1.0 hasta la v1.2. Durante las pruebas de funcionamiento realizadas a las aplicaciones de cada uno de los proyectos de análisis de información de noticias, no se detectó ningún funcionamiento indeseado referente a errores de programación. Sin embargo, cabe destacar que para hacer que funcionara el plugin Chosen, se tuvo que investigar acerca del orden de importación de la librería jQuery UI en la plantilla principal de aplicación de PyBossa para garantizar su correcto funcionamiento. <!-- Le javascript --> <!-- jQuery v1.8.3 --> <script type="text/javascript" src="/static/vendor/jquery.js"></script> <!-- jQuery UI v1.9.2 --> <link href="/static/jquery-ui-1.9.2/jquery-ui.min.css" rel="stylesheet"> <script type="text/javascript" src="/static/jquery-ui-1.9.2/jquery-ui.min.js"></script> <!-- Load jQuery UI BEFORE Twitter Bootstrap to bypass errors like "Uncaught Error: cannot call methods on button prior to initialization; attempted to call method 'toggle'." --> <!-- Twitter Bootstrap v2.2.1 --> <script type="text/javascript" src="/static/vendor/bootstrap/2.2.1/js/bootstrap.js"></script> <script type="text/javascript" src="/static/vendor/modernizr.min.js"></script> 118 Capítulo 6 Proyectos reales de análisis de información implementados Uno de los aspectos interesantes de este proyecto, es que ciertas noticias podían contener vídeos o imágenes en su cuerpo o incluso ser la propia noticia, casuística que no se contempló en las reuniones ya que se pensaba que todas eran textuales. Esto podía haber sido un problema si se hubiera diseñado un sistema que solo hubiera permitido un tipo de información de entrada en un determinado formato. Sin embargo, como se empleó la creación de archivos HTML para incluir las noticias en cada proyecto de análisis no hubo ninguna complicación. En las siguientes figuras se incluyen esos casos particulares: Figura 56. Análisis de noticias. Noticia con imagen. Figura 57. Análisis de noticias. Notica con vídeo. 119 Capítulo 6 Proyectos reales de análisis de información implementados También se reutilizaron y adaptaron algunas de las características implementadas para los proyectos de análisis de programas electorales que se citan a continuación: La restricción de escritura en el área de respuesta a las preguntas. (Sólo se permite el borrado mediante las teclas suprimir y retroceso). La desactivación del botón derecho del ratón. El restablecimiento de la barra de desplazamiento de la noticia cada vez que se carga una tarea nueva. La limitación a X caracteres (2 por defecto) para considerar que el texto seleccionado es una respuesta admisible118. Finalmente, hay que destacar que, a pesar de que se implementó un sistema para posibilitar el salto de noticia cuando se considerara oportuno, dado que la configuración del programador de tareas en modo aleatorio de PyBossa especifica que no se excluye al usuario actual al solicitar un tarea aleatoria, provocaba que llegado un punto durante el análisis de noticias que el sistema interno devolviera siempre las mismas. Frente a esto, se desactivo esa funcionalidad y se cambió el programador de tareas a un modo en el que priorizaba las tareas que menos respuestas tenían pero excluyendo al usuario que participa. Lo adecuado sería desarrollar un nuevo programador de tareas basado en el funcionamiento del aleatorio pero que presentara las tareas incompletas excluyendo de ellas al usuario que participa en la aplicación. Este es un de los puntos que se trasladan al apartado de la memoria trabajo futuro. Las aplicaciones que han sido creadas para cada uno de los proyectos de análisis de programas electorales son las siguientes: Observatorio Cooperación al Desarrollo en los medios de comunicación (Enero) 119 . Observatorio Cooperación al Desarrollo en los medios de comunicación (Febrero) 120. Observatorio Cooperación al Desarrollo en los medios de comunicación (Marzo) 121 . Observatorio Cooperación al Desarrollo en los medios de comunicación (Abril) 122 . 118 Las siglas de las organizaciones o entidades a señalar eran como mínimo de ese tamaño. Observatorio Cooperación al Desarrollo en los medios de comunicación (Enero): http://proyectos.analizo.info/app/omc-enero-2014/ 120 Observatorio Cooperación al Desarrollo en los medios de comunicación (Febrero): http://proyectos.analizo.info/app/omc-febrero-2014/ 121 Observatorio Cooperación al Desarrollo en los medios de comunicación (Marzo): http://proyectos.analizo.info/app/omc-marzo-2014/ 119 120 Capítulo 6 Proyectos reales de análisis de información implementados 6.2.7. Presentación de los resultados del análisis. Una vez concluido el análisis del proyecto, para obtener los resultados hay que utilizar los scripts creados que forman parte del conjunto de utilidades pyanalizo que se mencionan a continuación. Esto se debe hacer puesto que cada proyecto de análisis genera un resultado determinado y por ello requiere de un script particular para su procesado. Pasos a seguir: Exportar las tareas de la aplicación en formato JSON al archivo tasks.json. Exportar las respuestas a las tareas de aplicación en formato JSON al archivo answers.json. Ejecutar el script results_to_json_v2.py que hace uso de los dos archivos generados previamente para obtener el fichero results_v2.json. Este contiene la unión de las tareas y sus respuestas respectivamente como resultado final. Opcionalmente, ejecutar el script get_respuestas_noticias_omc.py para generar el archivo noticias.txt con los resultados del análisis en formato de texto plano. Los resultados del análisis realizado se pueden encontrar publicados y detallados en el apartado información, sección resultados de cada proyecto para favorecer su reutilización. Finalmente, destacar que para este proyecto de análisis de información también se ha interactuado con la solución informática implementada por la empresa XiP Multimedia123 para ISCOD. Esta se encarga de articular todo el proceso de gestión de las noticias que se han analizado en analizo.info (Figura 58). Figura 58. Aplicación para gestionar los resultados de análisis de noticias - XiP multimedia. 122 Observatorio Cooperación al Desarrollo en los medios de comunicación (Abril): http://proyectos.analizo.info/app/omc-abril-2014/ 123 XiP Multimedia [en línea]. (n.d.). Disponible en: http://www.xipmultimedia.com/ [Consulta: 7 de agosto de 2014]. 121 Capítulo 6 Proyectos reales de análisis de información implementados 6.3 Análisis de ortofotos 6.3.1 Ficha del proyecto. Este proyecto se ha desarrollado en colaboración con el movimiento social Per l’Horta (Figura 59), que nació a raíz de la primera Iniciativa Legislativa Popular (ILP) de nuestro país en defensa de la huerta de Valencia. El proceso de ILP llego a las 120.000 firmas ratificadas por Figura 59. Logo Per l’Horta. la oficina del censo electoral. 120.000 ciudadanos i ciudadanas que pedían una protección efectiva de este espacio singular desde el punto de vista paisajístico, patrimonial, hidrológico, cultural y arqueológico. I desde entonces continúa luchando junto a otras organizaciones para hacer efectivos los derechos colectivos al mantenimiento y no desposesión de los bienes colectivos. Determinar de forma colectiva a través de la plataforma analizo.info las zonas de huerta que todavía pueden ser recuperables y que se encuentran en zona clasificada como urbana. También, zonas libres de edificación que permitan en un futuro crear corredores de fauna y flora (estrategia de infraestructura verde de la UE). Después del tsunami especulativo inmobiliario, la ciudadanía necesita tomar el control sobre el futuro de las ciudades y de sus bienes comunes como la huerta de Valencia. Por eso, lo primero que se necesita es identificar aquellas zonas libres de edificación (independientemente de su clasificación urbanística) para reclamar su uso como huerta tradicional, huertos comunitarios o parques de barrio. Esto es especialmente importante en las zonas cercanas a la ciudad donde pueden existir espacios de transición entre la ciudad y la huerta donde para evitar definitivamente la destrucción de este espacio natural. Los resultados serán publicados en formato abierto para facilitar que cualquier persona pueda utilizarlos y redistribuirlos sin ninguna limitación. Toda la información publicada y/o generada en analizo.info está bajo licencia Open Data Commons License. 122 Capítulo 6 Proyectos reales de análisis de información implementados 6.3.2. Especificación de requisitos. A continuación se proporciona la lista con las especificaciones que debía cumplir el proyecto de análisis de información siguiendo las directrices de la entidad promotor: Permitir identificar en una ortofoto124 determinada la zona o zonas que se caracterizaran por ser lugares libres de edificación independientemente de su clasificación urbanística mediante el trazo de polígonos. Utilizar el servidor de mapas del terrasit125 para obtener las ortofotos. Utilizar el servidor de mapas de Per l’Horta para obtener la capa de zona rústica sobre las ortofotos. Opcionalmente, emplear también el servidor de mapas del terrasit para obtener la capa de toponimia sobre las ortofotos. Emplear el sistema de coordenadas EPSG:25830 - Proyección UTM ETRS89 Huso 30 N. Generar el resultado final que se obtenga en formato ESRI Shapefile. 6.3.3. Descripción de la información a analizar. La información de entrada con la que se trabaja en este proyecto de análisis de información son archivos en formato ESRI Shapefile. El formato ESRI Shapefile (SHP) es un tipo de archivo informático propietario de datos espaciales desarrollado por la compañía ESRI, quien crea y comercializa software para Sistemas de Información Geográfica como Arc/Info o ArcGIS. Pese a que originalmente se creó para utilizarse con su producto ArcView GIS, actualmente se ha convertido en formato estándar de facto para el intercambio de información geográfica entre Sistemas de Información Geográfica por la importancia que los productos ESRI tienen en el mercado SIG y por estar muy bien documentado126. Un shapefile es un formato vectorial de almacenamiento digital donde se guarda la localización de los elementos geográficos y los atributos asociados a ellos. No obstante, carece de capacidad para almacenar información topológica. Para este proyecto en concreto, hay que destacar que la asociación proporcionó tres ficheros en formato ESRI Shapefile (huerta norte, centro y sur) que contenían las coordenadas geográficas de las ortofotos a analizar. 124 Presentación fotográfica de una zona de la superficie terrestre, en la que todos los elementos presentan la misma escala, libre de errores y deformaciones, con la misma validez de un plano cartográfico. Ortofotografía - Wikipedia, la enciclopedia libre [en línea]. (7 de abril de 2014). Disponible en: http://es.wikipedia.org/wiki/Ortofoto [Consulta: 7 de junio de 2014]. 125 Geoportal para obtener y compartir mapas e información geográfica de la Comunitat Valenciana. Principal | Terrasit [en línea]. (n.d.). Disponible en: http://terrasit.gva.es/ [Consulta: 7 de junio de 2014]. 126 Shapefile Technical Description [en línea]. (n.d.). Disponible en: http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf [Consulta: 7 de agosto de 2014]. 123 Capítulo 6 Proyectos reales de análisis de información implementados 6.3.4. Elaboración del diseño visual y funcional. Las imágenes principales y títulos de los proyectos de análisis de ortofotos creados se pueden ver en la siguiente figura: Figura 60. Análisis de ortofotos. Proyectos. La plantilla de aplicación consta de las siguientes partes (Figura 61): Figura 61. Análisis de ortofotos. Partes de la aplicación. En la parte superior (Figura 62) se muestran los mensajes que la aplicación presenta al usuario: Figura 62. Análisis de ortofotos. Mensajes de la aplicación. 124 Capítulo 6 Proyectos reales de análisis de información implementados La parte izquierda está compuesta por los siguientes elementos (Figura 63): Información general acerca de que pretende el análisis de la aplicación. La ortofoto que se pide analizar. Un selector para activar o desactivar las capas que se encuentran sobre la ortofoto (Figura 64). Figura 63. Análisis de ortofotos. Parte izquierda de la aplicación. Figura 64. Análisis de ortofotos. Selector de capas. La parte derecha de la aplicación está compuesta por los siguientes elementos (Figura 65): Información acerca de las tareas de la aplicación. Barra de progreso. Elementos requeridos para poder realizar el análisis: o Botón para posibilitar el trazo de polígonos. o Botón para editar polígonos dibujados. o Botón para borrar polígonos dibujados. Botón de enviar. 125 Capítulo 6 Proyectos reales de análisis de información implementados Figura 65. Análisis de ortofotos. Parte derecha de la aplicación. El funcionamiento general de la aplicación consta de las siguientes fases: Al participar en la aplicación se carga una tarea con una ortofoto a analizar. El usuario decide en base a los criterios que figuran en la descripción del proyecto sobre qué parte o partes de la ortofoto considera que debe pintar uno o varios polígonos para realizar el análisis. Si el usuario confirma el envío de la respuesta, la aplicación la guarda y vuelve a presentarle otra ortofoto. 6.3.5. Implementación. Para comprender mejor la lógica de funcionamiento de la aplicación, en este apartado se detalla cómo se ha diseñado internamente. Antes de continuar, hay que destacar que este proyecto en particular de análisis ha sido el más complejo de implementar debido a la gran cantidad de conceptos y elementos que han intervenido para su desarrollo. a. Disposición de la información. El primer punto a resolver consistió en conocer que era el formato ESRI Shapefile, cuál era su estructura interna y cómo podía generarse. 126 Capítulo 6 Proyectos reales de análisis de información implementados Este formato se compone básicamente por los siguientes archivos: Un fichero con extensión .shp que almacena las entidades geométricas de los objetos. Un fichero con extensión .dbf que se trata de una base de datos (formato dBASE) donde se almacena la información de los atributos de los objetos. Un fichero con extensión .shx que almacena el índice de las entidades geométricas. Un fichero con extensión .prj (opcional) que almacena la información referida al sistema de coordenadas en formato WKT. Una vez comprendidos cada uno de los archivos que lo conforman, lo que interesaba conocer era su estructura interna para poder reproducirlo. Por ello, se pensó si era posible realizar algún tipo de conversión a otro formato de archivo equivalente. Después de investigar en Internet, se encontró una librería denominada Ogre de código abierto127 que dispone de una aplicación Web128 que permite convertir este formato de archivo propietario en el formato abierto GeoJSON y viceversa. Llegado a este punto, dado que la estructura interna del formato GeoJSON podía reproducirse sin problemas acudiendo a la página de su especificación técnica129, se procedió a convertir uno de los archivos proporcionados en formato ESRI Shapefile a GeoJSON para conocer cuál era su equivalencia. Básicamente se trataba de aplicar ingeniería inversa tal y como se describe a continuación: ESRI Shapefile: Formato propietario, no es posible generarlo de forma sencilla. GeoJSON: Formato abierto, es posible generarlo sin complicaciones. Obtener la equivalencia ESRI Shapefile <-> GeoJSON: Convertir ESRI Shapefile a GeoJSON utilizando la librería Ogre. Generar un archivo GeoJSON equivalente para transformarlo al formato propietario ESRI Shapefile dado que no es posible hacerlo sencillamente de forma directa. 127 Ogre - ogr2ogr web client [en línea]. (n.d.). Disponible en: http://ogre.adc4gis.com [Consulta: 8 de julio de 2014]. 128 wavded/ogre · GitHub [en línea]. (n.d.). Disponible en: https://github.com/wavded/ogre [Consulta: 8 de julio de 2014]. 129 GeoJson [en línea]. (n.d.). Disponible en: http://geojson.org [Consulta: 8 de julio de 2014]. 127 Capítulo 6 Proyectos reales de análisis de información implementados Así pues, pese a que la idea planteada anteriormente funcionó permitiendo además ofrecer los resultados empleando un formato de archivo no propietario, inicialmente se tuvo que afrontar el siguiente contratiempo para poder conseguirlo. Los archivos en formato ESRI Shapefile suministrados carecían del fichero .shx y por tanto la aplicación Web que trabaja con librería Ogre no funcionaba. La especificación de ESRI Shapefile expone que se requiere como mínimo de los archivos .shp, .dbf y .shx para tener un fichero completo, aunque esto no es un requisito técnico. Sin embargo, la mayoría del software que trabaja con estos archivos si requieren del fichero .shx para poder abrirlos. Estos programas deben contar el número de registros leídos para determinar el ID de registro (geometría y atributos). Para facilitar esto, el fichero .shx simplemente contiene un índice trivial para proporcionar un acceso más rápido a un registro determinado en un archivo .shp sin leerlo de memoria. Por ello, a pesar de que el fichero .shx es conveniente no es necesario. En este caso, nuevamente recurriendo a Internet, se implementó el script shx_builder.py que hace uso de la librería python pyshp130 de código abierto que permite reconstruir el fichero .shx de un archivo ESRI Shapefile a partir de los archivos .shp y .dbf. Esta librería es capaz de leer los registros cargados en memoria de un archivo ESRI Shapefile y se ocupa de reconstruir el fichero .shx dado que los archivos .shp y .dbf no están relacionados mediante ningún índice. Casualmente, también se descubrió porque en los archivos ESRI Shapefile proporcionados existía otro fichero con extensión .qpj. En la especificación original de ESRI Shapefile, la información de la proyección se almacena en el archivo .prj utilizando el formato de texto convencional. Si se hace uso del software QGIS, éste utiliza códigos EPSG para la información de la proyección utilizada. Estos códigos suelen faltar o corromperse con facilidad en los archivos .prj, por ello este software tal y como hacen otros escriben un fichero particular para preservar esta información. b. Preparación de las tareas. El segundo punto a tratar consistió en trasladar a una hoja de cálculo de Google Drive toda la información que precisaba cada una de las tareas para cargarlas posteriormente en la aplicación. 130 pyshp - Python Shapefile Library - Google Project Hosting [en línea]. (27 de julio de 2013). Disponible en: http://code.google.com/p/pyshp/ [Consulta: 4 de abril de 2014]. 128 Capítulo 6 Proyectos reales de análisis de información implementados Cuando ya fue posible trabajar con los archivos ESRI Shapefile y GeoJSON, imprescindible para poder centrarse en el diseño de la aplicación de análisis, empleando un visor de ficheros .dbf (Figura 66) se extrajeron las coordenadas geográficas de cada una de las ortofotos a analizar de los archivos ESRI Shapefile proporcionados. Figura 66. Análisis de ortofotos. Archivo dbf. Los datos de cada tarea se estructuraron de la siguiente forma (Figura 67): Figura 67. Análisis de ortofotos. Plantilla tareas. Cada fila corresponde a una tarea y las columnas son los datos de los que dispone. En referencia a la configuración del proyecto en la plataforma PyBossa, se han tenido en cuenta aspectos que se mencionan a continuación. Para este proyecto de análisis, se optó por dejar la configuración por defecto en programador de tareas. Por otra parte, cada ortofoto debía ser analizada al menos por un total de 3 personas para que el análisis fuera válido y consistente. c. Programación de la aplicación. Una vez dada de alta la aplicación e importadas sus tareas, el siguiente punto consistió en implementar la aplicación, es decir, el código que permite a los usuarios interactuar con la información de las tareas para realizar el análisis (Task Presenter en PyBossa). Esta, como todas las aplicaciones, se ha diseñado empleando el esquema base propuesto en el capítulo 5.1.2. Por ello, la explicación se centrará en detallar los aspectos más relevantes de este proyecto en particular ya que el código completo131 se puede consultar en la cuenta de GitHub de analizo.info. 131 proyectos-analizo-info/app-per-lhorta · GitHub [en línea]. (n.d.). Disponible en: https://github.com/proyectos-analizo-info/app-per-lhorta [Consulta: 8 de julio de 2014]. 129 Capítulo 6 Proyectos reales de análisis de información implementados Los elementos que conforman la parte visual de la aplicación se encuentran bajo la etiqueta <!-- Items for the user --> y se distribuyen de la siguiente forma: La columna izquierda <!-- Left --> contiene: Instrucciones generales acerca de qué hacer para realizar el análisis de ortofoto presentada: <div id="info" ... </div> Elemento en el que se cargará la ortofoto a analizar: <div id="tile ... </div> La columna recha <!-- Right --> contiene los siguientes elementos: Información referente a la tarea en la que se está trabajando: <!-- Feedback --> La barra de progreso general: <!-- Progress bar --> Un texto con una serie de consideraciones a tener en cuenta a la hora de utilizar la aplicación. Bajo la etiqueta <!-- Controls --> se encuentran los elementos requeridos para poder realizar el análisis: o Botón para posibilitar el trazo de polígonos. o Botón para editar polígonos dibujados. o Botón para borrar polígonos dibujados. Bajo la etiqueta <!-- Answer buttons --> se encuentran los botones para confirmar el envío del análisis realizado. En este proyecto en particular, se ha utilizado la librería de código abierto OpenLayers para poder trabajar con la información procedente de servidores de mapas requerida y para posibilitar su análisis. Como se puede ver en la siguiente figura, en el servidor PyBossa se incluye librería OpenLayers en un directorio general distinto al del proyecto actual para facilitar su uso en futuras aplicaciones: Figura 68. OpenLayers (ol). v2.13.1. 130 Capítulo 6 Proyectos reales de análisis de información implementados Respecto a las funciones de la aplicación que comienzan bajo la etiqueta <!-- code --> destaca lo siguiente: Variable para definir el nombre del proyecto particular: var app_short_name = "wms-single-tile"; Funciones que gestionan los diversos botones de control de la aplicación: // Manage answer buttons function enableBtn(button_id) {...} function disableBtn(button_id) {...} function enableCoordinatesButton() {...} function enableUnknownButton() {...} Variable de configuración para elegir el tamaño de la ortofoto recuperada (por defecto ajustada al doble del original): // WMS Tile size = Map size = Task tile bbox area var size = 2; var tile_width = (151.18118399409206610128687319486 * size).toString(); var tile_height = (226.77177599113809915193030979229 * size).toString(); Respecto a esto último, hay que aclarar que para poder elegir a que resolución (en píxeles) se querían las ortofotos, había que conocer al menos como referencia de una de ellas, cuál era el área que abarcaban sus coordenadas geográficas y a qué resolución (en píxeles) se ofrecía. Para poder conseguir esta información, se investigó acerca del funcionamiento del visor de mapas del terrasit132 (Figuras 69 a 74), que además era de donde se querían sacar las ortofotos mediante las coordenadas de cada una de las tareas. Figura 69. Análisis de ortofotos. Tesela. 132 Terrasit [en línea]. (n.d.). Disponible en: http://terrasit.gva.es/es/ver [Consulta: 8 de julio de 2014]. 131 Capítulo 6 Proyectos reales de análisis de información implementados Escala: 1/5.000, ETRS89 UTM zone 30N. Figura 70. Análisis de ortofotos. Código fuente de la imagen de la tesela (1). Figura 71. Análisis de ortofotos. Código fuente de la imagen de la tesela (2). Figura 72. Análisis de ortofotos. Detalle del código fuente de la imagen de la tesela (1). 132 Capítulo 6 Proyectos reales de análisis de información implementados Figura 73. Análisis de ortofotos. Detalle del código fuente de la imagen de la tesela (2). http://terramapas.icv.gva.es/ortoactualidad/?LAYERS=ortoactualidad&FORMAT=imag e%2Fpng&TRANSPARENT=TRUE&ESCALAS=&ACTIVELAYER=true&SERVICE=WMS&VER SION=1.1.1&REQUEST=GetMap&STYLES=&SRS=EPSG%3A25830&BBOX=728125.05214 607,4373570.2073658,728463.71862991,4373908.8738497&WIDTH=256&HEIGHT=25 6 Conociendo pues las coordenadas geográficas que delimitaban una ortofoto (BBOX) y a qué resolución (en píxeles) se ofrecía (WIDTH y HEIGHT), fue posible obtener los parámetros para realizar la adaptación de la forma que se explica a continuación. Figura 74. Análisis de ortofotos. Tesela de ejemplo. BBOX (Área de la ortofoto de ejemplo a escala 1/5.000) o o o o XMIN: 728125.05214607 YMIN: 4373570.2073658 XMAX: 728463.71862991 YMAX: 4373908.8738497 Área abarcada de las coordenadas geográficas: XMAX - XMIN = 728463.71862991 - 728125.05214607 = 338.66648384 YMAX - YMIN = 4373908.8738497 - 4373570.2073658 = 338.6664839 133 Capítulo 6 Proyectos reales de análisis de información implementados Aplicando una regla de 3 empleando las coordenadas geográficas de unas de las ortofotos a recuperar se obtuvieron los parámetros deseados: .dbf o XMAX - XMIN = 728200.856451 - 728000.856451 = 200 o YMAX - YMIN = 4384129.22649 - 4383829.22649 = 300 Ancho (width) = 200 * 256 / 338.6664838 = 151.18118399409206610128687319486 Alto (height) = 300 * 256 / 338.6664838 = 226.77177599113809915193030979229 De esta forma fue posible pedir al servidor de mapas las ortofotos requeridas al tamaño deseado (el doble del original) para posibilitar el análisis en imágenes más grandes. Otro de los aspectos a conocer fue averiguar cómo pedir las ortofotos al servidor de mapas del terrasit. Esto fue posible dado que en este caso, el servidor de mapas ofrecía la posibilidad de obtener su plantilla de configuración de peticiones de la siguiente forma: http://nombre_servidor&SERVICE=WMS&REQUEST=GetCapabilities http://terramapas.icv.gva.es/odcv05_etrs89h30_2010/?SERVICE=WMS&reques t=GetCapabilities Esta misma técnica se aplicó posteriormente con el servidor de mapas de Per l’Horta de forma exitosa. pybossa.taskLoaded(function(task, deferred) {} Esta función se encarga principalmente de preparar todos los elementos que van a conformar la información a analizar en este proyecto: La capa en la que se permitirá dibujar los polígonos. La capa que contendrá la ortofoto del servidor de mapas del terrasit (Terrasit Web Map Service (WMS) - odcv05_etrs89h30_2010) (Figura 75): Figura 75. Análisis de ortofotos. Terrasit Web Map Service (WMS). 134 Capítulo 6 Proyectos reales de análisis de información implementados La capa de zona rústica del servidor de mapas de Per l’Horta (Per L'Horta Web Map Service (WMS) - mascares (zona rústica)) (Figura 76): Figura 76. Análisis de ortofotos. Per L'Horta Web Map Service (WMS). La capa de toponimia del servidor de mapas del terrasit (Terrasit Web Map Service (WMS) - toponimia_base) (Figura 77): Figura 77. Análisis de ortofotos. Terrasit Web Map Service (WMS). 135 Capítulo 6 Proyectos reales de análisis de información implementados A continuación, se muestra cómo quedaría un ejemplo de ortofoto lista para ser analizada (Figura 78): Figura 78. Análisis de ortofotos. Ortofoto resultado. pybossa.presentTask(function(task, deferred) {} De este otro método, principalmente hay que destacar la parte donde se construye el mapa (new OpenLayers.Map…) y el proceso que genera el resultado de cada uno de los polígonos dibujados sobre cada ortofoto en formato GeoJSON (geojson.write…). Respecto al mapa, se tuvieron que tener en cuenta los siguientes aspectos: El orden en el cual se incorporaban las sucesivas capas afectaba al funcionamiento de la aplicación. Debía utilizarse el sistema de coordenadas EPSG:25830 especificado en los requisitos. Finalmente, en referencia al guardado del análisis de cada ortofoto, hay que destacar que la librería OpenLayers utilizada disponía de una funcionalidad que permitía generarlo directamente en formato GeoJSON. Posteriormente, en el apartado de presentación de resultados del análisis, se especifica el proceso de reconversión a ESRI Shapefile dado que su estructura no es equivalente a la de un fichero ESRI Shapefile convertido a GeoJSON. 136 Capítulo 6 Proyectos reales de análisis de información implementados Finalmente, a modo de ejemplo, se muestra la información que contiene el objeto task de PyBossa al ejecutarse la aplicación para una determinada tarea (Figura 79): Figura 79. Análisis de ortofotos. Objeto task. 6.3.6. Pruebas. En concreto, para dar por estable esta aplicación, se publicaron 6 versiones de la misma desde la v1.0 hasta la v1.5. Durante las pruebas realizadas a las aplicaciones de cada uno de los proyectos de análisis de ortofotos, no se detectó ningún funcionamiento indeseado referente a errores de programación ya que todos ellos fueron más de carácter de implementación del código. El aspecto más interesante de este proyecto de análisis fue lidiar con el tipo de información que se pretendía analizar, puesto que las aplicaciones debían obtenerla en tiempo real conectándose a los diferentes servidores ajenos a analizo.info para posibilitar trabajar con ella. Las aplicaciones que han sido creadas para cada uno de los proyectos de análisis de ortofotos las siguientes: Recuperem Horta Nord. Recuperem Ciutat133. Recuperem Horta Centre. Recuperem Ciutat134. Recuperem Horta Sud. Recuperem Ciutat135. 133 Recuperem Horta Nord. Recuperem Ciutat: http://proyectos.analizo.info/app/per-lhorta-nord-2014/ Recuperem Horta Centre. Recuperem Ciutat: http://proyectos.analizo.info/app/per-lhorta-centre2014/ 135 Recuperem Horta Sud. Recuperem Ciutat: http://proyectos.analizo.info/app/per-lhorta-sud-2014/ 134 137 Capítulo 6 Proyectos reales de análisis de información implementados 6.3.7. Presentación de los resultados del análisis. Una vez concluido el análisis de cada proyecto, para obtener los resultados hay que utilizar los scripts creados que forman parte del conjunto de utilidades pyanalizo que se mencionan seguidamente. Esto se debe hacer puesto que cada proyecto de análisis genera un resultado determinado y por ello requiere de un script particular para su procesado. Pasos a seguir: Exportar las tareas de la aplicación en formato JSON al archivo tasks.json. Exportar las respuestas a las tareas de aplicación en formato JSON al archivo answers.json. Ejecutar el script results_to_json_v2.py que hace uso de los dos archivos generados previamente para obtener el fichero results_v2.json. Este contiene la unión de las tareas y sus respuestas respectivamente. Ejecutar el script results_v2_to_ogr2ogr_ESRI_Shapefile_format.py para adaptar las respuestas a cada unas de las tareas del archivo results_v2.json al formato GeoJSON equivalente a ESRI Shapefile. Finalmente ejecutar el script get_ogr2ogr_ESRI_Shapefile_format.py que genera como resultado del análisis realizado un archivo GeoJSON equivalente a un archivo en formato ESRI Shapefile. Opcionalmente, utilizar la librería Ogre para convertir el resultado obtenido a ESRI Shapefile. Los resultados del análisis realizado se pueden encontrar publicados y detallados en el apartado información, sección resultados de cada proyecto para favorecer su reutilización. 138 Capítulo 6 Proyectos reales de análisis de información implementados Para concluir, se muestra un ejemplo sobre cómo se utilizan los resultados del análisis de un proyecto de prueba generados, en un software de gestión de información geográfica (Figuras 80 a 83). Figura 80. Análisis de ortofotos. Ejemplo (1). Figura 81. Análisis de ortofotos. Ejemplo (2). 139 Capítulo 6 Proyectos reales de análisis de información implementados Figura 82. Análisis de ortofotos. Resultado ESRI Shapefile (equivalente a GeoJSON). Figura 83. Análisis de ortofotos. Resultado GeoJSON (equivalente a ESRI Shapefile). 140 Capítulo 7 Resultados y discusión 7. Resultados y discusión A nivel general, la renovada comunidad online de analistas de información por el cambio social analizo.info, fue satisfactoriamente lanzada el 22 de febrero de 2014 y a fecha de 9 de julio de 2014 alberga 14 aplicaciones de 3 proyectos de análisis de información reales desarrollados en colaboración con distintas asociaciones descritos en el capítulo anterior. La acogida que tuvo la plataforma propició, por ejemplo, que el análisis del programa electoral de UPyD alcanzara el 60% en 24 horas, seguido por el de EQUO que tardó solamente dos días en completarse. Los miembros de la comunidad se han incrementado desde la fecha de lanzamiento de 241 a 337 a fecha de 9 de julio de 2014, lo que ha favorecido que esta se dé a conocer y resulte de punto de apoyo e impulso para nuevos proyectos de análisis de información que requieran la participación de voluntarios y voluntarias. Además, algunos de sus miembros han ido reportado pequeños incidentes e ideas desde el lanzamiento, lo cual es indicador de que hay interés por contribuir a la causa de analizo.info. Todas las aplicaciones creadas para cada uno de los proyectos de análisis de información fueron probadas con las últimas versiones de los navegadores Web más comunes (Mozilla Firefox, Google Chrome etc.) y sólo experimentaron un comportamiento anormal en versiones desactualizadas de Internet Explorer. Pese a la complejidad inicial de afrontar particularmente cada proyecto, finalmente todos ellos resultaron estar a la altura de las expectativas esperadas cumpliendo con su cometido particular. Esto se debe principalmente a las pautas para la implementación de aplicaciones de análisis de información definidas para abordarlos, dado que sin ellas no hubieran sido posibles aspectos tales como por ejemplo facilitar la reutilización de código o la actualización e introducción de mejoras en todas las aplicaciones en cualquier etapa de su desarrollo. Cabe destacar que la idea de diseñar una primera aplicación prototipo en lugar de centrarse desde el primer momento en un proyecto real, ha supuesto una mejora significativa en cuanto la forma de gestionar la información que manejan las aplicaciones para evitar posibles errores y facilitar su posterior implementación homogénea. Respecto a los resultados de análisis obtenidos de algunos proyectos de análisis de información ya concluidos a fecha de 9 de julio de 2014, hay que tener presente que sin haber desarrollado el conjunto de utilidades pyanalizo para su gestión y manipulación no hubiera sido posible presentarlos tanto en formato de texto plano como en diversos formatos abiertos (CSV y JSON) para facilitar su reutilización al extraerlos directamente de PyBossa. Finalmente, recalcar que la comunidad en conjunto no ha sufrido ninguna caída, ni tampoco ha experimentado ningún problema significativo que haya puesto en duda sus capacidades. Esto se debe a la solidez de la implantación, al diseño versátil de PyBossa y a todas las mejoras que se han ido introduciendo en base a la experiencia obtenida que han dado lugar a la actual plataforma robusta que permite hospedar proyectos de análisis de información crowdsourcing. 141 Capítulo 7 Resultados y discusión 142 Capítulo 8 Conclusiones y trabajo futuro 8. Conclusiones y trabajo futuro 1. Después de todo el trabajo realizado, gracias a la definición de un planteamiento apropiado, coherente y realista, se puede concluir que se ha cumplido con creces el objetivo principal de diseñar, desarrollar e implantar una solución de análisis de información basada en crowdsourcing mediante la plataforma free open source PyBossa como base para la comunidad online de analistas de información analizo.info en base a los resultados obtenidos. 2. Con la revisión de plataformas crowdsourcing basadas en microtareas llevada a cabo, se ha profundizado tanto en el concepto de crowdsourcing como en sus tipos, ofreciendo así para el contexto de este trabajo, una nueva definición y clasificación de crowdsourcing actualizadas acordes al ámbito de analizo.info debido a que la actual situación de la Web 2.0 no disponía de más actuales. 3. Su elaboración ha ofrecido en concepto de formación, la que le sería requerida a nivel profesional, a un experto en el desarrollo de aplicaciones crowdsourcing de análisis de información. No solo por haber implementado de forma satisfactoria proyectos reales de este tipo en colaboración con diferentes asociaciones, sino también por haber sido capaz de emplear y adaptar y contribuir a la solución de código abierto PyBossa para los fines perseguidos, gracias a los conocimientos adquiridos durante la realización del máster en gestión de la información. Este hecho ratifica que el trabajo realizado es equiparable al que podría haber realizado una empresa, siendo pues la labor efectuada una referencia directa al mundo laboral. 4. El uso de software de código abierto, en este caso PyBossa, para afrontar el objetivo de este trabajo, ha demostrado ser una opción acertada para suplir las carencias que presentaba en su versión inicial, lo que pone en manifiesto la versatilidad de esta herramienta que ha permitido su adaptabilidad para los fines particulares perseguidos. No obstante, el uso de este tipo de software plantea nuevos retos tales como la particularización y mantenimiento del proyecto adaptado a las consideraciones de analizo.info paralelamente al camino del desarrollo del software PyBossa, ya que hay que tener presente que se trata de un proyecto derivado. Para concluir, en referencia al trabajo futuro, a continuación se proporciona una lista con una serie cuestiones que estarían pendientes de realizarse y/o que son susceptibles de investigar: Traducir todos los textos en inglés que se encuentran incrustados en el código fuente del tema visual original de PyBossa adaptado, dado que con el sistema actual y la traducción al español realizada no se consigue traducir al completo la plataforma. 143 Capítulo 8 Conclusiones y trabajo futuro Mejorar el diseño del tema visual para asegurar su adaptabilidad en diferentes dispositivos. Desarrollar un nuevo programador de tareas basado en el funcionamiento del aleatorio pero que presente las tareas incompletas excluyendo de ellas al usuario que participa en la aplicación. No existe un sistema para publicar aplicaciones de prueba, investigar sobre cómo posibilitar hacerlo en lugar de crear una aplicación sin logo y sin promocionarla en la portada para este fin. Enfocar mejor el desarrollo de aplicaciones para que el tipo de análisis que se pretenda realizar sea posible llevarlo a cabo desde cualquier dispositivo móvil o, en su defecto, que la aplicación detecte el dispositivo y realice las acciones pertinentes. Continuar actualizando el código de todas las aplicaciones disponibles a medida que se realicen nuevas para mejorar su funcionamiento y posibilitar su posterior reutilización en el repositorio de código abierto GitHub. Actualizar a nuevas versiones de estables PyBossa cuando se publiquen para optar a nuevas funcionalidades, solucionar errores internos y evitar caer en el uso de un software desactualizado y obsoleto. Utilizar el sistema de ranking de participación que ofrece PyBossa para fomentar la colaboración en proyectos de la plataforma con un índice bajo de cooperación. Incorporar la validación de correo electrónico en el formulario de creación de cuenta de usuario136. Solventar el error que hace que los tiempos de respuesta de las tareas sean incorrectos137. Diseñar un sistema para procesar de forma automática los resultados de análisis social. Mejora de la presentación de los resultados del análisis empleando por ejemplo la librería de código abierto d3js138 de representación visual de datos. Darle uso al sistema de categorización de aplicaciones que ofrece PyBossa. 136 Add validation for email address. · Issue #233 · PyBossa/pybossa · GitHub [en línea]. (n.d.). Disponible en: https://github.com/PyBossa/pybossa/issues/233 [Consulta: 7 de abril de 2014]. 137 Daniel Lombraña confirmó de su existencia en una consulta particular por correo electrónico. 138 D3.js - Data-Driven Documents [en línea]. (n.d.). Disponible en: http://d3js.org [Consulta: 11 de julio de 2014]. 144 Capítulo 8 Conclusiones y trabajo futuro Solventar el error que impide utilizar cuentas de usuario con cierto tipo de caracteres tales como ñ, ü, ó etc. Seguir a los desarrolladores y principales contribuidores del proyecto PyBossa para estar al día sobre sus avances: o o o o o Daniel Lombraña González (teleyinex) 139. Egil Möller (redhog) 140. alejandrodob141. fgrey142. Rufus Pollock143. 139 teleyinex (Daniel Lombraña González) · GitHub [en línea]. (n.d.). Disponible en: https://github.com/teleyinex [Consulta: 11 de julio de 2014]. 140 redhog (Egil Möller) · GitHub [en línea]. (n.d.). Disponible en: https://github.com/redhog [Consulta: 11 de julio de 2014]. 141 alejandrodob · GitHub [en línea]. (n.d.). Disponible en: https://github.com/alejandrodob [Consulta: 11 de julio de 2014]. 142 fgrey · GitHub [en línea]. (n.d.). Disponible en: https://github.com/fgrey [Consulta: 11 de julio de 2014]. 143 rgrp (Rufus Pollock) · GitHub [en línea]. (n.d.). Disponible en: https://github.com/rgrp [Consulta: 11 de julio de 2014]. 145 Capítulo 8 Conclusiones y trabajo futuro 146 Anexos 9. Anexos A pesar de que en algunos apartados de los anexos se hace referencia a archivos de base de datos, contraseñas y otros parámetros de carácter sensible, cabe destacar que se trata solo de ejemplos. El código fuente de los proyectos implementados así como otras aplicaciones y scripts desarrollados que se mencionan a continuación, se encuentran disponibles en la cuenta de GitHub de analizo.info, dentro de la organización proyectos-analizo-info144. 9.1 Anexo I: Aspectos generales 9.1.1 Acceso a un servidor a través de SSH Para conectarse a un servidor mediante SSH se necesitan dos datos: La ip de la máquina (o el nombre DNS equivalente). La contraseña del usuario administrador (root) de la máquina. En el caso de conectarse desde un ordenador con Linux se necesitara tener el paquete Open SSH instalado. Para conectarse desde un ordenador con Windows se necesitará tener el programa Putty instalado. Figura 84. PuTTY Free Telnet SSH Client (1). Figura 85. PuTTY Free Telnet SSH Client (2). 144 proyectos.analizo.info · GitHub [en línea]. (n.d.). Disponible en: https://github.com/proyectosanalizo-info [Consulta: 8 de julio de 2014]. 147 Anexos Figura 86. PuTTY Free Telnet SSH Client (3). Figura 87. PuTTY Free Telnet SSH Client (4). Una vez se establece la conexión, el cliente SSH recibe una marca de seguridad RSA key fingerprint que identifica unívocamente el servidor al que está conectado. Figura 88. PuTTY Free Telnet SSH Client (5). Esta marca se verifica cada nueva conexión. Si cambia, se informa de ello para notificar que algo ha cambiado en el servidor, o que la conexión se está realizando desde otra máquina distinta a la inicial. 148 Anexos 9.1.2 Instalación de Ubuntu Server 12.04.3 LTS x64 en Oracle VM VirtualBox 1. Descargar e instalar Oracle VM VirtualBox. VirtualBox-4.3.10-93012-Win.exe https://www.virtualbox.org/wiki/Downloads * Dejar todas las opciones por defecto durante la instalación. 2. Abrir VirtualBox y crear una nueva máquina virtual. Pulsar la opción Nueva. Figura 89. Instalación Ubuntu Server VirtualBox (1). 3. Configurar Nombre y sistema operativo. Nombre: PyBossa, Tipo: Linux y Versión: Ubuntu (64 bit). Figura 90. Instalación Ubuntu Server VirtualBox (2). 149 Anexos 4. Configurar Tamaño de memoria. Seleccionar al menos 1024 MB (1 GB). Figura 91. Instalación Ubuntu Server VirtualBox (3). 5. Configurar Unidad de disco duro. Seleccionar Crear un disco duro virtual ahora. Figura 92. Instalación Ubuntu Server VirtualBox (4). 150 Anexos 5.1 Configurar Tipo de archivo de unidad de disco duro. Seleccionar VDI (VirtualBox Disk Image). Figura 93. Instalación Ubuntu Server VirtualBox (5). 5.2 Configurar Almacenamiento en unidad de disco duro físico. Seleccionar Reservado dinámicamente. Figura 94. Instalación Ubuntu Server VirtualBox (6). 151 Anexos 5.3 Configurar Ubicación del archivo y tamaño. Seleccionar al menos 10 GB. Figura 95. Instalación Ubuntu Server VirtualBox (7). 6. Pulsar la opción Configuración. Figura 96. Instalación Ubuntu Server VirtualBox (8). Figura 97. Instalación Ubuntu Server VirtualBox (9). 152 Anexos 6.1 Seleccionar General y después Avanzado. Activar Mostrar en la parte superior de la pantalla. Figura 98. Instalación Ubuntu Server VirtualBox (10). 6.2 Seleccionar Sistema y después Placa base. Desmarcar Disquete y colocarlo después de Disco duro. Marcar Habilitar IO APIC. Figura 99. Instalación Ubuntu Server VirtualBox (11). 153 Anexos Figura 100. Instalación Ubuntu Server VirtualBox (12). 6.3 Seleccionar Sistema y después Procesador. Ajustar el número de procesadores a los deseados y marcar Habilitar PAE/NX. Figura 101. Instalación Ubuntu Server VirtualBox (13). 154 Anexos Figura 102. Instalación Ubuntu Server VirtualBox (14). 6.4 Seleccionar Sistema y después Aceleración. Asegurarse que las siguientes opciones están marcadas. Figura 103. Instalación Ubuntu Server VirtualBox (15). 155 Anexos 7. Descargar el archivo iso Ubuntu Server 12.04.3 LTS x64 de la página Web oficial de Ubuntu. Elegir la versión de 64 bits. ubuntu-12.04.3-server-amd64.iso http://www.ubuntu.com/download/server 8. Seleccionar Almacenamiento, después Controller: IDE y pulsar en Vacío. Figura 104. Instalación Ubuntu Server VirtualBox (16). En la parte derecha, pulsar sobre Unidad CD/DVD y seleccionar el archivo iso ubuntu-12.04.3-server-amd64.iso previamente descargado. Figura 105. Instalación Ubuntu Server VirtualBox (17). Figura 106. Instalación Ubuntu Server VirtualBox (18). 156 Anexos 9. Instalación de Ubuntu Server 12.04.3 LTS x64. Salir de la opción de Configuración y pulsar la opción Iniciar. Figura 107. Instalación Ubuntu Server VirtualBox (19). 9.1 Seleccionar el idioma Español. Figura 108. Instalación Ubuntu Server VirtualBox (20). 157 Anexos 9.2 Seleccionar Instalar Ubuntu Server. Figura 109. Instalación Ubuntu Server VirtualBox (21). 9.3 Seleccionar la ubicación España. Figura 110. Instalación Ubuntu Server VirtualBox (22). 158 Anexos 9.4 Configurar el modelo de teclado en es. Figura 111. Instalación Ubuntu Server VirtualBox (23). Figura 112. Instalación Ubuntu Server VirtualBox (24). 159 Anexos 9.5 Configurar el nombre de la máquina. Figura 113. Instalación Ubuntu Server VirtualBox (25). 9.6 Configurar el nombre completo para el nuevo usuario. Figura 114. Instalación Ubuntu Server VirtualBox (26). 160 Anexos 9.7 Configurar el nombre de usuario para la cuenta. Figura 115. Instalación Ubuntu Server VirtualBox (27). 9.8 Configurar la contraseña para el nuevo usuario. Figura 116. Instalación Ubuntu Server VirtualBox (28). 161 Anexos 9.9 Configurar el cifrado de la carpeta personal. Figura 117. Instalación Ubuntu Server VirtualBox (29). 9.10 Configurar la ubicación de zona horaria. Elegir Península. Figura 118. Instalación Ubuntu Server VirtualBox (30). 162 Anexos 9.11 Configurar el particionado de discos. Seleccionar Guiado - utilizar el disco completo y configurar LVM. Figura 119. Instalación Ubuntu Server VirtualBox (31). Seleccionar el disco a particionar. Figura 120. Instalación Ubuntu Server VirtualBox (32). 163 Anexos Establecer el tamaño de la partición (todo el disco). Figura 121. Instalación Ubuntu Server VirtualBox (33). Seleccionar guardar los cambios y configurar LVM. Elegir Sí. Figura 122. Instalación Ubuntu Server VirtualBox (34). 164 Anexos Seleccionar Finalizar el particionado y escribir los cambios en el disco. Figura 123. Instalación Ubuntu Server VirtualBox (35). Seleccionar escribir los cambios en los discos. Elegir Sí. Figura 124. Instalación Ubuntu Server VirtualBox (36). 165 Anexos 9.12 Esperar hasta que el sistema se instale. Figura 125. Instalación Ubuntu Server VirtualBox (37). Pulsar continuar. Figura 126. Instalación Ubuntu Server VirtualBox (38). 166 Anexos Seleccionar Instalar actualizaciones de seguridad automáticamente. Figura 127. Instalación Ubuntu Server VirtualBox (39). No es necesario elegir ningún programa adicional. Figura 128. Instalación Ubuntu Server VirtualBox (40). 167 Anexos Instalar el cargador de arranque GRUB en el registro principal de arranque. Elegir Sí. Figura 129. Instalación Ubuntu Server VirtualBox (41). Si la instalación se ha realizado correctamente aparecerá el siguiente mensaje. Figura 130. Instalación Ubuntu Server VirtualBox (42). 168 Anexos 9.13 Arranque de Ubuntu Server LTS. Figura 131. Instalación Ubuntu Server VirtualBox (43). Figura 132. Instalación Ubuntu Server VirtualBox (44). Introducir el usuario y la contraseña especificados durante la instalación. Usuario: pyadmin Contraseña: p1b00sa4dm1n Figura 133. Instalación Ubuntu Server VirtualBox (45). 169 Anexos Éste debería de ser el resultado final después de todo el procedimiento. Figura 134. Instalación Ubuntu Server VirtualBox (46). 170 Anexos 9.1.3 Acceso desde el ordenador host al servidor Ubuntu en Oracle VM VirtualBox 1. Abrir Oracle VM VirtualBox y elegir la máquina virtual deseada. Figura 135. Acceso host Oracle VM VirtualBox (1). 2. Pulsar la opción Configuración. Figura 136. Acceso host Oracle VM VirtualBox (2). Figura 137. Acceso host Oracle VM VirtualBox (3). 171 Anexos 2.1 Seleccionar Red y después Adaptador 1. Figura 138. Acceso host Oracle VM VirtualBox (4). En el apartado Conectado a: seleccionar Adaptador puente. De esta forma al iniciar la máquina virtual, esta dará una IP de la red al sistema operativo que tiene instalado. Figura 139. Acceso host Oracle VM VirtualBox (5). Ahora desde cualquier navegador Web del ordenador host, se puede acceder a la dirección 192.169.2.100 para ver si se está sirviendo alguna página Web por ejemplo. 172 Anexos 9.1.4 Instalación del servidor de correo Postfix compatible con Ubuntu Server 1. Desde un terminal escribir la siguiente orden y seleccionar Sin configuración. sudo aptitude install postfix Para configurarlo debidamente, escribimos nuevamente la siguiente orden desde el terminal: sudo dpkg-reconfigure postfix Figura 140. Instalación Postfix (1). 2. Seleccionar la opción del menú Internet Site. Figura 141. Instalación Postfix (2). 173 Anexos 3. Escribir el nombre de la máquina que hace de servidor de correo. Ejemplo: vpsXXXXX.ovh.net. Figura 142. Instalación Postfix (3). 4. Escribir la ruta de la bandeja de entrada para el correo. Ejemplo: /home/mailbox/ Figura 143. Instalación Postfix (4). 5. Escribir los alias (apodos) con los que se puede conocer a la máquina. Figura 144. Instalación Postfix (5). 174 Anexos 6. Seleccionar No. Figura 145. Instalación Postfix (6). 7. Dejar la configuración por defecto. Figura 146. Instalación Postfix (7). 8. Escribir como límite 0. Figura 147. Instalación Postfix (8). 175 Anexos 9. Dejar la configuración por defecto. Figura 148. Instalación Postfix (9). 10. Seleccionar la opción all. Figura 149. Instalación Postfix (10). 11. Modificar la configuración del archivo /etc/postfix/main.cf. Desde el terminal, escribir la siguiente orden: sudo vim /etc/postfix/main.cf Editar el archivo agregando las siguientes opciones al final: Figura 150. Instalación Postfix (11). 12. Reiniciar el servidor de correo para aplicar la nueva configuración. sudo /etc/init.d/postfix restart 176 Anexos 13. Probar a enviar un correo con la siguiente secuencia de órdenes desde el terminal. telnet XX.XXX.XX.XX 25 # ip, puerto HELO root.vpsXXXXX.ovh.net # nombre de la máquina MAIL FROM: [email protected] # remitente RCPT TO: [email protected] # destinatario DATA # iniciar mensaje EMAIL DE PRUEBA # contenido del mensaje . # finalizar mensaje QUIT # salir 14. Comprobación de resultados. Figura 151. Instalación Postfix (12). 177 Anexos 9.1.5 Saltos de línea de un archivo en diferentes sistemas operativos Si se ha generado por ejemplo el archivo mail_list.txt desde el sistema operativo Linux, al tratar de visualizarlo en Windows se va a mostrar todo su contenido en una línea. Para corregir este problema se puede hacer uso del programa Notepad++. En el menú ir a la opción Editar, Conversión fin de línea y elegir la opción deseada. Convertir a formato Windows: Figura 152. Conversión saltos de línea Windows. Convertir a formato Unix: Figura 153. Conversión saltos de línea Unix. Convertir a formato MAC: Figura 154. Conversión saltos de línea MAC. 178 Anexos 9.1.6 Redirección de un registro A (IP) a un nombre de dominio (Empresa 1&1) Para cambiar el registro A (Dirección IP) a la que apunta un dominio o subdominio hay que seguir los pasos que se indican a continuación. 1. Iniciar sesión en el 1&1 Panel de Control introduciendo el ID de cliente o nombre del dominio y la contraseña. Figura 155. Redirección registro A (IP) a nombre de dominio (1&1) (1). 2. Si se utilizan varios contratos, seleccionar el contrato correspondiente para acceder a página de administración. Figura 156. Redirección registro A (IP) a nombre de dominio (1&1) (2). 3. Elegir la opción Dominios. Figura 157. Redirección registro A (IP) a nombre de dominio (1&1) (3). 179 Anexos 4. Marcar la casilla que está al lado del dominio, hacer clic en DNS y seleccionar Mostrar configuración DNS del menú desplegable. Figura 158. Redirección registro A (IP) a nombre de dominio (1&1) (4). 5. Hacer clic en modificar que se encuentra al lado de Configuración del servidor de nombres. Figura 159. Redirección registro A (IP) a nombre de dominio (1&1) (5). 6. Si el dominio no está actualmente establecido para utilizar los servidores de 1&1, no se podrá cambiar la dirección IP dentro del 1&1 Panel de Control. * Se necesitará actualizar la dirección IP en el proveedor de DNS actual. 7. Seleccionar Otras direcciones IP, escribir las cuatro partes de la dirección IP dentro de las casillas y pulsar Enviar. Figura 160. Redirección registro A (IP) a nombre de dominio (1&1) (6). 180 Anexos 8. Se mostrará una página de confirmación explicando que el dominio está siendo actualizado. Figura 161. Redirección registro A (IP) a nombre de dominio (1&1) (7). Al igual que en todos los ajustes de DNS este proceso puede tardar entre 24 y 48 horas hasta que el dominio sea reconocido por todos los servidores y ordenadores en Internet. 181 Anexos 9.1.7 Comandos PostgreSQL de interés en Linux Activa la terminal interactiva: o psql Salir de la terminal interactiva: o \q Mostrar bases de datos existentes: o \l Seleccionar una base de datos: o \c base_de_datos Listar tablas de una base de datos: o \d Mostrar las columnas de una tabla: o \d table Ver registros de una tabla: o SELECT * FROM schema.table Exportar los datos de la tabla user de la base de datos pybossa al archivo pybossa_user_data.sql: o pg_dump --table='user' --data-only pybossa > pybossa_user_data.sql Alterar el valor del campo user_id_seq para cambiarlo por el valor 1: o ALTER SEQUENCE public.user_id_seq RESTART WITH 1; Borrar la base de datos pybossa: o DROP DATABASE pybossa; 182 Anexos 9.1.8 Restaurar una base de datos PostgreSQL en Linux 1. Cambiar al usuario postgres. root@vpsXXXXX:/home# sudo su postgres 2. Situarse en el directorio dónde se encuentre la base de datos a restaurar /var/lib/postgresql postgres@ vpsXXXXX:/home$ cd /var/lib/postgresql 3. Importar la base de datos copia.sql a la base de datos pybossa. psql --set ON_ERROR_STOP=on pybossa < copia.sql 183 Anexos 9.1.9 Comandos básicos del editor vim Abrir archivo: o vim nombre_del_archivo Escribir: o :i Detener la escritura: o Esc Guardar los cambios: o :w Cerrar archivo: o :q Cerrar archivo sin guardar los cambios: o :q! Cerrar archivo guardando los cambios: o :wq! 184 Anexos 9.2 Anexo II: PyBossa 9.2.1 Instalación de un servidor PyBossa (v0.2.1 - v0.23) 1. Preparación del servidor. Tareas previas a realizar antes de comenzar con la instalación de PyBossa. 1.2 Actualizar la lista de paquetes. root@vpsXXXXX:~# aptitude update 1.3 Instalar las actualizaciones pendientes. root@vpsXXXXX:~# aptitude upgrade 2. Instalación de Git (sistema de control de versiones distribuido). root@vpsXXXXX:~# aptitude install git 3. Instalación del sistema de gestión de base de datos PostgreSQL. root@vpsXXXXX:~# aptitude install postgresql-9.1 4. Instalación de virtualenv. root@vpsXXXXX:~# aptitude install python-virtualenv 5. Instalación de las librerías de python requeridas por PyBossa. root@vpsXXXXX:~# aptitude install postgresql-server-dev-9.1 python-dev swig 6. Descargar la última versión de PyBossa en el directorio /home. root@vpsXXXXX:/home# git clone --recursive https://github.com/PyBossa/pybossa.git 7. Crear un entorno virtual env dentro de pybossa. root@vpsXXXXX:/home# cd pybossa root@vpsXXXXX:/home/pybossa# virtualenv env 185 Anexos 8. Activar el entorno virtual creado para continuar la instalación. root@vpsXXXXX:/home/pybossa# source env/bin/activate * Para desactivar el entorno virtual utilizar source deactivate 9. Instalación de las librerías requeridas dentro del entorno virtual creado. (env)root@vpsXXXXX:/home/pybossa# pip install -e . (env)root@vpsXXXXX:/home/pybossa# pip install -r cache_requirements.txt 10. Creación del archivo de configuración settings_local.py 10.1 Generar 3 claves seguras. (env)root@vpsXXXXX:/home/pybossa# python import os os.urandom(24) 'I\xab\xc6\x83\xd5\x97\x9a\t#\x9a\x03M\x9f\xac\x12\xac)Cs\x11\xdby\xe5\x86' "\xe9\xc8\x05\xcc\xfc\xe9\x08\x9d\xee\x11\xb8\xf6\xa5\xd3e\x91\xd5\xaf\x11'N\x8 b=w" '\xae\x08"\x04\x90>\x0e\xdf{\x07\xb5]\xa3\xee\xd5\x94J\xf1\xa4\x9a\xe9*\x1di' 10.2 Crear una copia del archivo plantilla settings_local.py.tmpl (env)root@vpsXXXXX:/home/pybossa# cp settings_local.py.tmpl settings_local.py 10.3 Editar el archivo settings_local.py (env)root@vpsXXXXX:/home/pybossa# vim settings_local.py 10.4 Descomentar la línea #DEBUG = False. DEBUG = False 10.5 Especificar el nombre del servidor. HOST = 'vpsXXXXX.ovh.net' 186 Anexos 10.6 Escribir dos de las claves seguras generadas previamente. SECRET='I\xab\xc6\x83\xd5\x97\x9a\t#\x9a\x03M\x9f\xac\x12\xac)Cs\x11\xdby\xe5\ x86' SECRET_KEY="\xe9\xc8\x05\xcc\xfc\xe9\x08\x9d\xee\x11\xb8\xf6\xa5\xd3e\x91\xd5 \xaf\x11'N\x8b=w" 10.7 Escribir un nombre de usuario pymainuser y su contraseña 1234* para la base de datos pybossa. SQLALCHEMY_DATABASE_URI = 'postgresql://pymainuser:1234*@localhost/pybossa' 10.8 Escribir un nombre de usuario pyuser y su contraseña 5678* para la base de datos de test tpybossa. SQLALCHEMY_DATABASE_TEST_URI = 'postgresql://pyuser:5678*@localhost/tpybossa' 10.9 Escribir la tercera clave segura generada previamente. ITSDANGEORUSKEY = '\xae\x08"\x04\x90>\x0e\xdf{\x07\xb5]\xa3\xee\xd5\x94J\xf1\xa4\x9a\xe9*\x1di' 10.10 Escribir la información general del proyecto. BRAND = 'analizo.info' TITLE = 'Proyectos' LOGO = 'default_logo.png' COPYRIGHT = 'COPYRIGHT' DESCRIPTION = 'DESCRIPTION' TERMSOFUSE = 'http://okfn.org/terms-of-use/' DATAUSE = 'http://opendatacommons.org/licenses/by/' CONTACT_EMAIL = '[email protected]' CONTACT_TWITTER = 'analizoinfo' 10.11 Escribir los lenguajes soportados. LOCALES = ['es'] 187 Anexos 10.12 Escribir la configuración del servidor de correo. MAIL_SERVER = 'localhost' MAIL_USERNAME = None MAIL_PASSWORD = None MAIL_PORT = 25 MAIL_FAIL_SILENTLY = False MAIL_DEFAULT_SENDER = 'Proyectos analizo.info <[email protected]>' 11. Creación del archivo de configuración alembic.ini 11.1 Crear una copia del archivo plantilla alembic.ini.template (env)root@vpsXXXXX:/home/pybossa# cp alembic.ini.template alembic.ini 11.2 Editar el archivo alembic.ini (env)root@vpsXXXXX:/home/pybossa# vim alembic.ini 11.3 Escribir la misma configuración que figura en el apartado SQLALCHEMY_DATABASE_URI del archivo de configuración settings_local.py sqlalchemy.url = postgresql://pymainuser:1234*@localhost/pybossa 12. Instalación de Redis. 12.1 Situarse en la carpeta /home (env)root@vpsXXXXX:/home/pybossa# cd .. 12.2 Descargar la última versión de Redis estable. (env)root@vpsXXXXX:/home# wget http://download.redis.io/releases/redis2.8.5.tar.gz 12.3 Descomprimir el archivo redis-2.8.5.tar.gz (env)root@vpsXXXXX:/home# tar xzf redis-2.8.5.tar.gz 12.4 Situarse en el directorio redis-2.8.5/src/ (env)root@vpsXXXXX:/home# cd redis-2.8.5/src/ 188 Anexos 12.5 Compilar el código fuente de Redis. (env)root@vpsXXXXX:/home/redis-2.8.5/src# make 12.6 Ejecutar el test de Redis. (env)root@vpsXXXXX:/home/redis-2.8.5/src# make test 12.7 Instalar Redis. (env)root@vpsXXXXX:/home/redis-2.8.5/src# make install 13. Configuración de Redis. 13.1 Crear el directorio redis en /etc (env)root@vpsXXXXX:/home/redis-2.8.5# mkdir /etc/redis 13.2 Crear el directorio redis en /var (env)root@vpsXXXXX:/home/redis-2.8.5# mkdir /var/redis 13.3 Crear una copia del archivo de configuración redis.conf en /etc/redis/6379.conf (env)root@vpsXXXXX:/home/redis-2.8.5# cp redis.conf /etc/redis/6379.conf 13.4 Editar el archivo 6379.conf (env)root@vpsXXXXX:/home/redis-2.8.5# vim /etc/redis/6379.conf 13.5 Habilitar Redis como demonio del sistema. daemonize yes 13.6 Especificar la ruta para el archivo pid. pidfile /var/run/redis_6379.pid 13.7 Especificar el puerto port 6379 13.8 Especificar el nivel de detalle del registro de eventos. loglevel notice 189 Anexos 13.9 Especificar la ruta del archivo de registro. logfile "/var/log/redis_6379.log" 13.10 Especificar cada cuanto se guardará la base de datos que está en memoria en el disco duro. # after 5 min (300 sec) if at least 1 keys changed save 300 1 13.11 Especificar el nombre del directorio donde se guardará la base de datos de Redis. dir /var/redis/6379 14. Crear el directorio 6379 en /var/redis/ 15. Copiar el archivo de configuración sentinel.conf al directorio /etc/redis/ (env)root@vpsXXXXX:/home# cp pybossa/contrib/sentinel.conf /etc/redis/ 16. Para cumplir con los requisitos de Redis para PyBossa, se ha creado un script de inicio redis_6379 a partir de los scripts existentes: /home/redis-2.8.5/utils/redis_init_script /home/pybossa/contrib/redis/redis-sentinel /home/pybossa/contrib/redis/redis-server 16.1 Copiar el script redis_6379 proporcionado al directorio /etc/init.d (env)root@vpsXXXXX:/home# cp redis_6379 /etc/init.d/redis_6379 16.2 Darle permisos de ejecución. (env)root@vpsXXXXX:/home# chmod +x redis_6379 16.3 Actualizar los scripts de inicio. (env)root@vpsXXXXX:/home# update-rc.d redis_6379 defaults * Para eliminar un script del arranque utilizar update-rc.d -f redis_6379 remove 16.4 Iniciar el script para que el demonio de Redis comience a funcionar. (env)root@vpsXXXXX:/home# /etc/init.d/redis_6379 start 190 Anexos 16.5 Comprobar que está funcionando. (env)root@vpsXXXXX:/home# ps aux | grep redis root 16438 0.0 0.1 41184 2048 ? Ssl 23:43 0:00 /usr/local/bin/redis-server *:6379 root 16440 0.0 0.1 41188 2020 ? Ssl 23:43 0:00 /usr/local/bin/redis-server *:26379 root 16470 0.0 0.0 8548 900 pts/0 S+ 23:44 0:00 grep --color=auto redis 17. Configurar los usuarios y bases de datos PostgreSQL especificadas en el archivo de configuración settings_local.py 17.1 Cambiar al usuario postgres (env)root@vpsXXXXX:/home# sudo su postgres 17.2 Crear el usuario pymainuser postgres@vpsXXXXX:/home$ createuser -P pymainuser Enter password for new role: 1234* Enter it again: 1234* Shall the new role be a super user? (y/n) n Shall the new role be allowed to create databases? (y/n) y Shall the new role be allowed to create more new roles? (y/n) n 17.3 Crear el usuario pyuser postgres@vpsXXXXX:/home$ createuser -P pyuser Enter password for new role: 5678* Enter it again: 5678* Shall the new role be a super user? (y/n) n Shall the new role be allowed to create databases? (y/n) y Shall the new role be allowed to create more new roles? (y/n) n 17.4 Crear la base de datos pybossa asociada al usuario pymainuser postgres@vpsXXXXX:/home$ createdb pybossa -O pymainuser 17.5 Crear la base de datos tpybossa asociada al usuario pyuser postgres@vpsXXXXX:/home$ createdb tpybossa -O pyuser 17.6 Salir del usuario postgres postgres@vpsXXXXX:/home$ exit 191 Anexos 18. Situarse en el directorio pybossa (env)root@vpsXXXXX:/home# cd pybossa 19. Crear las tablas de las base de datos. (env)root@vpsXXXXX:/home/pybossa# python cli.py db_create 20. Arrancar el servidor PyBossa. (env)root@vpsXXXXX:/home/pybossa# python pybossa/web.py <type 'exceptions.KeyError'> ('TWITTER_CONSUMER_KEY',) 'TWITTER_CONSUMER_KEY' Twitter signin disabled <type 'exceptions.KeyError'> ('FACEBOOK_APP_ID',) 'FACEBOOK_APP_ID' Facebook signin disabled <type 'exceptions.KeyError'> ('GOOGLE_CLIENT_ID',) 'GOOGLE_CLIENT_ID' Google signin disabled GeoLiteCity.dat file not found App page stats web map disabled INFO:werkzeug: * Running on http://vpsXXXXX.ovh.net:5000/ 21. Acceder a PyBossa. http://vpsXXXXX.ovh.net:5000/ 192 Anexos 9.2.2 Desplegar PyBossa mediante el servidor Web Apache y mod_wsgi 1. Situarse en el directorio /home (env)root@vpsXXXXX:/home/pybossa# cd .. 2. Instalar Apache. (env)root@vpsXXXXX:/home# aptitude install apache2 3. Instalar libapache2-mod-wsgi. (env)root@vpsXXXXX:/home# aptitude install libapache2-mod-wsgi 4. Habilitar los módulos mod_wsgi, headers y rewrite de Apache. (env)root@vpsXXXXX:/home# a2enmod wsgi (env)root@vpsXXXXX:/home# a2enmod headers (env)root@vpsXXXXX:/home# a2enmod rewrite 5. Reiniciar Apache. (env)root@vpsXXXXX:/home# service apache2 restart 6. Crear un host virtual para ejecutar PyBossa. 6.1 Situarse en el directorio /home/pybossa/contrib/apache2/ (env)root@vpsXXXXX:/home# cd /pybossa/contrib/apache2/ 6.2 Crear una copia del archivo plantilla pybossa-site (env)root@vpsXXXXX:/home/pybossa/contrib/apache2# cp pybossa-site pybossasite_bak 6.3 Editar el archivo pybossa-site (env)root@vpsXXXXX:/home/pybossa/contrib/apache2# vim pybossa-site 6.4 Especificar el nombre del servidor. ServerName proyectos.analizo.info 193 Anexos 6.5 Especificar los alias del servidor. ServerAlias XX.XXX.XX.XX vpsXXXXX.ovh.net 6.6 Especificar un correo de contacto. ServerAdmin [email protected] 6.7 Especificar la ruta de instalación de PyBossa como directorio raíz. DocumentRoot /home/pybossa 6.8 Especificar el tamaño máximo de cookies que aceptan los navegadores Web si fuera necesario. LimitRequestFieldSize 65536 6.9 Especificar el nombre de usuario y grupo de Apache www-data WSGIDaemonProcess pybossa user=www-data group=www-data threads=5 6.10 Especificar la ruta del archivo pybossa.wsgi WSGIScriptAlias / /home/pybossa/contrib/pybossa.wsgi 6.11 Especificar la ruta de la instalación de PyBossa. <Directory /home/pybossa> 7. Copiar el archivo pybossa-site al directorio /etc/apache2/sites-available/ (env)root@vpsXXXXX:/home/pybossa/contrib/apache2# cp pybossa-site /etc/apache2/sites-available/ 8. Cambiar al directorio /home/pybossa/contrib (env)root@vpsXXXXX:/home/pybossa/contrib/apache2# cd .. 9. Crear una copia del archivo plantilla pybossa.wsgi.template (env)root@vpsXXXXX:/home/pybossa/contrib# cp pybossa.wsgi.template pybossa.wsgi 10. Editar el archivo pybossa.wsgi (env)root@vpsXXXXX:/home/pybossa/contrib# vim pybossa.wsgi 194 Anexos 10.1 Especificar la ruta de instalación de PyBossa. activate_this = '/home/pybossa/env/bin/activate_this.py' sys.path.insert(0,'/home/pybossa') 11. Habilitar el sitio pybossa-site (env)root@vpsXXXXX:/home/pybossa/contrib # a2ensite pybossa-site 12. Reiniciar Apache. (env)root@vpsXXXXX:/home/pybossa/contrib # service apache2 restart 13. Deshabilitar el sito por defecto. (env)root@vpsXXXXX:/home/pybossa/contrib # a2dissite default 14. Activar la nueva configuración. (env)root@vpsXXXXX:/home/pybossa/contrib # service apache2 reload 15. Detener e iniciar Apache. (env)root@vpsXXXXX:/home/pybossa/contrib # service apache2 stop (env)root@vpsXXXXX:/home/pybossa/contrib # service apache2 start 16. Reiniciar el sistema operativo para comprobar que al arrancar se inicia todo de forma correcta. (env)root@vpsXXXXX:/home/pybossa/contrib # reboot http://proyectos.analizo.info/ 195 Anexos 9.2.3 Configurar una página Web para el modo mantenimiento del servidor PyBossa 1. Situarse en el directorio /var/www root@vpsXXXXX:~# cd /var/www 2. Crear una copia del archivo index.html root@vpsXXXXX:/var/www# cp index.html maintenance.html 3. Editar el archivo maintenance.html con el contenido deseado. root@vpsXXXXX:/var/www# vim maintenance.html 4. Copiar el archivo /home/pybossa/contrib/apache2/pybossa-maintenance-mode al directorio /etc/apache2/sites-available/ root@vpsXXXXX:/var/www# cp /home/pybossa/contrib/apache2/pybossamaintenance-mode /etc/apache2/sites-available/ 5. Para cambiar entre la página de mantenimiento del servidor y el funcionamiento normal del mismo utilizar el script pyadmin (Ver anexo correspondiente). Activar modo mantenimiento proyectos.analizo.info sh pyadmin.sh 9 Activar proyectos.analizo.info sh pyadmin.sh 7 196 Anexos 9.2.4 Actualizar a nuevas versiones de PyBossa Antes de nada, hay que recodar que la versión de PyBossa de analizo.info ha sido modificada para satisfacer sus necesidades particulares. Por ello, habrá que volver a aplicar las modificaciones oportunas en nuevas versiones. 1. Situarse en el directorio pybossa. root@vpsXXXXX:~# cd /home/pybossa/ 2. Traer los cambios de la rama principal del repositorio origen remoto y unirlos a la rama local. root@vpsXXXXX:/home/pybossa# git pull origin master From https://github.com/PyBossa/pybossa * branch master -> FETCH_HEAD Already up-to-date. 197 Anexos 9.2.5 Gestión de las traducciones en PyBossa En la carpeta pybossa/pybossa/translations se encuentra el archivo messages.pot con los textos originales de PyBossa. Dentro de dicha carpeta existen otras que hacen referencia al resto de traducciones disponibles. root@vpsXXXXX:/home/pybossa/pybossa/translations# ls -la total 48 drwxr-xr-x 4 root root 4096 Feb 20 18:27 . drwxr-xr-x 10 root root 4096 Feb 20 19:24 .. drwxr-xr-x 3 root root 4096 Feb 20 18:27 es drwxr-xr-x 3 root root 4096 Feb 20 18:27 fr -rw-r--r-- 1 root root 30647 Feb 20 18:27 messages.pot En la carpeta pybossa/pybossa/translations/es/LC_MESSAGES se encuentran los archivos messages.po y messages.mo El primero de ellos messages.po es el que contiene las traducciones de la plataforma en español. Para editarlo se puede utilizar el programa poedit. Basta con abrirlo, realizar los cambios oportunos, validar la traducción y guardar el nuevo archivo. Figura 162. Poedit. Por otro lado, el archivo messages.mo es la compilación autogenerada de messages.mo Para hacer efectivos los cambios en PyBossa basta con reemplazar los archivos originales en la carpeta correspondiente. 198 Anexos 9.2.6 Administración de PyBossa A continuación se explica cómo realizar las acciones que corresponden con el manejo y gestión de la plataforma PyBossa. Gestión de usuarios PyBossa tiene tres tipos de usuarios: Anónimos: o Participar y consultar estadísticas de aplicaciones que lo permitan. Autenticados: o Participar y consultar estadísticas de aplicaciones que lo permitan. o Crear aplicaciones. o Gestionar su perfil. Administradores: o Tienen el control total de la plataforma. Por defecto, el primer usuario que se crea en PyBossa es administrador. Este rol permite a sus usuarios entrar a la opción Administrar el sitio desde el menú principal: Figura 163. Administración de PyBossa (1). 199 Anexos Los usuarios con el rol de administrador pueden gestionar tres áreas diferentes en el servidor adicionalmente: Figura 164. Administración de PyBossa (2). 1. Aplicaciones destacadas. Figura 165. Administración de PyBossa (3). Permite seleccionar las aplicaciones que aparecen en la página principal de PyBossa. 200 Anexos Figura 166. Administración de PyBossa (4). 2. Categorías. Permite dar de alta categorías para clasificar las aplicaciones: Figura 167. Administración de PyBossa (5). 201 Anexos 3. Administradores. Permite nombrar a nuevos usuarios administradores en la plataforma: Figura 168. Administración de PyBossa (6). Gestión de aplicaciones A continuación, se explica cómo dar de alta y configurar aplicaciones en PyBossa. 1. Dar de alta una aplicación. Para ello, hay que dirigirse a la opción Crear una aplicación: Figura 169. Administración de PyBossa (7). 202 Anexos Seguidamente, se han de rellenar los campos con la información pertinente: Figura 170. Administración de PyBossa (8). Nombre: Prueba 1234 Identificador: prueba-1234 Descripción breve: Aplicación de prueba 1234 Miniatura: http://proyectos.analizo.info/static/img/placeholder.png Permitir colaboradores anónimos: Sí Category: Pensamiento Descripción: <h1>Esto es una aplicación de prueba.</h1> Al pulsar el botón crear, la aplicación estará dada de alta en el sistema. 203 Anexos Figura 171. Administración de PyBossa (9). En el menú de la izquierda aparecen todas las opciones disponibles: Figura 172. Administración de PyBossa (10). 1. Información. Muestra una pantalla de descripción de la aplicación: Figura 173. Administración de PyBossa (11). 204 Anexos 2. Participar Ejecuta la aplicación cuando está creada. 3. Tareas. 3.1 La sección Import Tasks permite cargar la información deseada que se va a utilizar en la aplicación: Figura 174. Administración de PyBossa (12). Ofrece la posibilidad de carga desde multitud de plantillas: Figura 175. Administración de PyBossa (13). 205 Anexos EpiCollect Plus Project CSV Sound Pattern Recognition Geo-coding Image Pattern Recognition Google Drive Spreadsheet Video Pattern Recognition Transcribing documents 3.2 La sección Export Tasks permite descargar tanto las tareas como las respuestas a las tareas de la aplicación: Figura 176. Administración de PyBossa (14). Permite hacerlo en los formatos abiertos JSON y CSV: Figura 177. Administración de PyBossa (15). 3.3 La sección Task presenter es dónde se encuentra el código fuente de la aplicación. Éste se encarga de presentar la información importada previamente (tareas) y permite trabajar con ella. En este caso, también existen plantillas de ejemplo: Basic. Image Pattern Recognition Sound Pattern Recognition Video Pattern Recognition Geo-coding Transcribing documents 206 Anexos Figura 178. Administración de PyBossa (16). 3.4 La sección Configuración permite gestionar aspectos relacionados con las tareas: Figura 179. Administración de PyBossa (17). El programador de tareas permite gestionar la forma en que se presentan las tareas en la aplicación. 207 Anexos Figura 180. Administración de PyBossa (18). Default or Depth First: o Devuelve una tarea que no se ha completado (se excluye al usuario que participa en la aplicación). Breadth First: o Devuelve una tarea que tenga el menor número de respuestas (se excluye al usuario que participa en la aplicación). Random: o Devuelve una tarea de forma aleatoria (puede devolver la misma tarea n veces al usuario que participa en la aplicación). La opción Task Priority permite darles más peso a unas tareas frente a otras para que se resuelvan antes: Figura 181. Administración de PyBossa (19). 208 Anexos La opción Delete Tasks permite eliminar las tareas cargadas para la aplicación. Hay que tener en cuenta que cuando se borran las tareas también lo hacen las respuestas asociadas a ellas: Figura 182. Administración de PyBossa (20). La opción Task Redundancy permite configurar el número de respuestas que se ha de esperar para cada tarea para que se considere como terminada: Figura 183. Administración de PyBossa (21). 3.5 La sección Browse permite ver en cada momento cual es el estado individual de cada tarea: Figura 184. Administración de PyBossa (22). 209 Anexos 4. Estadísticas. En esta sección, aparecen una serie de resúmenes en forma de tablas y gráficos orientativos acerca de la aplicación y su funcionamiento: Figura 185. Administración de PyBossa (23). Figura 186. Administración de PyBossa (24). 210 Anexos Figura 187. Administración de PyBossa (25). Figura 188. Administración de PyBossa (26). 211 Anexos Figura 189. Administración de PyBossa (27). 5. Configuración. En esta sección se puede ver información referente a la aplicación además de poder acceder al resto de las opciones disponibles: Figura 190. Administración de PyBossa (28). 212 Anexos 9.3 Anexo III: La instancia PyBossa en proyectos.analizo.info 9.3.1 Script pyadmin para la administración del servidor PyBossa de analizo.info Para facilitar algunas de las tareas más comunes en cuando a manejo del servidor se refiere, se diseño el script pyadmin con los comandos más relevantes. El script se encuentra ubicado en la carpeta /home del servidor. Para ver la lista de opciones disponibles basta con ejecutar el script sin pasarle un argumento. root@vpsXXXXX:/home# sh pyadmin.sh Ubuntu Server sh pyadmin.sh sh pyadmin.sh sh pyadmin.sh sh pyadmin.sh sh pyadmin.sh sh pyadmin.sh 1 -> Realizar mantenimiento 2 -> Actualizar lista de paquetes disponibles 3 -> Actualizar paquetes 4 -> Actualizar paquetes (puede desinstalar otros) 5 -> Eliminar instaladores de software descargado 6 -> Eliminar paquetes deb obsoletos PyBossa sh pyadmin.sh 7 -> Activar proyectos.analizo.info sh pyadmin.sh 8 -> Forzar activar proyectos.analizo.info sh pyadmin.sh 9 -> Activar modo mantenimiento proyectos.analizo.info sh pyadmin.sh 10 -> Forzar activar modo mantenimiento proyectos.analizo.info Servidor web (Apache) sh pyadmin.sh 11 -> Recargar módulos Apache sh pyadmin.sh 12 -> Detener Apache sh pyadmin.sh 13 -> Iniciar Apache sh pyadmin.sh 14 -> Reiniciar Apache sh pyadmin.sh 15 -> Recargar Apache sh pyadmin.sh 16 -> Forzar recargar Apache 213 Anexos Servidor de correo (Postfix) sh pyadmin.sh 17 -> Detener Postfix sh pyadmin.sh 18 -> Iniciar Postfix sh pyadmin.sh 19 -> Reiniciar Postfix sh pyadmin.sh 20 -> Recargar Postfix sh pyadmin.sh 21 -> Forzar recargar Postfix Redis sh pyadmin.sh 22 -> Test redis sh pyadmin.sh 23 -> Detener redis sh pyadmin.sh 24 -> Iniciar redis sh pyadmin.sh 25 -> Purgar cache redis 214 Anexos 9.3.2 Visión general del servidor PyBossa de analizo.info Figura 191. Visión general servidor PyBossa analizo.info. 215 Anexos 9.3.3 Creación de una copia de seguridad del servidor PyBossa de analizo.info 1. Situarse en el directorio /home. root@vpsXXXXX:~# cd /home 2. Activar modo mantenimiento proyectos.analizo.info con pyadmin. root@vpsXXXXX:/home# sh pyadmin.sh 9 3. Asegurar que existe un directorio backups para almacenar las copias. root@vpsXXXXX:/home# mkdir -p backups 4. Crear un directorio en backups para la nueva copia. root@vpsXXXXX:/home# mkdir -p backups/$(date "+%d_%b_%Y_%H.%M.%S") 5. Comprimir el directorio de instalación de PyBossa. root@vpsXXXXX:/home# tar -zcvf pybossa.tar.gz pybossa/ 6. Cambiar al usuario postgres. root@vpsXXXXX:/home# sudo su postgres 7. Situarse en el directorio /var/lib/postgresql. postgres@vpsXXXXX:/home$ cd /var/lib/postgresql 8. Exportar la base de datos pybossa al archivo pybossa.sql. postgres@vpsXXXXX:~$ pg_dump pybossa > pybossa.sql 9. Salir del usuario postgres. postgres@vpsXXXXX:~$ exit 10. Activar proyectos.analizo.info con pyadmin. root@vpsXXXXX:/home# sh pyadmin.sh 7 11. Mover los archivos generados a la carpeta creada para la copia. root@vpsXXXXX:/home# mv pybossa.tar.gz backups/xx_xxx_xxxx_xx.xx.xx/ root@vpsXXXXX:/home# mv /var/lib/postgresql/pybossa.sql /home/backups/xx_xxx_xxxx_xx.xx.xx/ 216 Anexos 9.3.4 Migrador de usuarios de analizo.info a PyBossa Figura 192. Migrador MySQL PostgreSQL analizo.info (1). Este software se diseño con el propósito de portar los usuarios registrados en analizo.info a la instalación de PyBossa. Cabe destacar que la información a migrar se almacenaba en distintos SGBD. A continuación se explica el procedimiento seguido. 1. Exportar la base de datos MySQL de analizo.info. db440577083.db.1and1.com.sql 2. Identificar las tablas dónde se encuentra la información a migar. En este caso, la tabla pla_platformusers. CREATE TABLE IF NOT EXISTS `pla_platformusers` ( `id` int(11) NOT NULL AUTO_INCREMENT, `nombreUsuarioPlataforma` varchar(255) COLLATE utf8_spanish2_ci NOT NULL, `emailUsuarioPlataforma` varchar(255) COLLATE utf8_spanish2_ci NOT NULL, `contrasenaUsuarioPlataforma` varchar(255) COLLATE utf8_spanish2_ci NOT NULL, `fotoUsuarioPlataforma` varchar(255) COLLATE utf8_spanish2_ci DEFAULT '/files/uploads/default.jpg', `webUsuarioPlataforma` varchar(255) COLLATE utf8_spanish2_ci DEFAULT NULL, `sinPublicidadPlataforma` tinyint(1) NOT NULL, `lastlogin` datetime NOT NULL, `modified` datetime NOT NULL, `created` datetime NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `nombreUsuarioPlataforma` (`nombreUsuarioPlataforma`), UNIQUE KEY `emailUsuarioPlataforma` (`emailUsuarioPlataforma`) ) ENGINE=InnoDB AUTO_INCREMENT=259 DEFAULT CHARSET=utf8 COLLATE=utf8_spanish2_ci AUTO_INCREMENT=259 ; 217 Anexos Extracto de la información de ejemplo: 5, 'Administrador', 'b88ec2f2a46sss4750ace58992db87aed76b96e8', 'root @ejemplo.com', '/files/uploads/admin.jpg', 1, '2012-07-17 22:17:20', '2013-10-08 17:08:18', '2013-10-08 17:08:18' 6, 'Juan', 'c652efa52dacc6d0483c9fec75cb50122585d6bc', '[email protected]', '/files/uploads/default.jpg', 1, '2013-06-13 17:15:24', '2013-11-21 10:31:36', '2013-1121 10:31:36' 2. Crear un par de usuarios en PyBossa y exportar la base de datos PostgreSQL para saber en qué tablas se almacena su información y cómo. 2.1 Cambiar al usuario postgres. root@vpsXXXXX:/home# sudo su postgres 2.2 Situarse en el directorio /var/lib/postgresql. postgres@ vpsXXXXX:/home$ cd /var/lib/postgresql 2.3 Exportar la base de datos pybossa. postgres@ vpsXXXXX:~$ pg_dump pybossa > pybossa.sql La tabla donde se almacena la información es user. COPY "user" (id, created, email_addr, name, fullname, locale, api_key, passwd_hash, admin, category, flags, twitter_user_id, facebook_user_id, google_user_id, ckan_api, info) FROM stdin; Extracto de la información de ejemplo: 1 c 2 2013-11-16T18:17:28.906528 [email protected] admin admin es bdf96495-40be-4756-ba94-2151cg571c8d pbkdf2:sha1:1000$XXmQNWvl$db4563813fe202ad3b51c70ec4bb066e805c80c t \N \N \N \N \N \N {} 2012-11-21T07:27:22.000000 [email protected] usuario usuario es dq4hhx65-8bi8-rsw4-cf54-xmkz0uklhnc7 pbkdf2:sha1:1000$ZrFbCYAq$11077cd1efe8544cda235a89a985449a01e9ea08 f \N \N \N \N \N \N {} 218 Anexos 3. Hacer las equivalencias pertinentes para pasar la información al nuevo sistema. PyBossa (PostgreSQL) id created email_addr name fullname locale api_key passwd_hash admin category flags twitter_user_id facebook_user_id google_user_id ckan_api info analizo.info (MySQL) id created emailUsuarioPlataforma nombreUsuarioPlataforma contrasenaUsuarioPlataforma Consideraciones autoincremental reconstruir nombreUsuarioPlataforma es generar regenerar t/f \N \N \N \N \N \N {} Tabla 12. Consideraciones migrador MySQL PostgreSQL analizo.info. La fecha de alta created se expresa de forma distinta en los sistemas. El primer usuario que se da de alta en PyBossa es administrador t. Los campos api_key y passwd_hash han de reconstruirse. 4. Programación de un script en el lenguaje de programación python que realiza el trabajo de forma automática. mysql_to_postgres.py 5. Ejecutar el software de migración. python mysql_to_postgres.py Al finalizar la ejecución del programa, el script genera el archivo debug.txt con información de depuración del proceso y escribe el archivo pybossa_user_data_pla_platformusers.sql que contiene la información de los usuarios adaptada a la nueva base de datos. 219 Anexos 9.3.5 Generar listado de correos de los miembros de la comunidad de analizo.info 1. Situarse en el directorio /home. root@vpsXXXXX:~# cd /home 2. Activar modo mantenimiento proyectos.analizo.info con pyadmin. root@vpsXXXXX:/home# sh pyadmin.sh 9 3. Cambiar al usuario postgres. root@vpsXXXXX:/home# sudo su postgres 4. Situarse en el directorio /var/lib/postgresql. postgres@ vpsXXXXX:/home$ cd /var/lib/postgresql 5. Exportar la tabla user de la base de datos pybossa que contiene la información deseada al archivo user_data_only.sql. postgres@vpsXXXXX:~$ pg_dump --table='user' --data-only pybossa > user_data_only.sql 6. Salir del usuario postgres. postgres@vpsXXXXX:~$ exit 7. Activar proyectos.analizo.info con pyadmin. root@vpsXXXXX:/home# sh pyadmin.sh 7 8. Mover el archivo generado user_data_only.sql a la carpeta /home/get_emails/ donde se encuentra el script get_emails.py root@vpsXXXXX:~# mv /var/lib/postgresql/user_data_only.sql /home/get_emails/ 9. Situarse en el directorio get_emails. root@vpsXXXXX:~# cd /home/get_emails 220 Anexos 10. Ejecutar el script get_emails.py para obtener el listado de cuentas de correo mail_list.txt. root@vpsXXXXX:/home/get_emails# python get_emails.py 11. Estructura del archivo mail_list.txt. La primera parte es una lista exportable a Microsoft Office Excel, LibreOffice Calc o similares (copiar - pegar) con las columnas Nombre, Email y Usuario. La segunda parte tiene los correos de los usuarios formateados (con y sin nombre) para facilitar su uso en envíos de forma masiva. 221 Anexos 9.3.6 Configuración de la CDN CloudFlare con el dominio analizo.info Los proveedores de hosting hoy en día ya ofrecen este tipo de servicios pagando una mensualidad para usuarios con pocos conocimientos técnicos desde los paneles de administración. En este caso, se realiza el procedimiento de forma manual para no tener que realizar ningún tipo de pago. 1. Crear una cuenta en CloudFlare para poder obtener las nuevas DNS a las que deberá apuntar el dominio analizo.info: Figura 193. CDN CloudFlare analizo.info (1). Figura 194. CDN CloudFlare analizo.info (2). 222 Anexos 2. Revisar la configuración que se genera de forma automática: Figura 195. CDN CloudFlare analizo.info (3). Lo que se pretende es que tanto el dominio analizo.info como el subdominio proyectos.analizo.info formen parte de la red de distribución de contenidos. Finalmente, el sistema proporciona los nuevos servidores DNS a los que deberá apuntar el dominio analizo.info: Figura 196. CDN CloudFlare analizo.info (4). Para integrar CloudFlare con el dominio analizo.info y el resto de sus subdominios proyectos.analizo.info, hay que cambiar los servidores DNS del proveedor de hosting de analizo.info, que en este caso es 1&1, por los que CloudFlare ha proporcionado. 223 Anexos 3. Desde el panel de administración de 1&1, hay que ir al apartado de Configuración DNS y realizar los siguientes cambios: Figura 197. CDN CloudFlare analizo.info (5). 4. En la sección Configuración básica DNS elegir Otros servidores DNS: Figura 198. CDN CloudFlare analizo.info (6). 5. Escribir los DNS proporcionados por CloudFlare en la sección Configuración del servidor DNS: Figura 199. CDN CloudFlare analizo.info (7). 6. Pulsar en guardar y confirmar los cambios. Figura 200. CDN CloudFlare analizo.info (8). Pasadas unas 24 horas el cambio de las DNS será efectivo. 224 Anexos Una vez se hayan actualizado y el dominio sea accesible, volver a la opción de Configuración del servidor DNS y añadir como servidores DNS 3 y 4 los originales del proveedor de hosting Web, en este caso los de 1&1: Figura 201. CDN CloudFlare analizo.info (9). 225 Anexos 9.3.7 Purgar la cache de CloudFlare El propósito y la actual configuración de la red de distribución de contenidos es el de replicar en diversos puntos la información a la que se accede para reducir el tiempo de acceso a ella. Esto se hace así hasta que pasado un tiempo la información almacenada se renueva con la actual que figura en el servidor principal. En determinadas ocasiones se precisa forzar esa actualización y para ello hay que realizar el proceso que se describe a continuación. 1. En la cuenta de CloudFlare, dirigirse a la pestaña de configuración: Figura 202. Purgar cache CloudFlare (1). 2. Seleccionar la pestaña vista general de opciones: Figura 203. Purgar cache CloudFlare (2). 3. Dirigirse al apartado purgar cache: Figura 204. Purgar cache CloudFlare (3). 3.1 Seleccionar la opción Purge single file para actualizar un solo archivo. Figura 205. Purgar cache CloudFlare (4). 226 Anexos 3.2 Seleccionar la opción Purge cache para actualizar todo el contenido almacenado: Figura 206. Purgar cache CloudFlare (5). 5. Una vez seleccionada la opción deseada se muestra el siguiente mensaje confirmando que el proceso se ha realizado de forma correcta: Figura 207. Purgar cache CloudFlare (6). 227 Anexos 9.3.8 Optimización de recursos en el servidor Web Apache El servidor Web Apache, en el caso de sistemas con recursos limitados (1GB de RAM), puede ocasionar problemas al resultar ineficiente gestionando sus procesos llegando a dejar sin memoria al sistema operativo. Si este es el caso, se pueden realizar los siguientes cambios para hacer que esta situación tarde más tiempo en ocurrir, siendo inevitable la ampliación del hardware que se precise. Editar el archivo de configuración apache2.conf root@vpsXXXXX:~# vim /etc/apache2/apache2.conf Cambiar el valor del parámetro MaxRequestsPerChild <IfModule mpm_prefork_module> ... MaxRequestsPerChild 300 </IfModule> ... <IfModule mpm_worker_module> ... MaxRequestsPerChild 300 </IfModule> ... <IfModule mpm_event_module> ... MaxRequestsPerChild 300 </IfModule> Cambiando el valor de esta propiedad, lo que se consigue es que al especificar un número máximo de respuestas a gestionar por parte de los procesos del servidor, cuando son alcanzadas los procesos mueren liberando recursos del sistema. Con la configuración por defecto, nunca se reciclan esos recursos hasta que se reinicie Apache. 228 Anexos Ejemplo de funcionamiento saturado: Figura 208. Optimización Apache (1). Ejemplo de funcionamiento normal: Figura 209. Optimización Apache (2). Ejemplo de funcionamiento al arrancar: Figura 210. Optimización Apache (3). Ejemplo de funcionamiento normal (optimizado): 229 Anexos 9.3.9 Script para la personalización del servidor PyBossa de analizo.info Para facilitar la adaptación y personalización de PyBossa a las necesidades de analizo.info, se optó por generar un pequeño programa que sustituye los archivos originales de PyBossa por unos modificados para tener un control de los cambios realizados. Además, se almacena el archivo original y el archivo modificado que termina en _bak. De esta forma es posible mediante cualquier software de comparación de archivos saber en qué ha cambiado uno respecto a otro. Por ejemplo se puede usar WinMerge: Figura 211. Personalización del servidor PyBossa (1). Figura 212. Personalización del servidor PyBossa (2). Figura 213. Personalización del servidor PyBossa (3). 230 Anexos Figura 214. Personalización del servidor PyBossa (4). Figura 215. Personalización del servidor PyBossa (5). Figura 216. Personalización del servidor PyBossa (6). 231 Anexos Figura 217. Personalización del servidor PyBossa (7). Figura 218. Personalización del servidor PyBossa (8). 232 Anexos Figura 219. Personalización del servidor PyBossa (9). Figura 220. Personalización del servidor PyBossa (10). Figura 221. Personalización del servidor PyBossa (11). Figura 222. Personalización del servidor PyBossa (12). Para generar la lista de archivos desde Linux, basta con ejecutar la siguiente orden dentro de directorio changes. root@vpsXXXXX:/home/changes# find pybossa/ -name '*.*' > mod_files.txt Luego simplemente hay que actualizar el script do_changes.sh con los datos del archivo mod_files.txt generado y ejecutarlo para aplicar los cambios. root@vpsXXXXX:/home/changes# sh do_changes.sh true 233 Anexos 9.3.10 Menú de información para los proyectos de análisis de información Una de las muchas cosas introducidas para la personalización de PyBossa es el menú que aparece en la información de cada proyecto de análisis de información: Figura 223. Menú información proyectos (1). Figura 224. Menú información proyectos (2). Figura 225. Menú información proyectos (3). Este menú está preparado para gestionarse de la siguiente forma: Hoja de estilos: o http://proyectos.analizo.info/static/app/app.css Funciones en JavaScript para permitir su funcionamiento: o http://proyectos.analizo.info/static/app/app.js Actualmente funciona con las cuatro opciones: Información del proyecto. Cómo realizar el análisis. Resultados del análisis. Cómo procesar los resultados. Gracias a su lógica de programación resulta muy sencillo añadir nuevas. 234 Anexos 9.3.11 Conjunto de scripts pyanalizo para la gestión de información en analizo.info La plataforma PyBossa permite exportar tanto las tareas de las aplicaciones como sus respuestas en los formatos abiertos CSV y JSON. Estos archivos, además de contener la información propia de las aplicaciones, contienen información adicional que genera PyBossa que no forma parte de los resultados. Este conjunto de utilidades se centra en el formato JSON y posibilitan trabajar toda la información que generan las aplicaciones de la plataforma para obtener los resultados deseados: Figura 226. pyanalizo (1). 1. El directorio get_mails contiene el script get_mails.py para generar una lista con los correos de los miembros de la comunidad de analizo.info: Figura 227. pyanalizo (2). 2. El directorio old contiene versiones de scripts antiguas y algunos programas de pruebas realizadas: Figura 228. pyanalizo (3). 235 Anexos 3. El directorio shared contiene scripts con funciones compartidas por el resto de scripts: Figura 229. pyanalizo (4). 4. Exportación de tareas y respuestas: Figura 230. pyanalizo (5). Para comenzar a utilizar los programas que tratan la información de las aplicaciones, previamente hay que guardar las tareas tasks.json y respuestas answers.json de la aplicación deseada: Figura 231. pyanalizo (6). 236 Anexos 2. Los archivos tasks.json y answers.json 2.1 Ejemplo de archivo tasks.json [ { "app_id": 19, "calibration": 0, "created": "2014-03-25T21:19:48.447943", // Fecha de creación de la tarea. "id": 61638, // Identificador único de la tarea. "info": { // Información de la tarea importada previamente. }, "n_answers": 3, // Número de respuestas esperadas para la tarea. "priority_0": 0.0, "quorum": 0, "state": "completed" }, ... ] 2.2 Ejemplo de archivo answers.json [ { "app_id": 19, "calibration": null, "created": "2014-03-26T10:47:57.153453", // Fecha de inicio de la respuesta. "finish_time": "2014-03-26T10:47:57.153482", // Fecha de fin de la respuesta. "id": 1392, // Identificador único de la respuesta. "info": { // Información proporcionada por el analista que ha realizado la tarea. }, "task_id": 61638, // Identificador único que relaciona la respuesta con la tarea a la que pertenece. "timeout": null, "user_id": 260, // Identificador único del analista que ha realizado la tarea. XXXXX para analistas registrados / null para analistas desconocidos. "user_ip": null }, ... ] 237 Anexos 3. Script results_to_json_v2.py Permite unir las tareas tasks.json y las respuestas a las tareas answers.json de una aplicación. Al ejecutarlo python results_to_json_v2.py, genera el archivo results_v2.json 3.1 Ejemplo de archivo results_v2.json [ { "61638": { // Identificador único de la tarea. "answers": { // Todas las respuestas enviadas para la tarea correspondiente de cada analista. "259": { // Identificador único del analista que ha realizado la tarea. XXXXX para analistas registrados / desconocido_X para analistas desconocidos. "answer": { // Información proporcionada por el analista que ha realizado la tarea. }, "answer_end_date": "2014-03-26T10:27:55.322608", // Fecha de fin de la respuesta. "answer_start_date": "2014-03-26T10:27:55.322577" // Fecha de inicio de la respuesta. }, "260": { "answer": { } ... }, "info": { // Datos de la tarea. "created": "2014-03-25T21:19:48.447943", // Fecha de creación de la tarea. "details": { // Información de la tarea importada previamente. }, "n_answers": 3 // Número de respuestas esperadas para la tarea. } }, ... } } ] 238 Anexos 4. Script pretty_json.py Los archivos JSON están optimizados para que ocupen menos espacio suprimiendo todos sus espacios y saltos de línea. Cuando se intenta visualizarlos simplemente aparece toda la información compactada dificultando la comprensión humana. La finalidad de este programa es la de mostrar esa información de forma que sea fácilmente comprensible por las personas. [{"info": {"pdf_page_end": "17", "pdf_page_start": "16", "pdf_title_9": "", "pdf_title_8": "", "pdf_title_7": "", "pdf_title_6": "", "pdf_title_5": "", "pdf_title_4": "", "pdf_title_3": "", "pdf_title_2": "2.2\u00a0Derechos civiles", "pdf_title_1": "2.\u00a0Derechos. Europa: espacio de convivencia, de paz y de diversidad cultural:", "pdf_title_10": "", "file": "task_13.html"}, "n_answers": 3, "quorum": 0, "calibration": 0, "created": "2014-04-01T09:48:29.384395", "app_id": 20, "state": "completed", "id": 62251, "priority_0": 0.0}, "n_answers": 3, "quorum": 0, "calibration": 0, "created": "2014-04-01T09:48:29.311162", "app_id": 20, "state": "completed", "id": 62245, "priority_0": 0.0}] En este caso, acepta una lista de archivos como argumento. python pretty_json.py tasks.json answers.json results_v2.json Como resultado de su ejecución, se genera por cada uno de los archivos de entrada otro pero con una estructura formateada para facilitar su lectura. tasks_pretty.json answers_pretty.json results_v2_pretty.json 5. Scripts de la aplicación de prueba de análisis de tuits: Figura 232. pyanalizo (7). 239 Anexos 5.1 El directorio data contiene para cada diputado, los tuits recuperados entre dos fechas sin procesar. 5.2 El directorio tweets contiene para cada diputado, los tuits recuperados entre dos fechas procesados. 5.3 Página Web con parlamentarios miembros del Congreso de los Diputados de España con perfil en la red social Twitter congreso_de_los_diputados.html 5.4 diputados.txt Lista con los nombres de perfiles de Twitter extraídos de congreso_de_los_diputados.html 5.5 El script fix_href.py sirve para convertir direcciones url http://... en formato de texto plano a su sintaxis en HTML <a title="http://... href ="http://..." target='_blank'>http://...</a> para que puedan ser accesibles mtdata.csv 5.6 El script get_tweets_between_dates.py lee el archivo diputados.txt y recupera del timeline del usuario de Twitter los tuits comprendidos entre dos fechas. Para ello se emplea la siguiente función: twitter.get_user_timeline(screen_name = user, count = '200', exclude_replies = 'true', include_rts = 'false') https://dev.twitter.com/docs/api/1/get/statuses/user_timeline Con los siguientes parámetros y limitaciones: count = '200' últimos tuits del timeline (máximo) en una sola llamada (no se ha usado paginación). Esto ha propiciado que se hayan escapado algunos (3 - 10) de las cuentas más activas. exclude_replies = 'true' Evita que las respuestas no se tengan en cuenta al recuperar el timeline. include_rts = 'false' No incluir retuits al recuperar el timeline. Está preparado para continuar procesando usuarios de la lista cuando se exceden los límites de consulta impuestos por la API de Twitter last_diputado.txt Exception: Twitter API returned a 429 (Too Many Requests), Rate limit exceeded Para poder usarlo, hay que incluir en el archivo twitter_cfg.py las claves de usuario de la API de Twitter. 240 Anexos También es capaz de capturar otros errores devueltos por la API tales como: Exception: Twitter API returned a 401 (Unauthorized), An error occurred processing your request. Éste se produce cuando el acceso a un perfil de usuario está restringido. Para su funcionamiento requiere de la librería Twython disponible en el siguiente enlace145. 5.7 El script to_tcsv.py sirve para generar un archivo CSV separado por tabulaciones TCSV con los tuits recuperados tdata.csv 5.8 El script get_tweets_info.py sirve para presentar los resultados de la aplicación de análisis de tuits en formato de texto plano legible tweets.txt 6. Scripts de las aplicaciones de análisis de programas electorales Los scripts get_propuestas_electorales_v5.1.py y get_propuestas_electorales_v5.2.py sirven para presentar los resultados en formato de texto plano legible. Existen dos versiones debido a que la primera aplicación que se creó estructuraba sus resultados de forma que no era posible identificar que respuestas había proporcionado cada analista. Posteriormente esto se corrigió y se creó la versión 5.2 del script. 7. Scripts de las aplicaciones del análisis de noticias 7.1 El script get_omc_xml_to_json.py lee los archivos de noticias.xml y los transforma en formato JSON. 7.2 El script get_omc_xml_to_tcsv.py lee los archivos de noticias.xml y los transforma en formato CSV separados por tabulaciones. 7.3 El script get_respuestas_noticias_omc.py sirve para presentar los resultados en formato de texto plano legible. 8. Scripts de las aplicaciones de análisis de ortofotos. 8.1 El directorio shx_ESRI_Shapefile contiene la librería shapefile.py y el script shx_builder.py que permite dado un archivo ESRI Shapefile regenerar el archivo .shx a partir de los archivos .shp y .dbf ubicados en el directorio current_ESRI_Shapefile: Figura 233. pyanalizo (8). 145 Twython - Twython 3.1.2 documentation (n.d.) [en línea]. Disponible en: http://twython.readthedocs.org/en/latest/ [Consulta: 8 de julio de 2014]. 241 Anexos 8.2 El script results_v2_to_ogr2ogr_ESRI_Shapefile_format.py reorganiza la estructura interna del formato GeoJSON que genera la aplicación para generar un archivo con una visión preliminar de las respuestas a cada tarea. 8.3 El script get_ogr2ogr_ESRI_Shapefile_format.py genera un archivo en formato GeoJSON compatible con los sistemas GIS. 9. El script get_tile_list.py sirve para dadas unas coordenadas en EPSG:25830 de un área y un tamaño de tesela en píxeles, generar todas las cuadrículas de ese tamaño que cubran esa zona delimitada: Figura 234. get_tile_list.py (1). Figura 235. get_tile_list.py (2). Figura 236. get_tile_list.py (3). 242 Anexos 9.3.12 Integración de Google Analytics y motor de búsqueda personalizada de Google El archivo _ga.html, contiene el código de Google Analytics. Los archivos _gcs.html y _gcs_form.html contienen la configuración para poder incluir el motor de búsqueda que aparece en la plataforma: Figura 237. Motor de búsqueda personalizada de Google. Ambos procesos y demás información se detallan en las siguientes páginas Web: Google Analytics146. Google Webmaster Tools147. Custom Search Element Control API148. 146 Google Analytics [en línea]. (n.d.). Disponible en: http://www.google.com/intl/es/analytics/ [Consulta: 7 de julio de 2014]. 147 Google Webmaster Tools [en línea]. (n.d.). Disponible en: https://www.google.es/cse/all [Consulta: 7 de julio de 2014]. 148 Custom Search Element Control API [en línea]. (n.d.). Disponible en: https://developers.google.com/custom-search/docs/element [Consulta: 7 de julio de 2014]. 243 Anexos 9.4 Anexo IV: Reconocimiento en los medios En este apartado se recogen diversas noticias las cuales guardan relación con el trabajo fin de máster realizado. Noticia “Una ciudadanía empoderada es un contrapoder a los intentos de control de los informativos”149 publicada el 29 de abril de 2014 en el portal Web NONADA. En esta noticia se me reconoce públicamente la labor realizada como único programador de la plataforma y creador de las aplicaciones para los diferentes proyectos de análisis de información en la nueva etapa de analizo.info. Figura 238. Noticia publicada en el portal Web Nonada (1). 149 "Una ciudadanía empoderada es contrapoder a los informativos” [en línea]. (29 de abril de 2014). Disponible en: http://nonada.es/2014/04/analizoinfo-una-ciudadania-empoderada-es-un-contrapoderlos-intentos-de-control-de-los-informativos.html [Consulta: 4 de junio de 2014]. 244 Anexos Figura 239. Noticia publicada en el portal Web Nonada (2). Figura 240. Noticia publicada en el portal Web Nonada (3). 245 Anexos Figura 241. Noticia publicada en el portal Web Nonada (4). 246 Anexos Las siguientes noticias tienen que ver con el proyecto de análisis de información “Recuperem Horta. Recuperem Ciutat.” desarrollado para la asociación Per l’Horta. Noticia “Per l'Horta crea aplicación para pedir que zonas sin edificios sean huertas”150 publicada el 27 de junio de 2014 en el periódico ABC. Figura 242. Noticia aplicación Per L’Horta publicada en el periódico ABC. 150 Per l'Horta crea aplicación para pedir que zonas sin edificios sean huertas [en línea]. (27 de junio de 2014). Disponible en: http://www.abc.es/agencias/noticia.asp?noticia=1609566 [Consulta: 1 de julio de 2014]. 247 Anexos Noticia “A la caza de la huerta abandonada”151 publicada el 28 de junio de 2014 en el periódico Levante. Figura 243. Noticia aplicación Per L’Horta publicada en el periódico Levante. 151 A la caza de la huerta abandonada [en línea]. (28 de junio de 2014). Disponible en: http://www.levante-emv.com/valencia/2014/06/28/caza-huerta-abandonada/1131008.html [Consulta: 1 de julio de 2014]. 248 Anexos Noticia “Proyecto para recuperar 1.000 hectáreas de huerta”152 publicada el 28 de junio de 2014 en el periódico Las Provincias. Figura 244. Noticia aplicación Per L’Horta publicada en el periódico Las Provincias. 152 Proyecto para recuperar 1.000 hectáreas de huerta [en línea]. (28 de junio de 2014). Disponible en: http://www.lasprovincias.es/valencia-ciudad/201406/28/proyecto-para-recuperar-hectareas20140628001240-v.html [Consulta: 1 de julio de 2014]. 249 Anexos Noticia “Recuperem horta, Recuperem ciutat” 153 publicada el 29 de junio de 2014 en el periódico digital La Veu del País Valencià. Figura 245. Noticia aplicación Per L’Horta publicada en el periódico digital La Veu (1). 153 Recuperem horta, Recuperem ciutat [en línea]. (29 de junio de 2014). Disponible en: www.laveupv.com/noticia/9934/a-valencia-es-poden-recuperar-10-milions-de-m2dhorta?utm_content=buffera7101&utm_medium=social&utm_source=facebook.com&utm_campaign= buffer [Consulta: 1 de julio de 2014]. 250 Anexos Figura 246. Noticia aplicación Per L’Horta publicada en el periódico digital La Veu (2). 251 Anexos Noticia “Per l'Horta crea aplicación para pedir que zonas sin edificios sean huertas” 154 publicada el 27 de junio de 2014 en el periódico La Vanguardia. Figura 247. Noticia aplicación Per l'Horta publicada en el periódico La Vanguardia. 154 Recuperem horta, Recuperem ciutat [en línea]. (27 de junio de 2014). Disponible en: http://www.lavanguardia.com/local/valencia/20140627/54411352447/per-l-horta-crea-aplicacion-parapedir-que-zonas-sin-edificios-sean-huertas.html [Consulta: 1 de julio de 2014]. 252 Anexos Noticia informativo Levante TV del 13 de mayo de 2014. “Elecciones europeas Análisis programas electorales ACPE/analizo.info”155. Figura 248. Noticia Levante TV del 13 de mayo de 2014 - ACPE/analizo.info. 155 Elecciones europeas - Análisis programas electorales ACPE/analizo.info - YouTube [en línea]. (14 de mayo de 2014). Disponible en: https://www.youtube.com/watch?v=gRrTBQavCn8 [Consulta: 6 de agosto de 2014]. 253 Anexos Noticia informativo La Sexta Noticias del 14 de abril de 2014. “La ACPE y analizo.info”156. Figura 249. Noticia La Sexta Noticias del 14 de abril de 2014 - ACPE/analizo.info. 156 Noticia sobre la ACPE y analizo.info en La Sexta Noticias 14/04/2014 - YouTube [en línea]. (15 de abril de 2014). Disponible en: https://www.youtube.com/watch?v=K8_6lostGyM [Consulta: 6 de agosto de 2014]. 254 Anexos Noticia informativo Levante TV del 3 junio de 2014. Proyecto "Recuperem Horta. Recuperem Ciutat" puesto en marcha por el movimiento ciudadano Per L’Horta en analizo.info157. Figura 250. Noticia Levante TV del 3 de junio de 2014 - Per L’Horta/analizo.info. 157 Proyecto "Recuperem Horta. Recuperem Ciutat" Per L’Horta/analizo.info - YouTube [en línea]. (5 de julio de 2014). Disponible en: https://www.youtube.com/watch?v=ZVNJ8eTVLP4 [Consulta: 6 de agosto de 2014]. 255 Anexos 9.5 Anexo V: Jornada de información, datos y empoderamiento ciudadano El día 27 de junio de 2014 se organizó en la Escuela Técnica Superior de Ingeniería Informática de la UPV la jornada de información, datos y empoderamiento ciudadano158. En ella, junto a los cofundadores de analizo.info, impartí gracias a las competencias adquiridas durante la elaboración del trabajo final de máster, un taller gratuito formativo centrado en el desarrollo de aplicaciones para análisis de datos en PyBossa / analizo.info159. Figura 251. Desarrollo de aplicaciones para análisis de datos en PyBossa/analizo.info. 158 Jornada "Información, datos y empoderamiento ciudadano” [en línea]. (4 de junio de 2014). Disponible en: http://tv.inf.upv.es/?p=6886&utm_source=rss&utm_medium=rss&utm_campaign=tallergratuito-desarrollo-de-aplicaciones-para-analisis-de-datos-en-pybossaanalizo-info-27-junio-2014 [Consulta: 1 de julio de 2014]. 159 Taller gratuito Desarrollo de aplicaciones para análisis de datos en PyBossa/analizo.info [en línea]. (23 de junio de 2014). Disponible en: http://tv.inf.upv.es/?p=6837&utm_source=rss&utm_medium=rss&utm_campaign=jornadainformacion-datos-y-empoderamiento-ciudadano [Consulta: 1 de julio de 2014]. 256 Bibliografía 10. Bibliografía A3code. javascript - OpenLayers zoom to USA with Bounds - Stack Overflow [en línea]. (9 de julio de 2012). Disponible en: http://stackoverflow.com/questions/11395236/openlayers-zoom-to-usa-with-bounds [Consulta: 17 de marzo de 2014]. Abilio, N. PyBossa/app-tabletranscriber · GitHub [en línea]. (n.d.). Disponible en: https://github.com/PyBossa/app-tabletranscriber [Consulta: 14 de febrero de 2014]. Ablovatski, A. MailServer - Community Ubuntu Documentation [en línea]. (31 de marzo de 2009). Disponible en: https://help.ubuntu.com/community/MailServer [Consulta: 9 de febrero de 2014]. Accordion | jQuery UI [en línea]. (n.d.). Disponible en: https://jqueryui.com/accordion/ [Consulta: 8 de abril de 2014]. Adham. .htaccess: Invalid command 'RewriteEngine', perhaps misspelled or defined by a module not included in the server configuration [en línea]. (13 de abril de 2012). Disponible en: http://stackoverflow.com/questions/10144634/htaccess-invalidcommand-rewriteengine-perhaps-misspelled-or-defined-by-a-m [Consulta: 9 de febrero de 2014]. Administrating PyBossa — PyBossa v0.2.1 documentation [en línea]. (n.d.). Disponible en: http://docs.pybossa.com/en/latest/admin.html [Consulta: 12 de febrero de 2014]. Ahocevar. Allow map and layer coordinates to be provided as latitude and longitude. by ahocevar · Pull Request #248 · openlayers/openlayers · GitHub [en línea]. (n.d.). Disponible en: https://github.com/openlayers/openlayers/pull/248/files [Consulta: 24 de marzo de 2014]. AimanB. How do I use Chosen jQuery in my html file? - Stack Overflow [en línea]. (18 de diciembre de 2012). Disponible en: http://stackoverflow.com/questions/13939369/how-do-i-use-chosen-jquery-in-myhtml-file [Consulta: 15 de abril de 2014]. Ajsie. javascript - run another function after preceding function has completed? - Stack Overflow [en línea]. (21 de diciembre de 2009). Disponible en: http://stackoverflow.com/questions/1937970/run-another-function-after-precedingfunction-has-completed [Consulta: 20 de febrero de 2014]. Alcubierre, D. PyBossa, crowdsourcing de microtareas [en línea]. (14 de julio de 2013). Disponible en: http://www.theproject.ws/es/toolab/entrada/pybossa-crowdsourcingde-microtareas [Consulta: 6 de febrero de 2014]. 257 Bibliografía Alxlit. alxlit/bootstrap-chosen · GitHub [en línea]. (n.d.). Disponible en: https://github.com/alxlit/bootstrap-chosen [Consulta: 15 de abril de 2014]. Alxlit. bootstrap-chosen/example.html at master · alxlit/bootstrap-chosen · GitHub [en línea]. (n.d.). Disponible en: https://github.com/alxlit/bootstrap-chosen/blob/master/example.html [Consulta: 15 de abril de 2014]. Anderson, D. BossaIntro – BOINC [en línea]. (n.d.). Disponible en: http://boinc.berkeley.edu/trac/wiki/BossaIntro/ [Consulta: 6 de febrero de 2014]. Andrus. jquery - Convert String with Dot or Comma as decimal separator to number in javascript - Stack Overflow [en línea]. (15 de septiembre de 2011). Disponible en: http://stackoverflow.com/questions/7431833/convert-string-with-dot-or-comma-asdecimal-separator-to-number-in-javascript [Consulta: 17 de marzo de 2014]. Application Tutorial — PyBossa v0.2.1 documentation [en línea]. (n.d.). Disponible en: http://docs.pybossa.com/en/latest/user/tutorial.html [Consulta: 13 de febrero de 2014]. Artwork21. How to add wms layer in OpenLayers from a geoserver? - Geographic Information Systems Stack Exchange [en línea]. (23 de abril de 2013). Disponible en: http://gis.stackexchange.com/questions/58870/how-to-add-wms-layer-in-openlayersfrom-a-geoserver [Consulta: 4 de abril de 2014]. Babu, N. Add validation for email address. · Issue #233 · PyBossa/pybossa · GitHub [en línea]. (n.d.). Disponible en: https://github.com/PyBossa/pybossa/issues/233 [Consulta: 7 de abril de 2014]. Babu, N. PyBossa/app-transcribe · GitHub [en línea]. (n.d.). Disponible en: https://github.com/PyBossa/app-transcribe [Consulta: 13 de febrero de 2014]. Bigmac. maps - Configuring maxExtent and restrictExtent coordinates in OpenLayers Stack Overflow [en línea]. (1 de noviembre de 2011). Disponible en: http://stackoverflow.com/questions/7969960/configuring-maxextent-andrestrictextent-coordinates-in-openlayers [Consulta: 14 de marzo de 2014]. Bmerigan. css - Hiding the scrollbar on an HTML page - Stack Overflow [en línea]. (16 de octubre de 2013). Disponible en: http://stackoverflow.com/questions/3296644/hiding-the-scrollbar-on-an-html-page [Consulta: 15 de abril de 2014]. Bogz902. javascript - Bootstrap radio-buttons toggle issue - Stack Overflow [en línea]. (5 de noviembre de 2012). Disponible en: http://stackoverflow.com/questions/13235578/bootstrap-radio-buttons-toggle-issue [Consulta: 16 de abril de 2014]. 258 Bibliografía Boundless : Developing OGC Compliant Web Applications with GeoExt : 1.2. Dissecting Your Map Application [en línea]. (n.d.). Disponible en: http://workshops.boundlessgeo.com/geoext/basics/dissect.html [Consulta: 27 de marzo de 2014]. Boundless : Introduction to OpenLayers : 2.1. Web Map Service Layers [en línea]. (n.d.). Disponible en: http://workshops.boundlessgeo.com/openlayersintro/layers/wms.html [Consulta: 4 de abril de 2014]. Bruce. jQuery Accordion - Need index of currently selected content part - Stack Overflow [en línea]. (10 de febrero de 2010). Disponible en: http://stackoverflow.com/questions/2236633/jquery-accordion-needindex-of-currently-selected-content-part [Consulta: 15 de abril de 2014]. Build with PyBossa — PyBossa v0.2.1 documentation [en línea]. (n.d.). Disponible en: http://docs.pybossa.com/en/latest/build_with_pybossa.html [Consulta: 12 de febrero de 2014]. Butler, H (Hobu Inc.), Daly, M (Cadcorp), Doyle, A (MIT), Gillies, S (UNC-Chapel Hill), Schaub, T (OpenGeo), Schmidt, C (MetaCarta). GeoJSON Specification [en línea]. (16 de junio de 2008). Disponible en: http://geojson.org/geojson-spec.html [Consulta: 2 de abril de 2014]. Calc >> LibreOffice [en línea]. (n.d.). Disponible en: http://es.libreoffice.org/caracteristicas/calc/ [Consulta: 24 de febrero de 2014]. Capooti. esri - Corrupt shapefile. How to fix - Geographic Information Systems Stack Exchange [en línea]. (28 de marzo de 2011). Disponible en: http://gis.stackexchange.com/questions/7809/corrupt-shapefile-howto-fix [Consulta: 4 de abril de 2014]. Chau. User experience - OpenLayers, Layers: Tiled vs. single tile - Stack Overflow [en línea]. (n.d.). Disponible en: http://stackoverflow.com/questions/2883122/openlayerslayers-tiled-vs-single-tile [Consulta: 3 de mayo de 2014]. Chosen: A jQuery Plugin by Harvest to Tame Unwieldy Select Boxes [en línea]. (n.d.). Disponible en: http://harvesthq.github.io/chosen/ [Consulta: 15 de abril de 2014]. Chrism. Matching a value to JSON array values in jquery - Stack Overflow [en línea]. (14 de mayo de 2010). Disponible en: http://stackoverflow.com/questions/2834706/matching-a-value-to-json-array-valuesin-jquery [Consulta: 15 de abril de 2014]. 259 Bibliografía Códigos EPSG de Sistemas de Referencia :: Red de Información Ambiental de Andalucía :: Consejería de Medio Ambiente y Ordenación del Territorio :: Junta de Andalucía :: [en línea]. (n.d.). Disponible en: http://www.juntadeandalucia.es/medioambiente/site/rediam/menuitem.04dc44281e 5d53cf8ca78ca731525ea0/?vgnextoid=2a412abcb86a2210VgnVCM1000001325e50aR CRD&lr=lang_es [Consulta: 24 de febrero de 2014]. Colleen. json - how to python prettyprint a file - Stack Overflow [en línea]. (17 de octubre de 2012). Disponible en: http://stackoverflow.com/questions/12943819/howto-python-prettyprint-a-file [Consulta: 1 de abril de 2014]. Conde, J. 002.- Curso Ubuntu Servidores. Instalar Servidor Email [en línea]. (16 de mayo de 2011). Disponible en: https://www.youtube.com/watch?v=Qt17ZAZVoRQ [Consulta: 9 de febrero de 2014]. Configuring PyBossa — PyBossa v0.2.1 documentation [en línea]. (n.d.). Disponible en: http://docs.pybossa.com/en/latest/customizing.html [Consulta: 12 de febrero de 2014]. Configuring the Application — PyBossa v0.2.1 documentation [en línea]. (n.d.). Disponible en: http://docs.pybossa.com/en/latest/user/app_settings.html [Consulta: 14 de febrero de 2014]. Coordenadas de latitud y longitud - Ayuda de Google Maps [en línea]. (n.d.). Disponible en: https://support.google.com/maps/answer/18539?hl=es [Consulta: 7 de marzo de 2014]. Create a .pot or .po File using Poedit - Better WordPress [en línea]. (n.d.). Disponible en: http://betterwp.net/wordpress-tips/create-pot-file-using-poedit/ [Consulta: 13 de febrero de 2014]. Crowdsourcing - Wikipedia, la enciclopedia libre [en línea]. (4 de abril de 2014). Disponible en: http://es.wikipedia.org/wiki/Crowdsourcing [Consulta: 7 de abril de 2014]. Daud. Google Maps setCenter() - Stack Overflow [en línea]. (5 de mayo de 2010). Disponible en: http://stackoverflow.com/questions/2773263/google-maps-setcenter [Consulta: 14 de marzo de 2014]. Dave. html - Allowing only backspaces in a textarea with Javascript - Stack Overflow [en línea]. (26 de septiembre de 2013). Disponible en: http://stackoverflow.com/questions/19038354/allowing-only-backspaces-in-atextarea-with-javascript [Consulta: 22 de abril de 2014]. deferred.done() | jQuery API Documentation [en línea]. (n.d.). Disponible en: https://api.jquery.com/deferred.done/ [Consulta: 26 de febrero de 2014]. 260 Bibliografía Dementic. check if a div exists with jquery - Stack Overflow [en línea]. (1 de agosto de 2011). Disponible en: http://stackoverflow.com/questions/6899175/check-if-a-divexists-with-jquery [Consulta: 14 de marzo de 2014]. Deploying PyBossa with Apache2 web server and mod_wsgi — PyBossa v0.2.1 documentation [en línea]. (n.d.). Disponible en: http://docs.pybossa.com/en/latest/apache2.html [Consulta: 11 de febrero de 2014]. DevC. Python minidom xml parsing to get the value of first child node - Stack Overflow [en línea]. (28 de marzo de 2013). Disponible en: http://stackoverflow.com/questions/15679734/python-minidom-xml-parsing-to-getthe-value-of-first-child-node [Consulta: 11 de abril de 2014]. Djogan, J. __init__.py en python - Qué es y cómo funciona [en línea]. (22 de junio de 2013). Disponible en: http://www.pythondiario.com/2013/06/initpy-en-python-quees-y-como-funciona.html [Consulta: 18 de febrero de 2014]. Documentation for Ubuntu 12.04 LTS [en línea]. (n.d.). Disponible https://help.ubuntu.com/12.04/index.html [Consulta: 9 de febrero de 2014]. en: Domain Model — PyBossa v0.2.1 documentation [en línea]. (n.d.). Disponible en: http://docs.pybossa.com/en/latest/model.html [Consulta: 15 de febrero de 2014]. DSaeger. Trouble Displaying GeoJSON file in OpenLayers - Geographic Information Systems Stack Exchange [en línea]. (29 de marzo de 2012). Disponible en: http://gis.stackexchange.com/questions/22529/trouble-displaying-geojson-file-inopenlayers [Consulta: 7 de abril de 2014]. Ehynds. ehynds/jquery-ui-multiselect-widget · GitHub [en línea]. (n.d.). Disponible en: https://github.com/ehynds/jquery-ui-multiselect-widget [Consulta: 15 de abril de 2014]. Ejfrancis. javascript - # for window.location.pathname - Stack Overflow [en línea]. (28 de enero de 2013). Disponible en: http://stackoverflow.com/questions/14571873/forwindow-location-pathname [Consulta: 26 de febrero de 2014]. Ellcub. google maps - OpenLayers - Can't remove zoom control buttons, other controls simply lay on top - Geographic Information Systems Stack Exchange [en línea]. (29 de octubre de 2013). Disponible en: http://gis.stackexchange.com/questions/75807/openlayers-cant-remove-zoomcontrol-buttons-other-controls-simply-lay-on-top [Consulta: 27 de marzo de 2014]. EPSG:3857 -- WGS84 Web Mercator (Auxiliary Sphere): SR-ORG Projection -- Spatial Reference [en línea]. (n.d.). Disponible en: http://spatialreference.org/ref/sr-org/7483/ [Consulta: 7 de marzo de 2014]. 261 Bibliografía EricSonaron. gis - OpenLayers, how restricting WMS layer extent - Stack Overflow [en línea]. (21 de noviembre de 2011). Disponible en: http://stackoverflow.com/questions/8217163/openlayers-how-restricting-wms-layerextent [Consulta: 17 de marzo de 2014]. ETRS89 / UTM zone 30N: EPSG Projection -- Spatial Reference [en línea]. (n.d.). Disponible en: http://spatialreference.org/ref/epsg/25830/ [Consulta: 4 de abril de 2014]. European Petroleum Survey Group - Wikipedia, la enciclopedia libre [en línea]. (18 de octubre de 2013). Disponible en: http://es.wikipedia.org/wiki/European_Petroleum_Survey_Group [Consulta: 4 de abril de 2014]. Free on-line GIS data format and coordinates converter [en línea]. (n.d.). Disponible en: http://converter.mygeodata.eu/ [Consulta: 28 de marzo de 2014]. Frequently Asked Questions — PyBossa v0.2.1 documentation [en línea]. (n.d.). Disponible en: http://docs.pybossa.com/en/latest/faq.html [Consulta: 12 de febrero de 2014]. FreshWoWer. shell - Calling an external command in Python - Stack Overflow [en línea]. (18 de septiembre de 2008). Disponible en: http://stackoverflow.com/questions/89228/calling-an-external-command-in-python [Consulta: 4 de abril de 2014]. GDAL: GDAL - Geospatial Data Abstraction Library [en línea]. (n.d.). Disponible en: http://www.gdal.org/ [Consulta: 28 de marzo de 2014]. Geo. Modify existing library from OpenLayers (ZoomToMaxExtent) - Geographic Information Systems Stack Exchange [en línea]. (15 de junio de 2011). Disponible en: http://gis.stackexchange.com/questions/11063/modify-existing-library-fromopenlayers-zoomtomaxextent [Consulta: 26 de marzo de 2014]. GeoServer 2.5.x User Manual — WMS reference [en línea]. (n.d.). Disponible en: http://docs.geoserver.org/stable/en/user/services/wms/reference.html [Consulta: 8 de abril de 2014]. GET statuses/user_timeline | Twitter Developers [en línea]. (3 de julio de 2013). Disponible en: https://dev.twitter.com/docs/api/1.1/get/statuses/user_timeline [Consulta: 23 de enero de 2014]. GetCapabilities [en línea]. (n.d.). Disponible en: http://webhelp.esri.com/arcims/9.3/general/mergedProjects/wms_connect/wms_con nector/get_capabilities.htm [Consulta: 8 de abril de 2014]. 262 Bibliografía Getting Started — OpenLayers [en línea]. (n.d.). Disponible en: http://docs.openlayers.org/library/introduction.html [Consulta: 8 de abril de 2014]. Getting Started with jQuery UI | jQuery Learning Center [en línea]. (n.d.). Disponible en: https://learn.jquery.com/jquery-ui/getting-started/ [Consulta: 9 de abril de 2014]. Gka. PyBossa/app-lobbyfacts · GitHub [en línea]. (n.d.). Disponible en: https://github.com/PyBossa/app-lobbyfacts [Consulta: 13 de febrero de 2014]. Guía de inicio rápido de OpenLayers — OSGeo-Live 7.9 Documentation [en línea]. (n.d.). Disponible en: http://live.osgeo.org/es/quickstart/openlayers_quickstart.html [Consulta: 4 de abril de 2014]. Guidelines for Redis clients with support for Redis Sentinel - Redis [en línea]. (n.d.). Disponible en: http://redis.io/topics/sentinel-clients [Consulta: 10 de febrero de 2014]. Haas, J. cp - Linux Command - Unix Command [en línea]. (n.d.). Disponible en: http://linux.about.com/od/commands/l/blcmdl1_cp.htm [Consulta: 13 de febrero de 2014]. Hamoud, M. Shape Viewer [en línea]. (3 de julio de 2005). Disponible en: http://www.qarah.com/shapeviewer/ [Consulta: 2 de abril de 2014]. Haytham. css - How to check element's visibility via javascript? - Stack Overflow [en línea]. (27 de agosto de 2009). Disponible en: http://stackoverflow.com/questions/1343237/how-to-check-elements-visibility-viajavascript [Consulta: 20 de febrero de 2014]. Heartbleed Bug [en línea]. (n.d.). Disponible en: http://heartbleed.com/ [Consulta: 10 de abril de 2014]. Hein, D. unix - List files recursively in Linux CLI with path relative to the current directory - Stack Overflow [en línea]. (29 de octubre de 2008). Disponible en: http://stackoverflow.com/questions/245698/list-files-recursively-in-linux-cli-withpath-relative-to-the-current-directory [Consulta: 13 de febrero de 2014]. Helmick, M. ryanmcgrath/twython · GitHub [en línea]. (n.d.). Disponible en: https://github.com/ryanmcgrath/twython [Consulta: 19 de enero de 2014]. How to Disable right click using jQuery | jQuery By Example [en línea]. (19 de agosto de 2010). Disponible en: http://www.jquerybyexample.net/2010/08/how-to-disableright-click-using-jquery.html [Consulta: 24 de abril de 2014]. HTML Codes - Table of ascii characters and symbols [en línea]. (n.d.). Disponible en: http://www.ascii.cl/htmlcodes.htm [Consulta: 12 de febrero de 2014]. 263 Bibliografía Iant. postgis - Beginner HELP please : How to add a WMS layer from GeoServer with OpenLayers? - Geographic Information Systems Stack Exchange [en línea]. (10 de abril de 2012). Disponible en: http://gis.stackexchange.com/questions/23080/beginnerhelp-please-how-to-add-a-wms-layer-from-geoserver-with-openlayers [Consulta: 4 de abril de 2014]. IDECV | Terrasit [en línea]. (n.d.). Disponible en: http://terrasit.gva.es/es/idecv/?pagina=02serveis [Consulta: 21 de abril de 2014]. Instalación y Configuración de Postfix en Ubuntu - Manuales - linuxparatodos.net [en línea]. (n.d.). Disponible en: http://www.linuxparatodos.net/web/comunidad/base-deconocimiento//wiki/Base+de+Conocimiento/Instalaci%C3%B3n+y+Configuraci%C3%B3n+de+Postfix+ +en+Ubuntu [Consulta: 9 de febrero de 2014]. Install your own PyBossa server — PyBossa v0.2.1 documentation [en línea]. (n.d.). Disponible en: http://docs.pybossa.com/en/latest/installing_pybossa.html [Consulta: 10 de febrero de 2014]. Installation — pip 1.5.5 documentation [en línea]. (n.d.). Disponible en: https://pip.pypa.io/en/latest/installing.html [Consulta: 9 de febrero de 2014]. Installing PyBossa — PyBossa v0.2.1 documentation [en línea]. (n.d.). Disponible en: http://docs.pybossa.com/en/latest/install.html [Consulta: 10 de febrero de 2014]. Introducción - Versión 3 del API de JavaScript de Google Maps — Google Developers [en línea]. (31 de enero de 2013). Disponible en: https://developers.google.com/maps/documentation/javascript/tutorial?hl=es [Consulta: 14 de marzo de 2014]. Islon. OpenLayers - Show a WMS Layer from GeoServer - Geographic Information Systems Stack Exchange [en línea]. (18 de septiembre de 2013). Disponible en: http://gis.stackexchange.com/questions/71891/openlayers-show-a-wms-layer-fromgeoserver [Consulta: 9 de abril de 2014]. JavaScript Window Location [en línea]. (n.d.). Disponible en: http://www.w3schools.com/js/js_window_location.asp [Consulta: 26 de febrero de 2014]. Jernej. Python: strip html from text data - Stack Overflow [en línea]. (5 de enero de 2011). Disponible en: http://stackoverflow.com/questions/4607920/python-striphtml-from-text-data [Consulta: 21 de abril de 2014]. jQuery AJAX load() Method [en línea]. (n.d.). Disponible en: http://www.w3schools.com/jquery/jquery_ajax_load.asp [Consulta: 26 de febrero de 2014]. 264 Bibliografía jQuery scrollTop() Method [en línea]. (n.d.). Disponible en: http://www.w3schools.com/jquery/css_scrolltop.asp [Consulta: 10 de marzo de 2014]. jQuery UI [en línea]. (n.d.). Disponible en: http://jqueryui.com [Consulta: 15 de abril de 2014]. jQuery UI – All Versions | jQuery CDN [en línea]. (n.d.). Disponible en: http://code.jquery.com/ui/ [Consulta: 15 de abril de 2014]. jQuery UI MultiSelect Widget - Eric Hynds [en línea]. (19 de agosto de 2012). Disponible en: http://www.erichynds.com/blog/jquery-ui-multiselect-widget [Consulta: 15 de abril de 2014]. jQuery.getJSON() | jQuery API Documentation [en línea]. (n.d.). Disponible en: http://api.jquery.com/jquery.getjson/ [Consulta: 11 de abril de 2014]. jQuery.parseJSON() | jQuery API Documentation [en línea]. (n.d.). Disponible en: https://api.jquery.com/jQuery.parseJSON/ [Consulta: 11 de abril de 2014]. jQuery.when() | jQuery API Documentation [en línea]. (n.d.). Disponible en: https://api.jquery.com/jQuery.when/ [Consulta: 14 de marzo de 2014]. Juanluep. OSGeo Spanish Local Chapter - centrar dinámicamente un mapa openlayer [en línea]. (30 de marzo de 2012). Disponible en: http://osgeoorg.1560.x6.nabble.com/centrar-dinamicamente-un-mapa-openlayer-td4670904.html [Consulta: 9 de abril de 2014]. Jung, A. F. python troubles on ubuntu 12.04 [en línea]. (9 de agosto de 2013). Disponible en: http://wyldeplayground.net/python-troubles-on-ubuntu-12-04/ [Consulta: 9 de febrero de 2014]. Ko-zu. Test replication partial resync fail · Issue #1417 · antirez/redis · GitHub [en línea]. (n.d.). Disponible en: https://github.com/antirez/redis/issues/1417 [Consulta: 6 de febrero de 2014]. Lat Long to UTM Converter [en línea]. (n.d.). Disponible en: http://www.latlong.net/lat-long-utm.html [Consulta: 4 de abril de 2014]. Lawhead, J. GeospatialPython.com: Generating Shapefile shx Files [en línea]. (2 de noviembre de 2011). Disponible en: http://geospatialpython.com/2011/11/generatingshapefile-shx-files.html [Consulta: 4 de abril de 2014]. Lght. Disable zoom with Openlayers - Stack Overflow [en línea]. (11 de septiembre de 2012). Disponible en: http://stackoverflow.com/questions/12366578/disable-zoomwith-openlayers [Consulta: 10 de marzo de 2014]. 265 Bibliografía Lombraña, G. D. (teleyinex). PyBossa · GitHub [en línea]. (n.d.). Disponible en: https://github.com/PyBossa [Consulta: 6 de febrero de 2014]. Lombraña, G. D. (teleyinex). PyBossa/app-darkskies · GitHub [en línea]. (n.d.). Disponible en: https://github.com/PyBossa/app-darkskies [Consulta: 14 de febrero de 2014]. Lombraña, G. D. (teleyinex). PyBossa/app-epicollect · GitHub [en línea]. (n.d.). Disponible en: https://github.com/PyBossa/app-epicollect [Consulta: 14 de febrero de 2014]. Lombraña, G. D. (teleyinex). PyBossa/app-feynman-flowers · GitHub [en línea]. (n.d.). Disponible en: https://github.com/PyBossa/app-feynman-flowers [Consulta: 12 de febrero de 2014]. Lombraña, G. D. (teleyinex). PyBossa/app-flickrperson · GitHub [en línea]. (n.d.). Disponible en: https://github.com/PyBossa/app-flickrperson [Consulta: 14 de febrero de 2014]. Lombraña, G. D. (teleyinex). PyBossa/app-geocoding · GitHub [en línea]. (n.d.). Disponible en: https://github.com/PyBossa/app-geocoding [Consulta: 12 de febrero de 2014]. Lombraña, G. D. (teleyinex). PyBossa/app-landfill · GitHub [en línea]. (n.d.). Disponible en: https://github.com/PyBossa/app-landfill [Consulta: 14 de febrero de 2014]. Lombraña, G. D. (teleyinex). PyBossa/app-magicicada · GitHub [en línea]. (n.d.). Disponible en: https://github.com/PyBossa/app-magicicada [Consulta: 13 de febrero de 2014]. Lombraña, G. D. (teleyinex). PyBossa/app-mapknitter · GitHub [en línea]. (n.d.). Disponible en: https://github.com/PyBossa/app-mapknitter [Consulta: 12 de febrero de 2014]. Lombraña, G. D. (teleyinex). PyBossa/app-oajournals · GitHub [en línea]. (n.d.). Disponible en: https://github.com/PyBossa/app-oajournals [Consulta: 13 de febrero de 2014]. Lombraña, G. D. (teleyinex). PyBossa/app-pdf-table-transcribe · GitHub [en línea]. (n.d.). Disponible en: https://github.com/PyBossa/app-pdf-table-transcribe [Consulta: 12 de febrero de 2014]. Lombraña, G. D. (teleyinex). PyBossa/app-soundcloud · GitHub [en línea]. (n.d.). Disponible en: https://github.com/PyBossa/app-soundcloud [Consulta: 12 de febrero de 2014]. 266 Bibliografía Lombraña, G. D. (teleyinex). PyBossa/app-tagging-pictures · GitHub [en línea]. (n.d.). Disponible en: https://github.com/PyBossa/app-tagging-pictures [Consulta: 12 de febrero de 2014]. Lombraña, G. D. (teleyinex). PyBossa/app-tweetclassification · GitHub [en línea]. (n.d.). Disponible en: https://github.com/PyBossa/app-tweetclassification [Consulta: 13 de febrero de 2014]. Lombraña, G. D. (teleyinex). PyBossa/app-twitter · GitHub [en línea]. (n.d.). Disponible en: https://github.com/PyBossa/app-twitter [Consulta: 13 de febrero de 2014]. Lombraña, G. D. (teleyinex). PyBossa/app-ushahidi · GitHub [en línea]. (n.d.). Disponible en: https://github.com/PyBossa/app-ushahidi [Consulta: 13 de febrero de 2014]. Lombraña, G. D. (teleyinex). PyBossa/app-vimeo · GitHub [en línea]. (n.d.). Disponible en: https://github.com/PyBossa/app-vimeo [Consulta: 12 de febrero de 2014]. Lombraña, G. D. (teleyinex). PyBossa/pdftranscribe · GitHub [en línea]. (n.d.). Disponible en: https://github.com/PyBossa/pdftranscribe [Consulta: 12 de febrero de 2014]. Lombraña, G. D. (teleyinex). PyBossa/pybossa [en línea]. (n.d.). Disponible en: https://github.com/PyBossa/pybossa [Consulta: 20 de febrero de 2014]. m to px Converter, Chart -- EndMemo [en línea]. (n.d.). Disponible en: http://www.endmemo.com/sconvert/meterpixel.php [Consulta: 1 de abril de 2014]. Mail Server setup [en línea]. (7 de febrero de 2012). Disponible en: http://ubuntuguide.org/wiki/Mail_Server_setup [Consulta: 9 de febrero de 2014]. Man1. jquery - Clear Text Selection with JavaScript - Stack Overflow [en línea]. (3 de julio de 2010). Disponible en: http://stackoverflow.com/questions/3169786/clear-textselection-with-javascript [Consulta: 10 de marzo de 2014]. Manuel. Jquery Manual: Efecto acordeón con la función accordion de Jquery ui [en línea]. (n.d.). Disponible en: http://jquery-manual.blogspot.com.es/2013/02/efectoacordeon-con-la-funcion.html [Consulta: 9 de abril de 2014]. Mapsir. OpenLayers - Single tiled Mapserver WMS to avoid Labels and features cut along tile borders and repeated labels - Geographic Information Systems Stack Exchange [en línea]. (n.d.). Disponible en: http://gis.stackexchange.com/questions/83033/single-tiled-mapserver-wms-to-avoidlabels-and-features-cut-along-tile-borders-a [Consulta: 3 de mayo de 2014]. 267 Bibliografía Mark. How to "git clone" including submodules? - Stack Overflow [en línea]. (26 de septiembre de 2010). Disponible en: http://stackoverflow.com/questions/3796927/how-to-git-clone-including-submodules [Consulta: 20 de febrero de 2014]. Mat. Count occurrence of a character in a Python string - Stack Overflow [en línea]. (20 de julio de 2009). Disponible en: http://stackoverflow.com/questions/1155617/countoccurrence-of-a-character-in-a-python-string [Consulta: 21 de febrero de 2014]. Maven. javascript - How to read JSON array in jQuery - Stack Overflow [en línea]. (1 de julio de 2013). Disponible en: http://stackoverflow.com/questions/17403103/how-toread-json-array-in-jquery [Consulta: 11 de abril de 2014]. Méndez, X. Tutorial de OpenLayers (II) – Capas de Google [en línea]. (20 de mayo de 2012). Disponible en: http://blog.sonxurxo.com/2011/04/28/tutorial-de-openlayers-iicapas-de-google/ [Consulta: 7 de marzo de 2014]. Michael. Python - Identify a negative number in a list - Stack Overflow [en línea]. (13 de abril de 2013). Disponible en: http://stackoverflow.com/questions/15993583/pythonidentify-a-negative-number-in-a-list [Consulta: 8 de abril de 2014]. Michal. geocoding - How to calculate the bounding box for a given lat/lng location? Stack Overflow [en línea]. (26 de octubre de 2008). Disponible en: http://stackoverflow.com/questions/238260/how-to-calculate-the-bounding-box-fora-given-lat-lng-location [Consulta: 26 de marzo de 2014]. Microsoft Excel: software de hoja de cálculo [en línea]. (n.d.). Disponible en: http://office.microsoft.com/es-es/excel/ [Consulta: 24 de febrero de 2014]. MikeMurko. jQuery Keycode Cheatsheet [en línea]. (n.d.). Disponible en: http://mikemurko.com/general/jquery-keycode-cheatsheet/ [Consulta: 22 de abril de 2014]. Möller, E. (redhog). Cookie size · Issue #660 · PyBossa/pybossa · GitHub [en línea]. (n.d.). Disponible en: https://github.com/PyBossa/pybossa/issues/660 [Consulta: 7 de abril de 2014]. Monty. What mail server does Ubuntu have installed by default? - Ask Ubuntu [en línea]. (8 de agosto de 2012). Disponible en: http://askubuntu.com/questions/173598/what-mail-server-does-ubuntu-haveinstalled-by-default [Consulta: 9 de febrero de 2014]. Mpriour. openlayers restricted-extent.html at master · openlayers/openlayers · GitHub [en línea]. (n.d.). Disponible en: https://github.com/openlayers/openlayers/blob/master/examples/restrictedextent.html [Consulta: 14 de marzo de 2014]. 268 Bibliografía NeilGhosh. html - clear the value in select form element using jquery - Stack Overflow [en línea]. (15 de marzo de 2012). Disponible en: http://stackoverflow.com/questions/9718024/clear-the-value-in-select-form-elementusing-jquery [Consulta: 16 de abril de 2014]. Nergar2. Python is broken: No module named pkg_resources [en línea]. (13 de agosto de 2013). Disponible en: http://ubuntuforums.org/showthread.php?t=2167383 [Consulta: 9 de febrero de 2014]. Nikos. How to catch JQuery UI Accordion Click Event? - Stack Overflow [en línea]. (3 de abril de 2013). Disponible en: http://stackoverflow.com/questions/15784949/how-tocatch-jquery-ui-accordion-click-event [Consulta: 15 de abril de 2014]. Nix Craft. Bash Shell Script Function Examples [en línea]. (27 de enero de 2009). Disponible en: http://www.cyberciti.biz/faq/bash-shell-script-function-examples/ [Consulta: 11 de febrero de 2014]. Nneonneo. Python Regex: get everything except for string - Stack Overflow [en línea]. (20 de agosto de 2013). Disponible en: http://stackoverflow.com/questions/18326762/python-regex-get-everything-exceptfor-string [Consulta: 21 de abril de 2014]. Obtener coordenadas de google maps [en línea]. (n.d.). Disponible en: http://www.agenciacreativa.net/coordenadas_google_maps.php [Consulta: 4 de abril de 2014]. Official Ubuntu Documentation [en línea]. (n.d.). Disponible en: https://help.ubuntu.com/ [Consulta: 9 de febrero de 2014]. Om. PyBossa/pybossa-geodemo · GitHub [en línea]. (n.d.). Disponible en: https://github.com/PyBossa/pybossa-geodemo [Consulta: 14 de febrero de 2014]. OpenLayers Restricted Extent Example [en línea]. (n.d.). Disponible en: http://openlayers.org/dev/examples/restricted-extent.html [Consulta: 13 de marzo de 2014]. OpenLayers.Bounds - OpenLayers [en línea]. (n.d.). Disponible en: http://dev.openlayers.org/docs/files/OpenLayers/BaseTypes/Bounds-js.html [Consulta: 27 de marzo de 2014]. OpenLayers.Format.GeoJSON - OpenLayers [en línea]. (n.d.). Disponible en: http://dev.openlayers.org/releases/OpenLayers2.6/doc/apidocs/files/OpenLayers/Format/GeoJSON-js.html [Consulta: 4 de abril de 2014]. 269 Bibliografía OpenLayers.Format.JSON - OpenLayers [en línea]. (n.d.). Disponible en: http://dev.openlayers.org/releases/OpenLayers2.6/doc/apidocs/files/OpenLayers/Format/JSON-js.html [Consulta: 4 de abril de 2014]. OpenLayers.Layer - OpenLayers [en línea]. (n.d.). Disponible en: http://dev.openlayers.org/apidocs/files/OpenLayers/Layer-js.html [Consulta: 14 de marzo de 2014]. OpenLayers.Layer.Google - OpenLayers [en línea]. (n.d.). Disponible en: http://dev.openlayers.org/docs/files/OpenLayers/Layer/Google-js.html [Consulta: 7 de marzo de 2014]. OpenLayers.Layer.Grid - OpenLayers [en línea]. (n.d.). Disponible en: http://dev.openlayers.org/apidocs/files/OpenLayers/Layer/Grid-js.html [Consulta: 3 de mayo de 2014]. OpenLayers.Layer.Vector - OpenLayers [en línea]. (n.d.). Disponible en: http://dev.openlayers.org/docs/files/OpenLayers/Layer/Vector-js.html [Consulta: 13 de marzo de 2014]. OpenLayers.Layer.WMS - OpenLayers [en línea]. (n.d.). Disponible en: http://dev.openlayers.org/docs/files/OpenLayers/Layer/WMS-js.html [Consulta: 8 de abril de 2014]. OpenLayers.Layer.WMS - OpenLayers [en línea]. (n.d.). Disponible en: http://dev.openlayers.org/apidocs/files/OpenLayers/Layer/WMS-js.html [Consulta: 19 de abril de 2014]. OpenLayers.LonLat - OpenLayers [en línea]. (n.d.). Disponible en: http://dev.openlayers.org/docs/files/OpenLayers/BaseTypes/LonLat-js.html [Consulta: 4 de abril de 2014]. OpenLayers.Map - OpenLayers [en línea]. (n.d.). Disponible en: http://dev.openlayers.org/apidocs/files/OpenLayers/Map-js.html [Consulta: 4 de abril de 2014]. OpenLayers.StyleMap - OpenLayers [en línea]. (n.d.). Disponible en: http://dev.openlayers.org/docs/files/OpenLayers/StyleMap-js.html [Consulta: 28 de marzo de 2014]. OpenLayers.Symbolizer.Point - OpenLayers [en línea]. (n.d.). Disponible en: http://dev.openlayers.org/apidocs/files/OpenLayers/Format-js.html [Consulta: 7 de abril de 2014]. OpenLayers: Single Tile - OpenLayers [en línea]. (n.d.). Disponible http://dev.openlayers.org/releases/OpenLayers-2.13.1/examples/single-tile.html [Consulta: 3 de mayo de 2014]. en: 270 Bibliografía P H. jQuery Chosen reset - Stack Overflow [en línea]. (26 de octubre de 2011). Disponible en: http://stackoverflow.com/questions/7897760/jquery-chosen-reset [Consulta: 16 de abril de 2014]. Postfix [en línea]. (n.d.). Disponible en: https://help.ubuntu.com/12.04/serverguide/postfix.html [Consulta: 9 de febrero de 2014]. Postfix Configuration Parameters [en línea]. (n.d.). Disponible en: http://www.postfix.org/postconf.5.html [Consulta: 9 de febrero de 2014]. PostgreSQL - DELETE Query [en línea]. (n.d.). Disponible en: http://www.tutorialspoint.com/postgresql/postgresql_delete_query.htm [Consulta: 9 de febrero de 2014]. PostgreSQL - Environment Setup [en línea]. (n.d.). Disponible en: http://www.tutorialspoint.com/postgresql/postgresql_environment.htm [Consulta: 9 de febrero de 2014]. PostgreSQL - SELECT Query [en línea]. (n.d.). Disponible en: http://www.tutorialspoint.com/postgresql/postgresql_select_query.htm [Consulta: 9 de febrero de 2014]. PostgreSQL: Documentation: 9.1: ALTER SEQUENCE [en línea]. (n.d.). Disponible en: http://www.postgresql.org/docs/9.1/static/sql-altersequence.html [Consulta: 9 de febrero de 2014]. PostgreSQL: Documentation: 9.1: createdb [en línea]. (n.d.). Disponible en: http://www.postgresql.org/docs/9.1/static/app-createdb.html [Consulta: 9 de febrero de 2014]. PostgreSQL: Documentation: 9.1: Destroying a Database [en línea]. (n.d.). Disponible en: http://www.postgresql.org/docs/9.1/static/manage-ag-dropdb.html [Consulta: 9 de febrero de 2014]. PostgreSQL: Documentation: 9.1: DROP USER [en línea]. (n.d.). Disponible en: http://www.postgresql.org/docs/9.1/static/sql-dropuser.html [Consulta: 9 de febrero de 2014]. PostgreSQL: Documentation: 9.1: dropdb [en línea]. (n.d.). Disponible en: http://www.postgresql.org/docs/9.1/static/app-dropdb.html [Consulta: 9 de febrero de 2014]. PostgreSQL: Documentation: 9.1: pg_dump [en línea]. (n.d.). Disponible en: http://www.postgresql.org/docs/9.1/static/app-pgdump.html [Consulta: 9 de febrero de 2014]. 271 Bibliografía PostgreSQL: Documentation: 9.1: PostgreSQL 9.1.11 Documentation [en línea]. (n.d.). Disponible en: http://www.postgresql.org/docs/9.1/static/index.html [Consulta: 9 de febrero de 2014]. PostgreSQL: Documentation: 9.1: SQL Dump [en línea]. (n.d.). Disponible en: http://www.postgresql.org/docs/9.1/static/backup-dump.html [Consulta: 9 de febrero de 2014]. PostgreSQL: Documentation: 9.1: TRUNCATE [en línea]. (n.d.). Disponible en: http://www.postgresql.org/docs/9.1/static/sql-truncate.html [Consulta: 9 de febrero de 2014]. Pris. Given a set of coordinates, how can I calculate the minimum bounds? - Geographic Information Systems Stack Exchange [en línea]. (2 de noviembre de 2012). Disponible en: http://gis.stackexchange.com/questions/39153/given-a-set-of-coordinates-howcan-i-calculate-the-minimum-bounds [Consulta: 24 de marzo de 2014]. Proyección de Mercator - Wikipedia, la enciclopedia libre [en línea]. (25 de febrero de 2014). Disponible en: http://es.wikipedia.org/wiki/Proyecci%C3%B3n_de_Mercator [Consulta: 7 de marzo de 2014]. PyBossa [en línea]. (n.d.). Disponible en: http://pybossa.com/ [Consulta: 6 de febrero de 2014]. PyBossa Overview — PyBossa v0.2.1 documentation [en línea]. (n.d.). Disponible en: http://docs.pybossa.com/en/latest/user/overview.html [Consulta: 13 de febrero de 2014]. pybossa-client - Sourcegraph [en línea]. (n.d.). Disponible en: https://sourcegraph.com/github.com/PyBossa/pybossa-client [Consulta: 15 de febrero de 2014]. pybossa-client 0.4.1 : Python Package Index [en línea]. (19 de junio de 2013). Disponible en: https://pypi.python.org/pypi/pybossa-client [Consulta: 12 de febrero de 2014]. pyshp - Python Shapefile Library - Google Project Hosting [en línea]. (27 de julio de 2013). Disponible en: http://code.google.com/p/pyshp/ [Consulta: 4 de abril de 2014]. Python - Command Line Arguments [en línea]. (n.d.). Disponible en: http://www.tutorialspoint.com/python/python_command_line_arguments.htm [Consulta: 1 de abril de 2014]. Python List max() Method [en línea]. (n.d.). Disponible en: http://www.tutorialspoint.com/python/list_max.htm [Consulta: 8 de abril de 2014]. 272 Bibliografía Python List min() Method [en línea]. (n.d.). Disponible en: http://www.tutorialspoint.com/python/list_min.htm [Consulta: 8 de abril de 2014]. Qcom. database - Stop redis-server - Stack Overflow [en línea]. (2 de agosto de 2011). Disponible en: http://stackoverflow.com/questions/6910378/stop-redis-server [Consulta: 6 de febrero de 2014]. Rachel. version control - Differences between git pull origin master & git pull origin/master - Stack Overflow [en línea]. (21 de mayo de 2010). Disponible en: http://stackoverflow.com/questions/2883840/differences-between-git-pull-originmaster-git-pull-origin-master [Consulta: 13 de febrero de 2014]. Recurrent Processing: pip ImportError: No module named pkg_resources on Ubuntu 13.04 [en línea]. (28 de octubre de 2013). Disponible en: http://recurrentprocessing.blogspot.com.es/2013/10/pip-importerror-no-modulenamed.html [Consulta: 9 de febrero de 2014]. Red de entrega de contenidos - Wikipedia, la enciclopedia libre [en línea]. (4 de marzo de 2014). Disponible en: http://es.wikipedia.org/wiki/Red_de_entrega_de_contenidos [Consulta: 9 de mayo de 2014]. Redeemed1. jQuery Accordion setting active - Stack Overflow [en línea]. (10 de septiembre de 2009). Disponible en: http://stackoverflow.com/questions/1408261/jquery-accordion-setting-active [Consulta: 16 de abril de 2014]. Redis [en línea]. (4 de febrero de 2014). Disponible en: http://redis.io/ [Consulta: 6 de febrero de 2014]. Redis Command reference - Redis [en línea]. (n.d.). Disponible en: http://redis.io/commands [Consulta: 27 de febrero de 2014]. Redis Quick Start - Redis [en línea]. (n.d.). Disponible en: http://redis.io/topics/quickstart [Consulta: 6 de febrero de 2014]. Redis Sentinel Documentation - Redis [en línea]. (n.d.). Disponible en: http://redis.io/topics/sentinel [Consulta: 10 de febrero de 2014]. Remove startup-script with update-rc.d | Firmit - FOSS notes [en línea]. (13 de mayo de 2008). Disponible en: http://firmit.wordpress.com/2008/05/13/remove-startup-scriptwith-update-rcd [Consulta: 6 de febrero de 2014]. RESTful API — PyBossa v0.2.1 documentation [en línea]. (n.d.). Disponible en: http://docs.pybossa.com/en/latest/api.html [Consulta: 15 de febrero de 2014]. 273 Bibliografía RGBA color space - Wikipedia, the free encyclopedia [en línea]. (10 de marzo de 2014). Disponible en: http://en.wikipedia.org/wiki/RGBA_color_space [Consulta: 14 de marzo de 2014]. Richzilla. python - Delete an element from a dictionary - Stack Overflow [en línea]. (30 de abril de 2011). Disponible en: http://stackoverflow.com/questions/5844672/deletean-element-from-a-dictionary [Consulta: 8 de abril de 2014]. Rusty. javascript - OpenLayers and GeoJSON - problem projecting EPSG:4326 Geographic Information Systems Stack Exchange [en línea]. (15 de agosto de 2012). Disponible en: http://gis.stackexchange.com/questions/31550/how-to-get-geojsonfeatures-using-openlayers [Consulta: 7 de abril de 2014]. Scap2000. #3050 (OpenLayers is drawing layers at wrong coordinates) - OpenLayers [en línea]. (n.d.). Disponible en: http://trac.osgeo.org/openlayers/ticket/3050 [Consulta: 1 de abril de 2014]. Serrano, Q. M. CONFIGURACION DE SERVIDOR DE CORREOS EN UBUNTU 12 04 [en línea]. (23 de febrero de 2013). Disponible en: https://www.youtube.com/watch?v=PfzIQExn4VI [Consulta: 9 de febrero de 2014]. Servicios terrasit | Terrasit [en línea]. (n.d.). Disponible en: http://terrasit.gva.es/es/icv/servicios/veride [Consulta: 4 de abril de 2014]. SettingZoomLevels – OpenLayers [en línea]. (n.d.). Disponible en: http://trac.osgeo.org/openlayers/wiki/SettingZoomLevels [Consulta: 14 de marzo de 2014]. Shah, A. Chosen Jquery Plugin - getting selected values - Stack Overflow [en línea]. (9 de mayo de 2012). Disponible en: http://stackoverflow.com/questions/10521315/chosen-jquery-plugin-getting-selectedvalues [Consulta: 15 de abril de 2014]. Shahriar, T. life is short - you need Python!: Strip HTML tags using Python [en línea]. (26 de julio de 2008). Disponible en: http://love-python.blogspot.com.es/2008/07/striphtml-tags-using-python.html [Consulta: 21 de abril de 2014]. Shapefile - Wikipedia, la enciclopedia libre [en línea]. (25 de abril de 2013). Disponible en: http://es.wikipedia.org/wiki/Shapefile [Consulta: 4 de abril de 2014]. Simon. character encoding - Python: write Unicode text to a text file? - Stack Overflow [en línea]. (18 de mayo de 2011). Disponible en: http://stackoverflow.com/questions/6048085/python-write-unicode-text-to-a-text-file [Consulta: 5 de marzo de 2014]. 274 Bibliografía SimpleWMSExample - alageospatialportal - Simple example using Open layers and spatial portal WMS - Atlas of Living Australia Geospatial Components - Google Project Hosting [en línea]. (n.d.). Disponible en: http://code.google.com/p/alageospatialportal/wiki/SimpleWMSExample [Consulta: 8 de abril de 2014]. Special Characters in HTML [en línea]. (n.d.). Disponible en: http://www.degraeve.com/reference/specialcharacters.php [Consulta: 12 de febrero de 2014]. Spherical Mercator - OpenLayers [en línea]. (n.d.). Disponible en: http://docs.openlayers.org/library/spherical_mercator.html [Consulta: 7 de marzo de 2014]. Stenning, N. PyBossa/app-recon · GitHub [en línea]. (n.d.). Disponible en: https://github.com/PyBossa/app-recon [Consulta: 14 de febrero de 2014]. Stiobhart. apache2 - enabling and disabling sites - Apache - Snipplr Social Snippet Repository [en línea]. (6 de julio de 2009). Disponible en: http://snipplr.com/view/15626/ [Consulta: 9 de febrero de 2014]. Stof. harvesthq/chosen · GitHub [en línea]. (n.d.). Disponible en: https://github.com/harvesthq/chosen [Consulta: 15 de abril de 2014]. Storing and Loading Data with JSON | Bite Sized Python Tips [en línea]. (n.d.). Disponible en: http://freepythontips.wordpress.com/2013/08/08/storing-and-loadingdata-with-json [Consulta: 5 de marzo de 2014]. Surya, A. YouTube API Blog: A New Way To Embed YouTube Videos [en línea]. (22 de julio de 2010). Disponible en: http://apiblog.youtube.com/2010/07/new-way-toembed-youtube-videos.html [Consulta: 23 de marzo de 2014]. Sverdlov, E. How To Install and Use Redis | DigitalOcean [en línea]. (n.d.). Disponible en: https://www.digitalocean.com/community/articles/how-to-install-and-use-redis [Consulta: 6 de febrero de 2014]. TERMtm. html - How to have a textarea to keep scrolled to the bottom when updated Stack Overflow [en línea]. (10 de septiembre de 2014). Disponible en: http://stackoverflow.com/questions/7373081/how-to-have-a-textarea-to-keepscrolled-to-the-bottom-when-updated [Consulta: 10 de marzo de 2014]. The typeof operator [en línea]. (n.d.). Disponible en: http://www.javascriptkit.com/javatutors/determinevar2.shtml febrero de 2014]. [Consulta: 26 de 275 Bibliografía Tipos de mapas - Versión 3 del API de JavaScript de Google Maps — Google Developers [en línea]. (31 de enero de 2013). Disponible en: https://developers.google.com/maps/documentation/javascript/maptypes?hl=es [Consulta: 7 de marzo de 2014]. Torres, R. Postgres: primeros pasos con psql (seleccionar base y entrar) - Vivir y Aprender Web [en línea]. (n.d.). Disponible en: http://viviryaprenderweb.com/postgres-comandos-basicos-con-psql-en-la-consola/ [Consulta: 9 de febrero de 2014]. Translating PyBossa — PyBossa v0.2.1 documentation [en línea]. (n.d.). Disponible en: http://docs.pybossa.com/en/latest/translating.html [Consulta: 12 de febrero de 2014]. Tutorial — Alembic 0.6.3 documentation [en línea]. (n.d.). Disponible en: http://alembic.readthedocs.org/en/latest/tutorial.html [Consulta: 9 de febrero de 2014]. Twython — Twython 3.1.1 documentation [en línea]. (n.d.). Disponible en: https://twython.readthedocs.org/en/latest [Consulta: 23 de enero de 2014]. Ubuntu Server - for scale out computing | Ubuntu [en línea]. (n.d.). Disponible en: http://www.ubuntu.com/server [Consulta: 9 de febrero de 2014]. user1004875. ubuntu - How to Uninstall setuptools python - Stack Overflow [en línea]. (24 de enero de 2014). Disponible en: http://stackoverflow.com/questions/8982227/how-to-uninstall-setuptools-python [Consulta: 9 de febrero de 2014]. user1089173. jquery - $.getJSON never fires the success function - Stack Overflow [en línea]. (3 de noviembre de 2012). Disponible en: http://stackoverflow.com/questions/13212630/getjson-never-fires-the-successfunction [Consulta: 15 de abril de 2014]. User10895. javascript - OpenLayers and GeoJSON - problem projecting EPSG:4326 Geographic Information Systems Stack Exchange [en línea]. (19 de febrero de 2013). Disponible en: http://gis.stackexchange.com/questions/52342/openlayers-andgeojson-problem-projecting-epsg4326 [Consulta: 7 de abril de 2014]. User1775598. javascript - jQuery - using JS events like "dragover" - Stack Overflow [en línea]. (31 de julio de 2013). Disponible en: http://stackoverflow.com/questions/17969976/jquery-using-js-events-like-dragover [Consulta: 24 de abril de 2014]. User225312. Finding multiple occurrences of a string within a string in Python - Stack Overflow [en línea]. (6 de octubre de 2010). Disponible en: http://stackoverflow.com/questions/3873361/finding-multiple-occurrences-of-astring-within-a-string-in-python [Consulta: 21 de febrero de 2014]. 276 Bibliografía User874774. postgresql - Psql list all tables - Stack Overflow [en línea]. (16 de septiembre de 2012). Disponible en: http://stackoverflow.com/questions/12445608/psql-list-all-tables [Consulta: 9 de febrero de 2014]. Ver | Terrasit [en línea]. (n.d.). Disponible en: http://terrasit.gva.es/es/ver [Consulta: 8 de abril de 2014]. Vivekhub. Installation of redis-2.6.7 as a service results in errors · Issue #816 · antirez/redis · GitHub [en línea]. (n.d.). Disponible en: https://github.com/antirez/redis/issues/816 [Consulta: 10 de febrero de 2014]. Welcome to PyBossa’s documentation — PyBossa v0.2.1 documentation [en línea]. (n.d.). Disponible en: http://docs.pybossa.com/en/latest [Consulta: 10 de febrero de 2014]. Welcome to pybossa-client’s documentation! — pybossa-client 0.1a documentation [en línea]. (n.d.). Disponible en: http://pythonhosted.org/pybossa-client [Consulta: 12 de febrero de 2014]. WGS 84: EPSG Projection -- Spatial Reference [en línea]. (n.d.). Disponible en: http://spatialreference.org/ref/epsg/wgs-84 [Consulta: 7 de marzo de 2014]. EPSG 4326: EPSG Projection -- Spatial Reference [en línea]. (n.d.). Disponible en: http://spatialreference.org/ref/epsg/4326 [Consulta: 7 de marzo de 2014]. WGS84 - Wikipedia, la enciclopedia libre [en línea]. (26 de mayo de 2013). Disponible en: http://es.wikipedia.org/wiki/WGS84 [Consulta: 24 de febrero de 2014]. Will P. javascript - How do I set textarea scroll bar to bottom as a default? - Stack Overflow [en línea]. (7 de febrero de 2012). Disponible en: http://stackoverflow.com/questions/9170670/how-do-i-set-textarea-scroll-bar-tobottom-as-a-default [Consulta: 10 de marzo de 2014]. Window confirm() Method [en línea]. (n.d.). Disponible en: http://www.w3schools.com/jsref/met_win_confirm.asp [Consulta: 27 de marzo de 2014]. WMS Tiling Client Recommendation - OSGeo Wiki [en línea]. (13 de octubre de 2010). Disponible en: http://wiki.osgeo.org/wiki/WMS_Tiling_Client_Recommendation [Consulta: 3 de mayo de 2014]. YouTube Embedded Players and Player Parameters - YouTube — Google Developers [en línea]. (16 de marzo de 2014). Disponible en: https://developers.google.com/youtube/player_parameters#IFrame_Player_API [Consulta: 23 de marzo de 2014]. 277 Bibliografía Zachary. Opposite of "scrollTop" in jQuery - Stack Overflow [en línea]. (15 de noviembre de 2010). Disponible en: http://stackoverflow.com/questions/4188903/opposite-of-scrolltop-in-jquery [Consulta: 10 de marzo de 2014]. Zafar, A. Enabling and Disabling the Apache Rewrite Module (mod_rewrite) in Linux (Ubuntu) | step4wd.com [en línea]. (n.d.). Disponible en: http://step4wd.com/2011/09/24/enabling-and-disabling-the-apache-rewrite-modulemod_rewrite-in-linux-ubuntu [Consulta: 9 de febrero de 2014]. $(document).ready() | jQuery Learning Center [en línea]. (n.d.). Disponible en: http://learn.jquery.com/using-jquery-core/document-ready [Consulta: 15 de abril de 2014]. .each() | jQuery API Documentation [en línea]. (n.d.). https://api.jquery.com/each [Consulta: 15 de abril de 2014]. Disponible en: .load() | jQuery API Documentation [en línea]. (n.d.). https://api.jquery.com/load [Consulta: 26 de febrero de 2014]. Disponible en: .prepend() | jQuery API Documentation [en línea]. (n.d.). Disponible en: http://api.jquery.com/prepend [Consulta: 6 de marzo de 2014]. .ready() | jQuery API Documentation [en línea]. (n.d.). http://api.jquery.com/ready [Consulta: 15 de abril de 2014]. Disponible en: 1&1 Centro de Ayuda - Modificar el DNS de un dominio [en línea]. (n.d.). Disponible en: http://ayuda.1and1.es/dominios-c64715/gestin-de-dominios-c64727/ajustes-de-dnsc64731/modificar-el-dns-de-un-dominio-a694466.html [Consulta: 18 de noviembre de 2013]. 14. Floating Point Arithmetic: Issues and Limitations — Python v2.7.6 documentation [en línea]. (n.d.). Disponible en: https://docs.python.org/2/tutorial/floatingpoint.html#tut-fp-issues [Consulta: 8 de abril de 2014]. 18.2. json — JSON encoder and decoder — Python v2.7.6 documentation [en línea]. (n.d.). Disponible en: https://docs.python.org/2/library/json.html [Consulta: 1 de abril de 2014]. 19.9. xml.dom.minidom — Minimal DOM implementation — Python v2.7.6 documentation [en línea]. (n.d.). Disponible en: https://docs.python.org/2/library/xml.dom.minidom.html [Consulta: 2 de abril de 2014]. 2. Built-in Functions — Python v2.7.6 documentation [en línea]. (n.d.). Disponible en: https://docs.python.org/2/library/functions.html [Consulta: 8 de abril de 2014]. 278 Bibliografía 23.3 Parsing XML with DOM [en línea]. (n.d.). Disponible en: http://docstore.mik.ua/orelly/other/python/0596001886_pythonian-chp-23-sect3.html [Consulta: 2 de abril de 2014]. 7.2. re — Regular expression operations — Python v2.7.6 documentation [en línea]. (n.d.). Disponible en: https://docs.python.org/2/library/re.html [Consulta: 21 de abril de 2014]. 7_stud. How do you install jquery UI? - jQuery Forum [en línea]. (n.d.). Disponible en: http://forum.jquery.com/topic/how-do-you-install-jquery-ui [Consulta: 15 de abril de 2014]. 8. Errors and Exceptions — Python v2.7.6 documentation [en línea]. (n.d.). Disponible en: https://docs.python.org/2/tutorial/errors.html [Consulta: 4 de abril de 2014]. 279