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

Abram alas para os robôs! Pandemia acelera automação e espanta medo da IA

Lukas/ Unsplash
Imagem: Lukas/ Unsplash

Thiago Varella

Colaboração para Tilt

12/04/2020 04h00

Sempre se discutiu se os robôs iriam roubar o emprego dos humanos. Nos últimos tempos, sobretudo em países mais desenvolvidos, mas também em certa medida no Brasil, vimos a automação crescer em alguns setores ainda que de forma lenta. Isso até a chegada do novo coronavírus.

Segundo uma reportagem do jornal "The New York Times", nos Estados Unidos a pandemia forçou uma aceleração da automação. O objetivo não é mais cortar custos trabalhistas ou ganhar em eficiência. A causa urgente é a de minimizar ao máximo o contato entre humanos e evitar a disseminação rápida do coronavírus.

Especialistas afirmam que as recomendações de distanciamento social devem permanecer mesmo após o fim das quarentenas e de uma certa retomada da vida normal mundo afora. Isso significa que a implementação do uso de robôs permanecerá acelerada, sem que haja mais tanta preocupação com a perda de empregos ou aquele velho desconforto em ter máquinas controlando alguns aspectos vitais da nossa vida cotidiana.

"Antes da pandemia, as pessoas poderiam pensar que estávamos automatizando demais. Mas este evento vai levar as pessoas a pensar no que mais deve ser automatizado", afirmou ao New York Times Richard Pak, professor da Universidade Clemson, que pesquisa os fatores psicológicos relacionados à automação.

Um exemplo é o da indústria da reciclagem. No Brasil, em diversas cidades, a coleta seletiva teve de ser interrompida, já que tanto as pessoas que recolhem lixo reciclado quanto as que o separam estão em quarentena. No entanto, nos EUA, alguns lugares colocaram robôs para fazer esse tipo de serviço.

A empresa AMP Robotics, que faz robôs que separam lixo reciclável, notou um aumento significativo de pedido de novas máquinas que usam inteligência artificial para fazer o trabalho.

Isso se repete em outros setores. De acordo com a reportagem do New York Times, os mercados estão usando muito mais serviços robotizados de limpeza. Também estão trocando humanos por caixas automatizados.

Claro que toda essa automação pode custar alguns empregos. Para Mark Muro, do Brookings Institution, que estuda o mercado de trabalho, essa onda de robotização de emprego pode significar que, quando as coisas voltarem ao normal, as empresas recontratem humanos em menor número.

"Essa pode ser uma daquelas situações em que a automação diminui substancialmente a recontratação", disse Muro. "Você pode ver menos trabalhadores quando a recuperação ocorrer".

SIGA TILT NAS REDES SOCIAIS