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

RJ: Witzel fecha primeiro ano de governo com recorde de mortes pela polícia

Wilson Witzel (PSC), governador do Rio, usa farda do Bope e simula ação de sniper - Reprodução
Wilson Witzel (PSC), governador do Rio, usa farda do Bope e simula ação de sniper Imagem: Reprodução

Igor Mello

Do UOL, no Rio

21/01/2020 16h43

Resumo da notícia

  • O Rio teve no ano ado 1.810 mortes em suposto confronto, alta de 18% ante 2018
  • Indicador de crimes violentos letais, que abarca homicídios dolosos, teve queda de 20%

O governador Wilson Witzel (PSC) fechou o primeiro ano de sua gestão à frente do Rio de Janeiro com o maior número de mortes cometidas por policiais na história do Rio.

De acordo com o ISP (Instituto de Segurança Pública), órgão responsável por compilar as estatísticas criminais do Rio, o estado teve no ano ado 1.810 mortes em suposto confronto —um crescimento de 18% em relação a 2018, quando houve 1534 vítimas. Em dezembro, as forças policiais do Rio mataram 124 pessoas, de acordo com as estatísticas divulgadas hoje pelo ISP.

Witzel se elegeu defendendo uma política de confronto contra traficantes. Entre suas políticas está a defesa do "abate" de criminosos que portem armas de fogo —alvo de uma ação no STF (Supremo Tribunal Federal) movida pelo PSB.

Ao longo do ano, o estado colecionou uma série de episódios e dados negativos no que diz respeito à violência policial. Julho de 2019 foi o mês mais violento da história da segurança pública do Rio. Também foi sob a gestão Witzel que o estado teve a operação policial mais letal da última década —em fevereiro, uma ação da PM nos morros do Fallet e Fogueteiro, em Santa Teresa, deixou um saldo de 13 mortos. Na ocasião, a Defensoria Pública do Rio e moradores denunciaram indícios de execução na ação.

Os demais crimes contra a vida tiveram queda no Rio em 2019. O indicador CVLI (Crimes Violentos Letais Intencionais) —que considera homicídios dolosos, latrocínios e lesões corporais seguidas de morte— teve queda de 20% —de 5.180 vítimas em 2018 para 4.154, em 2019.

O número de homicídios dolosos é o menor registrado desde 1991, quando começaram a ser compiladas as estatísticas oficiais. Foram 3.995 casos, contra 4.950 em 2018.

Um estudo divulgado pelo MP-RJ (Ministério Público do Rio) este ano mostrou, com base em dados, que o aumento de letalidade da polícia não tem nenhuma correlação com a queda de homicídios — que é um fenômeno registrado em todo o país.

Outras estatísticas

  • O indicador roubo de cargas teve redução de 18,8%: de 9182, em 2018, para 7455, no ano ado;
  • O indicador roubo de rua (roubos a transeuntes, a coletivos e de celulares) teve redução de 7,8%: de 130.620 ocorrências, em 2018, para 120.456, em 2019;
  • O indicador roubo de veículos --que inclui também furtos de carros-- teve queda de 23%: 52.097, em 2018, para 39749, no ano ado;