;(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
Logo Pagbenk Seu dinheiro rende mais
Topo

Podcast

Mídia e Marketing

Entrevistas com grandes nomes do marketing, propaganda e criatividade no país


Mídia e Marketing #53: Samantha Almeida, diretora do Twitter Next Brasil

Renato Pezzotti

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

15/09/2020 04h01

Samantha Almeida, diretora do Twitter Next no Brasil, é a entrevistada do podcast Mídia e Marketing, publicado hoje (15).

No papo, Samantha diz que ou a vida "pensando o que poderia ser relevante para as pessoas" e descreve a plataforma como uma "bússola" para desvendar assuntos importantes.

"Novas verdades estão sendo impostas e verdades inquestionáveis estão sendo questionadas. Queremos estar no grupo dos que têm muita saudade da velha publicidade, que construiu coisas belíssimas, mas que precisam se reorientar para esse universo de onde há diálogo e não monólogo? Ou vamos deixar de olhar o mundo na sua grandiosidade, na sua complexidade e na sua atualidade?", diz a executiva (no vídeo acima, este trecho está a partir de 18:09).

"Há tempos lidamos com questões que estavam impostas na sociedade. De certa forma, durante a pandemia, se descortinou uma realidade muita agressiva, uma diferença social muito gritante. Demandas ficaram mais evidentes. A comunicação tem uma responsabilidade de ser uma bússola da construção do futuro" (a partir de 7:13).

A executiva também reflete sobre seus caminhos profissionais, a importância de se aprimorar como curadora e ainda comenta as iniciativas do Ministério Público do Trabalho (MPT) para levar mais equidade racial às agências de publicidade do país.

"Não podemos deixar à mercê do voluntariado ou de processos bem-intencionados das empresas. Temos que institucionalizar nossos compromissos de equidade racial e de gênero. O MPT traz essas ferramentas, com caminhos e processos para isso", diz (este trecho está a partir de 25:12).

Samantha foi escolhida, este ano, como uma das 7 homenageadas do prêmio "Women to Watch Brasil". A iniciativa, idealizada pelo Advertising Age, maior veículo de publicidade do mundo, seleciona e homenageia anualmente as mais bem-sucedidas profissionais no mundo da publicidade, marketing e mídia do país.

"Há um esforço imenso da comunidade negra para que isso aconteça. Tem um provérbio africano que diz que é necessário que uma aldeia inteira se movimento para que se crie uma criança. Eu sou uma criança criada por uma aldeia inteira de mulheres que acreditaram no poder da educação como transformação de realidade social. Sou fruto de ações afirmativas, que deram o a novos pensamentos", afirma (no vídeo, a partir de 19:49).