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

Mayumi Sato

OPINIÃO

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

Aprenda o shibari, técnica de amarração de BDSM, com aulas pela internet

Como praticar Shibari durante a pandemia_Akira - Divulgação
Como praticar Shibari durante a pandemia_Akira Imagem: Divulgação

Colunista de Universa

28/03/2021 04h00

Apesar de ter abandonado o meu perfil no Instagram há muitos meses, me surpreende a quantidade de mensagens que eu recebo toda semana por lá perguntando sobre as minhas fotos de shibari, uma técnica de amarração japonesa muito apreciada por praticantes de BDSM.

As fotos, de fato, são muito bonitas e chamam a atenção. Mas o mais curioso é que as mensagens, em sua maioria, são de pessoas querendo aprender a técnica e aprender mais profundamente sobre a prática.

Antes da pandemia eu saberia pelo menos um ou dois lugares para ir e se enturmar com o pessoal do Shibari. Depois que o isolamento social se tornou regra, fiquei meio sem referências. Daí que decidi ir atrás das pessoas que realmente manjam das coisas pra saber o que tem rolado na comunidade de Shibari nos últimos tempos pra indicar para quem quer se engajar nela a partir de agora:

Shibari_Amauri - Foto Divulgação - Foto Divulgação
Amauri
Imagem: Foto Divulgação

O Amauri é o meu amarrador oficial e quase todas as minhas experiências com shibari foram com ele. Quando nos conhecemos era tudo mato e ninguém tinha ouvido falar de nada disso (muito menos de nós), mas hoje ele é chamado para amarrar figuras como Pabllo Vittar e Sabrina Sato (tá, meu bem!). E eu já posso me gabar de ter algo em comum com elas :)

Amauri me contou que anda participando de filmes e documentários sobre amarrações e fetiches e eu recomendo acompanhá-lo nas redes sociais pra saber de mais detalhes.

Shibari_Akira - Divulgação - Divulgação
Akira
Imagem: Divulgação

Akira é do Rio de Janeiro e trabalha exclusivamente com Shibari há alguns anos. Ela ministra aulas, workshops, produz ensaios e nunca tinha pensado em fazer algo online para a prática. Até, é claro, que veio a pandemia. Agora, ela ministra aulas online, com sessões privadas no zoom e também realiza workshops em grupo pela internet: "Meu alcance aumentou, agora tenho alunos de outros estados e de fora do Brasil. E sem o custo de deslocamento, consigo cobrar mais barato".

Ela também conta que participou recentemente de uma conferência internacional, o Queer Rope, conduzida por um espaço de Shibari de Berlim. Akira palestrou para mais de 160 pessoas de todo mundo, ao vivo, e isso tem sido importante para a comunidade como um todo, já que possibilita a presença de pessoas que, antes, não teriam condições de participar do evento que era exclusivamente presencial.

Além das aulas ao vivo, ela prepara também um infoproduto que deve ser lançado em breve. Para saber mais, acompanhe no insta da Akira.

Shibari_Sansa - Divulgação - Divulgação
Sansa
Imagem: Divulgação

Sansa é artista, fotógrafa e educadora de Shibari. De São Paulo, ela tem um espaço dedicado à prática e ao ensino das técnicas de Shibari, mas atualmente também está só em versão online, promovendo workshops, grupos de estudo e lives com performance. Pra quem se interessar, também recomendo acompanhar nas redes sociais.

Já conhecia shibari ou já tinha interesse pela prática? Manda aqui suas dicas nos comentários!

Mayumi Sato