Plugin do Delicious para Safari

O Safari 5 foi lançado este mês pela Apple (ontem, dia 07/06/2010) e dentre as novidades a que eu mais gostei foi poder desenvolver meus próprios plugins e extensões para o Safari, através do: Safari Developer Program.

Na verdade sempre foi possível fazer plugins para o Safari, é fato, mas não havia um suporte nativo decente, os plugins menos piores precisavam do SIMBL (que eu não gosto de usar) e por aí vai.

O que eu mais sentia falta no Safari era de um mísero botãozinho para salvar páginas no Delicious, não precisava nem mostrar os favoritos ou fazer qualquer outra coisa, eu só queria salvar. Da pra fazer isso facilmente com um atalho na barra de favoritos, o próprio delicious ensina, mas eu sou um cara chato de personalidade difícil (de verdade) e não gosto de deixar a barra de favoritos ativa, de modo a otimizar a área útil de visualização no navegador.

Outra alternativa era o DeliciousSafari, um plugin que faz tudo o que você precisa e o que você também não precisa ou nem imagina que fosse responsabilidade do plugin, algo como o pacote Office da M$. Eu já tentei usar o DeliciousSafari várias vezes, mas, por coincidência ou não, toda vez que eu começava a utiliza-lo o Safari ultrapassava a marca de 1.5Gb de consumo de memória RAM.

Hoje resolvi testar a possibilidade de criar plugins para o Safari5 e me surpreendi, foi muito fácil e indolor. Com menos de 30 minutos consegui deixar o plugin funcional. O mais difícil foi o Tagliati fazer o ícone pra mim (brincadeiras com o ‘designer’)

O plugin é super simples, é somente um botão na toolbar do Safari que salva a página ativa no Delicious, exatamente o que eu tanto queria :) Espero que possa ser útil pra mais alguém. Algumas poucas funcionalidades extras para este plugin já estão em desenvolvimento e outros plugins também, espero poder anuncia-las em breve.

Para quem tiver interesse em baixar, a distribuição está disponível aqui. E o código fonte aqui no meu github.

Antes de instalar o plugin é preciso ativar as extensões no Safari, siga esses passos:

– Menu: Safari > Preferences

– Guia: Avançado > Mostrar menu de desenvolvedor

– Menu: Desenvolvedor > Ativar Extensões

Retrospectiva do Maré-Vix

No dia 29 de de maio de 2010 foi realizada a 6ª edição do Maré de Agilidade em Vitória, capital do Espírito Santo. Esta edição do evento ficou conhecida como Maré-Vix, e reuniu quase 200 pessoas interessadas em aprender e disseminar conhecimento sobre agilidade.

Apesar de já ter participado e liderado a organização de algumas dezenas de eventos, este foi bastante diferente e especial pra mim. Foi a segunda vez em que a Giran se envolveu *fortemente* na organização de um evento (a primeira foi com o IV EJES), e em conjunto tivemos além da Giran pessoas ‘de fora’ que também participaram muito e foram imprescindíveis, inclusive começando com o ponta pé inicial, como fez o Denis Ferrari.

Queria começar essa retrospectiva agradecendo ao pessoal da organização: Denis Ferrari, Gustavo Badke, Fabricio Vargas Matos, Hackin, Keila e todo o time da Giran e MSDev-ES que ajudaram no operacional no dia do evento.

O Maré-Vix foi sensacional em todos os quesitos: as reuniões de organização (sempre em bares, porque ninguém é de ferro), as emoções e desesperos com data e remarcação do local nos últimos dias, as confirmações e cancelamentos com os palestrantes e claro, o evento em si.

O público foi completamente maravilhoso e participativo, tivemos muitas perguntas nas palestras, muito bate papo nos intervalos e muito, muito networking com todos os participantes. Tenho que destacar também a participação das caravanas de Campos e Cachoeiro do Itapemirim que marcaram presença, e a de Campos com quase 40 pessoas que viajaram mais de 4 horas para participar do evento. É extremamente gratificante e recompesador ter participado da organização de um evento que motivou tanta gente de longe a participar (mas no começo a responsabilidade foi grande, muito grande).

Conseguimos formar um time super bacana, organizado e comprometido com a organização e realização do evento, e isso foi show. O Carlan e o pessoal da Highlan também deram muita força e foram os responsáveis pela filmagem do evento, o que nos ajudou bastante. Foi muito legal trabalhar com essa galera ;-)

