Como remover/apagar emails indesejáveis da lista de emails mais acessados do Gmail/Google

12/10/2012

Dia desses minha mãe me perguntou se eu sabia como resolver um problema que ela tinha e que não sabia como resolver.

O problema que minha mãe estava enfrentando era o seguinte: Uma amiga dela trocou de email. A amiga, que usava fulana@hotmail.com, passou a usar fulana@gmail.com. Sempre que minha mãe começava a escrever o email da destinatária no campo “De/From” no Gmail, o Gmail sugeria os dois emails, o que causou certa confusão para a minha mãe. Ela tentou de todas as maneiras apagar o email da lista que aparecia pra ela, sem sucesso.

O meio que achei pra fazer isso é relativamente simples.

– Dentro do GMail, vá para os contatos (setinha pra baixo ao lado do GMail, no canto superior esquerdo).

Image

– Faça a pesquisa pelo email antigo: fulana@hotmail.com

– Vai aparecer um “Contato” que na verdade não foi um contato que vc adicionou a sua lista de contatos. O Gmail cria uma lista de “Connected Profiles” para ajudar você quando você quiser enviar email para uma pessoa que já lhe enviou email anteriormente ou que você tenha mandado email.

Image

Para saber mais sobre Connected Profiles, leia mais aqui.

– Apague o contato, clicando no botão “Mais/More”, escolhendo a opção “Apagar Contato/Delete Contact”, primeira opção de cima pra baixo.

Image

Pronto, seu problema foi resolvido. Na próxima vez, o email não irá aparecer como sugestão. E fique tranquilo que você não apagou um contato da lista de contatos que você criou. Você apenas apagou um contato que está na lista “Connected Profiles” que o GMail criou pra você!

Acho que o Google podia colocar a função na lista de sugestões de emails quando começamos a digitar o email de alguém. Enfim, acabei achando um meio que não é muito intuitivo mas que funciona!

Dúvidas, poste um comentário!

Abs

Seu “Acesso Pessoal” sumiu do seu iPhone 4? O meu também! Veja aqui como resolver seu problema!

15/06/2011

Esses dias o meu vírtua resolveu me deixar na mão e sempre que isso acontece, resolvo utilizando a rede 3G do meu iPhone4, ativando a opção Acesso Pessoal, que cria um HotSpot Wi-Fi pra mim, com uma senha que eu defino.

Para a minha surpresa, quando fui ativar……. CADÊ????????

Fuçando alguns fóruns, achei a seguinte solução:

Vá em Ajustes > Geral > Redefinir> Redefinir Ajustes de Rede

Pode clicar sem medo de ser feliz! Ele vai reiniciar seu aparelho e demora um pouco até ligar de novo.

Ao voltar, vá novamente em Ajustes > Geral > Rede > Acesso Pessoal.

Volte em Ajustes e verifique se apareceu novamente a opção Acesso Pessoal!

That´s it!

Espero ajudar os desesperados que nem eu! 🙂

Abs

Limpando o cache armazenado com flush_all no memcached através do Rails

08/06/2010

Esses dias estavamos desenvolvendo nossa nova ferramenta de publicação (CMA), desenvolvida em Ruby on Rails, pro Assine Já e Central de Relacionamento e me deparei com um “problema” com relação a limpeza de cache.

Na edição dos elementos do turbine, onde mudamos a ordem dos elementos e quais elementos estarão disponíveis, precisava limpar um monte de chave armazenada no memcached.

Como eram muitas chaves para limpar, teremos poucas edições no cma e não temos uma quantidade enorme de chaves armazenadas, decidimos por limpar todas as chaves do memcached.

Fácil tarefa né? Nem tanto! Por incrível que pareça, procurar por “memcached flush_all rails” não aponta nenhum exemplo real de como se limpar o cache da forma que eu queria!

Só achei depois de ler a documentação do Cache da lib ActiveSupport, que vc pode ver aqui.

Lá, voce encontra a documentação da implementação da classe MemCacheStore, onde facilmente voce encontra o método clear() que chama o flush_all do memcached. É só chamar Rails.cache.clear()! Fácil né!

Uma opção que acabei lendo em alguns fórum foi usar um plugin para poder usar o método detele_matched, mas não achei necessário. Como não testei, não vou dar minha opinião sobre o plugin, mas fica a dica aqui.

O incrivel é como a página de documentação de rails com relação ao flush_all do memcached não aparece como primeira opção na pesquisa do Google!

Espero que ajude alguém essa dica! rsrs Vamos ver se pelo menos o google acha essas informações aqui no meu blog!

Abs

Novo Assine Já da Globo.com

13/01/2010

