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

Topo

Desculpa o Transtorno

Tati Bernardi e Christian Dunker discutem neuras cotidianas a partir do olhar da psicanálise


'Antes de me assumir criei perfil fake em bate-papo. Hoje namoro, mas meu fake ainda entra em apps'

18/09/2023 12h00

"Sou um homem gay, tenho 30 anos, um relacionamento sólido e um segredo do qual é a primeira vez que comento com alguém. Meu segredo se chama Pedro! Quando tinha por volta de 16 anos e ainda não era assumido, entrava nas salas de bate-papo para conversar com outros caras. No meu primeiro o, precisava de um apelido, e foi aí que Pedro apareceu. O tempo foi ando e eu me assumi para minha família. Com a evolução da tecnologia, as salas de bate papo deram espaço para aplicaticos de encontro com várias finalidades, desde relacionamento sério até sexo casual. Nos aplicativos de relacionamento eu era eu mesmo, nome de batismo e foto de perfil. Nos aplicativos de sexo casual era misto! Quando entrava na intenção de encontrar alguém pessoalmente era eu, quando entrava na intenção de manter online ou falar apenas via webcam, eu era Pedro. Ao contrário de mim, Pedro nunca teve rosto, era apenas um corpo em frente a uma tela ou em uma foto/vídeo. (...) Pedro sumiu aos poucos, até que, aos meus 22 anos, eu entrei em um relacionamento que estava durando.Um ano, dois anos, perto do terceiro ano de relacionamento, eu já com 25 anos, nós estávamos estremecidos, e então, veio a vontade de ficar com outras pessoas. Ao mesmo tempo, não queria trair meu namorado? Então, um dia, o Pedro voltou. Fizemos um teste: ele entrou numa sala de bate papo, conversou com caras, se aliviou pela webcam vendo outros corpos e foi embora. E eu depois, nada! Sem remorso, sem culpa, sem ressentimento. Racionalmente sabia que tinha traído, ainda sei.(...) Mas sentimentalmente eu não sinto nada, absolutamente nada. Hoje, aos 30, eu sou feliz, meu namorado é um cara incrível e muito bacana. Não tenho vontade de sair com outras pessoas, mas Pedro nunca mais foi embora. Nesse meio tempo o Pedro evoluiu. Ele vem, faz o que tem que fazer na webcam da vida dos outros Pedros e vai embora. O Pedro hoje tem roupa, uma roupa que eu mesmo nunca uso, só fica pendurada no armário para quando ele aparecer. Algumas épocas ele vem uma vez por mês, às vezes uma vez por semana. Não consigo determinar exatamente em que épocas da minha vida o Pedro aparece mais. Mas ele sempre aparece. Será que eu consigo parar ou devo parar o Pedro?"

Neuras cotidianas e manias serão assunto das conversas entre a escritora Tati Bernardi e o psicanalista Christian Dunker, às segundas-feiras em Universa. Quer participar? Tati e Christian vão receber as histórias pelo e-mail [email protected] e debatê-las a partir do olhar da psicanálise —ele é psicanalista, e ela, estudante desse campo que investiga a mente humana.

#DesculpaOTranstorno #T02EP08