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

Computação quântica pode ajudar algoritmos a fazer previsões melhores

Getty Images
Imagem: Getty Images

Carolina Unzelte

Colaboração para Tilt, de São Paulo

25/08/2022 19h53

Talvez você já tenha ouvido falar de machine learning — a tecnologia de inteligência artificial que permite que algoritmos aprendam padrões e façam previsões. E talvez você também já conheça a computação quântica, campo que busca desenvolver algoritmos processados por sistemas com átomos, fótons e partículas subatômicas. Já parou pra pensar que é possível juntar os dois?

A combinação dessas duas áreas pode "melhorar as garantias para aprendizagem da máquina, que entregarão melhores predições", explica André Juan Ferreira Martins, cientista de dados no Itaú-Unibanco e professor de ciência de dados e machine learning na Let's Code. "Isso não significa que serão modelos mais rápidos, mas com mais possibilidades".

O especialista falou sobre o tema na The Developer's Conference (TDC) Business, uma das principais conferências para desenvolvedores da América Latina, que teve seu último dia hoje (24) em São Paulo.

Para se ter uma ideia, machine learning já é aplicado amplamente no nosso cotidiano. Ao se locomover usando um apps de transporte, estes algoritmos estão lá, com a determinação do preço das corridas e otimização do tempo de espera por carros. Quando você abre a Netflix, as sugestões do catálogo para você aram por isso também.

Agora, cientistas estão tentando aplicar o machine learning em computadores quânticos, de forma a prover modelos ainda mais sofisticados.

"Apesar de estarmos nos estágios iniciais da computação quântica, já temos alguns hardwares para uso", diz Martins. Esses equipamentos ainda não são escaláveis, e o quantum machine learning (QML) está na chamada "era nisq", uma sigla em inglês para máquinas intermediárias e ruidosas.

"Essa era ainda vai durar uns 5 anos", acredita Martins. Mas as aplicações da área prometem. O campo, que começou a ser explorado só na década ada, está ando por um momento de fundamentação.

"Poderemos resolver questões que mesmo com redes neurais não conseguimos ainda", diz o especialista. "É o momento de dar um o para trás e quantificar as coisas, ver quais são as melhores perguntas a se fazer e o que podemos esperar de QML."

TDC Business

A TDC Innovation Business neste ano aconteceu no formato híbrido, isto é, foi possível participar de maneira presencial, em São Paulo, ou no formato online. A conferência começou na última segunda-feira (22) e acabou nesta quarta-feira (24).

A TDC foi criada para conectar palestrantes, empresas, profissionais e entusiastas para debater temas que estão em alta no mercado de tecnologia, possibilitando capacitação e troca de experiências.

Os participantes podem conferir 33 trilhas de conteúdo , pagas e segmentadas por Inteligência Artificial e Machine Learning, UX Design, Data Science, Transformação Digital, entre outros.