Mapeo: Aprendizajes en la construcción de una aplicación descentralizada

By 
Gregor MacLennan
July 13, 2023

Serie de publicaciones de Mapeo: una mirada al proceso de co-desarrollo de herramientas digitales innovadoras y offline para la justicia social.

La serie destacará los siguientes pasos con Mapeo, sus nuevas funciones, nuestros aprendizajes y desafíos en el co-diseño de una herramienta que responde a las necesidades de mapeo de las personas defensoras de la tierra en diversos territorios.

Mapeo es una herramienta fácil de aprender que se creó para que las comunidades remotas de todo el mundo mapeen y documenten el mundo que les rodea. Se basa en un nuevo enfoque radical de la tecnología, llamado "descentralizado" o "de pares" (peer-to-peer, en inglés), que permite a las personas usuarias colaborar para recopilar datos sin necesidad de un servidor o conexión a internet. Desarrollamos Mapeo durante 8 años a través de un proceso de co-diseño con socios locales, y hemos aprendido mucho en el camino sobre los desafíos y oportunidades de la tecnología peer-to-peer. Esta publicación compartimos algunos detalles técnicos sobre estos desafíos y cómo las soluciones guían nuestro trabajo en "Mapeo Next".

Esta publicación del blog es parte de una serie sobre "Mapeo Next", la principal actualización de la plataforma Mapeo que se realizará a fines del otoño:

  1. Mapeo: El próximo capítulo
  2. Codiseño de Mapeo: un proceso poderoso de aprendizajes
  3. Mapeo: aprendizajes en la construcción de una aplicación descentralizada (esta publicación)
  4. Cómo funciona peer-to-peer y por qué es importante
  5. Mejor seguridad a través de proyectos e invitaciones.
  6. Control de acceso en un sistema descentralizado
  7. El nuevo Mapeo: características y cómo empezar.

Oportunidades

Mapeo no utiliza un servidor centralizado para almacenar datos. No hay servidor o base de datos para mantener, y no es necesario alojar ese servidor en internet o en una oficina. Todos los datos recopilados con Mapeo se almacenan en una base de datos integrada en el propio dispositivo y se sincronizan en todos los dispositivos que forman parte de un proyecto de Mapeo. Esto significa que Mapeo no solo funciona sin conexión para recopilar datos, sino que un grupo de personas puede colaborar para recopilar datos y compartirlos entre ellos sin necesidad de Internet o un servidor. Todos los datos permanecen en sus dispositivos, son de su propiedad y están controlados por ellas. Si un dispositivo falla o se pierde, todos los demás dispositivos actúan como una copia de seguridad y el dispositivo se puede reemplazar y sincronizar fácilmente con cualquier otro dispositivo del proyecto para restaurar todos los datos.

A esto lo llamamos "peer-to-peer". Hace que Mapeo sea más resistente a internet poco confiable, la censura o el bloqueo de onternet, y mantiene los datos en manos de los usuarios sin necesidad de confiar sus datos a servidores de todo el mundo, y garantiza que los datos siempre estarán accesibles para ellos: hay sin tarifas de suscripción o alojamiento porque todos los datos son locales para su dispositivo. Sin embargo, esto no significa que las aplicaciones peer-to-peer como Mapeo deban permanecer aisladas sin conexión. De hecho, pueden hacer un uso más eficiente de internet cuando está disponible: dos dispositivos pueden conectarse directamente entre sí sin tener que hacer un largo viaje de ida y vuelta a través de un servidor central que está a menudo en el otro lado del mundo. Dado que no hay ningún servidor involucrado, los datos se pueden cifrar "de extremo a extremo", por ejemplo, solo los dispositivos pueden ver los datos que se comparten y es imposible que cualquier intermediario los lea. También abre la posibilidad de realizar copias de seguridad en línea totalmente cifradas: los datos de Mapeo podrían replicarse en un servidor en internet, pero los datos no serían accesibles ni siquiera para alguien con acceso físico a los discos duros del servidor y todas las claves del servidor.

Sincronización cifrada con otro dispositivo a través de internet y copia de seguridad cifrada de extremo a extremo a un servidor remoto, son dos características clave que habilitará la nueva plataforma que impulsará "Mapeo Next".

Desafíos

