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

Flamengo

Preparador do Del Valle mapeou cobranças do Fla e avisou sobre Arrascaeta

Do UOL, no Rio de Janeiro

01/03/2023 14h52

A elasticidade da defesa de Ramírez para pegar o pênalti de Arrascaeta ontem (28) no Maracanã chamou a atenção, mas também teve uma contribuição de fora das quatro linhas. Preparador de goleiros do Independiente del Valle desde 2020, o português Ricardo Pereira tinha mapeadas as cobranças de todos os jogadores do Flamengo em um software em seu tablet, e avisava o lado preferencial dos batedores rubro-negros ao seu atleta.

Sinalização e ajuda dos companheiros

A mecânica se deu da seguinte forma: quando o jogador do Flamengo se direcionava para a cobrança, imediatamente Ricardo Pereira já puxava o histórico de cobranças do atleta rubro-negro no software, e com a ajuda dos reservas do Independiente de Valle que estavam no banco, avisava a Ramírez com sinalizações sobre o lado predileto do batedor. Foi assim que, por exemplo, o goleiro defendeu a batida de Arrascaeta, que acabou sendo crucial para o título da Recopa Sul-Americana por parte da equipe equatoriana.

"Todos os pênaltis estavam estudados, mas tem também a intuição do goleiro. Alguma das vezes ele foi para o lado que sentiu que tinha de ir e errou. São sinais, não precisamos dizer nada [sobre a comunicação], mas estava tudo estudado. Tínhamos o histórico de cobranças de todos os jogadores do Flamengo, mas depois vai da intuição do goleiro", declarou Ricardo Pereira com exclusividade ao UOL.

Apesar das preciosas dicas, Ramírez só acabou acertando um lado nas cobranças do Flamengo, justamente o de Arrascaeta, o suficiente para o título.

Durante as cobranças, a reportagem do UOL observou que Ricardo Pereira e os jogadores do banco, por exemplo, avisaram a Ramírez que Gerson bateriam em seu lado esquerdo, mas o goleiro optou por pular para a direita e errou o canto.

Preparador mostra software ao UOL

Preparador do Del Valle mostrou ao UOL software que usou com mapeamento das batidas dos atletas do Fla - Bruno Braz / UOL - Bruno Braz / UOL
Preparador do Del Valle mostrou ao UOL software que usou com mapeamento das batidas dos atletas do Fla
Imagem: Bruno Braz / UOL

A reportagem do UOL solicitou ao preparador de goleiros que, se fosse possível, pudesse mostrar o software e permitisse uma foto.

Gentil, Ricardo Pereira aceitou o pedido, mas disse que mostraria apenas uma parte para não revelar os segredos contidos no programa.

A imagem permitida pelo português continha apenas jogadores rubro-negros que não efetuaram cobranças na Recopa. Foram eles: o lateral direito Matheuzinho, o atacante Matheusão, o lateral direito Varela, o zagueiro Rodrigo Caio e o meia-atacante Marinho.

O software possui gráficos com todas as batidas de cada jogador, em que direção a bola foi e se ela entrou ou não após a cobrança.

"Nós fazemos os estudos, somos profissionais, temos essa obrigação, mas depois o goleiro tem que sentir o que pode ar naquele momento, o estado anímico do jogador, e foi isso que o Ramírez fez e fez muito bem", disse Ricardo Pereira.

Já trabalhou com Ederson e Ochoa

Natural de Lisboa, Ricardo Pereira possui um extenso currículo com agens por Benfica (POR), Nottingham Forest (ING), Standard Liége (BEL), Légia Varsóvia (POL), Al Fateh (SAU) e seleção do Gabão.

Com licenças A, B e C da Uefa, além de outros diversos cursos, incluindo alguns de psicologia, ele já trabalhou, por exemplo, com o goleiro brasileiro Ederson e o mexicano Ochoa.

Flamengo