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

Julio Gomes

OPINIÃO

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

Gomes: Gritaria por convocação de Daniel Alves não se justifica

Vini Júnior vai para cima de Daniel Alves durante Real Madrid x Barcelona, pela Supercopa da Espanha - Ahmed Yosri/Reuters
Vini Júnior vai para cima de Daniel Alves durante Real Madrid x Barcelona, pela Supercopa da Espanha Imagem: Ahmed Yosri/Reuters

13/01/2022 12h13

Receba os novos posts desta coluna no seu e-mail

Email inválido

Daniel Alves jogou ontem um clássico. Não foi um jogo qualquer. Foi o superclássico. Contra um Real Madrid mais forte que o Barcelona, contra um Real Madrid que tem, no momento, possivelmente a melhor dupla de ataque do mundo: Benzema e Vinícius Jr.

O que fez o Real? O óbvio. Bola no Vinícius. Bota o garoto para correr para cima do vovô lá de 38 anos. O que fez o Barcelona? O óbvio também. Ajustou algumas ajudas defensivas pelo lado em que o rival deveria atacar mais. O que aconteceu na prática por aquele lado durante todo o primeiro tempo? Nada. Absolutamente nada.

Vini Jr fez gol? Claro que fez. Mas fez o gol dele após um erro de Busquets, a bola roubada por Benzema e a transição rápida pelo meio. Não teve nada a ver com Daniel Alves.

No segundo tempo, Daniel sentiu o ritmo, fez uma falta de cartão amarelo e foi driblado por Mendy no lance que acabaria no segundo gol do Real. Mas atenção: muita gente esperava que Alves fosse atropelado por Vini e pelo Real durante todo o clássico. Isso ou longe de acontecer.

Tite chamou o maior levantador de taças da história do futebol mundial de volta para a seleção. E já começou a gritaria. Uma gritaria que absolutamente não se justifica.

Muita gente confunde muitas coisas. Não é porque o São Paulo fez um contrato arriscado com Alves, que não deu certo, muito por causa da pandemia e da troca de comando do clube, que o cara virou uma porcaria. Por favor!

Daniel Alves chegou no São Paulo para fazer do clube campeão, após a longa fila. Ele não foi fundamental em campo, mas estava lá na campanha do Paulista - cumpriu a missão. Antes disso, foi, sim, muito importante em uma campanha inesperada de Brasileirão, que quase acabou em título. Topou jogar em várias posições, fez a parte dele fora de campo. Em 2021, com atores completamente diferentes no comando da instituição, a relação acabou. Acontece em qualquer lugar.

Nada disso tem a ver com a importância de uma figura como Daniel Alves para a seleção brasileira em ano de Copa do Mundo. Ele mostrou ontem - e vai mostrar ao longo do ano - que é capaz de jogar no alto nível. E tem mais: não é exatamente que estejam sobrando opções para Tite na lateral direita. No meu ponto de vista, é o grande ponto fraco da seleção brasileira no momento.

Se você tem um ponto fraco, que tal contar com um jogador experiente, campeão, que sempre se manteve em forma, que tem espírito de grupo? Seria uma burrice não chamar Daniel Alves. E o mesmo vale para Thiago Silva.

A gritaria das redes sociais não se justifica. Estranho seria se Tite não convocasse um jogador de garantias, não de incertezas.