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

Homem que se casou com boneca no Japão fica viúvo após 'morte' de IA

Akihiko Kondo ao lado da representação de Hatsune Miku  - Reprodução/Twitter/Akihikokondosk
Akihiko Kondo ao lado da representação de Hatsune Miku Imagem: Reprodução/Twitter/Akihikokondosk

Felipe Mendes

Colaboração para Tilt, em São Paulo

06/05/2022 17h19

O japonês Akihiko Kondo realizou o sonho da vida ao se casar com a mulher pela qual se apaixonou. Contudo, acabou viúvo pouco tempo depois: a inteligência artificial que a "alimentava" foi desligada. Uma história triste do ponto de vista romântico, mas que fica mais curiosa quando descobrimos que a ex-mulher de Kondo era simplesmente uma boneca.

Kondo se casou com Hatsune Miku em 2018, quando ela era apenas uma boneca de pelúcia. Miku era uma cantora pop de cabelo turquesa que fez turnês com Lady Gaga e estrelou alguns jogos de videogame. Ao jornal The New York Times, o homem contou que o relacionamento dos dois durou pouco mais de uma década.

Segundo Kondo, eles comiam, dormiam e até mesmo assistiam a filmes. "Quando estávamos juntos, ela me fazia sorrir. Nesse sentido, ela era real", contou ele à reportagem.

"Se você se apaixonar por um personagem 2D, isso não é uma coisa ruim. Se você está realmente apaixonado por um personagem 2D, não minta para o seu verdadeiro eu", postou Kondo no Twitter.

Akihiko Kondo com a sua parceira Hatsune Miku  - Reprodução/Twitter/Akihikokondosk - Reprodução/Twitter/Akihikokondosk
Akihiko Kondo com a sua parceira Hatsune Miku
Imagem: Reprodução/Twitter/Akihikokondosk

A festa do casamento custou, na época, 3 milhões de ienes, algo em torno de R$ 115 mil reais, e contou com cerca de 40 convidados.

Contudo, não se pode dizer que foi 100% feliz, já que os pais do noivo não compareceram por não aceitarem a união.

Veja imagens do casamento abaixo:

O próprio Kondo diz que aceitar seus sentimentos foi algo difícil, principalmente porque sempre se sentiu atraído por personagens fictícios. Contudo, após começar a se relacionar com Miku, ele percebeu que o namoro tinha vantagens com relação a um parceiro humano: ela estará lá sempre para ele, nunca o traíra e ele "nunca teria que vê-la adoecer ou morrer".

Essa última parte, acabou se mostrando uma inverdade para ele.

"Morte" de Miku

Ao contrário do que muita gente pensa, o relacionamento do casal tinha, sim, interações. Kondo dormia diariamente ao lado da boneca de pelúcia com quem casou (e que possuía, inclusive, um anel de casamento).

Além disso, o japonês gastou cerca de R$ 10 mil em um aparelho que projetava a boneca e a estimulava a responder comandos com inteligência artificial. Miku respondia algumas frases, como "bom dia", "até mais tarde" etc.

Contudo, o momento mais difícil do casal chegou durante a pandemia de covid-19. Isso porque a fabricante, Gatebox, anunciou que iria desativar o serviço da boneca virtual.

Kondo contou ao The New York Times que no último dia com a amada, ele se despediu e saiu para o trabalho. Quando voltou, a imagem de Miku havia sido substituída pelas palavras "erro de rede".

Mas o amor seguirá, segundo ele, que diz que espera encontrar Miku um dia no metaverso. De qualquer forma, ele disse que planeja ser fiel a ela até morrer.