ورود/ایجاد حساب کاربری
   منوی اصلی
· خانه
· لیست کاربران
· جستجو
· آمار مشاهدات
· آرشیو مقالات


- شرح
· راهنمای نویسندگان
· درباره ما

   همکاری با نشریه
در صورتی که مایل به همکاری با نشریه هستید، می‌توانید در لیست پستی نشریه عضو شده و در جریان امور قرار گیرید. برای اطلاعات بیشتر، اینجا کلیک کنید.

   کاربران
سردبیر
هیچ مدیر کمکی حاضر
همکاران
هیچ مدیر کمکی حاضر
اعضا:
جدیدترین:جدید امروز:0
جدیدترین:جدید دیروز:0
جدیدترین:مجموع:2471
جدیدترین:جدیدترین:
ufumenarayu
اعضا:حاضر
اعضا:اعضا:0
مهمان‌ها:مهمان‌ها:13
مجموع:مجموع:13
کاربران حاضر
هیچ کاربر حاضری وجود ندارد

   ورود کاربران




 


 برای ورود مشکل دارید؟
 ثبت نام کاربران جدید

کلیسای جامع و بازار - قسمت چهارم

(1039 مجموع کلمات موجود در متن)
(5431 بار مطالعه شده است)  نسخه چاپی

کلیسای جامع و بازار، بخش چهارم


نرم افزار popclient به fetchmail تبدیل میشود

تحول اصلی در پروژه زمانی صورت گرفت که هری هاچیسر (Harry Hochheiser) کد برنامه اش را در ارتباط با ارسال نامه به پورت SMTP ماشین سرویس گیرنده برایــم فرستاد. من سریعا به این نتیجه رسیدم که یک پیاده سازی درست از این ساختار تمامی روش های دیگر را به کنار خواهد زد.


هفته های زیادی را به سرو کله زدن با fetchmail پرداختم، تــا طــرح واســط برنامه که قابل استفاده اما بی قواره بود، را بهبود بخشم - بــرنــامه ظاهری ناهنجار داشــت، بــا گــزینه‌های زیــادی که به طور نامنظم در سراسر آن پراکنده بودند. مخصوصا گزینه‌هائی که برای کپی برداری نامه دریافت شده بــه یــک فـایل در صندوق پستی و یــا یـک دستگاه خروجی استاندارد تعبیه شده بودند، خاطرم را می آزردند، اما دلیلش را نمیتوانستم درک کنم.


آنچه که در حین فکر درباره قابلیت ارسال SMTP بــه ذهنــم خـطـور کـرد، ایـن بود که نرم افزار popclient سعی داشت تا کارهای زیادی را با هــم انـجــام دهــد. ایــن برنامه به نـحوی طراحی شده بود تا هم یک عامل انتقال پست الکترونیکی (MTA) و هم یک عامل تحویل موضعی (MDA) باشد. با قابلیت ارسال SMTP ، می‌توانست از حــوزه کــــاری MDA خارج شده و یک MTA محض باشد که به سادگی sendmail، نامه را به برنامه‌های دیگر برای تحویل موضعی تحویل می‌دهد.


چرا تمامی پیچیدگی‌های پیکــربندی یک MDA یا عملیات قفل و الحاق (Lock and Append) بر روی یک صندوق پستی در هم آمیخته شوند، در حالیکه پورت ۲۵ تــقــریبا در تمامی پـلتفرمهائی کــه از TCP/IP پشتیبانی می‌کنند، بــه ایـن کار اختصاص داده شده است؟ بخصوص زمانی که این مسئله به معنی شباهت ساختاری نامه دریافتی با نامه معمولی یک فرستنده SMTP باشد؛ که درواقع همان چیزی است که ما می‌خواهیم.


درس‌های زیـادی در ایـن نکته وجود دارد. در ابتدا، ایده ارسـال SMTP بزرگترین نتیجه‌ای بـود که من از تلاش هوشیارانه‌ام برای شبیه سازی روش لینوس گرفتم. یکی از کاربران، ایــن ایده فوق العاده را به من داد – تنــها کاری کــه بــایــد انـجام می‌دادم این بود که مفاهیم را درک کنم.



روش کارای بعدی برای داشتن ایده های خوب، کسب ایده های خوب از کاربرانتان است. بعضی وقتها این روش دوم بهتر است.


با کمی دقت، بسرعت خواهید فهمید که اگر کاملا با خودتان درباره آنچه که به دیگران بدهکارید صادق باشید، دنـیـا با تمام بزرگی‌اش همانطور با شما رفتار کرده است که شــما با هــر تــکه از نــوآوریتان که خلقش کرده‌اید؛ و ایــن تـنـها شایسته بخشی از نبوغ درونی شماست. همه ما دیدیم که این مطلب چقدر برای لینوس موثر افتاد.


(وقتی که این مقاله را در کنفرانس Perl در ماه اوت سال ۱۹۹۷ ارائه دادم، لری وال در ردیف اول نشسته بود. وقتی که به آخرین خط پاراگراف فوق رسیدم، او همچون مبلغ های مذهبی فریاد زد : "بگو، بگو براد !". تــمامی حــضار خنـدیـدند، چرا که می‌دانستند که چنین چیزی برای سازنده perl نیز اتفاق افتاده بود.)


بعد از گذشت تنها چند هفته از اجرای پروژه در آن حال و هوا، تعریف و تـمجـید های مشابهی را نه از کاربرانم، بلکه از سایر افرادی که سخنانم به گوش آنها رسیده بود، دریافت کردم. من هنوز تعــدادی از آن نامه ها را دارم. هر وقت حس می‌کنم که زندگیم بی ارزش بوده، یک نگاهی به آنها می اندازم :-)