É…. depois de muitos anos, tivemos a oportunidade de desenvolver o novo Assine Jáhttp://assine.globo.com ! O início do ano na Globo.com foi bombástico com vários sistemas sendo lançados simultaneamente, dentre eles a nova home de Entretenimento, BaixaTudo, Rede Globo e Big Brother Brasil 10.

Seguindo a mesma receita de sucesso da nova Central de Relacionamento, usamos basicamente a mesma tecnologia pro novo sistema:

Na Central de Relacionamento o trabalho foi mais pontual e bem mais simples de se desenvolver por não haver “muitas” regras de negócio envolvidas na edição de dados cadastrais, edição da forma de cobrança, emissão de segunda via de boleto e por aí vai… Apesar de serem pontos importantíssimos, são bem mais pontuais que os que tivemos que desenvolver para o novo Assine Já, que é praticamente um e-commerce com muito mais regras envolvidas!

No novo Assine Já, tivemos um trabalho exaustivo para adequar o antigo sistema com as novas regras de negócio que acabaram sendo definidas durante o desenvolvimento! Scrum é isso! Trabalho EVOLUTIVO!

Baseado na nova tendência da Globo.com em manter o visual clean e dando a devida importância à performance do sistema, fizemos várias manutenções no sistema e a mais importante foi a utilização do memcached em quase todos os pontos que eram possíveis de se cachear alguma informação importante.

Nesse projeto o que reinou foi a união do time em querer entregar um produto excelente e não apenas mais um pra “colocar na conta”. Fizemos testes de performance desde o início do projeto, o que culminou numa excelente performance nos testes finais! Passamos com louvor nos testes a ponto de conseguirmos fazer com que a ferramenta de stress test travasse! YES, WE CAN! IT´S JAVA!!!!

Muitos falam que em Java você tem que codificar muito pra exibir um simples Hello World! armazenado num banco de dados, por exemplo! Realmente concordo em gênero, número e grau. Mas quer saber de uma coisa? Confio 1000000000000x mais na escalabilidade de um sistema feito em Java, que é uma linguagem muito bem concebida, sua Virtual Machine é excelente e tem muitas comunidades discutindo sobre sua evolução e suas melhorias. Empresas como a Oracle e a Sun merecem meu respeito!!! rsrsrsrsrs

Acredito que os times não devam se preocupar apenas em diminuir o tempo de entrega de um sistema. Normalmente é o que o cliente quer, sistemas sendo entregues no menor tempo possível e com a máxima qualidade possível. Na maioria das vezes a qualidade é deixada de lado devido à pressa para se entregar sistemas. Aquele blablabla de sempre que todo mundo sabe no final como termina né? Um sistema todo cheio de problemas em produção que irá exigir um esforço enorme pra ser melhorado (pra não dizer remendado) em produção.

Pra tal, precisamos saber mostrar pro cliente o que cabe dentro daquele escopo para que o produto final seja entregue com qualidade? Imagina você indo num restaurante onde a sua comida estivesse sendo servida num prato sujo…. De que adiantaria a comida estar deliciosa? Você comeria? Não né? Nem eu! Melhor simplificar alguns pontos para que dê tempo de entregar a comida num prato limpo e cheiroso! Simples não quer dizer que seja feio! Hamburguer do McDonalds é simples e todo mundo come!

Onde eu queria chegar mesmo? Me deu uma fome agora!!!

….. Lembrei!

Após o lançamento, fizemos alguns ajustes nos fluxos de cadastro para simplificar um pouco mais o entendimento do fluxo de primeira compra e só! Just Perfect!!

Na noite de ontem, tivemos um pico de mais de 1400 acessos simultâneos e o sistema rodou sem problema algum, aguentando uma pancada violenta devido ao BBB10! Essas datas de lançamentos de BBB sempre foram um problema pra gente devido ao volume absurdamente alto de acessos num intervalo muito pequeno de tempo. Dessa vez a história foi outra e não tivemos NENHUM problema. Tudo ficou 100% no ar respondendo a todas as requisições!

Agora que venha a Copa do Mundo que promete ser uma porrada beeeem mais forte que a atual! Afinal, Big Brother é febre no Brasil né? Futebol é mais!

Parabém à todo o time de ISP, Billing e CadUn por mais um projeto de sucesso! Integração é o que há!

Parabéns ao PO 9Product onwe) do nosso time que soube entender todos os pontos de gargalos e cortou escopos que não seriam possíveis de serem implementados em tão pouco tempo!

Esse projeto sim ficará bem guardado nas minhas memórias e merece sim esse texto enorme que acabo de escrever! Será que alguém lê? rsrs

Abraços

