لطفاً خودتان را تکرار نکنید!

Mr Smith In Matrix Reloaded : Repeated himself and failed!

یک اصل یا قاعده یا توصیهٔ برنامه‌نویسی هست که علی رغم آن که عموماً جماعت برنامه‌نویس با آن آشنایی دارند -به نظرم- التزام به پیروی از آن موجب رستگاری همگان در همهٔ کارها خواهد شد ;).

این اصل که به طور خلاصه «DRY» خوانده می‌شود (و متضاد آن «WET» است! ؛ اولی مخفف Don’t Repeat Yourself و دومی مخفف Write Everything Twice) به طور ساده (به زبان برنامه‌نویسان) می‌گوید هر قسمتی از کدِ برنامه که ممکن است لازم باشد در جای دیگری مجدداً استفاده شود؛ لازم است به جای تکرار، به شکل یک کد قابل استفادهٔ مجدد (تابع، کلاس و …) درآید و هر جا لازم شد فراخوانی شود. البته این اصل تعریف پیچیده‌تر و دقیق‌تری هم دارد که درکش مستلزم سوزاندن فسفر بیشتری است: «هر بخشی از دانش در یک سیستم باید یک نمایش یکتا، غیر مبهم و معتبر داشته باشد».

برنامه‌نویسان نمود کارایی این قاعده را عموماً در رفع ایراد برنامه‌ها مشاهده می‌کنند: جاهایی که عدم رعایت این توصیه باعث شده بخشهایی از کد -جا به جا- به جای تبدیل به یک تابع و فراخوانی تکراری، به طور کامل کپی شده و حالا مشخص شده که آن بخش از کد ایراد دارد. اگر کار به قاعده انجام شده باشد -کسی خودش را تکرار نکرده باشد- رفع ایراد یا بهینه‌سازی یک قسمت از کد مشکل را حل می‌کند، اما وای به حال وقتی که کد؛ مکرراً کپی شده و تازه احیاناً در کپیهای مجدد در هر جا -بنا به مقتضیات- تغییرات مختصر یا مفصلی هم کرده باشد: اگر برنامه‌نویس خطاکار خود شما بوده باشید که تاوان عمل نکردن به این توصیه را با صرف وقتتان خواهید پرداخت، اما اگر کس دیگری قرار باشد خطای شما را تصحیح کند چه؟ لبخند می‌زنید؟! دلتان از شدت بدجنسی ضعف می‌رود؟! توصیه می‌کنم شما علاوه بر این توصیه، توصیهٔ مفیدتری را هم آویزهٔ گوشتان داشته باشید که ممکن است روزی جانتان را نجات دهد:

همیشه طوری کدنویسی کن که انگار کسی که قرار است کد تو را نگهداری کند یک قاتل زنجیره‌ای روانی است که نشانی خانه‌ات را می‌داند!

Dexter

بگذریم! این که خواندید مقدمهٔ صحبتم بود. اصل مطلب این که به نظرم یکی از جاهایی که پیروی از DRY شدیداً می‌تواند از هدررفت تکراری وقتها جلوگیری کند آنجاست که شما یک پروژهٔ بازمتن یا سایت یا وبلاگ عام‌المنفعه و مانند آن روی اینترنت دارید و خود را تا حد امکان متعهد به پشتیبانی از آن با پاسخگویی سؤالات مخاطبانتان می‌دانید. DRY زمانی نمود و کاربرد پیدا می‌کند که مخاطبانتان سؤالات یا درخواستهای تکراری دارند و شما مجبورید به طور عادی یک جواب خاص را برایشان تکرار کنید. یکی از راه‌حلهای این مسأله که می‌تواند به شما کمک کند کمتر خودتان را تکرار کنید آن است که پاسخ این سؤالات را در صفحاتی روی وب نگهداری کنید و در پاسخ هر سؤال تکراری، به جای نوشتن پاسخ مفصل، مخاطب را به صفحهٔ پاسخ ارجاع دهید.

شأن نزول این مطلب آن بود که خود من مدتها است که دارم تاوان عمل نکردن به این قاعده را برای خطای متداولی روی گنجور رومیزی می‌پردازم:

ایمیلهایی که گزارش خطایی با راهکار یکسان برای رفع خطا را در گنجور رومیزی به من داده‌اند

مسأله آن است که در اغلب این موارد، زمانی که برای جلوگیری از تکرار باید صرف شود بسیار کمتر از زمانی است که برای انشا و ارسال جواب تکراری برای تک تک مخاطبان صرف می‌شود. خاتمه آن که، امروز وقت گذاشتم و پاسخ متداول را جایی در دسترس گذاشتم. دعای آخر مجلس آن که کاش در جی‌میل می‌شد فیلتری تعریف کرد که در مواجهه با ایمیل حاوی کلمات تکراری (برای من استثنای برنامه‌نویسی System.BadImageFormatException)، به طور خودکار ایمیل از پیش تعیین شده‌ای را ارسال کند (که در نمونهٔ من ایمیلی حاوی لینک به این صفحه می‌شود).

در آستانهٔ سال نو

سال ۹۰ هم رو به پایان است، سالی که برای من توأم با تغییر محل کار و به تبع آن تغییرات دیگر بود. تغییراتی؛ عمدتاً ناخواسته که نهایتاً خوشایندم بود و باعث می‌شود که این سال را سالی توأم با اتفاقات خوب به حساب بیاورم. سالی که البته از کارهای فوق برنامه -گنجور و …- دور ماندم و از این لحاظ از این سال یادگاریهای زیادی ندارم. امیدوارم سال آینده سال پربارتری باشد.

