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

Para combater solidão, assistentes sociais receitam Pokémon Go a idosos

Pokémon Go - Divulgação
Pokémon Go Imagem: Divulgação

09/07/2019 17h02

Em Barcelona, assistentes sociais estão receitando o game Pokémon Go para idosos que sofrem de solidão. O game incentiva pessoas a andarem pelas ruas e encontrarem outros jogadores.

O jogo para celulares, que já foi baixado mais de 1 bilhão de vezes, utiliza realidade aumentada para que as pessoas encontrem monstrinhos nas cidades. Ele contém recursos para lutar contra outros jogadores e ou unir-se a eles.

Os pesquisadores Larissa Hjorth e Jordi Jimenez, que estudam videogames e socialização, contam no site The Conversation como Pokémon Go tem revolucionado Badalona, cidade da província de Barcelona.

Eles citam o caso de uma enfermeira de 67 anos, identificada apenas como Sofia, que aprendeu a jogar com seu neto, de sete anos. Viúva, ela viu no game uma forma de enfrentar a depressão e redescobrir a cidade. "Ela se via andando nas ruas em busca de Pokémon. Viagens comuns ao mercado ou lojas se tornaram verdadeiras aventuras nas quais ela reinventa caminhos para capturar mais Pokémon", dizem.

"Badalona é um grande exemplo de como jogos intergeracionais podem redefinir a cidade permitindo jogadores usarem os diferentes sentidos - toque, som, visão - que o jogo estimula", comentam. Só em 2018, foram mais de 29 mil pessoas jogando Pokémon Go na cidade.

Até onde o jogo reinventa a cidade

Os pesquisadores também ressaltam como Pokémon Go demonstra as desigualdades da cidade. Em Badalona, por exemplo, notaram que há menos espaços para jogar em áreas periféricas.

O assunto é debate desde o lançamento do jogo. O algoritmo do game prioriza áreas com mais jogadores. Como é necessário um smartphone para jogar, regiões mais pobres acabam sendo ignoradas. É algo que os pesquisadores ressaltam que precisa ser debatido para ajudar a interagir com a cidade como um todo e de forma inclusiva

"Há muito o que podemos aprender das estratégias de Badalona para envelhecer bem, focando na experiência", comentam os pesquisadores. "Em vez de inventar novos aplicativos com novas cartografias para a cidade, eles reinventam o mundano. Devemos olhar para o jogo cívico urbano para inovar", completam.

Fique por dentro de comportamento e cultura seguindo o TAB no Instagram e tenha conteúdos extras sobre inovação, tecnologia e estilo de vida.