Muchos de los desafíos a los que nos enfrentamos al crear Mapeo se derivan de la falta de precedentes sobre cómo crear una aplicación peer-to-peer totalmente descentralizada y la experiencia de las personas usuarias para sincronizar datos. Creamos la base de datos que impulsa a Mapeo desde cero y con recursos y tiempo limitados. Si bien satisface las necesidades de quienes lo usan, debido a que se ha parchado y adaptado en respuesta a las necesidades de las personas usuarias a lo largo del tiempo, se ha vuelto cada vez más difícil y lento agregar nuevos características. Además, algunos errores han demostrado ser difíciles de arreglar debido a decisiones de diseño tomadas hace años.

"Mapeo Next" incluirá una nueva base de datos que aborda algunos desafíos clave:

* Mejora de la fiabilidad de la sincronización entre dispositivos

* Proyectos encriptados, seguros y fáciles de crear

* Control y mejor visibilidad sobre quién es parte de un proyecto

* Sincronización a través de Internet (Mapeo seguirá admitiendo la sincronización en persona sin conexión)

*Gestión inteligente del almacenamiento del dispositivo

* Nuevas funciones como pistas de GPS y grabaciones de audio

Fiabilidad mejorada de la sincronización entre dispositivos

La base de datos de Mapeo se basa en algo que llamamos "registros inmutables". "Inmutable" significa que nunca se elimina nada, y cualquier intento de cambiar el registro se puede detectar mediante la validación de "firmas" para cada entrada. Cada vez que un usuario agrega un punto de datos, lo edita o lo elimina, se escribe como una entrada en su registro, p. un registro puede ser:

1. Punto A agregado

2. Punto B agregado

3. Punto A editado

4. Punto B eliminado

En realidad, cada una de estas entradas de registro contendría los detalles completos sobre cada punto o lo que ha cambiado. Usamos un registro inmutable llamado Hipercore, que gestiona la firma de cada entrada y la validación de la firma. Hypercore también administra la sincronización de estos registros entre dispositivos, compartiendo de manera eficiente los mensajes de registro entre un grupo de usuarios conectados para que todos terminen con copias replicadas de los registros. Hypercore era muy nuevo y en gran parte experimental cuando comenzamos a usarlo, y desde entonces ha madurado y mejorado. Seguimos usando una versión anterior en Mapeo, que es la fuente de algunos errores.

Las "observaciones" (puntos de datos registrados en Mapeo) se almacenan en estos registros, pero tenemos fotos almacenadas y sincronizadas por separado. Esto nos ayudó a hacer que algo funcionara rápidamente, pero descubrimos que nuestra sincronización de fotos es ineficiente: las fotos grandes pueden "bloquear" la conexión entre dispositivos, ralentizando la sincronización de otros datos, y cuando más de dos dispositivos se conectan para compartir datos, a menudo las fotos se comparten simultáneamente desde varios dispositivos al mismo tiempo, lo que da como resultado transferencias duplicadas que aumentan el tiempo de sincronización.

Una de nuestras primeras suposiciones también, que inicialmente no nos dimos cuenta de que habíamos hecho, era que los usuarios siempre "completarían" la sincronización. Por supuesto, en realidad, fallas en las conexiones entre dispositivos, teléfonos que se quedan sin batería y personas que simplemente se salen del alcance significan que la sincronización a menudo no se completa. En "Mapeo Next" estamos manejando mejor estos escenarios para que los usuarios puedan ver fácilmente cuándo la sincronización no está completa, pero pueden continuar usando Mapeo sin problemas hasta que se complete la sincronización.

En resumen, en "Mapeo Next" la sincronización será más rápida y confiable, debido a:

1. Una actualización a Hypercore (el registro inmutable que usamos para el almacenamiento) de la versión 6 a la versión 10. Esto requiere que migremos los datos de las personas usuarias a este nuevo formato. Recomendamos nuestra próxima publicación de blog “¿Cómo prepararse para Mapeo upgrade?"

2. Mover el almacenamiento de fotos a Hypercore permite la sincronización cifrada de fotos de extremo a extremo y hace que la sincronización de fotos sea mucho más eficiente.

3. Soporte completo para "sincronización parcial" y recuperación cuando los dispositivos se conectan a continuación, con mejores comentarios de los usuarios sobre cuándo se realiza la sincronización: no más problemas con la sincronización que se "atasca" y nunca se completa.

Proyectos cifrados, seguros y fáciles de crear

