<<<OBSAH  >>>ENCSEN/CSZVONPreklady

6. Popclient se stava fetchmailem

Skutecne klicovym okamzikem v projektu byl okamzik, kdyz mi Harry Hochheiser poslal svuj navrh kodu pro presmerovani posty na SMPT pocitace klienta. Ja si temer okamzite uvedomil, ze spolehliva implementace teto funkce ucini ostatni zpusoby doruceni zastarale.
Mnoho tydnu jsem menil fetchmail spise po castech a citil jsem, ze uzivatelske rozhrani slouzi svemu ucelu, ale je neprijemne a neelegantni. Zejmena zaplava nastaveni pro export stazene posty do souboru nebo na standardni vystup me obzvlaste tizila, ale ja nevedel proc.
Kdyz jsem premyslel o SMPT presmerovani, tak se ukazovalo, ze popklient se pokousel delat prilis mnoho veci. Byl navrzen zaroven jako mail transport agent (MTA) a local delivery agent (MDA). S SMTP presmerovanim se z nej mohl stat cisty MTA a predavat postu jinym programum, tak jak to dela sendmail.
Proc si pridelavat praci s celou slozitosti konfigurace MDA, kdyz port 25 je temer urcite pritomen na vsech platformach podporujicich TCP/IP?
Zde se muzeme naucit nekolik lekci. Zaprve, napad se SMPT, to byla nejvetsi odmena za to, ze jsem se pokousel napodobit Linusovi metody. Tento skvely napad mi poskytl jeden z uzivatelu, ja pouze musel pochopit jeho dusledky.
11. Skoro stejne dulezite, jako mit dobre napady, je schopnost rozeznat dobre napady vasich uzivatelu. Obcas je to druhe dokonce lepsi.
Je zajimave, ze pokud jste opravdu k sobe uprimni, rychle zjistite, jak mnoho dluzite ostatnim lidem, ackoliv okolni svet vas bude povazovat za puvodce vseho. Vy sami pak nasledkem toho zacnete byt skromnejsi v pohledu na vlastni schopnosti a Linus je toho dokonalym prikladem.
(Kdyz jsem tento clanek cetl na konferenci o Perlu v roce 1997, Larry Wall sedel v rade prede mnou. Kdyz jsem se dostal k radkum vyse uvedenym, zavolal hlasem starych kazatelu "Jen to rekni, rekni bratre!". Cele publikum se smalo, protoze vedelo, ze vse fungovalo stejne i v pripade vynalezce Perlu.
Jen nekolik malo tydnu po te, co jsem projekt rozbehl, jsem zacal ziskavat podobnou chvalu nejen od uzivatelu, ale i od dalsich lidi, ke kterym se zprava donesla. Schoval jsem si nektere e-maily. Podivam se ne, jestli nekdy budu pochybovat, ze muj zivot ma smysl.
Jsou zde ovsem jeste dve zakladnejsi, nepoliticke lekce, ktere jsou spolecne veskeremu designu.
12. Casto to nejzajimavejsi a nejoriginalnejsi reseni se zrodi z toho, ze si uvedomite, ze vase chapani problemu bylo mylne.
Ja se pokousel vyresit nespravny problem tim, ze jsem chtel popklienta jako kombinovany MTA/MDA. Fetchmail musel byt znovu koncipovan od zakladu jako cisty MTA, soucast normalniho SMTP.
Kdyz pri vyvoji narazite do zdi, kdyz zjistite, ze vas zajima jen pristi oprava, je casto okamzik se zeptat ne na to, zda mate spravnou odpoved, ale jestli kladete spravnou otazku. Mozna je treba problem reformulovat.
Ja jsem tedy problem reformuloval. Je jasne, ze spravne bylo 1. prenest podporu SMTP do generickeho driveru, 2. ucinit z nej vychozi mod a 3. nakonec prestat podporovat ostatni moznosti prenosu.
Nad krokem 3 jsem nejaky cas vahal, obaval jsem se, ze si rozlobim sve stare uzivatele, kteri zaviseji na techto mechanismech. Teoreticky jim stacilo prejit na .forward soubory nebo jejich ne-sendmail alternativy, aby ziskali to, co potrebuji. Ve skutecnosti vsak mohl byt tento prechod komplikovany.
Ale kdyz jsem to ucinil, zisk byl ohromny. Nejpracnejsi cast kodu zmizela. Konfigurace byla mnohem jednodussi, uz zadne starosti o MDA uzivatele a jeho postovni schranku. Zadne starosti s tim, jestli operacni system umoznuje uzamykani souboru.
Rovnez zmizelo jedine riziko ztraty posty. Pokud jste urcili za prijemce posty soubor a disk se zaplnil, postu jste ztratili. Se SMTP se to stat nemuze.
Zlepsila se i rychlost a vyznamne bylo i zjednoduseni manualu.
Pozdeji jsem musel doplnit nektere nestandardni podminky, ale to uz bylo mnohem jednodussi.
Moralni pouceni? Nevahejte se rozloucit se vsim, co vam nezvysuje efektivitu. Antoine de Saint-Exupery (coz byl letec a letecky konstrukter, kdyz nepsal klasicke detske knihy) rekl:
13. Konstrukcni dokonalosti neni dosazeno tehdy, kdyz uz neni co pridat, ale tehdy, kdyz uz nemuzete nic odebrat.
Kdyz se Vas kod zaroven zlepsuje a stava jednodussim, potom vite, ze jste na spravne ceste.
Nastal cas pro zmenu jmena. Novy program vypadal mnohem vice jako dvojnik sendmailu nez stary popklient, a tak jsem jej po dvou mesicich prejmenoval na fetchmail.

<<<OBSAH  >>>ENCSEN/CSZVONPreklady