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

Quase pronto, Apple apresenta seu óculos de realidade virtual a executivos

Design do que seria o headset de VR/AR da Apple, divulgado por Ian Zelbo  - Ian Zeibo
Design do que seria o headset de VR/AR da Apple, divulgado por Ian Zelbo Imagem: Ian Zeibo

Lucas Santana

Colaboração para Tilt

21/05/2022 13h25

A Apple está desenvolvendo seu próprio óculos de realidade aumentada já há algum tempo. Agora, uma fonte confidencial ouvida pela agência internacional de notícias Bloomberg diz que uma versão do produto em estágio avançado de desenvolvimento foi finalmente apresentada para os executivos da empresa.

Essa reunião parece ter sido feita em um momento importante. Segundo a fonte, o encontro de executivos é raro e acontece apenas quatro vezes ao ano. Além de 8 diretores escolhidos a dedo pela empresa, estaria presente ainda o presidente-executivo da marca, Tim Cook.

Ainda de acordo com a fonte, nas últimas semanas a Apple também teria acelerado o desenvolvimento do rOS - abreviação do inglês para sistema operacional de realidade - software personalizado que equipará os óculos.

A informação de que o produto foi apresentado ao conselho de executivos animou quem aguarda um vislumbre do seu visual e funcionalidades. Em 2011, foi esse mesmo conselho quem viu - ou ouviu - pela primeira vez a assistente virtual Siri, que algumas semanas foi oficialmente anunciada e lançada no iPhone.

Lançamento só em 2023

O desenvolvimento do sistema operacional e a apresentação do aparelho ao conselho de executivos sugerem que seu lançamento deve acontecer muito em breve.

Analistas de mercado avaliam que a Apple deve revelar seus óculos ao mundo em algum momento dos próximos meses, entre o final do ano e o início de 2023. Já o lançamento aos consumidores deve acontecer no meio do ano que vem.

Outra fonte do mercado levantou um rumor de que um problema de superaquecimento frustrou os planos da marca, que pretendia fazer uma surpresa ao público em 6 de junho na WWDC (Worldwide Developers Conference).

Sobre os óculos da Apple

O dispositivo de realidade aumentada da marca está em fase de desenvolvimento desde 2015 e é chamado internamente pelo código N301.

O produto é tão importante para a Apple que a empresa destacou cerca de 2.000 funcionários para trabalhar no projeto. Um verdadeiro time de elite, formado por engenheiros que desenvolveram o iPhone, iPad e Mac, além de pessoas importantes vindas da NASA e da indústria de games que foram contratadas.

Os óculos de realidade aumentada usam as lentes do dispositivo para sobrepor elementos visuais aos elementos reais que o consumidor observa. Funcionalidade semelhante ao apresentada pelo HoloLens, da Microsoft, ou mesmo o antigo Glass, do Google.

Sem vida fácil

O processo de desenvolvimento do produto ou por vários percalços nos últimos anos. Entre eles, a dificuldade de criar aplicativos que valham a atenção e a grana dos consumidores. Superaquecimento e dificuldades de encontrar boas câmeras que se integram ao produto também elencam os desafios desse projeto. A própria ideia da Apple desenvolver óculos de realidade aumentada sofreu resistências de importantes engenheiros da empresa no início.

Tanta briga interna e a situação frágil da economia global já atrasou a entrega do produto final em pelo menos 4 anos. Originalmente, o plano era lançá-lo em 2019 e comercializá-lo no ano seguinte, como informou a imprensa naquele período.