En la versión actual de Mapeo, aseguramos un proyecto creando una clave de proyecto aleatoria e instalamos manualmente esa clave en cada dispositivo. Para las personas usuarias que simplemente descargan Mapeo y comienzan a usarlo sin una clave de proyecto, los datos están encriptados, pero la clave predeterminada es visible en el código fuente de Mapeo para un atacante determinado. Esta no es una amenaza significativa dado que el Mapeo actual solo se sincroniza a través de wifi local, no de Internet: cualquier atacante debería estar físicamente presente en la misma red local.

Una filosofía central para el desarrollo de Mapeo ha sido reducir la dependencia del soporte técnico externo, por lo que para "Mapeo Next" estamos cambiando para hacer que todos los proyectos sean seguros de forma predeterminada. La clave del proyecto se genera de forma segura y aleatoria dentro de la aplicación y se comparte con otros a través de invitaciones seguras, que se utilizan para agregar otros usuarios a un proyecto de Mapeo. Hemos estado trabajando arduamente para hacer esto de una manera que sea intuitiva y fácil de usar, evitando la complicada "administración de claves". La clave del proyecto nunca se comparte sin cifrar fuera de la aplicación, lo que reduce en gran medida la posibilidad de que alguien comprometa un proyecto.

Control y mejor visibilidad sobre quién forma parte de un proyecto

Un desafío clave con los proyectos existentes de Mapeo ha sido la visibilidad de quién es parte de un proyecto y quién puede ver los datos, y cómo eliminar un dispositivo de un proyecto si se pierde, el usuario continúa o si se ve comprometido en de alguna manera En "Mapeo Next" no es suficiente tener la clave del proyecto: también debe haber un registro firmado en la base de datos de Mapeo que otorgue a la personas usuaria permiso para participar y, de manera similar, un registro firmado que diga que alguna persona usuaria ha sido eliminada de un proyecto garantizará que ya no pueden sincronizar datos de un proyecto. Una futura publicación de blog entrará en los detalles técnicos sobre cómo se resolvió esto en "Mapeo Next".

Todo esto permitirá a las personas usuarias ver claramente quién es parte de su proyecto y les dará control total sobre a quién agregan a un proyecto y a quién eliminan, en lugar de depender de un equipo de soporte técnico externo para administrar los permisos de los dispositivos.

Sincronización a través de Internet

Mapeo fue diseñado intencionalmente para sincronizarse sin usar Internet. Los dispositivos se conectan entre sí a través de una red wifi local que puede estar completamente fuera de línea. El diseño peer-to-peer de la base de datos significa que los participantes en un proyecto de Mapeo pueden reunirse y sincronizarse y, eventualmente, los datos pasan de un dispositivo a otro hasta que todos estén sincronizados. Esta ha sido una característica fundamental para las comunidades que utilizan Mapeo en áreas remotas con poca o ninguna conectividad a Internet. Elimina la necesidad de viajar a un lugar con Internet para compartir datos. Sin embargo, hay circunstancias en las que internet está disponible y reunirse en persona puede ser difícil, y la reciente pandemia de COVID-19 ha puesto de relieve la necesidad de admitir también la sincronización de Internet.

Nuestro principal desafío con Mapeo es permitir la sincronización a través de internet de una manera totalmente segura, de modo que los usuarios puedan sincronizar con otro dispositivo a través de internet sabiendo que es imposible que alguien intercepte o lea los datos en el camino. Es importante destacar que necesitábamos hacer esto de una manera que fuera simple y accesible para las personas usuarias, sin necesidad de administrar cuentas de usuario, contraseñas y claves de acceso especiales.

"Mapeo Next" permitirá la sincronización cifrada de datos de extremo a extremo totalmente segura a través de internet entre los dispositivos de un proyecto. Esto está habilitado por muchas de las características enumeradas anteriormente:

1. Las claves de proyecto generadas en el dispositivo y nunca compartidas sin cifrar se utilizan para cifrar todo el tráfico de la red.

2. Mover el almacenamiento de fotos a Hypercore nos permite cifrar todos los datos que se comparten.

3. El soporte de sincronización parcial permite sincronizar solo los datos más importantes a través de una conexión a Internet potencialmente lenta.

Gestión inteligente del almacenamiento del dispositivo

El almacenamiento local de todos los datos en una base de datos integrada en cada dispositivo hace que Mapeo sea extremadamente resistente. Cada dispositivo se convierte en una copia de seguridad y los datos no se almacenan en un servidor que podría volverse inaccesible y está fuera del control de los usuarios. Sin embargo, cada dispositivo que almacena todos los datos en un proyecto significa que el espacio en disco eventualmente se convertirá en un problema.

