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

Para onde o mundo vai

Cientistas reproduzem tumor cerebral usando tecnologia de impressão 3D

Glioblastoma sendo impresso em 3D - Reprodução/ Youtube/ Universidade de de Tel Aviv
Glioblastoma sendo impresso em 3D Imagem: Reprodução/ Youtube/ Universidade de de Tel Aviv

Um novo estudo permitiu desenvolver um modelo viável de tumor do cérebro, com células extraídas da biópsia do próprio paciente. Com esse "clone" seria possível testar de antemão uma terapia em laboratório antes de ir para o paciente.

É isso que a cientista Lena Neufeld e seus colegas da Universidade de Tel Aviv investigaram em pesquisa publicada na revista Science Advances.

Para testar novos medicamentos, terapias ou mesmo para entender a ciência por trás do câncer, cientistas se valem de modelos in vitro, ou seja, uma representação do tecido analisado para ser estudado em laboratório.

Esses modelos podem ser específicos, como o cultivo de um tipo de célula em uma placa de vidro, ou agregar complexidade, como este proposto de bioimpressão 3D.

Os experimentos em laboratório podem ser feitos, em ordem de complexidade, em monoculturas monocamadas, esferoides, organoides, modelos em chips ou tridimensionais.

O glioblastoma é o tipo de tumor mais maligno do sistema nervoso central e ele se manifesta tipicamente em pacientes acima de 50 anos.

No caso do tumor glioblastoma, os cientistas israelenses trabalharam a complexidade do tumor com a variedade de células e microambientes semelhantes ao encontrado no cérebro. Neste microambiente, a estrutura de sustentação foi bioimpressa em três dimensões com fibrina.

É como construir uma casa e escolher quem vai morar nela. O grande desafio é garantir que esse tumor possa receber nutrientes para se manter vivo e ainda poder continuar a se expandir em laboratório.

Por isso, um avanço importante neste estudo foi a bioimpressão de vasos sanguíneos que poderiam levar sangue rico em nutrientes ao tumor.

A bioimpressão 3D tem muitos desafios e, para tornar o tecido viável, ele precisa ser vascularizado para receber gases e nutrientes.

E, com isso, os cientistas vislumbram trabalhar diretamente com esse tumor do paciente in vitro, na busca para melhorar a terapia.

O problema é que esses modelos in vitro, por mais parecidos que sejam, não têm por muitas vezes o mesmo comportamento que o mesmo no ambiente original.

Os médicos avaliam a terapia do paciente com o conhecimento construído populacionalmente. De acordo com o artigo sobre glioma no Primer da Nature, existem mutações nas células da glia conhecidas e mais seis subclasses principais destas.

E, populacionalmente, já se sabe quais mutações têm melhor prognóstico e qual tipo de terapia funciona melhor para cada uma delas. Assim, esse modelo de laboratório pode ter pouco uso para o paciente, mas pode ser importante no desenvolvimento de modelos mais complexos para desenvolvimento de fármacos para estudos do tipo in vitro.