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

Trago Boas Notícias #243: Milo Araújo: dicas para usar a bike com segurança

Podcast Trago Boas Notícias é publicado de segunda a sexta, às 18h, no UOL e Spotify - Arte/ UOL
Podcast Trago Boas Notícias é publicado de segunda a sexta, às 18h, no UOL e Spotify Imagem: Arte/ UOL

Do UOL

23/03/2022 17h35

No episódio #243 do podcast Trago Boas Notícias, Edgard Piccoli conversa com Milo Araújo, que dá dicas sobre como usar a bicicleta como meio de transporte, principalmente nas grandes cidades. A Milo é artista plástica, diretora de arte e também é colunista de Ecoa, onde escreve sobre esse universo dos ciclistas.

Ouça abaixo a entrevista completa:

Ela nasceu e cresceu no Capão Redondo, em São Paulo. Quando criança, andava de bicicleta pelas ruas do bairro, como brincadeira e forma de lazer. Anos depois, ao entrar para a faculdade, a Milo se mudou para a região central de SP e, na intenção de facilitar a locomoção, comprou uma bicicleta elétrica.

"Eu nunca fiz muito esporte, nunca tive essa ligação com meu corpo, nesse sentido de potência, de [que] ele consegue fazer as coisas. [...] A gente sabe como a gente é levado a acreditar que não consegue fazer várias coisas. Então eu lembro que parcelei em um milhão de vezes uma bike elétrica e aí comecei a pedalar. Assim comecei a perder o medo da rua" (ouça a partir de 2:50).

Milo - Arquivo Pessoal - Arquivo Pessoal
Milo Araújo, colunista de Ecoa
Imagem: Arquivo Pessoal

Depois a Milo comprou uma bike fixa, sem motor. E se conectou a um grupo de pedal só de pessoas pretas. "É muito diferente pedalar em grupo e pedalar sozinho. Você se desenvolve muito mais, aprende com todo o conhecimento que o grupo coloca ali na roda, todo mundo se nutre dos conhecimentos do outro" (a partir de 04:53). "Trajetos que você nunca faria sozinha, por achar que você não consegue cobrir a distância, você consegue fazer quando está em um grupo."

Além disso, os grupos acabam garantindo um pouco mais de segurança nos trajetos. "É mais difícil ignorar um grupo de ciclistas do que um ciclista. É mais difícil alguém falar que não te viu." (em 09:07).

Ainda sobre essa questão da segurança, Milo considera que as ciclofaixas ajudam muito. Mas pondera: "A bicicleta não precisa estar necessariamente na ciclofaixa, a gente pode andar na rua porque a rua é nossa também". (a partir de 07:47).

E, para quem quer começar a usar a bike como um meio de transporte, ela aconselha (a partir de 12:06): "Pesquise a bicicleta que você vai adquirir, uma que faz sentido para o seu objetivo: se é para pedalar para trabalho, se o seu percurso é longo ou não, se tem ladeira ou não. [...] Pesquise onde você vai, as suas vias, se você vai ter que ar por um viaduto, sempre ande à direita, de preferência, que é a pista de velocidade mais baixa, ocupando o meio da faixa".

Os podcasts do UOL estão disponíveis em uol.com.br/podcasts. Você pode ouvir Trago Boas Notícias no UOL e também no Spotify. Novos episódios de segunda a sexta, às 18h.

Edgard Piccoli é o apresentador do podcast Trago Boas Notícias - Arte/UOL - Arte/UOL
Edgard Piccoli é o apresentador do podcast Trago Boas Notícias
Imagem: Arte/UOL