Boa noite amigos!
Vimos no versículo anterior a décima terceira parte de “The Cathedral and the Bazaar”, agora vemos a décima quarta.
Bem, eu havia reformulado meu problema. Claramente, a coisa certa a fazer era (1) hackear o suporte de encaminhamento de SMTP para o driver genérico, (2) torná-lo o modo padrão e (3) eventualmente descartar todos os outros modos de entrega, especialmente as opçõe entregar-para-arquivo e entregar-para-saída-padrão.
Dê o Próximo Passo e Invista Agora
Hesitei durante o passo 3 por algum tempo, temendo incomodar os usuários do popclient de longa data, dependendo dos mecanismos de entrega alternativos. Em teoria, eles poderiam mudar imediatamente para .encaminhar arquivos ou seus equivalentes que não fossem ‘enviar email’ para obter os mesmos efeitos. Na prática, a transição pode ter sido confusa.
Mas quando eu fiz isso, os benefícios se mostraram enormes. As partes mais sujas do código driver desapareceram. A configuração ficou radicalmente mais simples – sem mais rastejamento para o sistema MDA e a caixa de correio do usuário, sem mais preocupações sobre se o sistema operacional subjacente suporta o travamento de arquivos.
Além disso, a única maneira de perder o e-mail desapareceu. Se você especificou a entrega em um arquivo e o disco ficou cheio, seu e-mail se perdeu. Isso não pode acontecer com o encaminhamento de SMTP porque o ouvinte de SMTP não retornará OK, a menos que a mensagem possa ser entregue ou pelo menos colocada em spool para entrega posterior.
Além disso, o desempenho melhorou (embora não a ponto de você notar em uma única execução). Outro benefício não insignificante dessa mudança foi que a página de manual ficou muito mais simples.
Mais tarde, tive que trazer a entrega por meio de um MDA local especificado pelo usuário para permitir o tratamento de algumas situações obscuras envolvendo o SLIP dinâmico. Mas eu encontrei uma maneira muito mais simples de fazer isso.
A moral? Não hesite em descartar recursos obsoletos quando puder fazê-lo sem perda de eficácia. Antoine de Saint-Exupéry (que era aviador e designer de aviões quando não era autor de livros infantis clássicos) disse:
- “A perfeição (no design) é alcançada não quando não há mais nada a acrescentar, mas sim quando não há mais nada para tirar.”
Quando seu código está ficando melhor e mais simples, é quando você sabe que está certo. E no processo, o design do fetchmail adquiriu uma identidade própria, diferente do popclient ancestral.
Era hora da mudança do nome. O novo design parecia muito mais um dual do sendmail do que o antigo popclient; ambos são MTAs, mas onde o sendmail empurra e entrega, o novo popclient puxa e entrega. Então, a dois meses dos blocos, renomeei o fetchmail.
Há uma lição mais geral nesta história sobre como a entrega SMTP veio para o fetchmail. Não é apenas a depuração que é paralelizável; o desenvolvimento e (talvez surpreendentemente) a exploração do espaço de design também é. Quando seu modo de desenvolvimento é rapidamente iterativo, o desenvolvimento e o aprimoramento podem se tornar casos especiais de depuração — corrigindo ‘erros de omissão’ nos recursos ou no conceito original do software.
Mesmo em um nível mais alto de design, pode ser muito valioso ter muitos co-desenvolvedores andando aleatoriamente pelo espaço de design próximo ao seu produto. Considere-se o modo como uma poça de água encontra um escoadouro, ou melhor ainda, como as formigas encontram alimento: exploração essencialmente por difusão, seguida de exploração mediada por um mecanismo de comunicação escalável. Isso funciona muito bem; Assim como Harry Hochheiser e eu, um de seus batedores pode muito bem encontrar uma grande vitória por perto que você estava um pouco focado demais para ver.
Terminada a parte 14, no próximo a 15ª. Grande abraço!