یکی از بزرگترین و پر بازدیدترین مراجع و کامیونیتی های عکاسی در ایران. هدف این سایت میسر نمودن امکان مشارکت و تبادل نظر اعضا در خصوص تصاویر ارسال شده بین کاربران و همچنین معرفی عکاسان برتر بر اساس این فعالیت ها است. با توجه به تعداد زیاد بازدید کنندگان و اعضا فعال و همچنین امکانات مختلفی از جمله ارسال و طبقه بندی خودکار تصاویر ، امکان نظر دهی و امتیاز دهی به تصاویر و نظرات ، الگوریتم های پیچیده طراحی شده به منظور محاسبه امتیاز کاربران و جلوگیری از تقلب و نیاز به سرعت و راندمان بالا در این سایت امکانات مختلفی به منظور تسهیل امر مدیریت در نظر گرفته شده است.
می توانم بگویم یکی از بهترین الگوریتهم های دوران برنامه نویسی ام را در این سایت پیاده سازی کردم به عبارت دیگر کل این سایت وابسته به وجود این الگوریتم بود (و همچنان هست) و کوچکترین نقص در عملکرد آن چه از نظر محاسبه و چه از نظر راندمان منجر به سوء استفاده برخی کاربران و عکس العمل شدید سایر کاربران و حتی تعطیل شدن سایت می شد.
فاکتورهای مختلفی بود که هنگام طراحی باید منظور می شد که از جمله آنها :
- امکان نگهداری : همانطور که ذکر شد این سایت یکی از بزرگترین مراجع عکاسی در ایران به حساب می آمد (و همچنان نیز هست) و گردانندگان آن برنامه دراز مدت برای آن داشتند. در نتیجه باید امکان اصلاح فرمول های محاسبه به دفعات نا مشخص و حداقل مشکلات جانبی میسر می شد.
- راندمان بالا : کلیه این عملیات باید به گونه ای انجام می شد که در فعالیت کاربران اختلالی ایجاد نمی شد. از آنجایی که کاربران عضو بودند و فعالیت های اجتماعی انجام می دادند امکان استفاده از Static Cache وجود نداشت و می بایست بهینه سازی در خود الگوریتم و معماری نرم افزار پیدا سازی می شود.
- سادگی استفاده : خوب من مدت کوتاهی به تنهایی روی این سایت کار کردم و بعد از مدتی نیاز بود که درگیر بخش های پیچیده سایر پروژه ها شوم. در نتیجه ضرورت داشت که امکان پشتیبانی سایت توسط برنامه نویسان با مهارت معمول و بدون اختلال در عملکرد کلی سیستم هم میسر می شد.
- دقت در محاسبات : باید روشی پیدا می کردم که بتوان الگوریتم حیاتی سیستم را به نوعی ایزوله کنم از سایر بخش های سایت تا حداقل تاثیر را از مشکلات سایر بخش های سیستم بگیرد
- توسعه پذیری : مانند هر نرم افزار پر استفاده دیگری ، توسعه پذیری یکی از فاکتور های مهم به شمار می شود و باید بتوان در حد معقولی بدون نیاز به بازنویسی کل سیستم امکانات جدید به آن اضافه نمود.
- امنیت بالا : مانند هر سایت اجتماعی دیگر همیشه کاربرانی هستند که قصد سوء استفاده دارند. نیاز بود که کل سیستم به گونه ای طراحی شود که جلوی اینگونه خرابکاری ها را بگیرد.
- ...
اعمال موارد بالا در یک فاز کار دشواری بود چون مشتری هم به طور مدام فرمول های محاسبه را تغییر می داد ولی در نهایت موفق شدم با پیاده سازی یک بسته شیء گرا و استفاده و ترکیب چندین الگوی طراحی به نتیجه مطلوب برسم. سیستم کلی به این شکل بود که کلاسی طراحی کردم به نام Dispatcher که کلیه کلاس های اصلی سیستم نظیر photo ، comment و ... در پشت صحنه به این کلاس وصل بودند و با هم در تبادل بودند. هر تغییری در مثلا یک عکس به صورت خودکار شناسایی می شد و به شکل زنجیر وار کل بخش های مرتبط با آن به روز می شد. این به این معنا بود که علاوه بر اینکه کل منطق اصلی سیستم در یک جا مجمع بود و ضریب خطا را به حداقل می رساند ، همچنین بخش پیچیده سیستم نیز به طور کامل از دید سایر برنامه نویسان پنهان می ماند و امکان اختلال در آن تقریبا غیر ممکن می شد.