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

Não quer deixar seu cão sozinho? Com essa tecnologia, ele poderá te ligar

Com o Dogphone, uma bolinha permite que o cachorro ative um sistema de videochamada; na imagem, o labrador Zack da doutora Ilyena Hirskyj-Douglas - Arquivo pessoal/Ilyena Hirskyj-Douglas
Com o Dogphone, uma bolinha permite que o cachorro ative um sistema de videochamada; na imagem, o labrador Zack da doutora Ilyena Hirskyj-Douglas Imagem: Arquivo pessoal/Ilyena Hirskyj-Douglas

Claudio Gabriel

Colaboração para Tilt, no Rio de Janeiro

19/11/2021 16h02

Uma bola. Essa pode ser uma das melhores companhias de animais de estimação quando os donos estão fora de casa. Mas sabia que ela também pode se transformar em uma ferramenta de comunicação do animal com o dono? Pois é isso que um aparelho desenvolvido por pesquisadores da Universidade de Glasgow, na Escócia, e da Aalto University, na Finlândia, faz.

Apelidado de DogPhone, o dispositivo funciona como uma bola normal, macia para toque do animal, que, logo quando é movida, envia um sinal para um laptop. Assim, é iniciada uma videochamada com o som de um telefone tocando normalmente. É uma forma de averiguar se o bichinho está bem ou se tem algum problema.

Dessa maneira, a pessoa pode escolher se deseja atender a chamada ou desligar, e também pode ligar a qualquer momento para o animal de estimação. Os cientistas dizem que essa opção pode ser um pouco mais complicada, já que o pet teria que se mover em direção à câmera para que ele pudesse ser visto pelo dono.

A autora da pesquisa utilizada para criar essa tecnologia, doutora Ilyena Hirskyj-Douglas, disse em entrevista ao The Guardian que "essa é apenas uma forma de demonstrar que os cachorros podem controlar a tecnologia".

A pesquisa do DogPhone foi publicada na revista científica Proceedings of the Association for Computing Machinery on Human-Computer Interaction e apresentada na conferência polonesa de Superfícies e Espaços Interativos, de 2021, organizada pela associação que cuida da mesma revista.

O que rolou

Ainda em entrevista ao The Guardian, Ilyena contou que as tecnologias existentes já permitem que o dono "meça os os de seus animais de estimação" e possam até mesmo alimentá-los remotamente. No entanto, não há nada que permita que o cachorro tenha uma participação ativa no processo.

Os pesquisadores contam que o aparelho ou por uma série de interações capazes de garantir a sensibilidade perfeita do toque para a ligação. Ilyena testou o aparelho durante 16 dias com seu labrador de nove anos, o Zack.

Ela fez um diário com as ligações entre o dono e o animal. O problema é que ela viu que nem sempre o cachorrinho sabia o que estava fazendo, apesar de ter aparecido na câmera com perfeição em cinco ocasiões.

Em um dos momentos, por exemplo, ela conta no estudo que Zack ligou, mas não parecia muito curioso com a interação, só com a própria cama. Em outro, ele ficou apenas ando com o rabo balançando na frente da câmera.

Por que isso importa?

"É apenas a opção de dar aos cachorros uma escolha", contou a pesquisadora ao jornal britânico. "Ainda que a gente não entenda a escolha deles, não significa que eles não deveriam ter uma."

De acordo com ela, o DogPhone pode trazer benefícios aos animais de estimação, especialmente no contato enquanto o dono estiver ausente. Mesmo assim, ela até ite que ficou com "alguma ansiedade" ao interagir com seu cachorrinho.

E Ilyena ainda vai além, dizendo que esse dispositivo vai poder dar tanta independência aos pets que no futuro eles poderão até ligar uns para os outros. "Existem tantas possibilidades diferentes que você poderia ter", completa.