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

Chico Alves

OPINIÃO

Texto em que o autor apresenta e defende suas ideias e opiniões, a partir da interpretação de fatos e dados.

Com festança para Tomás Covas, PSDB dá sobrevida ao coronelismo

Colunista do UOL

19/08/2021 04h00

Pouco mais de três meses depois da morte de Bruno Covas, seu filho, Tomás, se filiou ontem ao PSDB. Apesar de ter apenas 16 anos, o adolescente teve tratamento de estrela ao se tornar oficialmente um tucano. Antes, já tinha aceitado estágio oferecido pelo governador João Doria na istração pública estadual. "Que alegria receber Tomás Covas, filho do meu querido amigo", saudou Doria, nas redes sociais.

Ao que tudo indica, o objetivo do PSDB é fazer do garoto uma espécie de político de proveta. A base do projeto é, obviamente, o sobrenome do novato.

O próprio Tomás reconhece que pertencer à linhagem em que o bisavô e o pai foram homens públicos de destaque é uma vantagem e tanto nesse meio. "Na família, a gente brinca que o sobrenome dá um empurrão", disse ele à revista Veja.

Se essa movimentação toda estivesse ocorrendo em algum estado do Nordeste, comentaristas e estudiosos não teriam dúvida em usar a palavra "coronelismo" para definir a situação. Foi assim no caso de João Campos, filho de Eduardo Campos, governador de Pernambuco que morreu há sete anos em um acidente de avião.

Como se sabe, coronéis políticos são aqueles que usam o prestígio e o dinheiro para perpetuar filhos, netos e outros parentes em cargos do Executivo ou do Legislativo. A prática raramente é associada ao Sudeste, que se acha "muderno" demais para isso. O PSDB paulista, no entanto, mostrou a todos como funciona.

Os caciques do partido deveriam refletir sobre o significado da festança armada para a filiação de mais um integrante da família Covas.

A representatividade política decorre de vários fatores, mas entre eles não está o sobrenome. Uma legenda que já teve tanta importância para o país não deveria manter tais vícios aristocráticos.

Além do mais, o evento ocorre pouquíssimo tempo depois da morte de Bruno Covas. Não seria recomendável algum cuidado quanto a isso, um prazo maior para evitar especulações de que houve exploração política da dor?

Mesmo o estágio oferecido por Doria foi muito questionado nas redes sociais. Afinal, não falta gente talentosa em busca de oportunidade como essa e com necessidade muito maior. Cargos públicos, sejam efetivos ou provisórios, devem ser ocupados por meio de seleção imparcial.

Tomás, tão jovem e ainda sob a dor da perda do pai, não tem culpa nenhuma nisso. Que ele seja feliz em sua trajetória política.

Doria e o PSDB é que poderiam muito bem recalcular sua rota.