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

Alcance e impacto do movimento #MeToo no Twitter viram tema de pesquisa

Mulheres usam a hashtag #MeToo em protesto em Paris contra abuso sexual  - Bertrand Guay/AFP - 29.10.2017
Mulheres usam a hashtag #MeToo em protesto em Paris contra abuso sexual Imagem: Bertrand Guay/AFP - 29.10.2017

Do TAB, em São Paulo

12/09/2019 15h25

Dois anos após a explosão de denúncias de casos de abuso sexual e de assédio nas redes sociais por meio da campanha #MeToo, uma pesquisadora da Universidade de São Francisco, nos Estados Unidos, analisou 12 mil postagens relacionadas ao protesto.

Apesar de o movimento ter viralizado no final do ano de 2017, o Me Too foi fundado há mais de dez anos por Tarana Burke para ajudar vítimas de estupro. Com a hashtag nas redes sociais, houve mais de 1,5 milhão de respostas com histórias de outras mulheres que sofreram abuso, além de mensagens de apoio.

Sepideh Modrek, professora da faculdade de economia da Universidade Estadual de São Francisco, usou uma técnica de inteligência artificial chamada aprendizado de máquina para analisar o conteúdo das primeiras postagens feitas entre 15 e 21 de outubro de 2017 nos Estados Unidos.

A filtragem das mensagens descobriu que 11% dos tuítes singulares (sem retuítes, respostas, links ou fotos) incluem relatos de violência sexual ou abuso. Cerca de 6% dos casos aconteceram com mulheres jovens, com menos de 22 anos.

Outra característica das postagens na plataforma é o perfil de quem tuitou: mulheres brancas, com idade entre 25 e 50 anos. Alguns dos relatos haviam acontecido há quase 30 anos. "Elas ainda se lembram. Há um trauma duradouro claro associado a cada divulgação", diz a pesquisadora.

"Fiquei chocada com o fato de que as pessoas estavam compartilhando detalhes. Escreviam coisas como 'quando eu tinha 15 anos, isso aconteceu'", diz Modrek. "Pude ver detalhes íntimos compartilhados em um fórum público de uma maneira que nunca pensei que as pessoas fariam. Fiquei impressionada e encantada."

Modrek observa no artigo, publicado na revista científica Journal of Medical Internet Research em 3 de setembro de 2019, que outras vozes, como as de mulheres americanas negras, expõem menos detalhes no Twitter, mas elas têm mais chance de ar por situações de abuso e assédio.