Building notes, projects, and ocasional rants


last update:

Free weather report

There is a storm coming in. Its time you realize that the best way to keep your mail service operational is to outsource the SMTP part. I did it last year, kept the IMAP server, moved the SMTP server of to Postini (before the Google buyout) and I must say I'm very happy.

MySQL advice

When people ask me what MySQL to use, I used to respond "Go to and download the community edition". I recommend it over any version of MySQL that is bundled with your OS. But I also listen to people who know more than me when it comes to MySQL, and one of those just asked (and presented facts) if the those binaries are in fact dead. So right now, my new advice on MySQL choices is this: read the latest MySQL Performance blog article and decide what you want.


Some articles should have comments turned off.

RabbitMQ added support for XMPP

This is interesting news. RabbitMQ, an open source implementation of APMQ in Erlang, now has support for XMPP using Ejabberd and mod_rabbitmq. It seems to be MUC-based, not PubSub. I hope to see a future version with PubSub in the future.

Disabled menu items

A bit because of my last post, I couldn't stop noticing a similar trend in software development. There is a series of posts about disabled menu items. It all started with Joel Spolsky "Don't hide or disable menu items". That had a strong reaction from Daniel Jaikut (my personal favorite take on this) and John Gruber, amongst others. I'm not a GUI application developer, but I must say that it just sounds pretty wrong to go into pop-up-hell to solve the problem.

Make it harder

Right now, in Portugal and in other places like the US, our schools are lowering the bar (making tests easier) to have a higher percentage of students with passing grades. This is wrong because the only thing that its raising is the bar of mediocrity. Tests should be hard not because we like failing grades and angry students but because hard tests force students to evolve their reasoning and deductive skills, memory, and a lot other brain activities.

Alex and Adam asked me to elaborate on the tools I used to implement the Tarpipe XMPP gateway. I used the Net::XMPP2 Perl module, in particular the Net::XMPP2::Component class. It uses the AnyEvent async framework, which in turn support the EV library , giving you all the love of kernel polling. Until the Net::XMPP2 author releases a new version, you should use my own copy if you plan on doing external component work (check the component-reply-with-from branch).

Using Tarpipe via XMPP

Tarpipe is a wonderful service to execute a workflow of web services. You create your workflow visually, and then you send an email or POST to a API end-point to run it. For example, this is the workflow I use to post to Twitter, Jaiku, and Pownce: Usually I would send an email and my subject would be posted, but I also have an IM client always available. So I wrote this XMPP-to-Tarpipe gateway.

OAuth and Google

Excellent news! Google now supports OAuth on all Goggle Data APIs.


On the topic of Bonjour goodies, take a moment to read about, and install, some of the *jour tools. Very cool stuff.