Marketing pessoal ou mão na massa?

10/01/2010

Fugindo um pouco o informatiquês padrão que tenho articulado por aqui mas não fugindo muito do ambiente de trabalho, tenho visto algumas comportamentos que não andam me agradando muito.

O problema que tenho visto é que algumas pessoas se preocupam demasiadamente com seu marketing pessoal e acabam não se tornando funcionários muito produtivos. São pessoas que falam muito e fazem pouco.

Não vejo problema algum em se manter “na mídia”, quero deixar isso bem claro. Vejo problema nas pessoas que se utilizam disso para ter sucesso profissional e nas pessoas que se deixam levar nesse “lero-lero” e as contratam mesmo assim.

Tive um excelente colega de trabalho, Bruno Pereira, que vira e mexe está escrevendo artigos para Java Magazine. É um excelente profissional e com certeza terá sucesso profissional por saber dosar seu esforço em ambas as áreas, marketing pessoal e desenvolvimento.

Esse tipo de profissional que deve ser observado e valorizado, não esses “profissionais” que vivem querendo contar vantagem com o esforço alheio, pra não falar de outra forma mais grosseira! É, “…. com o dos outros” mesmo que queria dizer!

E tenho dito! 🙂

Struts2 Validation utilizando valores armazenados em sessão

29/11/2009

Esses dias estava desenvolvendo no projeto aqui da Globo.com e tive que fazer a validação de um formulário (server-side) . Decidimos por usar o validation do struts2, já que estamos usando o framework no projeto. Na parte client-side, todas as validações são feitas com JQuery/Ajax.

Acabei me deparando com ums situação que foi um tanto chata pra resolver. Eis que segue aproximadamente um exemplo do que passei. Estou simplificando pra não ter que colocar todo o código fonte aqui!

Digamos que você tenha um formulário que é exibido após o usuário se autenticar e esse formulário tem alguns campos que não devem aparecer em uma determinada situação.

De acordo com o código jsp abaixo, apenas o campo nomeTitular deve ser apresentado quando a variável “titular” armazenada na sessão for true.

<s:form name="formCadastro" action="salvar-segunda-compra.action" method="post" validate="true">
   <s:if test="#session.tipoPessoa == 'F'">
      <s:textfield name="cpf"/>
   </s:if>
   <s:else>
      <s:textfield name="cnpj"/>
   </s:else>
</s:form>

Feito isso, temos que fazer a validação do formulário com o validation do Struts2.

Para tal, basta acrescentar um xml com o mesmo nome da classe da action concatendando “-validation.xml”, ficando assin: <ActionClassName>-validation.xml (deve ficar em /WEB-INF/classes). Leia mais sobre validation aqui http://struts.apache.org/2.x/docs/validation.html

Num caso como esse, onde se é necessário utilizar um valor armazenado em sessão,  podemos considerar o validation como se fosse um jsp!

O trecho de código abaixo é a versão final do que acabei desenvolvendo:

