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

Ricardo Cavallini

OPINIÃO

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

Demissões em massa enterraram de vez as nossas esperanças nas big techs

Demissões em massa marcam fim de ciclo e acabam com qualquer romantismo que ainda existia em torno das big techs - iStock
Demissões em massa marcam fim de ciclo e acabam com qualquer romantismo que ainda existia em torno das big techs Imagem: iStock

26/01/2023 04h00

Os bons tempos em que as pessoas acreditavam que as big techs tinham surgido para nos salvar:

  • Nos livrar da maldade das empresas tradicionais;
  • O banco que não nos deixa no controle do nosso próprio dinheiro;
  • A TV que nos obriga a ver propaganda;
  • As startups que vão nos empoderar com sua liberdade tecnológica;
  • As redes sociais que nos deram voz;
  • A busca que nos deu o ao conhecimento;
  • O e-commerce que não esconde os reviews de produtos.

Teve uma época que o discurso das startups obrigatoriamente terminava em "vamos fazer do mundo um lugar melhor".

As competições de pitches da TechCrunch pareciam um disco riscado.

Muita coisa de graça.

Você pode levantar a mão e dizer que nunca acreditou nisso. Sim, eu, você, um monte de gente alertou, criticou. Surgiu até a famosa frase "se é de graça, o produto é você". Mas esse era o zeitgeist da época.

Foi ando o tempo.

O mundo corporativo é feito de pessoas. Pessoas crescem. Aquelas criancinhas lindas e fofinhas foram se tornando adultos feios. E chatos. E se for para sermos honestos, alguns com caráter bem duvidoso.

Hoje as big techs são as maiores empresas do mundo. Elas que surgiram para desafiar o status quo agora são, veja só, o status quo.

As startups, cujo slogan era fazer do mundo um lugar melhor, começaram a ganhar sua verdadeira roupagem, um monte de caras querendo ser o próximo bilionário.

Hoje são, simplesmente, empresas. Com todas as suas qualidades e seus defeitos. Tem as boas, tem as ruins, tem as péssimas.

E por virar status quo, viraram vidraça. Do público, da imprensa, da legislação.

Zuckerberg é melhor vilão que Rupert Murdoch. Elon Musk é tão caricato que parece uma mistura de Austin Powers com Dr. Evil.

Em 2023, o streaming quer nos empurrar propaganda, o banco digital parece ligar menos para seus clientes do que os bancos tradicionais e as empresas da chamada gig economy parecem mais predatórias que as da antiga economia.

Você pode chamar as demissões em massa do que quiser. Chame de ajuste, de fim do sonho ou como preferir, mas a leitura que eu faço é que elas representam um marco.

É o fechamento de um ciclo. O fim do glamour. O enterro de qualquer romantismo que tenha ficado das big techs e das startups.