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

SP prevê tornozeleiras eletrônicas para monitorar agressores de mulheres

Tornozeleiras eletrônicas usadas no sistema prisional do Estado de São Paulo, fotografadas na Secretaria de istração Penitenciária de São Paulo, em 2017 - Bruno Santos/Folhapress
Tornozeleiras eletrônicas usadas no sistema prisional do Estado de São Paulo, fotografadas na Secretaria de istração Penitenciária de São Paulo, em 2017 Imagem: Bruno Santos/Folhapress

São Paulo

27/09/2022 12h14Atualizada em 27/09/2022 12h31

O governo estadual de São Paulo publicou nesta terça-feira, 27, um edital para contratar 1 mil tornozeleiras eletrônicas a serem usadas por agressores de mulheres que cumprem medidas protetivas concedidas pela Justiça. O objetivo é que as vítimas fiquem com uma unidade portátil do dispositivo, capaz de rastrear a aproximação do agressor por meio de um sistema de geolocalização.

O dispositivo em posse das vítimas emite um alarme ao detectar que o agressor violou a área delimitada pela decisão judicial. Simultaneamente, o aparelho envia também um aviso à Polícia Militar e notifica se o agressor tentar remover o equipamento sem autorização.

Em caso de violação, uma das penas previstas é a prisão preventiva do agressor. Para Fernando José da Costa, secretário da Justiça e Cidadania, a medida permitirá que as mulheres "vivam sem a ameaça do retorno dos seus algozes".

"É algo novo e inédito em São Paulo e tenho certeza que será um grande o no combate ao feminicídio", afirmou o secretário da Segurança Pública, general João Camilo Pires de Campos. Ainda nesta segunda-feira, 26, o Estadão mostrou que houve aumento dos estupros registrados em agosto, com 1.180 notificações no Estado - o pior resultado para o mês na última década.

Apesar de a Lei Maria da Penha garantir que mulheres vítimas de violência não possam ser contatadas presencial ou virtualmente pelos agressores, essa proteção costuma ter baixa efetividade sem o monitoramento e acompanhamento dos casos. Ainda no último dia 12, uma mulher e o filho foram mortos pelo ex-marido na zona leste da capital enquanto ela o levava à escola.

Denúncias de violência doméstica ou agressão contra mulheres podem ser feitas gratuitamente por meio do número 180 ou em uma Delegacia da Mulher, virtual ou presencial.