ANNEXE 3. COMPLÉMENTS SUR LES ÉTUDES COST-OPTIMUM
A. D OCUMENTS CLÉS POUR L ’ ANALYSE DU PARC DE BÂTIMENTS
Como referido na secção 2.1.2, existem cinco intervalos diferentes de classificação do índice: Mau, Fraco, Médio, Bom e Muito Bom. Estes intervalos já sofreram algumas alterações de acordo com os valores recomendados na legislação vigente da qualidade do ar, nomeadamente nos anos entre 2001 e 2010.
No início de 2019, efetuou-se uma revisão da metodologia do cálculo do índice. Esta revisão deveu-se ao aprofundamento do conhecimento dos efeitos dos poluentes na saúde pública e na alteração do referencial para os valores recomendados pela Organização Mundial de Saúde (OMS), levando então a valores mais restritivos em alguns intervalos das várias classes [3]. Na tabela da figura 2.2 é possível observar-se os novos valores e classes para diferentes poluentes.
Figura 2.2: Classes do Índice QualAr.
2.1.4 Aplicações Existentes
Atualmente existem diversas aplicações e plataformas dedicadas à visualização e análise dos dados recolhidos nas estações de qualidade do ar, sejam elas aplicações do tipo desktop como mobile. Vários exemplos dessas aplicações serão analisados seguidamente.
QualAr [6]
Esta aplicação, desenvolvida pela Agência Portuguesa do Ambiente (APA), permite ao utilizador manter-se informado, em tempo real, acerca da qualidade do ar que respira. Esta fornece as seguintes funcionalidades:
• Verificação da previsão da qualidade do ar numa determinada localização; • Consulta dos avisos e conselhos de saúde consoante o índice QualAr previsto; • Previsão da qualidade do ar num destino europeu;
• Verificação dos índices da qualidade do ar na estação mais próxima do utilizador (Fonte: CCDR/DRA);
• Previsão metereológica em locais de interesse (Fonte: Instituto Português do Mar e Atmosfera (IPMA)).
O serviço da previsão da qualidade do ar é fornecido pela Universidade de Aveiro (UA) e complementado, se necessário, pelo Serviço de Monitorização Atmosférico Copernicus (CAMS). BreezoMeter [7]
Esta plataforma, desenvolvida pela BreezoMeter, encontra-se disponível em 93 países e
contém dados acerca do índice da qualidade do ar (poluentes como PM10, NO2, NOx, CO,
para pais, atletas que pratiquem atividades ao ar livre e pessoas que tenham doenças do foro respiratório e cardiovascular. A BreezoMeter é reconhecida pela sua análise dos dados da qualidade do ar em tempo real, oferecendo:
• Mapas com dados sobre a qualidade do ar em tempo real; • Recomendações de saúde personalizáveis;
• Notificações quando se verificam mudanças na qualidade ao ar, fornecendo ao utilizador a possibilidade de guardar as suas localizações favoritas e monitorizar a qualidade do ar nesta localizações durante todos os dias da semana, a qualquer hora.
Através de algoritmos de dispersão que calculam a qualidade do ar em mais de 300 mi- lhões de localizações de hora a hora, é possível depreender como é que a qualidade do ar se move e dispersa, conseguindo observar-se na plataforma uma previsão de cinco horas da mesma. AirVisual [8]
Esta plataforma, desenvolvida pela IQAir, foca-se na visualização de dados da quali- dade do ar com prévia análise dos mesmos, contendo ainda dados metereológicos. Esta permite:
• Dar a conhecer ao utilizador a qualidade do ar na localização do mesmo (através de auto-localização);
• Informar o utilizador de quais as ações a tomar mediante a poluição do ar;
• Visualização de dados de diversos poluentes: PM2.5, PM10, O3, NO2, CO2 e SO2;
• Previsão da qualidade do ar durante sete dias permitindo ao utilizador planear as suas atividades no exterior durante as alturas em que a qualidade do ar não apresente valores prejudiciais;
• Alertar o utilizador quando os valores da qualidade do ar não estiverem de acordo com os seus standards;
• Visualizar notícias sobre poluição do ar e recursos educacionais relacionado com este tema.
Air Matters [9]
Esta aplicação, desenvolvida pela Air-Matters, fornece informação do índice da qualidade do ar em tempo real, dados da dispersão e quantidade de pólen, previsão metereológica e recomendações relativamente à exposição à poluição. As principais funcionalidades que esta aplicação fornece são:
• Visualizar dados de mais de 10000 estações de monitorização da qualidade do ar. Existem dados de mais de 50 países sendo que a informação fornecida ao utilizador é dada pela estação de monitorização mais próxima do mesmo;
• Visualização de informações sobre a dispersão do pólen no ar (apenas para os Estados Unidos da América, Alemanha, Áustria e Suiça);
• Fornecer alertas sobre a poluição e o pólen;
• Possibilidade de conectar a aplicação a um purificador de ar (Purificador de Ar da Philips) ou a um dispositivo de monitorização do ar (Kaiterra Laser Egg), controlando-o assim remotamente e tendo ainda a oportunidade de comparar a qualidade do ar em espaços fechados e no exterior. O utilizador receberá conselhos de saúde de acordo com os dados recolhidos.
AIR by Plume Labs [10]
Aplicação, desenvolvida pela Plume Labs, onde se pode visualizar os níveis de poluição em tempo real em qualquer localização através de dados provenientes de satélites. Para além da monitorização em tempo real, através de algoritmos de machine-learning, fornece ainda a previsão da qualidade do ar para o dia seguinte e informações do foro meteorológico de ambos os dias. Através desta aplicação, os utilizadores podem:
• Aceder a dados da qualidade do ar em tempo real bem como a previsão da mesma nas 24 horas seguintes;
• Visualizar dados recolhidos anteriormente através de uma timeline;
• Visualizar dados acerca de cada poluente (PM10, PM2.5, NO2 e O3) presente na atmosfera bem como a sua concentração;
• Comparar a qualidade do ar entre cidades;
• Ser notificados acerca da poluição para o próprio dia.
A tabela 2.1 resume algumas das funcionalidades observadas nas diferentes aplicações.
QualAr BreezoMeter AirVisual Air Matters AIR
Multiplataforma Sim Sim Sim Sim Sim
Previsão da qualidade do ar
24 horas 5 dias 7 dias 5 dias 24 horas
Consulta de avisos e conselhos de saúde
Sim Sim Sim Sim Sim
Notificações sobre a qualidade do ar
Verificação do índice da qualidade do ar
Sim Sim Sim Sim Sim
Consulta de valores de diversos poluentes
Sim Sim Sim Sim Sim
Previsão
metereológica Sim Não Sim Sim Sim
Outros - Dados sobre os vários tipos de pólen presentes na atmosfera (que provocam reações alérgicas). Dados sobre a exposição do utilizador a ambientes muito poluídos. Possibilidade de conectar a aplicação móvel com um purificador de ar ou um dispositivo de monitorização do ar (equipamentos específicos). Mapa mundial com o índice da qualidade do ar nos diferentes países.
Tabela 2.1: Funcionalidades das aplicações existentes para a monitorização da qualidade do ar.
2.2 Desenvolvimento Web
Esta secção destina-se à introdução e discussão de algumas tecnologias usadas para o desenvolvimento de plataformas web.
2.2.1 Backend
O backend, também conhecido como server-side, consiste em toda a lógica da aplicação que não se encontra exposta ao utilizador. Esta face das aplicações web fornece ainda o acesso à base de dados e integridade dos dados existentes, segurança e escalabilidade.
Atualmente, existem diversas tecnologias que podem ser usadas para o desenvolvimento do backend das aplicações web, entre as quais se encontram:
• Express: framework de Node.js que permite a criação de um conjunto de funcionalidades, definidas no backend, para aplicações web e mobile. O Express caracteriza-se por ser uma layer em cima de um servidor Hypertext Transfer Protocol (HTTP) em Node.js,
fornecendo routing declarativo, ou seja, podendo-se declarar facilmente o que se pretende fazer através de métodos como por exemplo, o app.get() e app.use() e contendo ainda funções de um padrão de middleware básico como funções que têm acesso aos objetos pedidos (req) e aos de resposta (res). Esta framework é usada por empresas tais como Accenture, IBM e Uber [11];
• Django: framework de alto nível baseada em Python que encoraja o design e desen- volvimento limpo e pragmático de plataformas web, e implementa ainda o padrão de arquitetura Model-Template-View (MTV). Para além de ser grátis e open source, per- mite um rápido desenvolvimento das aplicações web, tendo sempre em conta a segurança da aplicação, e proporcionando ainda uma elevada e rápida escabilidade caso seja pretendido [12]. O Django é, por exemplo, usado pelo Instagram;
• Ruby on Rails: framework open source baseada em Ruby e que usa o padrão Model-View- Controller (MVC) para a organização da aplicação em três camadas: Model (componente que lida com a lógica da aplicação), Controller (componente que lida com as ações do utilizador) e a View (interfaces da aplicação). É considerada uma framework ideal para os iniciantes dado que é fácil começar a criação de uma aplicação web, sendo depois possível adicionar novas funcionalidades gradualmente. No entanto, o Ruby on Rails leva algum tempo para fazer o seu deploy num ambiente de produção. Existem várias aplicações que foram desenvolvidas com o uso de Ruby on Rails, tal como o GitHub e o Basecamp [13];
• Spring: framework desenvolvida com Java que permite ter uma aplicação a ser executada facilmente com configurações mínimas através do uso de Spring Boot. O Spring permite o desenvolvimento de vários componentes desde Representational State Transfer (REST) Application Programming Interface (API), WebSocket e streams, tendo sempre em conta a segurança da aplicação. Esta framework tem suporte para Structured Query Language (SQL) e Not Only Structured Query Language (NoSQL) bem como para Tomcat, Jetty e Undertow, contendo ainda funcionalidades importantes para o seu
deploy em ambientes de produção [14].
2.2.2 Frontend
O frontend, também conhecido como client-side, consiste nas interfaces que serão apresen- tadas ao utilizador. Esta face das aplicações web tem como objetivo a criação das views que deverão ser intuitivas, permitindo uma navegação fácil, por parte do utilizador, na plataforma. A stack básica do desenvolvimento do frontend das aplicações web, conta com o uso de HyperText Markup Language (HTML), Cascading Style Sheets (CSS) e JavaScript (JS). Atualmente, e dada a constante evolução da tecnologia, têm surgido novas frameworks que podem ser usadas para o desenvolvimento do frontend das aplicações web. De entre todas, as mais populares, e que foram desenvolvidas com JS, são:
• Angular: framework que permite o desenvolvimento para todas as plataformas (web,
mobile e desktop) a partir do mesmo código. O Angular é considerado ideal para
aplicações single-page. Apesar desta framework ter sido desenvolvida com o uso de JS, posteriormente acabou por adoptar o uso de Typescript. Uma das vantagens do Angular, é a possibilidade de uso do RxJS e dos Observables. Em relação às outras frameworks, o Angular acaba por ficar para trás dada a sua dimensão reduzida quando comparada com as seguintes [15]. Angular é usado, por exemplo, pela Google e Microsoft;
• React: o React não é uma framework mas sim uma biblioteca de JS para o desen- volvimento das User Interface (UI), apesar de ser muitas vezes mencionado com uma
framework. Esta biblioteca baseia-se numa arquitetura de componentes, onde são desen-
volvidas views para cada estado da aplicação, sendo que o React irá fazer o render à UI assim que os dados se alterarem. O React foi desenvolvido pelo Facebook e é usado nesta rede social bem como no Instagram [16];
• Vue: apesar de o Vue ter começado como um projeto individual, é atualmente uma das
frameworks de JS mais usadas. Esta framework é caracterizada por ser progressiva
dada a possibilidade de se poder adaptar facilmente a projetos já existentes. Para além disso, o Vue permite tornar aplicações single-page em aplicações sofisticadas através de várias bibliotecas desenvolvidas para esta framework. Tal como React, a sua arquitetura é também baseada em componentes. O uso de Vue pode ser verificada na plataforma do GitLab, que usa esta framework para o seu frontend [17].
2.2.3 Containers
Um container, representado na figura 2.3, consiste num sistema operativo lightweight que se encontra a ser executado num sistema hospedeiro, e que executa instruções nativas para o processador [18]. É visto como uma ferramenta para usar software em ambientes de produção [19]. Os containers permitem uma poupança no consumo de recursos sem que haja a sobrecarga da virtualização, ao mesmo tempo que oferece ainda isolamento, isto é, separa a execução de um processo do resto do sistema. Em comparação com as Virtual Machine (VM), fornece o mesmo nível de isolamento e segurança, mas encontra-se mais integrado com o sistema operativo hospedeiro [18].
Durante anos, as Virtual Machines (VMs) foram o suporte principal na camada da infraestrutura fornecendo sistemas operativos virtualizados. Ao contrário dos containers, as VMs fazem alocação e gestão de hardware (resumidamente, máquinas que podem ser ligadas e desligadas). Para correr uma VM é necessária a totalidade da imagem do sistema operativo, tal como os binários e bibliotecas necessárias para a aplicação. Isto leva a um problema de espaço em memória e em disco para além de tornar a inicialização mais lenta [19].
Por outro lado, os containers apresentam uma melhoria de performance e tempos de inicia- lização reduzidos [18]. Esta agilidade combinada com a arquitetura baseada em micro-serviços,
onde o software é separado em pequenas unidades funcionais - unidades estas que podem funci- onar, falhar, ser mantidas e reusadas independentemente -, torna os sistemas mais robustos [20].
Figura 2.3: Esquema de um container. Fonte: Red Hat1
Existem várias implementações de containers, seja para Linux, Windows ou Platform-as-a- Service (PaaS) na cloud. Para Linux são exemplos o Docker e os Linux Containers (LXC), para Windows o Sandboxie e para PaaS na cloud pode-se usar Warden (no Cloud Foundry) ou LXC (no OpenShift). Seguidamente serão detalhados alguns destes exemplos para Linux, dado que foi o sistema operativo com que se trabalhou neste projeto [18]:
• LXC: conjunto de um ou mais processos organizados isoladamente do sistema [21]. Este tipo de implementação é suportado em poucos ambientes Linux tais como Ubuntu ou Oracle Linux. A maior vantagem destes containers é ser uma implementação lightweight que é executada a uma rápida velocidade fornecendo assim melhor isolamento da rede e sistema de ficheiros. No entanto, existem algumas limitações, tais como o facto de os
containers usarem um kernel partilhado, ser limitado a ambientes Linux;
• Warden Container: implementação de containers usada no projeto Cloud Foundry, projeto este que permite o host de aplicações [22]. Este tipo de containers permite uma implementação independente do kernel que pode ser ligada a múltiplos sistemas operativos hospedeiros. O uso de namespaces para isolamento do processo e da rede, o uso do conceito de cgroups do Linux para isolamento de recursos, ou cada container poder executar múltiplos processos, são alguns dos atributos chave deste tipo de implementação [18];
• Docker: daemon que fornece a possibilidade de gerir containers Linux como se fossem imagens independentes. O Docker usa o LXC para a implementação dos containers propriamente dita e adiciona a gestão de imagens (através das capacidades do Unix File System (UFS)). Os containers Docker são caracterizados por ter um único processo (com um único ID e um endereço Internet Protocol (IP) privado), isolamento de recursos (uso de cgroups e namespaces), isolamento da rede e do sistema de ficheiros (funcionalidade
proveniente do LXC), ciclo de vida (gerido usando um daemon e a linha de comandos) e um estado (possibilidade de visualizar o estado do container). Como o Docker é baseado nos LXC, muitas limitações dos LXC estão a ser trabalhadas de modo a melhorar a segurança [18];
• Google lmctfy: esta implementação fornece uma Application Programming Interface (API) de configuração de recursos que simplifica a gestão dos containers. Neste tipo de containers, a configuração pode ser feita sem ser preciso compreender o conceito de
cgroups e remove as dificuldades presentes nas API instáveis dos LXC. Neste tipo de
implementação, os containers têm a si atribuído um Process Identification Number (PID)
namespace, existe isolamento dos recursos (uso de cgroups), da rede e do sistema de
ficheiros e os mesmos possuem um ciclo de vida sendo possível monitorizá-los [18]; • OpenVZ: implementação que usa um kernel Linux modificado com um conjunto de
extensões. Estes containers gerem múltiplos servidores físicos e virtuais, usando partições dinâmicas em tempo real. Tal como as outras implementações, o OpenVZ tem também várias características a si atribuídas: cada container tem um PID e Inter-Process Communication (IPC) namespace (este segundo com a sua memória partilhada, semáforos e mensagens), gestão de recursos, isolamento de rede (tem o seu próprio endereço IP e tabelas de routing) e sistema de ficheiros (fornece isolamento para ficheiros da aplicação e bibliotecas do sistema), ciclo de vida (um container pode ser pode ser criado, iniciado, alterado e parado) e estado associado [18].
Todas estas implementações têm as suas vantagens e desvantagens e a escolha da melhor implementação para uma determinada plataforma deve ter em conta o ecossistema onde vão estar inseridos os containers, como se irá lidar com o isolamento dos recursos, quais as ferramentas disponíveis para gerir o ciclo de vida do container, se existe a possibilidade de migrar containers entre hosts e suporte para múltiplos sistemas operativos e kernels [18].