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

Projeto que capacita jovens de baixa renda tem inscrições abertas em SP

Processo seletivo para 2ª edição do curso gratuito de capacitação profissional - Divulgação
Processo seletivo para 2ª edição do curso gratuito de capacitação profissional Imagem: Divulgação

Cleber Souza

Do UOL, em São Paulo

21/10/2020 18h11Atualizada em 21/10/2020 18h11

Estão abertas até 11 de dezembro as inscrições para a 2ª edição do projeto gratuito com oportunidades para jovens de baixa renda em São Paulo. Realizado pelo Instituto Proa — uma ONG que visa criar oportunidades de desenvolvimento e empregabilidade —, o programa disponibiliza 150 vagas. As inscrições podem ser feitas pelo site https://www.proa.org.br/p/aluno-proa.

Os candidatos devem ter entre 17 a 20 anos, estar cursando ou já ter concluído o terceiro ano do ensino médio na rede pública de ensino e ter interesse na área de programação e tecnologia.

Alini Dal'Magro, diretora do instituto, diz que houve uma mudança na grade curricular para o ano que vem na tentativa de proporcionar mais oportunidades aos alunos e prepará-los para o mercado de trabalho.

"Nunca deixaremos de lado o nosso foco nas competências comportamentais e socioemocionais, como capacidade para trabalhar em grupo, resiliência e criatividade, porém com esse escopo técnico, o jovem terá uma ampla e inovadora formação em tecnologia", afirma Alini.

Desde 2007, foram formados cerca de 5.700 jovens no projeto, e, segundo o Proa, 8 a cada 10 alunos dos concluintes em 2019 estão empregados.

Ex-aluno do Proa e hoje analista de infraestrutura no C6 Bank, Thiago Kuhl, 20, diz que o mercado de tecnologia está aquecido e que foi fundamental ter apoio ao escolher se formar na área. "Todos os ensinamentos das aulas e os professores me fizeram ser mais maduro e ter uma visão mais ampla do mercado de trabalho."

Colega de Thiago no C6 Bank, Jenniffer Patrocínio, 20, também fez o curso do Proa e hoje é formada em análise e desenvolvimento de sistemas.

"Graças ao curso conheci a faculdade e pude ter outra perspectiva de vida", diz Jenniffer.

Gerente da área de segurança da informação e gestor de Jenniffer, Arthur Paixão, ressalta a importância da formação no mercado de tecnologia. "Quando se é jovem e se tem a oportunidade de estudar em um lugar que lhe capacita e dá apoio faz toda diferença", afirmou.

A Brasscom (Associação Brasileira das Empresas de Tecnologia da Informação e Comunicação) aponta que a área de TI deve ter até o ano de 2024 cerca de 290 mil vagas em aberto, mas que o setor tem um grande desafio com relação à falta de mão de obra qualificada.

Cronograma e como é o curso

O início do curso está previsto em março de 2021 de forma presencial, mas o instituto afirma que estar preparado caso seja necessária a continuidade das aulas online devido à pandemia da covid-19.

Com duração de seis meses, as aulas podem ser realizadas no período da manhã, das 9h às 13h, ou tarde, das 14h às 18h, na unidade do Senac Lapa Tito, na zona oeste de São Paulo. São quatro módulos do curso divididos da em: técnico + comunicação (248 horas), projeto de vida (76 horas), raciocínio lógico e lógica de programação (30 horas) e módulo de vivências (66 horas).

Ao final do curso os formados no projeto serão encaminhados para entrevistas em empresas parceiras do projeto e serão acompanhados pelo Instituto Proa por três anos.