;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL
Topo

MP falhou em esclarecer sobre uso de pesquisas de dados, diz especialista

De Tilt, em São Paulo

29/04/2020 14h30

A medida provisória 954/2020 que liberava o compartilhamento de dados de celulares de brasileiros para que o IBGE (Instituto Brasileiro de Geografia e Estatística) realizasse a Pnad (Pesquisa Nacional por Amostra de Domicílios) falhou em não esclarecer para a população como as pesquisas de dados seriam feitas.

Essa é a opinião da especialista Laura Schertel, professora da UnB (Universidade de Brasília), que participou do UOL Debate de hoje sobre monitoramento, vigilância e uso de dados em meio à pandemia do novo coronavírus.

A MP foi suspensa no final da semana ada pela ministra do Supremo Tribunal Federal Rosa Weber, mas permitiria até então que o IBGE tivesse o a informações como: nomes, números de telefone e endereços cadastrados pelas operadoras de telefonia. A justificativa usada para esse novo processo seria a situação de emergência de saúde pública decorrente do coronavírus.

Para a docente, a MP não detalhou como as pesquisas de dados seriam feitas nem o motivo do compartilhamento de informações serem úteis para a pandemia. Além disso, a urgência ligada ao uso das informações causou estranheza.

"Existe uma confiança e uma relevância social reconhecida de todo trabalho que o IBGE faz. De forma alguma, é uma desconfiança do trabalho. O que existe é que a MP falhou em esclarecer quais pesquisas [de dados] seriam feitas e por que elas seriam importantes para a covid", afirmou.

"Um segundo aspecto relevante é que o próprio IBGE explica que as pesquisas são amostras, utilizam dados de 200 mil brasileiros. Não ficou claro porque os dados de todos os cidadãos estavam sendo coletados. Essa desproporção entre os dados que supostamente seriam necessários e os dados requeridos assustou um pouco", completou.

Schertel destacou ainda que não foram só as lacunas trazidas pela MP e a instrução normativa do IBGE que a preocupa. A falta de uma autoridade que fiscalizaria todo o processo também foi problemática.

O advogado Renato Vieira Caovilla, especialista em proteção de dados, e que também participou do debate de hoje, concorda com os cuidados que deveriam existir diante de uma decisão tão importante como essa.

"Apenas pelo fato de a gente colocar pandemia é uma carta branca para fazer o que se bem entende? Dificilmente. A gente teve que aprender muita coisa em dois, três meses durante essa pandemia que a gente aprenderia em uma década", afirmou.

O UOL Debate reuniu ainda Rafael Zanatta, coordenador de pesquisa do Data Privacy Brasil; Maria Cecília Gomes, pesquisadora em privacidade na Fundação Getúlio Vargas (FGV); e André Ferraz, presidente-executivo da In Loco Media.