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

Elon Musk é xingado em projeção na sede do Twitter; #RIPtwitter viraliza

Do UOL, em São Paulo

18/11/2022 08h12Atualizada em 18/11/2022 11h09

O empresário Elon Musk, dono do Twitter, foi xingado na noite desta quinta-feira (18) em uma projeção no prédio que funciona como sede da rede social em São Francisco, nos Estados Unidos.

No texto o empresário foi chamado de "moleque medíocre", "bilionário inútil", "bajulador de ditadores" e "racista mesquinho", entre outros xingamentos. Diante das polêmicas das últimas semanas — que incluem demissões em massa —, a hashtag #Riptwitter, em referência a uma possível morte da rede social, viralizou.

Segundo informações do site The Verge, um email não assinado enviado a funcionários do Twitter diz que o o por crachá aos escritórios foi suspenso "com efeito imediato" até a próxima segunda-feira (21).

A mensagem, de acordo com o veículo, foi enviada logo depois da reunião feita por Musk com um grupo de engenheiros seniores "para saber por que tantos deles planejavam sair".

O site diz que muitos empregados se irritaram com o estilo de gestão do novo dono da rede social. E os relatos são de que o próprio executivo teria ficado paranoico com a possibilidade de funcionários sabotarem a empresa.

Na quarta-feira (16), Musk já havia dado um ultimato aos funcionários do Twitter pedindo a eles que tivessem um "comprometimento hardcore" com a empresa, do contrário poderiam ser demitidos, segundo email que o jornal Washington Post teve o.

A mensagem enviada aos funcionários informou que os colaboradores devem um compromisso de permanência na empresa, caso optem por continuar nas equipes restantes após as demissões de duas semanas atrás.

"Se você tem certeza de que quer fazer parte do novo Twitter, clique sim no link abaixo", informou a empresa, com uma página direcionando o empregado para um formulário online, cujo prazo máximo para ser preenchido era até ontem.

Demissão em massa

Após a demissão em massa no último dia 4 (que cortou cerca de 50% dos funcionários da companhia), diversos empregados optaram por sair da empresa, incluindo executivos do alto escalão. Na semana ada, a companhia havia suspendido a política de "home office" após alerta emitido por Musk sobre "tempos difíceis" que estão por vir.

Recentemente, Elon Musk também informou à equipe do Twitter que a empresa pode ir à falência caso e por mais uma crise. A preocupação do bilionário é resultado da saída de grandes anunciantes da plataforma, que geravam a principal fonte de receita para a rede social.

#RIPtwitter viraliza. Com os últimos acontecimentos envolvendo a rede social, a hashtag #RIPtwitter e a frase "o Twitter vai acabar" chegaram aos assuntos mais comentados na própria rede social. Ao comentarem os assuntos, usuários publicaram memes e fizeram piadas por acharem que a plataforma está em seus últimos dias.

A crise vivida pelo Twitter foi motivo para uma piada até de Musk. O empresário publicou a imagem que representa a rede social posando para uma foto em frente ao próprio túmulo.