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

Pedro e Paulo Markun

OPINIÃO

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

Avatar 'feliz' e computador real: como é trabalhar no metaverso do Facebook

Avatar de Paulo Markun durante experiência no Horizon Workrooms - Reprodução
Avatar de Paulo Markun durante experiência no Horizon Workrooms Imagem: Reprodução

17/10/2021 04h00

Receba os novos posts desta coluna no seu e-mail

Email inválido

A pandemia popularizou o uso de ferramentas de comunicação e o trabalho a distância. Zoom, Google Meets e Microsoft Teams ampliaram seu alcance e quem conseguiu continuar trabalhando em home office ou horas e horas nessas plataformas, a ponto de surgir uma disfunção —a síndrome de burnout, ou o esgotamento por excesso de trabalho— provocada pela atenção dispensadas a seguidas videoconferências.

Mas há uma etapa superior dessa conexão, que nós resolvemos conhecer de perto: o Horizon Workrooms do Facebook, uma plataforma de conexão que acaba de completar cinco anos e já é utilizada por sete milhões de funcionários, em centenas de empresas.

A diferença entre a ferramenta criada pelo pessoal de Mark Zuckberg e as outras é que aquela permite o uso do Oculus Quest 2, de realidade virtual. E isso faz toda a diferença.

Não é exatamente intuitivo o o ao Workrooms por esse caminho, entre outras coisas, porque demanda alternar comandos no Oculus e no computador, baixar programas neste, anotar código naquele, "construir" uma mesa de trabalho virtual alinhada com a nossa escrivaninha real, permitir o o à tela e teclado do computador e nem todos os teclados são aceitos.

Foram umas duas horas de trabalho até configurar as coisas.

Não há manual, nem videozinhos explicativos, mas, ao fim de muita conversa pela própria ferramenta e de algumas tentativas e erros, conseguimos alcançar e operar no escritório virtual.

Escolhemos um formato de mesa que nos colocou frente a frente —como avatares, naturalmente, já que essa é a regra do jogo nesse universo, ou talvez seja melhor dizer nesse futuro metaverso.

Os avatares são sorridentes demais para o nosso gosto. Por outro lado, dispensam os usos de controles, onde ficam os gatilhos e botões, normalmente empunhados pelos usuários.

Um recurso ainda experimental no Oculus permite transformar as mãos em controles: aparecem na imagem virtual, respondendo de maneira natural aos movimentos dos dedos, dão o a menus e até acionam comandos nesse campo, mantendo a capacidade de digitar no teclado real.

É um mundo híbrido e se o cenário é todo virtual, o computador, por exemplo, é real —o mouse e o teclado também— e você a a tela do seu próprio computador com seus programas e ferramentas costumeiras.

Um modo chamado 'through' permite você ver parte do mundo real, dentro da simulação, o que ajuda um pouco a se localizar, mas ainda é um pouco confuso.

Isso, claro, se você não for o feliz proprietário de um Mac ou de um teclado sem fio Logitech K830, que custa cerca de R$ 1.300. Nesse caso (que é o caso de Paulo), o sistema consegue inteligentemente recriar o teclado no mundo virtual.

De uma maneira geral, é um mundo onde os primeiros movimentos são lentos, mas no qual rapidamente ganhamos fluência.

O avatar de Pedro usa uma camisa rosa, florida, de certo modo assemelhada às que enverga no mundo real. Tem cavanhaque e bigodinho, cabelo crespo e um brinco na orelha esquerda (o deste mundo não usa).

Já Paulo aparenta uns 40 anos, apesar dos cabelos grisalhos, óculos de grau (sem lente) e veste um casaco preto sob uma camiseta branca.

O escritório é engraçado. Diante de Paulo há uma "janela" que dá para umas montanhas que parecem asiáticas. Uma cabeça de alce empalhada enfeita a parede.

Cada um, em sua mesa, conta com seu próprio computador. Também é possível convidar pessoas de fora do mundo virtual, que aparecem em vídeo, como no Zoom.

Em uma das paredes, um quadro negro serve também como telão onde projetamos o rascunho desse texto, escrito realmente a quatro mãos, via Google Docs.

Pedro, mais enturmado no novo território, saiu da cadeira e foi até o quadro negro onde desenhou algumas imagens, só para testar. Numa reunião de trabalho, isso permitiria mostrar planilhas ou apresentações. Com o apertar de um botão a mesa se redesenha para um formato de auditório.

No final de uma hora aproximadamente, tínhamos consumido 30% das baterias que usamos para explorar as possibilidades mínimas do ambiente e começar a rascunhar esta coluna.

Rascunho deste texto sendo produzido no ambiente do Horizon Workrooms - Reprodução - Reprodução
Rascunho deste texto sendo produzido no ambiente do Horizon Workrooms
Imagem: Reprodução

O Workrooms não é o único ambiente virtual de trabalho —existem uma dúzia de outros competidores como o Spatial, Immersed, EngageVR e até implementações livres como o Hubs da Mozilla, criadora do navegador Firefox que também começa a se aventurar pelo mundo virtual.

Todos esses ambientes ainda estão em pleno desenvolvimento, melhorando junto com as tecnologias de imersão e o aprendizado com os próprios usuários.

O 'escritório virtual' certamente vai enfrentar resistências —técnicas e culturais—, mas os números são promissores. O Horizon Workrooms , por exemplo, cresceu 40% na pandemia.

A adaptação ao universo virtual, ainda cobra um preço relativamente elevado, do peso e desconforto do próprio Oculus ando pelo alheamento do que se a ao redor quando se esta imerso, nos levou a encerrar o primeiro experimento em pouco mais de uma hora.

Mas ficamos com a conclusão: voltaremos, agora para trabalhar em dupla, mesmo a distância.