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

O futuro da guerra: veja vídeo de drone chinês soltando um cão-robô armado

Cachorro-robô armado, criado pela Kestrel Defense, que pode ser carregado por drone até a linha inimiga - Reprodução/Weibo
Cachorro-robô armado, criado pela Kestrel Defense, que pode ser carregado por drone até a linha inimiga Imagem: Reprodução/Weibo

Colaboração para Tilt

11/10/2022 11h57

Parece coisa de cinema: em uma cidade aparentemente abandonada, um drone poua, deixa um equipamento no chão e vai embora. O "equipamento" subitamente estica as "patas" e começa a circular: é um cão-robô autônomo, como os vistos na segurança do último Rock in Rio. Mas com uma diferença: ele tem uma arma acoplada nas "costas".

Nos últimos dias, o vídeo viralizou no Twitter e no Reddit, mas ele foi postado originalmente na página Weibo, serviço de microblog chinês similar ao Twitter.

O robô, muito similar ao produzido pela Boston Dynamics, na verdade também é uma tecnologia chinesa, criada pela Kestrel Defense. O drone, batizado como Red Wing ("Asa Vermelha"), é capaz de transportá-lo para além das linhas inimigas.

Segundo a legenda do vídeo, os cães de guerra "podem ser inseridos diretamente no elo fraco do inimigo para lançar um ataque surpresa ou podem ser colocados no telhado para ocupar as alturas de comando e suprimir fogo inimigo".

Empresas americanas prometem não armar robôs

Cães-robôs chineses já viralizaram outras vezes, como o que percorria as ruas chineses reforçando a importância do lockdown, durante a pandemia de covid-19.

A evolução deste modelo, porém, chama a atenção por causa das crescentes tensões diplomáticas entre EUA e China e entre China e Taiwan; além da guerra entre Rússia e Ucrânia.

Coincidentemente, esta semana, a Boston Dynamics prometeu jamais criar robôs armados, como o da Kestrel. O compromisso foi firmado em uma carta pública assinada também por outras empresas ocidentais do ramo, como Agility Robotics, ANYbotics, Clearpath Robotics, Open Robotics e Unitree Robotics.

"Acreditamos que acrescentar armas a robots que são operados à distância ou de forma autônoma, amplamente disponíveis ao público, e capazes de navegar para locais anteriormente iníveis, onde as pessoas vivem e trabalham, levanta novos riscos de danos e graves questões éticas", afirmam as empresas na declaração.

Os militares dos EUA, porém, não planejam ficar atrás. Em parceria com a General Dynamics, as Forças Armadas estão desenvolvendo seus próprios equipamentos de controle remoto com força letal, como o MUTT (sigla em inglês para Transporte Tático Multiutilitário).

Robô com força letal MUTT, criado pela General Dynamics para as Forças Armadas dos EUA em 2016 - Divulgação/DVIDS - Divulgação/DVIDS
Robô com força letal MUTT, criado pela General Dynamics para as Forças Armadas dos EUA em 2016
Imagem: Divulgação/DVIDS