Esto no es realmente un problema para los datos textuales, p. observaciones con ubicaciones GPS, descripciones, formularios y metadatos. Cada registro solo usa unos pocos kilobits, por lo que se necesitarían millones de registros para llenar el almacenamiento incluso en teléfonos con la menor cantidad de almacenamiento. Las fotos, sin embargo, son una historia diferente. Limitamos este problema en la versión actual de Mapeo solo sincronizando "vistas previas de fotos" entre dispositivos móviles con menor capacidad. Estas vistas previas son solo de 100 a 200 kb, por lo que puede almacenar alrededor de 5000 en cada Gb de almacenamiento del teléfono. Esto significa que todos los dispositivos móviles deben sincronizarse con una computadora portátil con mayor capacidad de almacenamiento para garantizar que se compartan sus imágenes originales de calidad total.

Necesitamos abordar esto en Mapeo Next porque a medida que crecen los proyectos, los dispositivos eventualmente se quedarán sin espacio en disco. Especialmente cuando agregamos nuevas funciones muy solicitadas, como la grabación de video y audio, que ocupan aún más espacio en el disco.

El cambio al almacenamiento Hypercore para fotos y otros medios en "Mapeo Next" nos permitirá administrar de manera inteligente el espacio en disco y evitar errores por falta de espacio. Los dispositivos podrán sincronizar datos en función de la capacidad y realizar un seguimiento cuando una foto o un video haya llegado a una "máquina de copia de seguridad", p. una computadora portátil con un disco duro grande o un servidor de respaldo en Internet. Cuando los datos están en una máquina de copia de seguridad, los dispositivos pueden eliminarlos selectivamente de su almacenamiento local cuando se quedan sin espacio en disco.

Esta nueva función llegará a principios de 2024 después del lanzamiento inicial de Mapeo Next. Está habilitado por la nueva base de datos y el cambio en el almacenamiento de fotos en la plataforma actualizada.

Nuevas características como pistas de GPS y grabaciones de audio

A medida que Mapeo ha crecido orgánicamente desde sus pequeños comienzos, la maraña de código nuevo y antiguo se ha vuelto más difícil de manejar y resultó en que agregar nuevas funciones tomara mucho más tiempo de lo que esperábamos. Otra limitación clave ha sido cómo leemos los datos de los registros inmutables donde se almacenan los datos de Mapeo: hemos estado escribiendo nuestros "índices" personalizados para cada tipo de datos (estos "índices" nos permiten simplemente leer, por ejemplo, tipos de registros de "observación"). Agregar un tipo de datos adicional, como una pista de GPS, requiere muchas modificaciones en un código complicado.

En "Mapeo Next", en cada dispositivo, hacemos una copia de los datos en nuestros registros inmutables en una base de datos existente madura llamada SQLite. SQLite es de código abierto y [implementado en miles de millones de dispositivos en todo el mundo] y es familiar para muchas personas desarrolladoras. Viene con un poderoso lenguaje para leer diferentes subconjuntos de datos (llamados "consultas"), por lo que habilita nuevas funciones en Mapeo, como clasificar las observaciones por fecha o distancia, o filtrar para mostrar solo un subconjunto de datos.

Reescribir el motor de base de datos de Mapeo para usar SQLite limpiará una gran cantidad de código antiguo que causaba errores y nos ralentizaba, y hace que sea mucho más fácil y rápido agregar soporte para nuevos tipos de datos y consultar datos de nuevas maneras. para admitir nuevas opciones de clasificación y filtrado en Mapeo.

Próximos pasos

Si ya utilizas Mapeo, no tienes que hacer nada: la versión actual de la aplicación seguirá funcionando y tus datos son tuyos, están en tu dispositivo y no van a desaparecer. Sin embargo, si estás esperando algunas de las nuevas funciones y mejoras de "Mapeo Next", visita  la próximas entradas del blog de esta serie.

Traducido por María Alvarez Malvido

________________

Envíanos un email a support@mapeo.app

También puedes encontrarnos en ¡Discord!

Lea más sobre Mapeo y descárguelo en https://mapeo.app

Mapeo Mobile para Android está disponible en el Playstore de Google

Mapeo Mobile también está disponible para su instalación al descargar el APK de Android

Published by
Gregor MacLennan
Back to the Blog