لوح تقدیر تدبیر

سال نو پیشاپیش مبارک!

آمدید، نبودم؟

همزمان با فیلتر شدن گنجور، مشکلاتی در محل کار قبلیم پیش آمد که مجبور به ترک آن محل و شروع به کار در جای دیگر شدم. موعد اجاره‌ام هم با این وقایع همزمان شد و محل زندگیم را هم تغییر دادم. با توجه به ترکیب این وقایع، (به اختیار و ترجیحاً) در خانهٔ جدید تا به امروز و احتمالاً مدتی دیگر اینترنت دائمی نداشتم و ندارم. به همین جهت فعالیتهایم روی وبلاگ و همینطور گنجور و جاهای دیگر محدود شده است. از دوستانی که جویای احوال بودند و هستند متشکرم.

بازی خطوط و یک مجموعهٔ دیدنی

از بازیهای ساده و وقت‌پرکن خوشتان می‌آید؟ روی تصویر زیر کلیک کنید. باید در هر ردیف یا ستون حداقل ۵ توپ همرنگ را کنار هم بنشانید تا آنها را با هم ببرید و این کار را تا وقتی جا دارید تکرار کنید.

Lines Game

خالق این بازی چیز مهمتری هم درست کرده: او یک کتابخانهٔ جاوا اسکریپت برای آسان کردن کار با عناصر گرافیکی برداری ساخته که از فناوریهایی همچون SVG و VML استفاده می‌کند. مهم نیست که برنامه‌نویس وب باشید یا نه، به نظرم اگر سری به سایت این کتابخانه بزنید گالری نمونه‌کارهای قابل انجام با این کتابخانه جذبتان خواهد کرد. به اینجا بروید و روی نمونه‌ها یکی یکی کلیک کنید.

نمونه کارهای قابل انجام با کتابخانهٔ رافائل

صلاح کار کجا و …

دربارهٔ این بیت:

صلاح کار کجا و من خراب کجا؟

ببین تفاوت ره کز کجاست تا به کجا!

و اشکال قافیه‌اش بحثی در حاشیه‌های غزل در گنجور شده بود (اینجا). امروز آقای مهران ارشادی‌فر این حاشیه را گذاشته‌اند:

این را از قول برادر مرحومم مسعود ارشادی‌فر نقل می‌کنم که شاعر بود و حافظ را خوب می‌شناخت. در تفسیر این اشکال قافیه‌ای می‌گفت این را می‌گویند «اجرا در متن». انتخاب قافیهٔ «به» برای شعری که قافیه‌اش باید «ب» باشد، در واقع مصرع قبل -صلاح کار کجا و من خراب کجا- را تفسیر می‌کند: یعنی چون حال حافظ خراب است صلاح کار از دستش می‌رود و به جای قافیهٔ «ب» قافیهٔ «به» در شعر می‌آورد. این تعبیر به نظرم بسیار درست است چون با شناختی که از حافظ داریم بی‌گمان در انتخاب قافیهٔ مناسب دچار مشکل نمی‌شد.

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

فایرفاکس در فایرفاکس

این نشانی را با فایرفاکس مرور کنید (با کلیک کار نمی‌کند باید آن را به صورت دستی کپی کنید):

chrome://browser/content/browser.xul

انتظار دارم با چیزی در این مایه‌ها مواجه شوید:

فایرفاکس در فایرفاکس

دلیلش را لابلای این نوشته می‌توانید بیابید.

«در واقع»

گفتگوی ایران صدا دربارهٔ گنجور که پیشتر خبرش را داده بودم هم‌اکنون در آرشیو سایت ایران صدا در دسترس قرار گرفته است. علاوه بر آن که فرصت کافی برای طرح قسمت زیادی از مطالبی که آماده کرده بودم پیش نیامد مسألهٔ آزاردهندهٔ دیگر، تکرار پشت سر هم و بلاانقطاع عبارت «در واقع» در اول و وسط و آخر جمله‌ها توسط من بود که در نوع خودش -فکر می‌کنم- تعجب‌برانگیز و رکوردشکن باشد. با عذرخواهی پیشاپیش بابت این درواقع‌باران اعصاب‌خردکن غیرعمدی (و پساپس از دوستانی که به شکل زنده خود را در معرض آن قرار دادند، به ویژه مجری محترم برنامه و دست‌اندرکاران آن که مجبور به تحمل آن بودند) اگر احیاناً هنوز علاقمند بودید این گفتگو را بشنوید می‌توانید با مراجعه به این صفحه و انتخاب بخش مربوطه (آیکون سبزرنگ متناظر با آن در تصویر زیر مشخص است) آن را به شکل آنلاین بشنوید.

این صدای پارسی، گفتگو پیرامون گنجور

برای دریافت آن با سه کیفیت متفاوت نیز می‌توانید از سمت چپ‌ترین گزینه در پایین این صفحه استفاده کنید.

دریافت گفتگوی ایران‌صدا دربارهٔ گنجور

لطفاً ببخشید!

گنجور در ایران‌صدا

چهارشنبه بیستم بهمن، ساعت ۱ بعدازظهر در برنامهٔ زندهٔ رادیو-تی‌وی اینترنتی ایران‌صدا حضور خواهم داشت، موضوع بحث مرتبط با گنجور است. اینجا در این باره بیشتر بخوانید.