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

Fácil de fazer, caramelo salgado pode ser guardado e turbina doces; aprenda

De Nossa

25/07/2022 04h00

Caramelo salgado é modinha e já faz tempo. Na década de 1980, o confeiteiro francês chamado Henri Le Roux criou uma receita de caramelo com avelã e manteiga salgada que surpreendeu o público e rendeu o prêmio de melhor doce da França.

Falando assim até parece que é difícil de fazer, mas pelo contrário: fica pronto rápido e, quando armazenado devidamente, as colheradas podem ser saboreadas sem pressa em sobremesas diversas.

Neste episódio de "Cozinha Por Aí", o influenciador Pedro de Bem visita um cânion da cidade Alfredo Wagner (SC) e explica o o a o completo da pedida.

Funciona assim: o açúcar derrete sozinho em fogo baixo sem precisar mexer. Quando borbulha e atinge uma cor dourada, a manteiga gelada em cubos é incorporada à receita.

Na sequência, o creme de leite fresco entra para emulsificar a mistura e cozinhar por dois minutinhos, conforme mostra o vídeo do topo da matéria. A finalização é com o ingrediente que não pode faltar: o sal.

Depois que atingir a temperatura ambiente, o caramelo salgado deve ser imediatamente servido — fica ótimo com sorvete — ou armazenado.

Nesse segundo caso, vale optar por um recipiente que possa ir ao micro-ondas ou ao banho-maria. Isso porque o caramelo ficará duro na geladeira e precisará de calor para voltar à cremosidade desejada.

Clique na imagem abaixo e confira a receita completa:

Caramelo salgado

Dificuldade Fácil
Ver receita completa

Sirva com...

Amargo e salgadinho, esse caramelo levanta o sabor de sobremesas com graça e cremosidade. Veja abaixo algumas sugestões que se dão bem com colheradas e mais colheradas da receita:

Brownie com merengue de chocolate

Dificuldade Fácil
12 porções
90 min
Ver receita completa

Milk Shake de Chocolate

2 porções
10 min
Ver receita completa

Bolo de "Nada"

Ver receita completa

Torta de maçã americana (apple pie)

Dificuldade Médio
8 porções
80 min
Ver receita completa

Torta de banana da bisa

Dificuldade Fácil
Ver receita completa

Mousse de chocolate

Dificuldade Fácil
15 porções
530 min
Ver receita completa

Cozinha por aí
2ª temporada!

Cozinha Por Aí - sopa e cânio Arroio Leão - UOL - UOL
Alfredo Wagner (SC)
Imagem: UOL

Inverno é sinônimo de viagem, serra, cachoeira e natureza. E também pede receitas quentes, práticas e saborosas para dividir com a família e amigos. A série Cozinha por Aí reúne todos esses atributos. Assista toda semana um novo episódio aqui no Canal UOL e no YouTube de Nossa (e se inscreva já no canal para receber os lembretes dos novos vídeos).