Um app para combater a pandemia do Coronavírus
Num dos últimos cafés que tomei na cafeteria no térreo do Cubo, antes de entrarmos em operação remota no começo de Março, pensei em criar…
Num dos últimos cafés que tomei na cafeteria no térreo do Cubo, antes de entrarmos em operação remota no começo de Março, pensei em criar um aplicativo para ajudar as pessoas a entenderem como funciona a propagação do Covid-19. Uma espécie de jogo com dados reais de localização e movimentação das pessoas e levando em consideração modelos epidemiológicos do vírus. Fiz um rascunho num caderno e comecei a escrever as primeiras linhas de código do que apelidei de "The Spread Project".
Resolvi escrever o app usando Flutter, um ferramental criado pelo Google para o desenvolvimento de aplicações que rodem em diferentes plataformas a a partir de um código fonte único. Eu nunca havia criado um app para dispositivos móveis e também não tinha trabalhado com Flutter antes, tive que aprender tudo enquanto fazia o app. Por sorte, semanas antes eu tinha começado a estudar Dart, a linguagem usada para escrever aplicações em Fluter com a ajuda de meu amigo Georges (o GB), que é um expert nos dois tópicos e virou meu "tutor" neste projeto.
Logo que o app começou a tomar forma, fui provocado por outro amigo, o Luciano Tavares, a transformá-lo em algo mais útil. Foi ai que a idéia original de criar um app educativo sobre a disseminação de doenças (idéia que ficou estacionada para o futuro) se transformou num aplicativo de mapeamento dos casos de coronavírus no Brasil.
Como não tenho o menor talento para design, busquei um designer profissional para me ajudar a dar cara para o app. Por sorte encontrei o Josias, que é designer de produtos, e ele topou ajudar no projeto e deixou tudo com um cara bem mais decente.
Antes de seguir em frente, quero deixar um super muito obrigado para o Gb, o Lu e o Josias.
O novo app : Um aplicativo para mapear o casos de Covid-19 e ajudar a combater a doença com dados da comunidade.
Depois da mudança de rumos, o app se transformou num aplicativo para coletar informações de saúde dos usuários através de um formulário respondido no smartphone. Os dados coletados serão utilizados para classificar o usuário de acordo com seu estado de saúde (desconhecido, suspeito, confirmado, recuperado e imune) e plotar estes dados num mapa usando sua localização também coletada pelo dispositivo.
Com isto seria possível entender onde estão os focos de Covid-19 na comunidade e usar esta informação para conscientizar as pessoas sobre como evitar a propagação da doença, ajudá-las a se locomover com mais tranquilidade, entender a evolução da doença de maneira mais granular, ajudar a coordenar os esforços de suporte para as regiões mais críticas e até permitir uma retomada das atividades com mais segurança.
Eventualmente o app poderá ser extendido para contemplar as funcionalidades de track-and-trace que estão sendo usadas em países como Singapura e Reino Unido. Ou até mesmo usar os protocolos e APIs criados pela Apple e o Google, num esforço de colaboração único, para permitir o desenvolvimento de apps de rastreio de contato. Confesso que não estudei com detalhes como fazer isto, mas é uma possibilidade real.
Depois dos dados coletados, o app passa a enviar, de tempos em tempos, um pacote de informações para nuvem. Nestes dados estão as informações de saúde (coletadas no formulário do aplicativo) e as coordenadas do dispositivo do usuário. Estas informação são apresentadas para o usuário num mapa interativo onde estão plotados os casos confirmados, suspeitos, etc.
E a privacidade? Como fica?
Logo que o app deixou de ser uma curiosidade sem maiores implicações e passou a ser um aplicativo com informações sensíveis de saúde de seus usuários eu passei a me preocupar muito mais com a questão da privacidade dos dados.
Minha maior preocupação era a de não expor a identidade dos usuários ao apresentar os dados no app e nem permitir que, caso alguém tivesse acesso ao banco de dados, fosse possível identificar os usuários. Confesso que também não me sentiria confortável, caso o app viesse/venha a ser usado por milhares de pessoas, de ter estas informações em minhas mãos.
Para isto acabei criando uma solução bem simples, que funciona mais ou menos assim:
Quando o usuário se cadastra no app, é criado localmente (apenas no celular do usuário) uma chave única (um hash) que é derivada do ID de identificação do usuário e do identificador único de seu dispositivo.
O identificador único do dispositivo nunca é enviado para o banco de dados e apenas o dispositivo do usuário conhece esta informação.
Quando os dados (saúde + geolocalização) são enviados para a nuvem, eles são identificados com o hash que foi gerado anteriormente.
Desta maneira, é possível agrupar todos as atualizações de um determinado usuário, sem expor sua identidade.
Se alguém conseguir acesso ao banco de dados, não é possível conectar facilmente os dados (saúde + geolocalização) com os usuários, pois para isto seria necessário o identificador único do dispositivo, que só está presente no smartphone do usuário.
Na primeira versão, o esquema era ainda mais seguro pois usava também um timestamp e/ou um número aleatório como input para gerar o hash. Porém, neste caso, se o usuário encerrasse a sessão (logout) ou desinstalasse o aplicativo e depois instalasse novamente, não seria possível associar os dados da nova sessão com a anterior . Confesso que ainda gosto muita desta solução, mesmo com estas limitações.
Também estou consultando especialistas e LGPD para garantir que o app esteja de acordo com legislação brasileira.
O que mais?
O app também conta com um dashboard para informações de alta relevância para o usuário. Neste dashboard temos um espaço para notícias relacionadas ao Coronavírus e também estatísticas de como está a rede de usuários do aplicativo. Outra idéia, ainda não implementada, é ter um espaço para notificar o usuário sobre como esta a região com relação aos riscos de contaminação.
Além disto, também ainda sem conteúdo, previ uma área de ajuda para colocar dicas de uso do aplicativo, informações de saúde, dicas de cuidado e um diretório de destinos relevantes para o usuário (fontes oficiais de informações, unidades de saúde, laboratórios para exames, etc).
Por fim, acreditando que é improvável — pelo menos até agora — que surja um app dominante que seja usado por toda a população Brasileira para combater o Covid-19, também estou trabalhando em mecanismos de integração com outros apps para a troca de informações. Com isto seria possível aumentar o escopo de cobertura do aplicativos, maximizar o volume de dados coletados e aumentar muito o valor destes esforços. Um destes apps é o Desviralize, que tem uma abordagem super interessante usando um web-app para coletar as informações e armazenando os dados num blockchain. Alias, uma das coisas legais que me aconteceram durante estes dias foi conhecer o André Salem que é o idealizador do Desviralize.
Ahh… o app foi desenhado para funcionar em light e dark mode e em smartphones mais simples e com tela menor.
Desafios e próximos passos
Ainda tenho que fechar alguns detalhes do aplicativo e garantir que ele também funcione em iOS. Por enquanto só fiz testes em Android, mas não devo ter problemas em fazê-lo rodar em iOS (thanks to Flutter and to Gb 😉).
Uma vez pronto, fica a grande questão: publicar ou não. Seria muito legal publicar e ver as pessoas usando o app, mas não sei se isto será possível. Me parece que as App Stores tem sido mais rígidas com este tipo de aplicativo para evitar oportunistas e problemas para seus usuários. Neste momento estou tentando, sem sucesso (por razões não relacionados ao Covid-19), aplicar para o programa de desenvolvedores da Apple.
De qualquer modo, minha idéia é liberar o código-fonte do aplicativo como código aberto para quem tiver interesse em usá-lo, modificá-lo ou simplesmente dar uma olhada em como ele foi feito. Seria bem legal ver o app em uso e ajudando as pessoas a passarem por este momento com mais informações.
Sinto por ter levando muito mais tempo que eu imaginava para ter uma versão minimamente publicável. Mas a realidade é que a curva de aprendizado foi mais longa que eu imaginava e o tempo livre foi mais curto do que eu gostaria. Mas vamos em frente… a jornada está boa e ainda temos muitos passos para dar.
Por fim, gostaria de dizer para quem estiver com iniciativas semelhantes que estou aberto para pensar em como juntar os esforços. O momento é de trabalhar com um objetivo comum.
Espero que fiquem bem e que esta onda passe logo.
#HeyHo #StaySafe