6. Popclient se stává fetchmailem
Skutečně klíčovým okamžikem v projektu byl okamžik, když mi Harry Hochheiser poslal svůj návrh kódu pro přesměrování pošty na SMPT počítače klienta. Já si téměř okamžitě uvědomil, že spolehlivá implementace této funkce učiní ostatní způsoby doručení zastaralé.
Mnoho týdnů jsem měnil fetchmail spíše po částech a cítil jsem, že uživatelské rozhraní slouží svému účelu, ale je nepříjemné a neelegantní. Zejména záplava nastavení pro export stažené pošty do souboru nebo na standardní výstup mě obzvláště tížila, ale já nevěděl proč.
Když jsem přemýšlel o SMPT přesměrování, tak se ukazovalo, že popclient se pokoušel dělat příliš mnoho věcí. Byl navržen zároveň jako mail transport agent (MTA) a local delivery agent (MDA). S SMTP přesměrováním se z něj mohl stát čistý MTA a předávat poštu jiným programům, tak jak to dělá sendmail.
Proč si přidělávat práci s celou složitostí konfigurace MDA, když port 25 je téměř určitě přítomen na všech platformách podporujících TCP/IP?
Zde se můžeme naučit několik lekcí. Zaprvé, nápad se SMPT, to byla největší odměna za to, že jsem se pokoušel napodobit Linusovi metody. Tento skvělý nápad mi poskytl jeden z uživatelů, já pouze musel pochopit jeho důsledky.
11. Skoro stejně důležité, jako mít dobré nápady, je schopnost rozeznat dobré nápady vašich uživatelů. Občas je to druhé dokonce lepší.
Je zajímavé, že pokud jste opravdu k sobě upřímní, rychle zjistíte, jak mnoho dlužíte ostatním lidem, ačkoliv okolní svět vás bude považovat za původce všeho. Vy sami pak následkem toho začnete být skromnější v pohledu na vlastní schopnosti a Linus je toho dokonalým příkladem.
(Když jsem tento článek četl na konferenci o Perlu v roce 1997, Larry Wall seděl v řadě přede mnou. Když jsem se dostal k řádkům výše uvedeným, zavolal hlasem starých kazatelů "Jen to řekni, řekni bratře!". Celé publikum se smálo, protože vědělo, že vše fungovalo stejně i v případě vynálezce Perlu.
Jen několik málo týdnů po té, co jsem projekt rozběhl, jsem začal získávat podobnou chválu nejen od uživatelů, ale i od dalších lidí, ke kterým se zpráva donesla. Schoval jsem si některé e-maily. Podívám se ně, jestli někdy budu pochybovat, že můj život má smysl.
Jsou zde ovšem ještě dvě základnější, nepolitické lekce, které jsou společné veškerému designu.
12. Často to nejzajímavější a nejoriginálnější řešení se zrodí z toho, že si uvědomíte, že vaše chápání problému bylo mylné.
Já se pokoušel vyřešit nesprávný problém tím, že jsem chtěl popclienta jako kombinovaný MTA/MDA. Fetchmail musel být znovu koncipován od základu jako čistý MTA, součást normálního SMTP.
Když při vývoji narazíte do zdi, když zjistíte, že vás zajímá jen příští oprava, je často okamžik se zeptat ne na to, zda máte správnou odpověď, ale jestli kladete správnou otázku. Možná je třeba problém reformulovat.
Já jsem tedy problém reformuloval. Je jasné, že správné bylo 1. přenést podporu SMTP do generického driveru, 2. učinit z něj výchozí mód a 3. nakonec přestat podporovat ostatní možnosti přenosu.
Nad krokem 3 jsem nějaký čas váhal, obával jsem se, že si rozzlobím své staré uživatele, kteří závisejí na těchto mechanismech. Teoreticky jim stačilo přejít na .forward soubory nebo jejich ne-sendmail alternativy, aby získali to, co potřebují. Ve skutečnosti však mohl být tento přechod komplikovaný.
Ale když jsem to učinil, zisk byl ohromný. Nejpracnější část kódu zmizela. Konfigurace byla mnohem jednodušší, už žádné starosti o MDA uživatele a jeho poštovní schránku. Žádné starosti s tím, jestli operační systém umožňuje uzamykání souborů.
Rovněž zmizelo jediné riziko ztráty pošty. Pokud jste určili za příjemce pošty soubor a disk se zaplnil, poštu jste ztratili. Se SMTP se to stát nemůže.
Zlepšila se i rychlost a významné bylo i zjednodušení manuálu.
Později jsem musel doplnit některé nestandardní podmínky, ale to už bylo mnohem jednodušší.
Morální poučení? Neváhejte se rozloučit se vším, co vám nezvyšuje efektivitu. Antoine de
Saint-Exupery (což byl letec a letecký konstruktér, když nepsal klasické dětské knihy) řekl:
13. Konstrukční dokonalosti není dosaženo tehdy, když už není co přidat, ale tehdy, když už nemůžete nic odebrat.
Když se Váš kód zároveň zlepšuje a stává jednodušším, potom víte, že jste na správné cestě.
Nastal čas pro změnu jména. Nový program vypadal mnohem více jako dvojník sendmailu než starý popclient, a tak jsem jej po dvou měsících přejmenoval na fetchmail.