Um agradecimento em especial para o Guilherme Silveira, da Caelum, e para o Renato Willi, da SEA, que foram nossos palestrantes “importados” e contribuíram muitíssimo para a qualidade do evento com as suas apresentações.

Também não da pra não citar os patrocinadores e apoiadores, que foram fundamentais para a realização do evento: um grande abraço e muito obrigado ao pessoal da PowerLogic, Novatec, Highlan, Caelum, SEA, Simbionte, Qualidata, MSDev-ESGiran, e claro, pra Faesa, que proporcionou todo o ambiente e infra-estrutura para o evento :)

Novamente, muito obrigado a todo mundo que participou, patrocinou, apoiou e ajudou de alguma forma. Agora é esperar pela próxima Maré, até lá!!!

Desenvolvimento ágil de software com SCRUM

Esta semana fui convidado pelo professor Egídio, da Faesa, para falar um pouco para os seus alunos sobre desenvolvimento ágil de software utilizando SCRUM. Eu adoro falar sobre SCRUM e já fiz esta apresentação algumas vezes, mas cada vez é diferente, não tem jeito, então aproveitei a oportunidade para fazer um refactory considerável na apresentação de SCRUM que tinha.

A apresentação em si é básica, fala sobre SCRUM, seus papéis, responsabilidades, atividades e ciclo de vida. Nesta apresentação tento focar na desmistificação de alguns conceitos e idéias simples que, às vezes, as pessoas que ainda não conhecem o SCRUM possam ter formado naquelas conversas de corredor, e claro, mostrar alguns benefícios e problemas reais que a adoção do SCRUM trará para a organização e para as pessoas envolvidas.

A apresentação está disponível aqui no meu slideshare e também no blog. A conversão/compressão do slideshare deixou a apresentação um pouco mais feia, quem quiser faça o download do arquivo que este estará bem melhor.


Dúvidas, críticas e sugestões farão meu dia um pouco melhor, fique a vontade para me procurar.

Aprendendo a enviar e-mails autênticos

Hoje em dia o e-mail é algo tão presente no nosso dia a dia que poucas vezes paramos para pensar em toda a complexidade que está envolvida por trás do funcionamento deste serviço. É muito semelhante a outros serviços básicos, como energia elétrica, por exemplo, alguém já parou pra pensar sobre os meios geração, produção, transporte e distribuição de energia elétrica? E de e-mails? Às vezes parece que funciona por mágica, a intenção é que os usuários realmente pensem assim, mas a coisa não é tão simples assim na prática.

E não é difícil imaginar que haja muita magia – de verdade – envolvida na configuração de um servidor de e-mail, especialmente quando você precisa configurar um deles para enviar e-mails autênticos. São muitas variáveis envolvidas e algumas formas de trabalho diferentes entre cada tipo de servidor de e-mail, o que dificulta um pouco as coisas. Mas alguns conceitos importantes nós devemos conhecer a fundo pois serão úteis em qualquer ambiente e com qualquer aplicação de servidor de e-mail.

Apenas uma observação: eu não sou especialista em administração de servidores, muito menos em servidores de e-mails, as dicas a seguir são fruto de muito estudo, tentativas, erros e acertos até chegar numa configuração e conhecimento que estão me atendendo.

O host, hostname e domain

Você sabe (sem consultar) qual o FQDN (Fully Qualified Domain Name) da sua máquina? E dos servidores que você usa e/ou administra? É comum que você não saiba, principalmente se não forem servidores de e-mail ou web.

O FQDN nada mais é do que o nome do host (hostname) junto com o nome do domínio (DNS). Na maioria dos servidores, especialmente os de desenvolvimento, a maior importância do hostname é a possibilidade de dar nomes personalizados para as máquinas, mas em produção isso tem uma importância bem grande.

A configuração e validação por SPF

SPF – Sender Policy Framework – é uma tentativa para controlar a quantidade de e-mails forjados que circulam na internet. Como encontramos no FAQ do SPF: “SPF não é anti-spam da mesma forma que a farinha não é comida, é parte da solução”. O SPF é um das configurações mais importantes para a maioria dos seus e-mails serem entregues com sucesso, especialmente se você quiser entregar e-mail para os servidores do gmail.