اما دو درس پایه ای دیگر وجود دارد که برای هر نوع طراحی نرم افزار، مناسب است.



در اغلب اوقات، اکثر راه حل های ابداعی و برجسته از درک این نکته ناشی میشود که تحلیل شما از مسئله اشتباه بوده است.


زمانی من تلاش می‌کردم تا با ادامه توسعه نرم افزار popclient به عنوان یک MTA/MDA ترکیب شده، برنـامه‌ام تمــامـی انواع تحویل محلی را انجام دهد؛ در واقع می‌خواستم مسئله اشتباهی را حل کنم. ساختار برنامه fetchmail می‌بایست مجددا مورد بررسی و تحلیل قرار می‌گرفت تا به یک MTA محض تبدیل شود.


زمانی که به یک بن بست در برنامه نویسی می‌رسید، زمانی که فکر کردن به مرحــله بعــدی بـرایـتـان سخت می‌شود، آنوقت به دنبال جواب درست نباشید، بلکه به فکر یافتن سوال درست باشید. احتمالا صورت مسئله نیازمند این است که از نو بیان شود.


با این وجود، مشکلم را از نو مورد بررسی قرار دادم. بوضـوح مشخص بود که کار درست این است که؛ (۱) قابلیت ارسال SMTP را در قــالب یک درایور عمومی بگنجانم؛ (۲) آن را حالت پیشفرض قرار دهم؛ و (۳) سرانجام تمامی حالات دیگر تحویل را نادیده بگیرم، بخصوص گزینه های ارسال به فایل و ارسال به خروجی استاندارد.


بعضی اوقات در مورد اجرای بند ۳ به تردید می افتادم، و از این می‌ترسیدم کــه کـاربران قدیمی popclient که به مکانیزم های تحویل دیگر عادت کرده‌اند، از این کار ناراحت شوند. در تئوری، این امکان برایشان وجود داشــت که بـا روش‌های مشابه بتوانند مشکلشان را برطرف کنند. اما در عمل، این تحول می‌توانست برایشان سخت و دشوار باشد.

اما زمانی که این کار را انجام دادم، بهبودی زیادی در روند کار ایجاد شد. مشکلاتی که در کـد درایور وجود داشت به صفر رسید. پیکربندی برنامه بسیار ساده تر شد – دیــگر برنامه بیهوده درگیــر MDA و صندوق پستی کاربر نمی‌شد؛ همچنین دیگر نگرانی در ارتباط با پشتیبانی از سیستم عامل مورد استفاده در ارتباط با قفل کردن فایل وجود نداشت.


همچنین، این راه تنها روش برای جلوگیری از از دست دادن نامه ها نیز بود. اگر شما فایلی را به عنوان محل تحویل نامه هایتان در نظر می‌گرفتید و دیسک پر می‌شد، آنوقت شما نامه تان را از دست می‌دادید. این مسئله هیچگاه با ارسال بوسیله SMTP اتفاق نخواهد افتاد، چرا که شنونده SMTP شما تا زمانی که نامه شما تحویل داده نشود یا حداقل برای تحویل در زمانی دیگر اسپول (Spool) نشود، پیغام OK را برنمی‌گرداند.


کارائی نرم افزار نیز افزایش یافت (البته انتظار نداشته باشید که با یک بار اجرای نرم افزار به این نکته پی ببرید). فایده مهم دیگری که نمی‌توان از آن به سادگی گذشت، کاهش محسوس تعداد صفحات راهنما بود.


بعدا، مجبور شدم تا قابلیت تحویل از طریق یک MDA محلی تعیین شده توسط کاربر را برای ایجاد امکان مدیریت بعضی از حالات نادری که در ارتباط با SLIP پویا بوجود می آمد، مجددا به برنامه اضافه کنم. اما راه بسیار ساده‌تری را برای انجام آن پیدا کردم.


چطور؟ در کنار گذاشتن ویژگی های کهنه در حالی که می‌توانید بدون آنها، همچنان با همان کارائی کار کنید، تردید نکنید. به گفته آنتونی سنت-اگزیوپری (زمانی که خلبان و طراح هواپیما بود و هنوز نویسنده کتاب های کلاسیک کودکان نشده بود):



رسیدن به حد کمال (در طراحی) در حالتیکه که چیز دیگری برای اضافه کردن وجود ندارد، بدست نمی آید، بلکه این مهم زمانی حاصل می‌شود که نتوان چیزی را از طرح مورد نظر کم کرد.


زمانی که برنامه شما هم بهتر و هم ساده تر می‌شود، بدانید که درست عمل کرده‌اید. و در پروسه انجام کار، طرح برنامه fetchmail هویت خاص خود را پیدا کرد، که کاملا با نسخه قدیمی popclient متفاوت بود.


زمان تغییر نام برنامه فرا رسیده بود. طرح جدید بیشتر از آن برنامه popclient قدیمی به برنامه ارسال نامه الکترونیکی می‌خورد؛ هر دو به نوعی MTA بودند، امــا برنامه popclient جـدیــد متفاوت عمل می‌کرد. در نهایت و پس از دو ماه، نام برنامه را به fetchmail تغییر دادم.


ترجمه: نیما ابوطالبی nima717a@yahoo.com

منبع:

http://www.catb.org/~esr/writings/cathedral-bazaar/

PDF Version

تمامی مطالب و مقالات این سایت تحت مجوز GNU FDL قرار دارند. بنابراین کپی و ایجاد تغییر در آنها مطابق شرایط این مجوز آزاد می‌باشد.