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

Santa matemática! Cientistas criam fórmula para o café expresso perfeito

Cientistas estudaram melhor forma de fazer o tradicional café expresso - iStock
Cientistas estudaram melhor forma de fazer o tradicional café expresso Imagem: iStock

Luiza Vidal

Colaboração para Tilt

27/01/2020 04h00

Sem tempo, irmão

  • Grupo de cientistas criou fórmula que garante resultado melhor do café "expresso"
  • Eles criaram modelo matemático do coador da máquina de café expresso, onde grãos ficam
  • Utilizar grãos mais grossos traz uma mistura mais saborosa e evita o desperdício
  • Estabelecimento nos EUA testou a descoberta e teve economia após um ano

Se você é apaixonado por café e está sempre à procura dos grãos perfeitos, uma descoberta científica pode te interessar muito. Um grupo de cientistas do Reino Unido criou uma fórmula matemática que garante um resultado melhor do tradicional "expresso". Resumindo: eles descobriram que utilizar grãos mais grossos traz uma mistura mais saborosa, além de evitar o desperdício. Ponto para a matemática!

Com esse grão mais grosso, nenhuma parte do coador ficou entupida, o que normalmente ocorre quando o café está mais moído. Isso resultou em uma extração mais alta dos compostos do café, sem aumentar a quantidade de grãos utilizados.

Como a fórmula foi criada?

Jamie Foster, matemático da Universidade de Portsmouth (Reino Unido) é o responsável pela descoberta, ao lado de colegas cientistas. Eles investigaram qual a melhor maneira de maximizar o rendimento da menor quantidade possível de café. O estudo foi publicado na revista Matter.

Para isso, eles criaram um modelo matemático do coador da máquina de café expresso, que é onde os grãos ficam. Os cálculos iniciais foram feitos com uma única partícula de café, mas, depois, eles aumentaram esse cálculo para um recipiente maior, no coador.

O resultado, então, foi esse. Diferente do que os baristas fazem - utilizar grãos mais moídos e, portanto, mais finos -, os cientistas descobriram que quanto mais grosso o grão for moído, melhor o sabor do café. Além de ficar com um gosto mais fiel, essa é uma maneira mais eficiente de reduzir o desperdício de café por xícara.

"Quando descobrimos uma maneira de fazer doses de café com eficiência, percebemos também que, além de fazer doses com a mesma confiabilidade, estávamos usando menos café", explica Foster ao site da universidade. Ele também garante que o processo deixa tudo mais barato. "Usamos menos grãos e somos mais gentis com o meio ambiente".

Quem usa na prática

Essa experiência foi utilizada em uma pequena cafeteria em Oregon, nos Estados Unidos, por um ano, de 2018 a 2019. A loja economizou US$ 0,13 (R$ 0,56) por bebida. Essa soma resulta em uma economia de US$ 3.620 (R$ 15.783,2‬0) em um ano. O estabelecimento continua usando o método. "Se todos fizessem isso, seria possível economizar bilhões de dólares nas indústrias", diz o matemático.

De acordo com a Associação Britânica de Café, a descoberta pode ter um impacto no mundo real. "Um modelo matemático que aumenta a eficiência da extração do café expresso em grãos moídos é extremamente importante para as empresas de café e os varejistas", informou um porta-voz ao site New Scientist.

E aí, bora fazer um cafezinho?

SIGA TILT NAS REDES SOCIAIS