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

Coreano com nome de meme cumpre premonição pós-demissão e brilha na NFL

Younghoe Koo do Atlanta Falcons - David John Griffin/Icon Sportswire
Younghoe Koo do Atlanta Falcons Imagem: David John Griffin/Icon Sportswire

Lucas Tieppo

Colaboração para o UOL, em São Paulo

29/10/2020 08h05

O kicker sul-coreano Younghoe Koo é hoje um dos melhores atletas da posição na temporada 2020 da NFL, mas quem acompanha a liga mais de perto provavelmente tem uma outra lembrança do folclórico atleta asiático.

Koo estreou na NFL na temporada 2017 como uma grande aposta do Los Angeles Chargers, mas a primeira agem durou apenas quatro jogos. Apesar de todas as qualidades que o levaram a ser contratado, o kicker teve um desempenho bem abaixo do esperado e acabou dispensado. Foram apenas três field goals anotados em seis tentativas, aproveitamento de 50%, e erros que custaram duas vitórias ao time.

Ao anunciar a dispensa de Koo, o técnico Anthony Lynn fez uma premonição que poucos entenderam e até acharam exagerada. "Acredito que Koo ainda terá uma carreira longa na NFL", disse. Mas poucos anos bastaram para as palavras do técnico se tornarem realidade.

A dispensa dos Chargers com apenas quatro jogos disputados e toda a cobertura em cima do fraco desempenho dele após toda a expectativa gerada poderiam significar o fim da carreira dele como kicker, mas para surpresa de muitos, Koo reapareceu na liga na segunda metade da temporada 2019 com a camisa do Atlanta Falcons. E desde então tem tido ótimos números.

Nos oito jogos da última temporada, ele acertou 23 de 26 chutes, aproveitamento de 88,5%. Neste ano, os números são ainda melhores, com apenas um field goal desperdiçado em 16 tentativas, aproveitamento de 93,8%, o segundo melhor desempenho da liga.

Para voltar à liga, Koo treinou com uma das maiores lendas da NFL na posição, John Carney, que atuou por 23 anos como kicker profissional, com um título do Super Bowl na carreira, mais de 2000 pontos anotados e 82,4% de aproveitamento.

Memes e brincadeira com sobrenome

E, claro, a pronúncia do sobrenome do coreano foi motivo de muitas brincadeiras entre os fãs do esporte no Brasil. A ESPN chegou a contratar uma professora de coreano para explicar em um vídeo publicado em setembro de 2017 qual seria a forma correta de dizer.

Em outro episódio, Everaldo Marques, ainda na ESPN, e o comentarista Antony Curti caíram na risada com uma piada feita pelo narrador usando o sobrenome do atleta.

Todo jogo dos Chargers com o coreano em campo rendia uma enxurrada de memes e piadas com o sobrenome dele, que chegou a ficar nos assuntos mais comentados do Twitter.

Antes de com os Falcons, ele ou um curto período no time de treinamentos do New England Patriots. Na franquia de Atlanta, ele ainda teve a responsabilidade de substituir uma das lendas da franquia, o veterenao Matt Bryant, dispensado aos 44 anos.

Apesar do bom desempenho em um time que sofre na temporada com apenas uma vitória em sete jogos, Koo, nascido em Seul e aos 26 anos, tem apenas um ano de contrato e ganha um dos menores salários entre os kickers titulares da liga, com 750 mil dólares.

O Atlanta Falcons joga nesta quinta-feira contra o Carolina Panthers na abertura da semana 8 da liga. O jogo será as 21h20, com transmissão da ESPN.