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

Esse conteúdo é antigo

Ucrânia treina civis para defesa em caso de invasão russa

17 nov. 2021 - Soldado do Exército ucraniano participa de exercício militar nas proximidades da fronteira com a Crimeia, em Kherson, Ucrânia - Serviço de Imprensa da Junta Geral das Forças Armadas da Ucrânia via Reuters
17 nov. 2021 - Soldado do Exército ucraniano participa de exercício militar nas proximidades da fronteira com a Crimeia, em Kherson, Ucrânia Imagem: Serviço de Imprensa da Junta Geral das Forças Armadas da Ucrânia via Reuters

Da AFP

28/12/2021 07h53Atualizada em 14/02/2022 08h58

Em uma área florestal próxima à capital da Ucrânia, Kiev, tropas russas falsas cercam os reservistas do exército ucraniano, com uniformes de camuflagem.

Os aspirantes a soldados, que incluem arquitetos e pesquisadores, respondem aos tiros com réplicas de fuzis Kalashnikov, enquanto granadas de fumaça explodem ao redor.

"Acredito que todos neste país devem saber o que faze... caso o inimigo invada o país", declarou à AFP Daniil Larin, estudante universitário de 19 anos, durante uma pausa no treinamento.

Larin é um dos 50 civis ucranianos que viajaram de Kiev até uma fábrica soviética de cimento abandonada para treinar durante o fim de semana e aprender como defender seu país de uma possível invasão russa.

Dezenas de civis alistaram ao exército de reservistas da Ucrânia nos últimos meses, diante do medo de invasão da Rússia, que Kiev acusa de concentrar 100 mil soldados em suas fronteiras.

Com 215 mil militares, o exército ucraniano enfrenta desde 2014 um conflito com os separatistas pró-Rússia do leste do país, uma guerra que já provocou 13 mil mortes.

Moscou nega qualquer plano de invasão, mas o presidente russo, Vladimir Putin, não descarta uma resposta militar se a Otan, organização que a Ucrânia deseja integrar, persistir com sua expansão para o leste.

O corpo de reservistas ucraniano, que alcançou 100.000 membros, aprende "como usar armas, como deve comportar-se no campo de batalha, como defender cidades", explica Larin à AFP.

Marta Yuzkiv, médica de 51 anos, acredita que o exército russo é "amplamente superior" ao da Ucrânia, mas que o risco de uma escalada militar é "muito alto" e justifica a adesão aos reservistas.

"Só teremos uma chance se estivermos todos preparados para defender nossa terra", disse.

Desde que se uniu aos reservistas em abril, Yuzkiv treina várias horas a cada domingo: ela fornece assistência médica, atira com os fuzis e cria pontos de controle.

O exército forneceu um uniforme militar, mas ela comprou o capacete, o colete à prova de balas e óculos táticos com o próprio dinheiro.

Seu grupo de aprendizes é parte de um batalhão treinado para defender Kiev em caso de ataque contra a capital da Ucrânia.

Vadym Ozirny, comandante de batalhão, explica que após uma reunião em um ponto de encontro, os reservistas devem trabalhar para proteger edifícios istrativos e infraestruturas críticas, assim como ajudar na retirada dos moradores.

"Com o equipamento, as armas e as ordens de comando, estas pessoas devem ter a capacidade defender sua casa", afirma Ozirny.

Denys Semyrog-Orlyk, um dos reservistas mais experientes, disse que está preparado para enfrentar a uma ofensiva real.

"Há oito anos, estou vivendo com o pensamento de que, até que consigamos dar um bom golpe na cara da Rússia, eles não nos deixarão em paz", disse o arquiteto de 46 anos à AFP.

"Entendo perfeitamente que sou um soldado. Posso ser convocado e tenho atuar como um militar", completou.