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

Astronauta dos testes com gêmeos da Nasa é eleito senador nos EUA

O ex-astronauta americano Mark Kelly - Courtney Pedroza / GETTY IMAGES NORTH AMERICA / AFP
O ex-astronauta americano Mark Kelly Imagem: Courtney Pedroza / GETTY IMAGES NORTH AMERICA / AFP

Mirthyani Bezerra

Colaboração para Tilt

05/11/2020 15h16

O ex-astronauta da Nasa e veterano da Marinha Mark Kelly foi eleito senador nos EUA pelo estado do Arizona, e será o quarto astronauta ter uma cadeira no Congresso. Democrata, ele derrotou a republicana Martha McSally no pleito.

"Estou confiante de que, quando todos os votos estiverem contados, teremos sucesso nesta missão. (...) O trabalho começa agora", disse Kelly a apoiadores após declarar a vitória.

Kelly foi selecionado para ser piloto de ônibus espaciais da Nasa em 1996 e ou mais de 54 dias no espaço. Comandou várias missões do programa, como a última, em 2011, a bordo do Endeavour.

Em 2015, participou de um experimento curioso. Ele tem um irmão gêmeo, Scott, que também é astronauta da Nasa. Scott foi à Estação Espacial Internacional (ISS), submetido à gravidade zero. Mark ficou na Terra, como grupo de controle. Os dois foram acompanhados por pesquisadores por um ano para analisar o efeito da gravidade zero e de voos espaciais no corpo e na mente do ser humano.

Durante e depois da permanência espacial, Scott apresentou diversos sintomas relacionados a envelhecimento, perda cognitiva, alterações na expressão gênica, mudanças vasculares, diferenças respostas imunológicas e diminuição da acuidade visual. Mark, que ficou na Terra, não teve nenhum desses efeitos - descartando, portanto, a possibilidade de serem um reflexo natural da idade.

Na política

Mark Kelly tem lutado pela posse responsável de armas desde que a sua mulher, a ex-deputada Gabby Giffords, sofreu uma tentativa de assassinato. Por causa disso, ela acabou renunciando ao Congresso em 2012. Os dois iniciaram uma organização para combater a violência armada.

Além disso, ele apoia a construção do Affordable Care Act (lei de cuidados íveis, em tradução livre), que ficou conhecido como Obamacare, e o desenvolvimento de novas opções de seguro-saúde público. Kelly também se comprometeu a recusar doações de PACs, que são comitês de ação política que endossam determinado candidato, mas legalmente não fazem parte da campanha eleitoral.

"Nosso estado não precisa de um senador democrata ou republicano. Precisamos de um senador pelo Arizona. Não há nada que não possamos alcançar se trabalharmos juntos", disse Kelly.