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

Primeira escola pública de surfe do país atende alunos de 5 a 83 anos

Primeira escola pública de surfe do país foi inaugurada em Santos em 1992 - Rê Sarmento/Divulgação Prefeitura de Santos
Primeira escola pública de surfe do país foi inaugurada em Santos em 1992 Imagem: Rê Sarmento/Divulgação Prefeitura de Santos

Rafael Motta

Do UOL, em Santos (SP)

08/02/2013 05h30

A Escola Radical de Surf, primeira do gênero no Brasil, foi inaugurada há 20 anos, em junho de 1992. Mantida pela prefeitura, atende cerca de 2.000 alunos por ano –250 inscritos para aulas de março a dezembro, e os demais em cursos de verão e aulas esporádicas, segundo o coordenador, Francisco Alegre Araña, o Cisco, 55.

INSPIRAÇÃO PELO SURFE

  • Francisco Arrais/Divulgação Prefeitura de Santos

    Cego se forma em educação física e inicia segunda graduaçãoem direito; quer ser juiz

A cidade é pioneira na prática do surfe. Foi em Santos que um brasileiro “pegou ondas” pela primeira vez: Osmar Gonçalves (1922-1999). Em 1938, ajudado por dois amigos, Gonçalves construiu uma prancha baseada num modelo norte-americano, era de madeira, pesava em torno de 80 quilos e tinha 3,90 metros de comprimento.

Atualmente, o aluno mais novo da Escola Radical tem 5 anos, e a mais velha, 83. Também se atendem pessoas com deficiências físicas e mentais. Além de Araña, há outros quatro professores formados em educação física e pós-graduados. “É um curso totalmente ligado à natureza, com orientações sobre o mar e a vida marinha”, explicou o coordenador.

A escola fica no Posto de Salvamento 2, na praia da Pompeia, entre os canais 1 e 2 (avenidas Senador Pinheiro Machado e Bernardino de Campos). As aulas são gratuitas. As inscrições devem ser feitas pessoalmente, de segunda a sexta-feira, das 8 às 18h.

Mais detalhes pelo telefone (13) 3251-9838.