;(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
Logo Pagbenk Seu dinheiro rende mais
Topo

Brasil tem risco de apagões em horários de pico, diz ex-diretor da Aneel

Jerson Kelman presidiu o comitê de crise do apagão no governo FHC - Eduardo Anizelli/Folhapress
Jerson Kelman presidiu o comitê de crise do apagão no governo FHC Imagem: Eduardo Anizelli/Folhapress

Colaboração para o UOL

08/09/2021 10h29

O ex-diretor da Aneel (Agência Nacional de Energia Elétrica) e da ANA (Agência Nacional de Águas) Jerson Kelman disse que o Brasil pode sofrer apagões nos horários de pico de uso. Em entrevista ao jornal O Estado de S. Paulo, o especialista disse acreditar que o país vai "ar raspando" sem racionamento de energia elétrica neste ano.

"Temos duas agendas em 2021. No curto prazo, é gerenciar a oferta e demanda para armos raspando sem racionamento. Os reservatórios estarão muito baixos, ninguém vai dormir tranquilo até novembro. É uma situação preocupante. Estamos correndo mais risco. Suponhamos que chova em novembro e dezembro, aí podemos começar a pensar numa nova reforma do setor", afirmou.

Kelman foi o líder da força-tarefa criada pelo então presidente Fernando Henrique Cardoso, durante a crise de racionamento em 2001. Por isso, destacou que, como naquela época, "algo está errado agora" e destacou que nem todos os problemas foram corrigidos.

Entre os pontos principais, segundo ele, está a visão superestimada da garantia física das usinas. Isso porque, no entendimento do país, o sistema seria capaz de atender uma demanda "maior do que de fato conseguiria".

"Ou seja, não basta ter usinar térmica, tem de ter gás. Hoje temos o mesmo problema. Há duas térmicas no Ceará (Termofortaleza e Termoceará) que não têm gás para operar. Elas usam GNL em um navio da Petrobras. Mas a estatal tirou o navio de lá e levou para a Bahia. A manutenção de Mexilhão também colocou as plataformas da Petrobras fora de combate. É muita coincidência. Na hora que mais precisa, alguma coisa acontece e falta gás. Parece um déjà-vu", disse.

Na visão do especialista, a ANA e o ONS (Operador Nacional do Sistema Elétrico) deveriam ter se articulado para trabalhar a flexibilização das restrições operativas das hidrelétricas, o que só aconteceu a partir da criação da Creg (Câmara de Regras Excepcionais para Gestão Hidroenergética) - o que aconteceu em junho de 2021.

"Foi preciso criar a Creg para tomar as medidas. A usina de Porto Primavera, última hidrelétrica antes de Itaipu, tinha uma restrição imposta pelo Ibama de alta vazão para preservar os peixes. Essa restrição esvaziava não só Porto Primavera como também as usinas da bacia do Rio Paraná. A Creg retirou essa restrição e a Cesp conseguiu deslocar uma equipe para capturar os peixes", exemplificou na entrevista ao Estadão.

Por fim, Kelman defendeu a "retomada das avaliações sobre a possibilidade de construção de usinas hidrelétricas, de preferência com reservatórios". Isso porque, na opinião dele, o país desistiu de construir hidrelétricas "cedo demais" e "sem examinar quais os casos favoráveis".

"O Brasil sempre foi líder no tema hidreletricidade e penso que abandonamos essa riqueza natural precipitadamente", finalizou.