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

Tagliolini nero ai gamberi do Altruísta

Divulgação/O Altruísta
Imagem: Divulgação/O Altruísta

Difícil

Mesclar sabores e escolas gastronômicas é uma das paixões do chef Sebastião Wilmar. Uma das receitas mais populares no Altruísta Osteria & Enoteca, onde ele comanda a cozinha, é o tagliolini negro ai gamberi, ou tagliolini com tinta de lula, camarões, shitake e molho de ostras.

O prato representa bem a fusão entre Itália e oriente. Sobre a base de massa com molho de lula e frutos do mar, Wilmar acrescenta o shitake da culinária nipônica e o molho de ostras, ingrediente de sabor doce-salgado que traz um marcado toque umami ao preparo.

As experiências muticulturais são fruto da trajetória profissional do chef mineiro, que teve múltiplas experiências no mercado de gastronomia de São Paulo. Trabalhou com o chef francês Alain Poletto no extinto restaurante La Taverna e foi subchef de Carla Pernambuco no Carlota.

Para ele, atuar em um endereço como o Altruísta, com uma carta de vinhos com mais de 800 rótulos, significa ampliar horizontes sensoriais. "Nossa cozinha está bem conectada com a proposta da casa, há um bom bate-bola entre nós e os sommeliers. São longas as conversas sobre a harmonização dos pratos e dos vinhos", conta.

O que poderia tirar um profissional da zona de conforto foi abraçado por Sebastião Wilmar, como oportunidade. "Devo confessar que eu não era muito do vinho antes de trabalhar no Altruísta e hoje aprendo muito com os sommeliers da casa. O vinho ou a fazer parte da minha rotina."

Outras pedidas campeãs do cardápio do altruísta, ele aponta, são o fettucine com cogumelos e costela bovina, a paleta de cordeiro cozida em baixa temperatura com risoto de funghi e a massa verde recheada com queijo brie e geleia de damasco, servida na manteiga de sálvia.

Ingredientes

  • 100 grama(s) tagliolini com tinta de lula
  • 70 gramas de grama(s) molho de ostras
  • 40 grama(s) shitake
  • 60 grama(s) de lula
  • 6 unidade(s) de camarão cinza
  • 50 mililitro (ml) de vinho branco
  • 4 unidade(s) de tomate cereja cortados ao meio
  • 3 folhas de bok tchoy (acelga chinesa)
  • 1 dente de alho médio cortado em cubinhos (estilo brunoise)

Modo de preparo

Cozinhe o tagliolini nero em água abundante com sal, até atingir a consistência al dente. Numa a, em fogo médio, refogue o azeite e o alho e, em seguida, acrescente o shitake, a lula e os camarões. Em seguida, acrescente o vinho branco e o molho de ostras e deixe apurar por alguns minutos. Escorra o macarrão e sirva-o ao lado dos frutos do mar. Finalize o prato com os tomates cereja e as folhas de bok choy.