;(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();
})();
O que é diss? Composições sobre tretas artísticas viraram gênero musical
Baco Exu do Blues
Vulgo Jr. / Divulgação
De Splash, em São Paulo
26/02/2021 11h00
De tempos e tempos, artistas do mundo da música ficam trocando ofensas através dos seus trabalhos - direta ou indiretamente.
Sabe aquele shade no colega de trabalho por puro ódio? Então, no mundo da música isso é até meio normal. Já rolou até entre os Beatles, com John Lennon falando mal do Paul McCartney em "How Do YouSleep?".
Continua depois da publicidade
Se você esteve fora da internet, talvez não saiba que ontem (25), o cantor Froid publicou a prévia de uma diss que ele fez ao rapper Baco Exu do Blues. O tema esteve entre os mais comentados do Twitter.
Mas o que seria uma diss?
Diss é a abreviatura da palavra em inglês disrespect (desrespeito, em tradução livre) e é a palavra resume as tretas musicais.
Geralmente, a palavra vem acompanhada do termo track - diss track (ou música de desrespeito, em tradução literal). Esse termo ficou famoso com o rap dos anos 1990, uma espécie de "era de ouro" do ritmo nos Estados Unidos.
Continua depois da publicidade
Por lá, a divisão entre West e East Coast (costa Oeste e Leste, respectivamente) era forte no final do século ado e os artistas de lados rivais costumavam se atacar nas letras. Um dos exemplos mais conhecidos é o de 2Pac e Notorious B.I.G..
As trocas de ofensas entre os dois se tornaram clássicas.
Tudo começou quando 2Pac sofreu um atentado a tiros. Três meses depois do episódio, Notorious escreveu a canção "Who Shot Ya?" (Quem Atirou Em Você, em tradução literal). Alguns dizem que a música foi uma indireta, outros dizem que não.
Continua depois da publicidade
O que é certeza é que Pac acreditou que a indireta foi pra ele e retribuiu a diss com "Hit 'em Up" (Dar Uma Surra Neles, em tradução literal). Mas aí não teve indireta, foi direto e reto mesmo.
Biggie, lembra quando eu deixava você dormir no sofá?
Trecho da música "Hit 'Em Up"
Aquela cultura que cresceu nos anos 1990 ficou tão marcada que acabou virando um gênero dentro do próprio rap, com artistas fazendo sequências de músicas ofensivas uns para os outros. Outra clássica foi entre Eminem e Mariah Carey.
Se você já ouviu "Obsessed" por aí, saiba que é uma indireta (ou seria direta?) para o rapper.
Continua depois da publicidade
Voltemos ao Brasil e a história de Baco e Froid. A cultura da diss track chegou ao Brasil mais recentemente. Baco pode se dizer um "expoente" no gênero.
Uma das suas primeiras músicas de sucesso foi "Sulicídio", onde ele ataca boa parte dos rappers do eixo Sul e Sudeste. As ofensas foram tão pesadas que Baco se diz arrependido de ter escrito a canção - em parceria com Diomedes Chinaski.
Dessa vez, Baco publicou a prévia de uma música onde provocava e ofendia o rapper brasiliense Froid. Horas depois, Froid respondeu com a prévia de uma música atacando o cantor baiano. Pronto, a troca de diss track estava feita.
ID: {{comments.info.id}}
URL: {{comments.info.url}}
Ocorreu um erro ao carregar os comentários.
Por favor, tente novamente mais tarde.
{{comments.total}} Comentário
{{comments.total}} Comentários
Seja o primeiro a comentar
Essa discussão está encerrada
Não é possivel enviar novos comentários.
Essa área é exclusiva para você, , ler e comentar.
Só s do UOL podem comentar
Ainda não é ? Assine já.
Se você já é do UOL, faça seu .
O autor da mensagem, e não o UOL, é o responsável pelo comentário. Reserve um tempo para ler as Regras de Uso para comentários.