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

Boulos tenta romper hegemonia do PT na esquerda em São Paulo

16.ago.2018: Luiza Erundina com Guilherme Boulos formarão chapa do PSOL à Prefeitura de SP - Folhapress
16.ago.2018: Luiza Erundina com Guilherme Boulos formarão chapa do PSOL à Prefeitura de SP Imagem: Folhapress

Ricardo Galhardo

São Paulo

05/09/2020 11h08

O professor e líder do movimento por moradia MTST (Movimento dos Trabalhadores Sem Teto), Guilherme Boulos, de 38 anos, será oficializado hoje como candidato do PSOL à Prefeitura de São Paulo com a possibilidade de romper pela primeira vez em mais de três décadas com a hegemonia do PT no campo da esquerda na maior cidade do Brasil.

Segundo o próprio Boulos, a campanha terá duas frentes. A primeira, nacional, tem como objetivo consolidar o papel cultivado desde a campanha presidencial de 2018 de oposição ao presidente Jair Bolsonaro. A segunda, local, tem como meta o eleitorado dos bairros de periferia onde se concentra a população mais carente da cidade.

Nos dois casos Boulos vai disputar espaço com o PT, embora ele mesmo diga que o partido do ex-presidente Luiz Inácio Lula da Silva não é seu alvo na campanha. "Não acho que a questão seja essa (disputar espaço com o PT). Minha proposta é apresentar um projeto que derrote tanto o bolsonarismo quanto Bruno Covas/João Doria (prefeito e governador de São Paulo)", disse ele.

Para reforçar com símbolos o compromisso com a periferia, Boulos escolheu um campo de futebol no meio da comunidade carente do Morro da Lua, Campo Limpo, bairro onde mora, para a convenção que vai oficializar neste sábado a candidatura.

Além disso, já anunciou que, se for eleito, pretende criar um gabinete itinerante no qual pretende despachar da periferia. "Sua cabeça pensa onde seu pé pisa", disse o pré-candidato.

Outro símbolo importante é a escolha da deputada Luiza Erundina (PSOL-SP), de 85 anos, como vice. Eleita prefeita de São Paulo pelo PT em 1988, Erundina fez uma gestão voltada para a periferia que deixou marcas visíveis até hoje como a construção de hospitais e a criação de mutirões habitacionais.

Por outro lado, Boulos aposta que as questões nacionais amplificadas pela gestão polêmica de Bolsonaro estarão presentes no debate da eleição municipal. "Essa vai ser uma campanha nacional. Não tem outro jeito. É impossível fazer uma campanha em 2020 sem falar do Bolsonaro. Isso vai estar no debate", disse ele.

Perfil

Filho dos médicos Marcos Boulos e Maria Ivete de Castro Boulos, ambos professores da faculdade de Medicina da Universidade de São Paulo (USP), o pré-candidato do PSOL é formado em filosofia também pela USP e pós-graduado em psicologia clínica pela PUC. Foi professor da rede pública e ingressou em 2002 no movimento de luta por moradia.

Crítico feroz dos governos do PT, Boulos fez um movimento de aproximação com Lula principalmente a partir do início do processo de impeachment da ex-presidente Dilma Rousseff, quando mobilizou milhares de pessoas em protestos contra o afastamento de Dilma e a prisão de Lula.

Em 2018, se filiou ao PSOL e concorreu à presidência. Conseguiu 617 mil votos, o pior desempenho do partido em eleições presidenciais.

No final de julho, Boulos recebeu apoio de centenas de grandes nomes das artes e da intelectualidade brasileira como Chico Buarque de Holanda, Caetano Veloso, Marilena Chauí, André Singer, Criolo e Emicida, o que lhe deve valer votos também na classe média.

Desde o mês ado ele tem andado pelos bairros da periferia e se reunido com líderes comunitários, apesar das restrições impostas pela pandemia do novo coronavírus. Além disso, vai apostar na mobilização online. Ele tem 2,8 milhões de seguidores no Twitter, atrás apenas de Joice Hasselmann, pré-candidata do PSL, com 3,2 milhões.

Na quinta-feira, ele e Erundina foram multados em R$ 5 mil pelo Tribunal Regional Eleitoral (TRE) por causa de um vídeo publicado nas redes considerado propaganda antecipada.