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

Enquanto não vai a Marte, nave Starship "salta" 150 metros em teste

Modelo Starship foi projetado pensando em turismo especial - SpaceX/Divulgação
Modelo Starship foi projetado pensando em turismo especial Imagem: SpaceX/Divulgação

Marcella Duarte

Colaboração para Tilt

04/09/2020 17h02

A SpaceX, de Elon Musk, fez mais um teste bem-sucedido da nave Starship. É mais um o importante rumo às missões tripuladas — e à possível colonização — de Marte.

O reluzente protótipo SN6 (Starship Serial Number 6) fez um teste chamado "hopper": um "salto" entre duas áreas de lançamento, atingindo 150 metros de altura. A breve demonstração aconteceu na tarde desta quinta-feira (3), na base da Starship em Boca Chica, no Texas, EUA.

Musk compartilhou em sua conta no Twitter o vídeo do momento do voo, que durou menos de um minuto, com um breve comentário: "pelo visto você pode fazer qualquer coisa voar, risos".

Alguns internautas contestaram a relevância do experimento, criticando a baixa altitude, um aparente descontrole da nave e até a poluição gerada. Um deles chegou a dizer que "daria para fazer o mesmo com uma lata de lixo".

Cerca de um mês atrás, a SpaceX havia feito um teste similar com o protótipo anterior da Starship, o SN5. Após o experimento, Musk teria pedido aos funcionários para priorizarem o desenvolvimento da nova geração da nave, com algumas melhorias nos sistemas.

"A Starship SN6 voou um 'salto' similar ao da SN5, mas foi muito mais suave e uma operação mais rápida", tuitou Musk.

As naves de teste ainda são em tamanho reduzido e com um formato cilíndrico simples, impulsionadas por um único motor Raptor. O objetivo é aprimorar os controles e a segurança. Os próximos voos devem ser mais altos, chegando a 20 km de altura.

O protótipo SN8, que já está em desenvolvimento, será o primeiro com o design parecido com o real, com as asas e o nariz característico. A Starship terá 120 metros de altura, para carregar até cem pessoas e cem toneladas de carga.

O grande plano do bilionário é criar uma frota de 1.000 Starships nas próximas décadas, para viagens espaciais de ageiros e astronautas pelo Sistema Solar. Ele estima que, até 2024, a nave irá pousar na Lua —mas ainda não há previsão de testes em órbita.

Até 2050, Musk quer construir uma cidade para um milhão de pessoas em Marte. "Precisamos melhorar nossa taxa de inovação ou, com base nas tendências anteriores, com certeza estarei morto antes de Marte", disse em uma conferência via satélite em março.