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

Juliana Borges

OPINIÃO

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

Comida e afeto: quando o que é servido no casamento é uma prova de amor

FG Trade/Getty Images
Imagem: FG Trade/Getty Images

Colunista de Universa

21/03/2022 04h00

Entre as várias leituras e papos sobre casamento, recebia conselhos que eu entendia como mensagem cifrada até hoje: os dilemas. Eu sempre achei que seria um tanto assertiva sobre o casamento - e em alguns aspectos, sou mesmo. Mas há coisas, principalmente quando muito afetivas, que estão tirando o meu sono, literalmente. O dilema da semana é: quem irá cozinhar no meu casamento?

Na minha família, assim como eu, acredita que, cozinhar é um ato de afeto. Uma maneira de demonstrar que nos amamos e que amamos amigos. Até hoje, não tem jeito melhor de eu me desculpar, após uma explosão de falta de paciência, com minhas irmãs do que cozinhando algo que eu sei que elas adoram, como, por exemplo, minha torta de maçã.

Não é me gabando, já me gabando, mas minha torta de maçã é um fenômeno entre amigos e familiares que já a experimentaram. E esse meu jeito foi herdado de várias gerações de mulheres e homens da minha família. Meu falecido tio Pedro, por exemplo, era o nosso campeão da cozinha afetiva. A sua famosa -e saudosa - feijoada era preparada em cuidadosas e extensas etapas, como se ele demonstrasse ali, em todo aquele empenho, que o amor era intenso por toda a família.

Toda e qualquer comida de minha mãe sempre foi carregada de um tempero próprio e até o modo com que ela envolvia e mexia e misturava os ingredientes, envolvia delicadeza e cuidado. Minha tia Marina é que prepara as empadas e tortas mais espetaculares que já comi. Minha relação com uma figura que não é da família sanguínea, mas é minha família afetiva e escolhida. Dona Carmen, também a pelos almoços e jantares ao redor de sua mesa, em que percebo o quanto ela se satisfaz em nos ver comer com vontade e alegria os pratos por ela preparados.

E tudo isso, apenas para demonstrar um pouquinho da aflição que toma meus dias para decidir quem irá preparar o cardápio do casamento. Muitas são as mulheres e homens, familiares e amigos, que já me enviaram mensagens dizendo que estão à disposição para esse preparo. E meu dilema é: como definir? Até porque quero essas pessoas curtindo a cerimônia e a festa comigo.

Alguém poderia dizer que o melhor a se fazer é contratar uma empresa especializada. E pode ser verdade. Pode ser o ideal e o correto. Mas eu conheço essas pessoas que me cercam e que me ensinaram a afetividade de um preparo para alimentar pessoas. De algum modo, terei que garantir que cada um e cada uma possa contribuir.

E esse texto de hoje não é, de "jeito maneira", uma reclamação. Acredito que muitas e muitos estão lendo e pensando: "Poxa, Juliana, a esse dilema para mim". É um bom dilema! Mas nem por isso deixa de sê-lo. A única certeza que tenho é de que: todos e todas convidadas receberão o melhor cardápio e sabor em suas mesas.