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

SpaceX lança mais 60 satélites Starlink ao espaço; total já chega a 950

"Trem" de satélites da Starlink sobrevoando a Holanda - Marco Langbroek/Reprodução
"Trem" de satélites da Starlink sobrevoando a Holanda Imagem: Marco Langbroek/Reprodução

Felipe Oliveira

Colaboração para Tilt

20/01/2021 12h40

A constelação de satélites Starlink, criada para fornecer internet de alta velocidade a qualquer lugar do mundo, vai ficar ainda maior nesta quarta-feira (20), com o lançamento de mais 60 satélites. Com eles, a SpaceX ficará com cerca de 950 equipamentos em órbita.

O lançamento deste lote estava previsto para o dia 18 de janeiro, mas foi adiado devido ao mau tempo. O foguete Falcon 9 partiu com os satélites às 10h30 (horário de Brasília) do Kennedy Space Center, na Flórida (EUA) Após lançá-los em órbita, o foguete pousou no navio Just Read the Instructions, da SpaceX, no Oceano Atlântico.

A ideia da empresa de Elon Musk com a constelação Starlink é fornecer um sistema de internet de banda larga de baixa latência para atender às necessidades de consumidores em todo o mundo. No total, a SpaceX planeja preencher sua constelação com 1.440 espaçonaves.

De acordo com o site Daily Mail, além do lançamento do Starlink, há rumores de que a SpaceX lançará também nesta semana a nave espacial Starship, que poderá, no futuro, participar de missões tripuladas à Marte. O site afirma que três testes estáticos de fogo dos motores Raptor da espaçonave foram realizados na semana ada.

Preocupações com a Starlink

A grande quantidade de satélites em órbita da Starlink tem causado algumas preocupações nos astrônomos. Alguns deles acreditam que os satélites são tão brilhantes que podem afetar as observações astronômicas.

Em resposta a isso, a SpaceX começou a adicionou uma espécie de "guarda-sol" escuro a alguns dos satélites e se comprometeu a tornar os próprios satélites o mais escuros possível.

"Os satélite de próxima geração, projetados para aproveitar as vantagens dos recursos de lançamento exclusivos da Starship, serão projetados especificamente para minimizar o brilho, enquanto também aumentam o número de consumidores que podem ter o à internet de alta velocidade", afirmou a empresa.