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

OPINIÃO

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

Na briga contra Scooby, pelo menos em um ponto Luana Piovani está certa

Colunista do UOL

04/01/2023 10h43

Receba os novos posts desta coluna no seu e-mail

Email inválido

Em abril de 2010, uma livraria em São Paulo organizou uma sessão de autógrafos seguida por um pocket show da banda Restart, na época um fenômeno de engajamento juvenil comparável ao que hoje representam excelsas figuras como Juliette, Deolane ou Elon Musk.

O evento acabou atraindo mais pré-adolescentes que o previsto, fazendo com que aparentemente fosse mais seguro simplesmente cancelar tudo. A decisão causou transtornos. A turminha que estava acampando no local desde a madrugada lamentou demais.

Até aí, seria apenas mais um dia de frustração justamente na idade de formação, aquele período da vida em que sofrer revezes ajuda a moldar o caráter. Mas para a sorte de todo mundo, uma reportagem da Folha capturou em vídeo algumas das reações mais exacerbadas.

Certas frases daquele dia de tristeza até hoje ecoam, na qualidade de memes que se tornaram eternos. "Uma puta falta de sacanagem", atrapalhou-se uma menina para dizer que estava sendo prejudicada.

O auge foi um rapaz que desabafou junto com uma ameaça que se tornaria muito contemporânea. "Restart não presta mais, porque cheguei às 8h e não vieram falar com a gente. Não vou perdoar. Vou xingar no Twitter hoje, muito. Sério."

O cidadão personalizou a situação de maneira épica. Como assim seu esforço não foi recompensado pelos ídolos? E foi além. Deixou claro que usaria a ferramenta que tinha às mãos para externar ainda mais seu descontentamento.

'Xingar muito no Twitter', quem diria, se tornou o novo normal. Uma maneira testada e aprovada por milhões de pessoas ao redor do mundo para tentar dar um encaminhamento mais ágil aos problemas do cotidiano.

E por 'xingar muito' entenda 'expor uma situação desconfortável', enquanto 'Twitter' pode ser lido como qualquer outra rede social. As chances de resolução são ainda maiores se você tiver algum tipo de reconhecimento na sua área de atuação.

Lembro do saudoso Gugu Liberato, que utilizava muito seu perfil no Twitter para resolver problemas —sobretudo envolvendo viagens, com companhias aéreas e a rede hoteleira. E era prontamente atendido, não raro com um "olá, Gugu" por parte das empresas.

Outras celebridades de diferentes graus de importância na vida brasileira já usaram as redes sociais para tratar das questões mais comezinhas. Este colunista mesmo, diretamente da curva final da fila do pão, conseguiu agilizar uma entrega atrasada graças ao poder do mantra 'xingar muito no Twitter'.

Mas quem está levando essa prática a outro patamar é Luana Piovani. A atriz usa seu perfil no Instagram para intermediar conflitos com Pedro Scooby, seu ex-marido, com quem tem três filhos.

Piovani alega que estava exausta de aguardar respostas e reclamava também de algumas posturas parentais. Atualmente eles moram em países diferentes, então todo o processo parece ainda mais complicado do que normalmente já seria.

A preocupação de uma empresa com a própria reputação não é muito diferente das pessoas famosas nesse período da História, quando manter uma boa impressão perante público e patrocinadores é fundamental.

Independentemente de quem está certo ou errado nessa discussão familiar, me parece que Piovani antecipa agora algo que pode se tornar padrão nos próximos anos. A mediação de questões íntimas na esfera pública pode acelerar tempo de resposta e quiçá a própria resolução.

Isso vai gerar uma série de outros problemas? Provavelmente. Eis o ciclo da vida.

Voltamos a qualquer momento com novas informações.