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

Campanha critica venda de robôs sexuais antes mesmo de chegada ao mercado

Robô Roxxxy - Reprodução
Robô Roxxxy Imagem: Reprodução

Do UOL, em São Paulo

16/09/2015 06h00

Antes mesmo de chegarem às prateleiras, os chamados robôs sexuais já se tornaram alvo dos ativistas, que lançaram nesta terça-feira (15) uma campanha contra as vendas do gadget erótico.

Os humanoides --que poderão ser usados como substitutos sexuais--, segundo a campanha, podem "contribuir para as desigualdades da sociedade", bem como para reforçar a imagem de "mulheres objeto".

Em entrevista à rede de televisão norte-americana CNBC, Kathleen Richardson, líder campanha, afirmou que os robôs sexuais têm sido fabricados não só na forma de mulheres, mas também como crianças.

"Quando comecei a analisar o assunto pensei, 'oh robôs sexuais, esses inofensivos talvez possam reduziria a demanda por mulheres e crianças reais'", afirmou Richardson, que é antropólogo da Universidade De Montfort, no Reino Unido. "Mas não. Eles tendem a contribuir e reforçar a posição delas na sociedade como objetos sexuais."

As bonecas sexuais não são novidades no mercado mundial. Mas diante de uma demanda por robôs que podem ser utilizados para fins sexuais, empresas de robótica têm investido para levar "esse upgrade" para o mercado.

A empresa californiana RealDoll, por exemplo, planeja vender uma boneca sexual de borracha "artificial inteligente" --com  capacidade de se comunicar--  em 2017.

Já a "True Companion" afirma está produzindo o primeiro robô sexual do mundo chamado Roxxxy, nas versões feminina e masculina. O gadget, de acordo com a empresa, deve ser lançado ainda esse ano por US$ 7.000 (cerca de R$ 24 mil).

"Roxxxy conhece seus gostos e desgostos, é capaz de ter uma discussão, expressar o amor por você e ser sua parceira. Pode falar com você, ouvi-lo e sentir o seu toque. Pode até ter um orgasmo", descreve a empresa em seu site.