Citando um pouco o FAQ do SPF: “O SPF é um protocolo desenvolvido por um grupo de voluntários, motivados e unidos por um desejo em comum de melhorar o funcionamento da internet. Não é um produto comercial oferecido por uma empresa com fins lucrativos”. O protocolo SPF está sendo adotado por um número crescente de servidores de hospedagem e ISPs – Internet Service Providers, tornando-se cada vez mais importante e essencial para o funcionamento correto de um servidor de e-mails.

Na configuração do DNS do domínio o SPF aparece como uma entrada TXT comum, com esta aparência:

1
v=spf1 a mx ...

Para consultar as entradas TXT de um domínio, use: dig txt dominio.com. Um exemplo completo de configuração de SPF:

1
v=spf1 a mx ip4:192.168.1.2 include:aspmx.googlemail.com include:google.com include:_spf.google.com -all

Nesta configuração estou dizendo que, para o domínio em questão (imaginando o jeveaux.com) o IP 192.168.1.2 é um IP válido para enviar e-mails utilizando o domínio jeveaux.com. Além disso estou também incluindo os domínios de envio do Google para que possam também enviar e-mails utilizando o meu domínio (neste caso através do google apps).

É importante reparar um detalhe no final: -all. Esta cláusula está informando que qualquer outro IP (all) deverá ser negado (-), mas pode ser configurado de outras maneiras se você precisar, usando o -all ou diretamente um IP:

  • -all – Fail – Recusa qualquer e-mail partindo de outros IPs que não estiverem na configuração do SPF
  • +all – Pass – Significa que todo IPs (todo mundo) está autorizado a enviar e-mails em nome do seu domínio
  • ~all – SoftFail – Intermediário entre o Fail (-) e o Pass (+). Geralmente usado em transições de domínios ou servidores de domínios.
  • ?all – Neutral – O dono do domínio não tem como ou não quer definir quem está autorizado a enviar e-mails em nome do seu domínio

Mais informações e detalhes sobre o SPF aqui no Antispam.br.

MX ou A records?

Esta é uma dúvida que eu já tive diversas vezes e sempre precisei pensar e repensar a mesma coisa várias e várias vezes. Mas é muito mais simples do que parece, vejamos por necessidade:

  • O servidor de e-mails em questão funciona apenas como SMTP (envio) ou também é utilizado como POP/IMAP (recebimento)?

Se a resposta for SIM, o seu servidor de e-mails apenas envia e-mails, esqueça a configuração dos MX Records pois elas não lhe serão úteis, preocupe-se apenas com que exista um registro do tipo A no seu domínio contendo o nome (o hostname visto acima) do seu servidor associado com o IP do mesmo.

Se a resposta for NÃO, o seu servidor de e-mails também receberá e-mails, então lembre-se também de configurar corretamente os registros MX no seu domínio. Mas como neste artigo estou focando apenas no envio não entrarei em detalhes na configuração do MX, para mais informações siga por aqui.

DNS Reverso

DNS o que!? Reverso!? Pois é, DNS reverso. Pense num domínio: é um nome que encaminha você até um determinado servidor – IP. Agora pense de maneira reversa, ao contrário: a partir de um determinado servidor – ou IP – como chego ao domínio? Pois é isso que faz a configuração do DNS reverso, ela permite que outros servidores verifiquem a identidade do seu servidor comparando se um determinado IP bate com o IP informado no servidor de DNS.

Exemplo: Verificando o IP de um domínio através da resolução de DNS.

jeveaux@valakas ~  $ host giran.com.br

giran.com.br has address 109.74.206.147

E agora fazendo a resolução reversa, de um IP para o domínio.

jeveaux@valakas ~  $ host 109.74.206.147

147.206.74.109.in-addr.arpa domain name pointer giran.com.br.

Na maioria dos casos essa configuração será até fácil, basta pedir ao responsável pelo seu servidor de DNS que o faça. Exceto se você for o responsável também pelo servidor de DNS, então você terá que fazer a configuração do DNS reverso também. Se você precisar configurar manualmente o seu DNS reverso precisará saber um pouco sobre o BIND, recomendo este tutorial do Dicas-L.

Resumindo o que é importante lembrar

