F2 WordPress Theme

I changed the wordpress theme to F2 and to show my appreciation to the author I sent him the pt-br translation files.

However, I think I won’t be using them, since I’m considering maintaining only an English version of this blog. Hopefully it will help me improve my English skills. We’ll see.

If I end up keeping the Portuguese version, I’ll definitely switch the translation plugin from qTranslate to Polylang or WPML. They do a better job handling translations as separate posts, instead of doing some crazy filtering magic like qTranslate.

PHP Conference 2010 – Desenvolvendo Extensões PECL

Nos dias 25-28 de novembro rolou o PHP Conference Brasil, agora na sua quinta edição. Esse ano pude apresentar uma palestra sobre extensões PECL, e aqui estão os slides para quem se interessar. Se você estava lá e viu a palestra, deixo também mais duas coisas: o código da extensão que utilizei como exemplo (minhaextensao) e também um link para o local onde você pode avaliar a palestra.

Infelizmente não consegui acompanhar nada no evento. Gostaria de ter assistido a várias palestras, mas o dever chamou e não pude ficar muito tempo lá. Não conheço muita gente da “cena PHP”, mas acabei encontrando um pessoal com quem trabalhei (Herbert, Ester, Maurício, Lira) e estudei (Thiago). Devo minhas desculpas ao César Rodas, não consegui ir à sua palestra sobre NoSQL databases.

Bem, aqui estão os slides:

PHP API to SpamAssassin spamd ProtocolAPI em PHP para o protocolo spamd do SpamAssassin

On the past few days I’ve been working on a PHP spamd client, and I think it is somewhat usable for now since it already implements all of the protocol commands. This is release 0.1.0, so you might expect some API changes for the next versions. Feedback is always welcome. I tried to make this the most straight-forward as possible, abstracting some nasty things that happens under the hood, so you can do things like:

require_once 'SpamAssassin/Client.php';
 
$params = array(
    "hostname" => "localhost",
    "port" => "783",
    "user" => "ppadron",
);
 
$sa = new SpamAssassin_Client($params);
 
$message = file_get_contents('/path/to/message/file');
 
var_dump($sa->isSpam($message));
bool(true)

Methods available

ping()
Pings the server to test the connection
getSpamReport($message)
Returns a detailed report if the message is spam or null if it’s ham
headers($message)
Processes the message and returns it’s headers (like X-Spam-Flag and X-Spam-Status)
check($message)
Checks if a message is spam with the CHECK protocol command
isSpam($message)
Shortcut to check() method that returns a boolean
process($message)
Processes the message, checks it for spam and returning it’s modified version
symbols($message)
Returns all rules matched by the message
learn($message, $learnType)
Uses SpamAssassin learning feature with TELL. Must be enabled on the server.
report($message)
Report message as spam, both local and remote
revoke($message)
Revokes a message previously reported as spam

I’m still working on providing some good usage examples, but I’ve put (temporarily) API docs available here. In the meantime, you can browse the tests directory and learn some basic stuff. If you want to use this library to implement a spam filter for your mail server, maybe you should consider using the spamc command line utility or the Perl librarythat already comes with SpamAssassin (which was my main source of inspiration). This library is most useful when you already have stuff written in PHP and you need to do something with SpamAssassin. If you have a webmail written in PHP and would like to interact with a remote SpamAssassin server to report spam, for example. The project is hosted @ Github, so you can:

I owe you a PEAR repo to serve this package.

Nos últimos dias tenho trabalhado em um client em PHP para o protocolo spamd, e como ele já implementa todos os comandos do protocolo, resolvi publicar o projeto. Esta é a release 0.1.0, então é de se esperar que ocorram mudanças na API nas próximas versões. Feedback é sempre bem vindo. Tentei fazer com que o uso dessa biblioteca fosse o mais simples possível, abstraindo as particularidades do protocolo por baixo dos panos, para que você possa fazer coisas como:

require_once 'SpamAssassin/Client.php';
 
$params = array(
    "hostname" => "localhost",
    "port" => "783",
    "user" => "ppadron",
);
 
$sa = new SpamAssassin_Client($params);
 
$message = file_get_contents('/path/to/message/file');
 
var_dump($sa->isSpam($message));
bool(true)

Métodos disponíveis

ping()
Pings the server to test the connection
getSpamReport($message)
Returns a detailed report if the message is spam or null if it’s ham
headers($message)
Processes the message and returns it’s headers (like X-Spam-Flag and X-Spam-Status)
check($message)
Checks if a message is spam with the CHECK protocol command
isSpam($message)
Shortcut to check() method that returns a boolean
process($message)
Processes the message, checks it for spam and returning it’s modified version
symbols($message)
Returns all rules matched by the message
learn($message, $learnType)
Uses SpamAssassin learning feature with TELL. Must be enabled on the server.
report($message)
Report message as spam, both local and remote
revoke($message)
Revokes a message previously reported as spam

Ainda estou escrevendo alguns exemplos de uso, mas por enquanto você pode conferir a documentação da API neste endereço. Também sugiro que dê uma olhada no diretório tests. Se você tem a intenção de usar essa biblioteca para implementar um filtro de spam em seu servidor de email, talvez seja melhor considerar usar o utilitário spamc ou então a biblioteca em Perlque já vem com o próprio SpamAssassin (que por acaso foi a minha principal fonte de inspiração). Essa biblioteca se torna mais útil quando você já possui código escrito em PHP e precisa interagir com o SpamAssassin, como no caso de você possuir um webmail em PHP onde deseja que o usuário possa reportar spam a um servidor remoto de SpamAssassin. O projeto está hospedado no Github, então você pode:

Pretendo disponibilizar esse pacote em um repositório PEAR. Mais novidades em breve…

Packaging Perl CPAN modules as RPM with cpanspec

If you happen to use some CPAN module that is not already available in any repo (always check EPEL), you might consider packaging it yourself. It can really be a pain if you try to do it from scratch, that’s why you should consider using cpanspec. It’s a simple tool that will generate a specfile given a CPAN package name or package file.

Continue reading

Vídeo: Augeas no Locaweb 5o. TechDay

augeas-logo
Em Novembro de 2009 fiz uma apresentação sobre o Augeas e a sua extensão para o PHP no 5o TechDay da Locaweb, um evento interno com palestras técnicas dos mais variados assuntos. A apresentação foi gravada, então deixo aqui o vídeo para quem quiser assistir (são cerca de 10 minutos). Se quiser acompanhar os slides, eles estão disponíveis em PDF.

Importante: Vale lembrar que o suporte a lentes recursivas já foi implementado na versão 0.7, permitindo editar arquivos de configuração que contenham aninhamento indefinido de diretivas, como no exemplo do httpd.conf citado na palestra.