;(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

Eleitores relatam 'peregrinação' para achar local de votação em SP

15.nov.2020 - Panfletos com propagandas de candidatos são vistos no chão nas proximidades do Centro Universitário Anhanguera, na zona sul de São Paulo - Cleber Souza/UOL
15.nov.2020 - Panfletos com propagandas de candidatos são vistos no chão nas proximidades do Centro Universitário Anhanguera, na zona sul de São Paulo Imagem: Cleber Souza/UOL

Carol Scorce

Colaboração para o UOL, em São Paulo

15/11/2020 21h55

Antes mesmo da lentidão na apuração dos votos das eleições municipais, muitos paulistanos relataram problemas durante o dia. Mudanças nas zonas e seções eleitorais e a dificuldade em encontrar informações sobre os novos locais de votação atrapalharam os eleitores. Ao UOL, eles disseram que só conseguiu votar depois de uma "peregrinação".

A secretária aposentada Sandra Guedes tem 58 anos e está fora do grupo de risco para o novo coronavírus. Mesmo assim, quis votar logo cedo, às 7h, achando que seria mais rápido. Neste ano, o TSE (Tribunal Superior Eleitoral) indicou que a prioridade, nas primeiras horas, era para os idosos —com mais de 60 anos.

Foi a primeira vez que ela votou em uma nova zona eleitoral, perto da casa para onde se mudou recentemente. E ficou surpresa logo ao chegar. "O colégio não abriu na hora marcada e, por isso, ficou uma fila grande na porta. Quando entrei, descobri que a minha seção não existia mais. As listas estavam presas num corredor estreito, cada página em um canto, com muitas pessoas aglomeradas em cima. Os voluntários mal sabiam orientar para onde devíamos ir, ou como descobrir os novos locais", contou.

Sandra demorou mais de uma hora para conseguir votar, depois de ficar "rodando" pelo colégio. "Fiquei surpresa com a falta de informações dos próprios mesários. Tentei votar mais cedo para preservar a minha família, pois meu marido é do grupo de risco, mas não deu certo."

A aposentada não conhecia o aplicativo e-Título —por isso, não o consultou. Mas quem tentou usar o app hoje também teve dificuldades. O presidente do TSE, Luís Roberto Barroso disse, no começo da tarde, que houve sobrecarga no sistema. "O brasileiro deixou para baixar o aplicativo hoje, então foram milhões de os ao mesmo tempo", alegou.

Segundo Barroso, foram 3 milhões de s em 24 horas —até o início da tarde de hoje. Outra parte do problema foi atribuída a uma tentativa de ataque hacker ao STJ (Superior Tribunal de Justiça) em 3 de novembro. O presidente do TSE disse um servidor foi desligado e isto contribuiu com a instabilidade do sistema.

A jornalista Talita Santos Perna, 32, afirma que teve sorte. "Minha irmã baixou o app com antecedência e viu que a sessão dela, surpreendentemente, tinha mudado. Por isso, resolvi checar a minha. Mas só por isso. Foi quando vi que a minha tinha mudado também", conta. Ela votou na nova seção, sem problemas. "Mas só foi tranquilo porque resolvi checar antes."

O produtor audiovisual Lucas Borges, 33, acabou ficando perdido. O local onde ele costumava votar foi fechado. Quando chegou ao colégio, viu ele uma lista pregada com orientações. "Encontrei um monte gente na mesma situação que eu. Depois soube que a escola foi descredenciada, mas não fui avisado e também não procurei saber antes. Nem me ocorreu", comentou. "A lista indicava uma outra escola, a uns dois quilômetros de distância."