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

Thiago Gonçalves

OPINIÃO

Texto em que o autor apresenta e defende suas ideias e opiniões, a partir da interpretação de fatos e dados.

Ciência de explorar o Universo é mais humana do que só cálculos e dados

"Eu mesmo comecei a estudar astronomia por um deslumbre, um fascínio pelo Universo que não pode ser explicado por números" - Pexels
"Eu mesmo comecei a estudar astronomia por um deslumbre, um fascínio pelo Universo que não pode ser explicado por números" Imagem: Pexels

12/07/2023 04h00

Escrevo esse texto no dia do meu aniversário, 11 de julho.

Alguns de vocês podem pensar que a data perde o encanto. Afinal, para um astrônomo, o aniversário representaria apenas uma volta do planeta Terra ao redor do Sol, um movimento cíclico lembrado em um momento arbitrário.

Mas não pensem que a ciência é tão dura, tão técnica. Eu mesmo comecei a estudar astronomia por um deslumbre, um fascínio pelo Universo que não pode ser explicado por números ou equações.

A astronomia também é uma atividade humana. É o reflexo histórico de como as civilizações observavam o céu para registrar a agem do tempo e marcar os avanços de suas respectivas culturas.

O mesmo vale para o próprio objeto de estudo de astrônomos. No meu trabalho, tento entender o funcionamento de galáxias a bilhões de anos-luz de distância, cada uma com centenas de bilhões de estrelas.

A pesquisa pode ser bastante matemática, é verdade. Processando dados, fazendo contas, construindo códigos em computador para medir a massa de objetos cuja luz levou bilhões de anos para chegar até nossos instrumentos.

No calor do momento, podemos mesmo esquecer, às vezes, do que aquilo representa. Se por um lado as dimensões podem nos fazer sentir pequenos frente a um universo tão amplo, por outro os números imensos se tornam tão corriqueiros no nosso cotidiano que acabam virando lugar comum.

Mas nem sempre.

Com certa frequência, me pego pensando nas maravilhas do Universo, na beleza das galáxias, e no fascínio que tinha quando estava na faculdade e decidi enveredar pela astronomia.

Esse é outro motivo pelo qual a divulgação científica é uma atividade tão gratificante: claro, é fundamental compartilhar as descobertas com o público para que o avanço científico não se restrinja aos poucos pesquisadores da área.

Mas também é um sopro de ar fresco quando esse mesmo público divide o fascínio pelo Universo conosco, lembrando-nos de tudo que a astronomia tem a oferecer para além das equações.

É isso, mesmo as ciências exatas são feitas por humanos, e devem ser vistas como tal. Uma atividade social, reflexo de uma comunidade construída por pessoas e dela indissociável.

Por isso tudo, podem acreditar que gosto muito do meu aniversário. Claro, eu poderia descrevê-lo pelos 31.536.000 segundos desde o aniversário do ano ado, mas os números não comportam o prazer de estar junto de minha família, lembrando os bons momentos e pensando no que o próximo ano pode trazer.

E obrigado às leitoras e leitores dessa coluna por compartilhar desse prazer astronômico comigo!