...
<field name="cpf">
   <field-validator type="fieldexpression" short-circuit="true">
      <param name="expression">
         <![CDATA[((titularOuOutros == "T") || (tipoPagante == "J") || (cpf != ""))]]>
      </param>
      <message key="cpf-obrigatorio" />
   </field-validator>
   <field-validator type="cpf">
      <param name="permiteVazio">
         <![CDATA[((#session.cesta_valor_zero) || (titularOuOutros == "T") || (tipoPagante == "J"))]]>
      </param>
      <message key="cpf-invalido"/>
   </field-validator>
</field>
...

Conforme demonstrado acima, é possível usar valores armazenados em sessão para fazer validação de formulário.

Não é necessário declarar uma propriedade a mais na action e colocar uma informação desnecessária em um “<s:hidden../>” apenas para poder usar o mesmo no validation.

Qualquer dúvida, nao se acanhem e podem perguntar!

Abs

Radio button chamando função de click com jQuery

02/10/2009

Bom, após algumas tentativas olhando a documentação e tentando fazer com que meus radio buttons chamassem o evento click usando jQuery.

Achei uma forma mais simples do que muitos sites indicam….

Considerando o código a seguir….
<input id=”suporte” name=”suporte” type=”radio” value=”1″ /> Com suporte – R$4,99 mensais
<input id=”suporte” name=”suporte” type=”radio” value=”0″ /> Sem suporte

Seguindo a idéia de que HTML não deve ter contido nele o comportamento, devemos usar o jQuery para controlar o funcionamento da tela.
O objetivo é acrescentar a informação no carrinho que o assinante escolheu o suporte ao serviço de acesso que o mesmo está comprando.

O código ficou assim:

$(document).ready(function(){
//Preciso verificar se o usuário escolheu o produto dele com ou sem suporte.
//baseado na escolha do usuário, devo adicionar o produto no carrinho.
//Ao selecionar sem suporte (0), devo remover o produto suporte do carrinho
//Ao selecionar com suporte (1), devo adicionar o produto suporte no carrinho
$(“input[type=radio][name=suporte]”).click(function() {
var suporte = $(“input[type=radio][name=suporte]:checked”).val();
if (suporte==1) { //com suporte
//se o suporte não tiver sido adicionado a sacola, insiro no carrinho

} else if (suporte==0) { //sem suporte
//removo o suporte do carrinho

}
});
});

O interessante desse código em negrito é a referência que o jQuery faz aos elementos do html de uma forma única, interceptando o evento click dos elementos acima.

Abs.

Nova Central de Relacionamento Globo.com!

24/07/2009

Hi folks!

Esses dias, semanas, meses, temos trabalhado intensamente para lançar a nova central de relacionamento da Globo.com. (http://atendimento.globo.com)

Basicamente não fizemos grandes mudanças no que diz respeito ao se conteúdo e seu comportamento. Mudamos a tecnologia e toda a sua interface visual e sua usabilidade (ux). A nova central está MUITO mais clean e muito mais fácil de se usar.

Por debaixo dos panos estamos usando o que temos de mais recente: Tomcat 6.0.20, Java 6, Maven2, Struts2, Ajax, Jquery. Nosso “core” continua o mesmo (Jboss4 e EJB2) e continua sendo nossa camada de persistência.

Em nossos testes de performance, descrevemos os cenários de testes baseado nas estatísticas do Google Analytics vendo quais eram/são as páginas mais requisitadas pelos usuários.

Em seu primeiro teste começamos a perder performance com 100 usuários simultâneos, o que já estava muito além do que solicitamos (40 simultâneos). Depois de mais alguns ajustes, conseguimos atingir um máximo de 600 (isso mesmo! SEISCENTOS) usuários simultâneos e o sistema ainda estava respondendo, claro, com tempo de resposta ruim! O número que chegamos com tempo de resposta aceitável foi de 300 usuários simultâneos!!!

Considerando que nossa máquina de homologação não chega aos pés das máquinas de produção, conseguimos projetar aproximadamente 2000 usuários simultâneos acessando nossa central de relacionamento! Melhor, impossível!!!!!!!!!!

É sempre muito gratificante trabalhar duro e ver o resultado (positivo) do trabalho realizado. Somado a isso, ganhamos com o aprendizado de novas tecnologias, que engrandece e nos coloca numa excelente posição no mercado de trabalho!

Terça feira está agendada a virada de chave para a nova central!

Aguardem!

Quantos pontos devemos fazer em um sprint?

30/04/2009

Desde que começamos a usar a metodologia Scrum, tenho sentido que ainda sofremos com os maus costumes do passado.

O que eu tenho visto é que ao longo do tempo fomos criando uma métrica que não deveria ser usada de forma alguma. Vou explicar….

No primeiro sprint tínhamos, por exemplo, 5 pessoas e conseguimos entregar 100 pontos de esforço num sprint de 3 semanas. A conta que foi feita inicialmente foi: (5 pessoas * 15 dias * 8 horas) / 100 pontos e chegamos a uma média de 6 homem hora por ponto de esforço.

Com essa média em mãos, planejamos nosso próximo sprint selecionando as histórias de acordo com a quantidade de pessoas que teríamos disponíveis.

No segundo sprint, conseguimos produzir bem mais que o planejado e a média caiu pra 5 homem hora por ponto de esforço, melhorando a produtividade.

Aos poucos, fomos apertando a corda no pescoço! O pior é que fizemos isso com apoio do PO e SM.

O problema é que automatizamos o Planning I, fase na qual escolhemos as histórias que deveríamos desenvolver, sem se importar com MÉDIAS anteriores. O Planning I é praticamente inútil atualmente pois o próprio PO poderia fazer esse trabalho, escolhendo as histórias que se encaixam no próximo sprint de acordo com o número de pessoas disponíveis!

Pesquisei um pouco sobre o assunto e me identifiquei muito com o que o Rodrigo Yoshima escreve nos posts Estimativa não é ciência exata e Besteirol Agile.

“As práticas do Scrum e das estimativas ágeis (Planning Poker, literatura do Mike Cohn) são muito humanistas. Não são fatores deterministas que darão a produtividade da equipe. Se alguém na equipe teve que se ausentar, está com problemas na família, está doente ou está grávida, tudo isso é levado em conta na sua velocidade e ninguém é melhor que a própria equipe para fornecer parâmetros sob essa ótica tão empírica. Não é um gerente ditador que faz a equipe engolir a métrica. A EQUIPE É RESPONSÁVEL PELA ESTIMATIVA, sob todos os aspectos. É isso que faz a métrica funcionar.”

“A resposta para a velocidade sempre é dada pela Equipe… pense na velocidade como uma tendência e não como uma certeza. Pense na velocidade como uma aplicação financeira com riscos: “rentabilidade passada não garante rentabilidade futura”.”

Recomendo a leitura dos dois posts por completo, pois ele fala exatamente desse assunto de uma forma bem divertida e objetiva!

Resolvi falar desse assunto pois já faz algum tempo que não acertamos a mão no Planning I, óbvio!

Por várias vezes percebemos que não vamos conseguir entregar tudo o que foi “estimado” e MESMO ASSIM SEGUIMOS EM FRENTE ACEITANDO A MÉTRICA CRIADA ERRONEAMENTE. Lógico que ao final do Sprint temos o desprazer de ter que empurrar várias estórias pro próximo sprint.

Fica uma sensação de que não fizemos o nosso trabalho bem feito pois não entregamos tudo e fica também uma sensação de que deveríamos trabalhar dobrado para entregar o que, na tese, a gente botou a cara a tapa pra fazer.

No sprint atual já é claro que não vamos conseguir entregar boa parte do que foi escolhido no Planning I. Eu já imaginava isso pois estamos desenvolvendo a nova Central de Relacionamento (Tomcat6/ Java6/ Struts2/ JQuery/ Ajax) com várias definições/questões ainda a serem discutidas.

Outro fator que me levou a crer que não entregaríamos tudo é o fato de termos escolhido desenvolver um CMA em Pythn/Django (o que achei uma excelente idéia).

O problema é que não é só o desenvolver (na minha opinião é a parte mais fácil!), e sim o startup de um novo projeto que costuma dar umas engasgadas por termos que configurar vários ambientes (local, desenvolvimento, QAs e produção), configuração de deploy para os ambientes e por ninguém na equipe ter experiência anterior com a linguagem.

Não preciso dizer que está tudo errado né? Nem precisava pesquisar sobre o assunto para ter a certeza de que não estamos trabalhando da forma correta. Não estamos usando o Scrum da forma correta. Mas como resolver essa questão? Acho que só na base do diálogo mesmo!

Já estou tentando fazer com que essa questão seja discutida entre a gente (time) e o PO, para que ele veja que a banda esta desafinando.

A responsabilidade é nossa de fazer o processo funcionar!

Metodologia para ajudar ou para atrapalhar?

12/04/2009

Atualmente na Globo.com estamos passando por uma fase de redefinições da nossa área de ISP.

Estamos criando novas plataformas de vendas e atendimento, na qual poderemos atender a qualquer empresa das OGs, seja ela uma Somlivre, uma Globosat ou até mesmo o jornal O Globo.

E como usar Scrum pra ajudar no desenvolvimento dessas novas plataformas?

O maior desafio em um projeto desse porte é entender do negócio antes de mais nada e pra isso precisamos de muitas reuniões de brainstorm pois nem mesmo o nosso cliente sabe direito o que ele quer e precisa!

Só fiquei com uma dúvida de como colocar essas reuniões de brainstorm e definições dentro do nosso Sprint. Acho de suma importância a participação de quase todo o time na definição dessa nova plataforma e o nosso PO precisa da nossa ajuda para que possamos desenhá-la.

E aí? Contamos como história? Como contabilizar essas reuniões, tendo em vista que impacta diretamente no andamento do Sprint atual?

O que eu propus foi criar uma história de Brainstorm, pra tentar seguir a linha do Scrum (?), e demos uma pontuação para a história. Mas o que foi entregue nessa história? Não fizemos uma “entrega” real, comparativamente com os projetos que colocamos em produção e consideramos como delivered.

Acho que a metodologia Scrum ajuda e MUITO para tornar as coisas mais claras e objetivas. Nossas entregas estão mais rápidas e com mais qualidade. Só que em alguns casos a metodologia tem criado alguns atritos justamente por tentarem seguir a risca a metodologia.

Eu até concordo que se é pra usar a metodologia, que ela seja seguida sim, mas não podemos ser rígidos em todos os aspectos da metodologia, que prega acima de tudo a COMUNICAÇÃO como principal arma da metodologia.

Só precisamos tomar cuidado pra não entrarmos no modelo Waterfall, esperando que o PO defina 100% do sistema antes de iniciarmos o desenvolvimento.

Opiniões serão muito bem vindas!