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

Alicia Klein

OPINIÃO

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

Rogério Ceni se consolida como treinador mediano e líder terrível

Técnico Rogério Ceni durante jogo do São Paulo no Campeonato Paulista de 2023 - Marcello Zambrana/AGIF
Técnico Rogério Ceni durante jogo do São Paulo no Campeonato Paulista de 2023 Imagem: Marcello Zambrana/AGIF

16/03/2023 15h24

Receba os novos posts desta coluna no seu e-mail

Email inválido

Além de não fazer um trabalho extraordinário à beira do campo, Rogério Ceni finalmente ou dos limites na gestão do elenco.

Como líder, fez o que só os piores líderes fazem: confrontou alguém da equipe, com o dedo em riste, na frente dos colegas.

Aliás, está aí uma coisa que Ceni fez no São Paulo mais do que vencer: lavar roupa suja em público. Reclamar da estrutura, da falta de água na piscina, das lesões, da torcida, do departamento médico e, claro, dos jogadores.

Não faltam problemas ao Tricolor desde a chegada do ídolo, isso ninguém discute. Mas a estratégia de expor a intimidade da família também não vem surtindo efeito. O que não impediu o treinador de expor um atleta, Marcos Paulo, bem na reapresentação do clube depois de uma difícil derrota para o Água Santa, ficando de fora das semifinais do Paulista.

Não importa se ele foi irônico nas redes ou se curtiu postagens que criticavam o ex-goleiro. É um jovem de 22 anos, que, se de fato errou, merece ser ensinado com respeito, em âmbito privado.

Grandes líderes educam, preparam, oferecem ferramentas para que cada pessoa liderada possa tomar decisões melhores no futuro — e ser cobrada caso isso não aconteça.

Para além do tratamento individual, ele prejudicou todo o grupo. No momento em que os jogadores mais precisavam aumentar o moral, Ceni fez o oposto. Tacou o moral no chão, pisou em cima e jogou no lixo.

Em vez de baixar os ânimos, meteu o dedo na cara. Os atletas já reclamaram com a diretoria e a pressão só faz subir.

Talvez por se pensar intocável no clube, Ceni esticou a corda. E a corda, normalmente injusta, talvez estoure do lado certo dessa vez.

Siga Alicia Klein no Instagram e no Twitter

Leia todas as colunas da Alicia aqui