Se você quiser enviar e entregar e-mails corretamente para todos os servidores – ou o máximo possível – lembre-se de configurar corretamente:

  1. O hostname e domínio do seu servidor de e-mail
  2. O DNS do domínio com uma entrada válida no SPF para o IP do servidor de e-mails
  3. O DNS reverso no servidor de DNS da rede do servidor para o nome configurado no registro A (próximo passo)
  4. O DNS do domínio com um registro do A apontando para o IP do seu servidor de e-mails.

Alguns servidores de e-mail farão apenas a verificação por SPF ou DNS, por isso, configure sempre os dois, não custa nada e vai poupar algumas dores de cabeça e muitas falhas na entrega dos e-mails.

Um cenário fictício baseado no meu cenário real

Basicamente omiti apenas os nomes e os endereços IP dos hosts por outros que não são válidos, mas que são suficientes para exemplificar. Vamos ao exemplo:

O domínio jeveaux.com.br, registrado no registro.br está usando os servidores de DNS da Linode. Imaginando uma situação onde temos uma infra-estrutura grande e que uma determinada aplicação precise enviar muitos e-mails, o site ficará num servidor (srv1) e o servidor de e-mails ficará em outro servidor (srv2), logo, teremos dois IPs diferentes.

  • srv1: apenas servidor web (o site, apache), IP 192.168.1.1
  • srv2: apenas servidor de e-mail (postfix, sendmail, etc), IP 192.168.1.2

Servidores configurados, tudo funciona. Então vem o primeiro problema: Meus e-mails não estão nem caindo como spam, eles sequer são entregues, e agora?

A primeira coisa a se verificar é a configuração do domínio. Como está o SPF? O domínio jeveaux.com.br está dizendo explicitamente que o IP do srv2 pode enviar e-mails por este domínio?

Configure o SPF, algumas mensagens começarão a ser entregues, mas não são todas, e agora? Será comum encontrar no log estas mensagens de erro:

550 5.7.1 Client host rejected: cannot find your hostname, [xxx.xxx.xxx.xx]

450 5.7.1 Client host rejected: cannot find your reverse hostname, [xxx.xxx.xxx.xx]

Vamos ao mais fácil: depois de configurar o SPF, vamos configurar o DNS reverso, você pode solicitar ao seu datacenter, ou no caso do Linode fazer diretamente no painel de controle. Com o DNS reverso configurado agora quase todas as mensagens já são entregues, mas nem todas. O que ainda está faltando?

Configurar um apontamento válido no domínio para o endereço do seu servidor srv2, uma entrada do tipo A na configuração do domínio será suficiente. Mas qual o hostname – não falei que seria importante!? – completo do seu servidor?

No meu servidor srv2 eu vou executar o comando hostname -f e ver o retorno:

user@srv2 ~  $ hostname -f

mail.jeveaux.com.br

O que isso quer dizer? Quer dizer que esse nome é o nome que é utilizado para iniciar uma conversão entre o seu servidor de e-mails e o servidor de e-mails que você pretende entregar uma mensagem. É (literalmente) assim:

Server: 220 mail.jeveaux.com.br ESMTP Postfix

Client: HELO mail.jeveaux.com.br

Ocorre que, quando o cliente (o servidor que você quer entregar um e-mail) for verificar o IP de mail.jeveaux.com.br ele não encontrará nada, ou talvez até encontre o IP do srv1, dependendo de como estiver a configuração do seu domínio, levando o cliente a concluir que este remetente não é válido. Isso pode fazer seus e-mails irem para a caixa de spam ou diretamente recusados.

Crie então uma entrada do tipo A com o nome mail dentro do domínio jeveaux.com.br apontando para o IP do srv2.

Com estas configurações você terá as credenciais suficientes para entregar e-mails com autenticidade em qualquer servidor de e-mails. É claro que isso não lhe concederá garantias que o e-mail passará como não sendo spam com qualquer conteúdo que você enviar, isso é completamente diferente. Mas ao menos você preencheu os requisitos essenciais para identificar o seu servidor e valida-lo como um servidor autorizado dentro do seu domínio.

Existem muitas outras maneiras de fazer essa configuração, seja através de ajustes no seu servidor de e-mail, no DNS, etc. As que eu expliquei aqui são as que eu faço e utilizo e que consegui compreender com clareza até hoje.