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

Ops! Migração de servidor faz MySpace perder 12 anos de conteúdo

Rede social "pré-histórica" perdeu boa parte daquilo que fazia dela diferente - Reprodução
Rede social "pré-histórica" perdeu boa parte daquilo que fazia dela diferente Imagem: Reprodução

Rodrigo Lara

Colaboração ao UOL, em São Paulo

18/03/2019 18h46

Há pouco mais de uma década, a rede social MySpace cumpria uma função que, de certa maneira, acabou sendo assumida pelo Facebook: era nela que usuários de internet interagiam entre si, produziam conteúdo e publicavam fotos e vídeos.

Para termos uma noção do tamanho desta rede, em 2006 ele chegou a ultraar o Google como site mais ado dos Estados Unidos.

Além desse aspecto social, o MySpace também contribuía como meio de divulgação de músicas por bandas novatas. O site chegou até mesmo a ter uma gravadora, a MySpace Records. Bandas como Arctic Monkeys e Drop Dead, assim como artistas do calibre de Lily Allen, ficaram famosos por meio do site. Em 2014, já longe do auge, a página contava com mais de 53 milhões de músicas de 14,2 milhões de artistas.

Sim, contava: uma migração de servidor - ao menos é o que empresa afirma - fez com que fotos, vídeos e músicas publicadas no site entre 2003 e 2015 simplesmente sumisse.

Em um comunicado à BBC, a empresa foi sucinta: "Como resultado de um projeto de migração de servidor, qualquer foto, vídeo ou arquivos de áudio que você subiu no site há mais de três anos pode não estar mais disponível no ou do MySpace".

"Nós pedimos desculpa pelo inconveniente", encerra o comunicado.

O problema com a reprodução de conteúdo - especialmente músicas - no site não vêm de hoje. Há pouco mais de um ano, usuários relatavam que não conseguiam ouvir músicas mais antigas no site. Na ocasião, o MySpace não citou nenhuma migração de conteúdo, limitando-se apenas a dizer que enfrentava "problemas técnicos".

Da mesma maneira, a empresa não comentou a possibilidade do conteúdo indisponível ser reavido. Ainda que o problema não deva afetar de forma alguma bandas que se tornaram gigantes com o tempo, músicos menos famosos podem, simplesmente, ter visto o seu trabalho sumir de uma hora pra outra.