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

Um ano do robô Perseverance em Marte; confira os registros mais incríveis

Perseverance solta raios lasers  - Divulgação/Nasa
Perseverance solta raios lasers Imagem: Divulgação/Nasa

21/02/2022 04h00

O robô-jipinho Perseverance, da Nasa, fez aniversário em Marte. Ele pousou em nosso vizinho no dia 18 de fevereiro de 2021. Seu primeiro ano de exploração rendeu imagens incríveis, que revelam a superfície do planeta vermelho como nunca vimos antes.

Parte da missão Mars 2020, o rover Perseverance é um verdadeiro fotógrafo, cientista e laboratório sobre rodas. Equipado com modernos instrumentos e sensores — incluindo 19 câmeras de alta definição — e um braço robótico, sua principal tarefa é procurar por evidências de vida alienígena.

Ele está explorando a Cratera Jezero, de 45km de diâmetro e 500m de profundidade — estima-se que, há mais de três bilhões de anos, tenha sido um grande lago e o delta de um rio. Se já existiu vida no planeta, mesmo que apenas atividade microbiana, é o local com mais chances de guardar evidências.

Mas o Perseverance não está sozinho por lá: o pequeno helicóptero Ingenuity é seu fiel escudeiro. Ele estava guardado dentro da "barriga" do rover e foi liberado após o pouso. Já provou que a exploração aérea é possível em Marte, apesar da fina atmosfera do planeta.

A dupla já registrou, até agora, 215.383 imagens de Marte; confira algumas das mais memoráveis:

Robô Perseverance completou um ano em Marte; confira fotos da missão

O robô deve realizar seus experimentos em Marte por mais um ano: sua duração é estimada em, pelo menos, 687 dias terrestres (um ano marciano). Ele é movido por um reator com núcleo de plutônio, capaz de produzir energia elétrica por até 14 anos.

E fará algo inédito em Marte: colocará pelo menos 40 amostras, de diferentes locais da cratera, dentro de tubos, em um complexo sistema de armazenamento. Esses tubos serão deixados na superfície do planeta, para serem retirados por missões futuras. Este deve ser o maior desafio da Nasa nos próximos anos — as rochas devem chegar aqui só depois de 2030.

Todas as fotos tiradas pelo Perseverance e pelo Ingenuity podem ser adas, em formato RAW, gratuitamente por qualquer pessoa, no banco de dados da missão, no site da Nasa.