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

Histórico

Fefito

OPINIÃO

Texto em que o autor apresenta e defende suas ideias e opiniões, a partir da interpretação de fatos e dados.

Reality show da família de Gilberto Gil dá de dez a zero nas Kardashians

Gilberto Gil na série "Em Casa Com os Gil" - Reprodução/Prime Video
Gilberto Gil na série "Em Casa Com os Gil" Imagem: Reprodução/Prime Video

Colunista do UOL

29/06/2022 12h11

Quem vai assistir a "Em Casa com os Gil" esperando por um reality show com tretas de família como "The Kardashians" ou "The Osbournes" vai perceber um grande equívoco. Embora no primeiro episódio Preta Gil brinque que quer ser a Kim Kardashian da atração, a série documental do Prime Video a bem longe disso - ainda bem. O que se vê, ao longo de cinco episódios, é um registro intimista de um dos maiores artistas do país e uma breve revisão de sua obra, pelos olhos de filhos, netos, noras, genros, esposa. Gilberto Gil merece esse material histórico e delicado, em que a câmera parece um parente, de tão infiltrada na rotina de todos.

Ao contrário das Kardashians, por exemplo, não há espaço para grandes futilidades. Até mesmo questões estéticas são colocadas de maneira mais substancial e profunda, embora, por vezes, a introdução a alguns assuntos pareça menos orgânica. O discurso, no entanto, é muito acertado. Mais do que refletir sobre o mundo pós-pandêmico, o que o programa se propõe é apresentar para todo o país uma família com dinâmica própria, muito unida e amorosa, mas com leves pontos de tensão e também traumas a superar.

São muito fortes, por exemplo, depoimentos sobre o racismo sofrido pelos filhos do cantor, que não conseguiam, mesmo sendo filhos de um famoso, estudar num colégio perto de casa por "nunca ter vaga". Em dado momento, Nara Gil - ícone de "Armação Ilimitada" - conta que seu filho já foi perseguido por um segurança.

É normal que, em frente às câmeras, todos queiram evitar conflitos. Mesmo assim, alguns deles, muitos geracionais, são retratados sem grandes questões. Até porque o rico eio por canções seminais da MPB proposto por meio de uma espécie de amigo secreto supera todo e qualquer barraco. Brigas de reality show, em sua imensa maioria, caem no esquecimento. A obra de Gilberto Gil e o amor que une essa família, não. "Em Casa com os Gil" é uma joia rara no mundo do streaming.