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

Como conter um gigante?

Em 2021, o Facebook se viu exposto. Se até ele defende a regulação, por que ela não sai do papel?

Letícia Naisa De Tilt, em São Paulo
  • União Europeia

    Parte da lei de proteção de dados do bloco serve para as redes sociais, e o Parlamento tem tentado impor outras regras para reduzir desinformação, incitação à violência e ao ódio e exigir transparência de algoritmos. Também há um movimento de restringir qualquer tipo de correlação dos dados pessoais. O Ato dos Mercados Digitais caminha pra definir uma lista do que Amazon, Apple, Facebook e Google podem ou não fazer na Europa --e que, em essência, força as empresas a mudarem seus modelos de negócios para permitirem mais competição.

  • China

    Aprovou em agosto uma lei para proteção da privacidade na internet que afeta diretamente as grandes da tecnologia. As companhias públicas e privadas devem reduzir ao mínimo a coleta de informações pessoais e obter consentimento prévio. A regra foi uma resposta ao aumento do número de fraudes na internet, vazamentos de dados e uso de algoritmos.

  • Austrália

    Encabeçou um movimento importante de pressão sobre as plataformas que resultou em uma lei que obriga as empresas de tecnologia a negociarem com os veículos de imprensa uma contrapartida por usar notícias em seus sistemas de busca ou nas redes sociais. Esta foi uma tentativa de garantir mais espaço ao jornalismo profissional em meio à avalanche de desinformação e discursos violentos alimentada pelos algoritmos e pela moderação falha.

  • EUA

    As disputas políticas em torno do direito à liberdade de expressão e os rápidos avanços na tecnologia mantêm qualquer legislação parada, mas a pressão por regulação só cresce, conseguindo apoio explícito de democratas e republicanos. Por diversas vezes, os chefes de Apple, Google, Facebook, Twitter e Amazon, por exemplo, foram sabatinados no Congresso norte-americano e há um intenso debate em torno de seção 230 --que dá proteção legal no exercício de moderar o que é postado online por usuários.

  • Brasil

    Por aqui, a seção 230 é parecida com o que estabelece o Marco Civil da Internet. A LGPD (Lei Geral de Proteção de Dados) também já vale nos moldes da lei europeia, impedindo coletar, guardar ou rear dados pessoais sem consentimento ou por tempo indeterminado. Além disso, toda ação deve respeitar a Constituição. Parte dos especialistas ouvidos por Tilt considera que essas já são as regras do jogo e funcionam para regular as plataformas, por isso não há necessidade de outras específicas -- "o que poderia afetar a autonomia das empresas sobre seus negócios e atingir direitos e garantias individuais", diz Beatriz Pistarini, advogada especialista em direito digital. Para outros, falta um órgão como a ANPD (Autoridade Nacional de Proteção de Dados Pessoais).

Topo