نظرات مطالب
راحت بگویید نه!

در مورد «ما بیکار ننشسته ایم» واقعیت این است که کارهای برنامه نویسی یک سیستم بعد از یک مدت به پایان می‌رسند و مابقی آن نگهداری است. این فاز نگهداری آنچنان هیجان انگیز نیست. هر روز کار نداره. شاید هفته‌ای یکی دو تغییر اگر ارجاع شوند. اینطوری مدیر شرکت فکر می‌کنه داره زیادی حقوق می‌ده. چون شما که به ظاهر کاری نمی‌کنی. یا به همین دلیل (من دارم بهت حقوق می‌دم ...) اینقدر تغییرات بی‌ربط رو به سیستم تحمیل می‌کنه که دست آخر شیرازه سیستم از هم می‌پاشه. نمونه دیگرش بحث شبکه هست. کار شبکه که تموم شد، مگر مابقی آن چقدر کار دارد؟ حداکثر این است که یک نفر را بگذارند یوزر تعریف کند، دسترسی بدهد. همین. اینجا است که کار کارمندی با رویه کار IT آنچنان جور درنمیاد. ولی همین نگهداری سیستم هم کار هر کسی نیست. این رو هم خیلی‌ها نمی‌تونند درک کنند.

در کل به نظر من برنامه نویس‌ها نباید خودشون رو درگیر کار کارمندی کنند تا بخواهند با این نوع مسایل سر و کله بزنند و اثبات کنند که وجودشان واقعا ضروری است و اگر در مورد آن‌ها هزینه‌ای انجام می‌شود، دور ریخته نشده.

You’re a Developer, So Why Do You Work For Someone Else  

نظرات مطالب
آشنایی با NHibernate - قسمت هشتم
ممنون. الگوهای طراحی برنامه نویسی شیءگرا یک حالت عمومی دارند. یعنی مختص به یک فناوری یا زبان خاص یا حتی یک محصول خاص نیستند. بگردید برای LINQ to SQL هم پیاده سازی الگوی Repository وجود دارد.
کلا استفاده‌ی از هر کدام از ORMs موجود بدون پیاده سازی الگوی Repository اشتباه است. به چند دلیل:
- مخفی کردن ساز و کار درونی یک ORM : برای مثال من جدا قصد ندارم این رو حفظ کنم که فلان ORM خاص چطور Insert انجام می‌دهد. من فقط می‌خواهم یک متد Insert داشته باشم. یکبار این رو در الگوی Repository پیاده سازی می‌کنم و بعد فراموش می‌کنم که این ORM الان EF است یا NH یا هرچی
- امکان تعویض کلی یک ORM : زمانیکه من در کدهای BLL خودم فقط از متد Insert پیاده سازی شده مطابق رهنمون‌های الگوی Repository استفاده کردم، دیگر BLL درکی از ORM نخواهد داشت. برای کوچ کردن به یک ORM دیگر فقط کافی است تا Repository را عوض کرد. مابقی برنامه دست نخورده باقی می‌ماند.
- نوشتن Unit test با استفاده از الگوی Repository ساده‌تر است: این الگو چون بر مبنای یک Interface پیاده سازی می‌شود، امکان Mocking این Interface در Unit tests ساده‌تر است.
مطالب
خواندنی‌های 31 شهریور
مطالب
شبیه سازی ارسال ایمیل در ASP.Net

فرض کنید مشغول به کار بر روی کامپیوتری هستید که دسترسی به هیچ شبکه‌ای ندارد و همچنین نیاز است تا قسمت اطلاع رسانی برنامه ASP.Net خود را که از طریق ایمیل کار می‌کند، تست کنید. برای مثال حداقل یکبار شکل و شمایل و محتوای ایمیل واقعی ارسالی آنرا در آوت لوک مشاهده کنید. برای حل این مساله چه باید کرد؟
برای تحقق این منظور باید کمی فایل web.config سایت را ویرایش کرد و سطرهای زیر را به آن افزود (پس از بسته شدن تگ system.web):

<system.net>
<mailSettings>
<smtp deliveryMethod="SpecifiedPickupDirectory">
<specifiedPickupDirectory pickupDirectoryLocation="c:\mail"/>
</smtp>
</mailSettings>
</system.net>

و همچنین در اینجا باید دقت داشت که هنگام کد نویسی دیگر نیازی به ذکر smtp server نخواهد بود و new SmtpClient().Send تنظیمات خودش را از فایل کانفیگ خواهد خواند.
اکنون با هر بار ارسال ایمیل، نتیجه حاصل (مطابق تصاویر زیر) در مسیر c:\mail ذخیره خواهد شد و فرمت حاصل با استفاده از outlook قابل مشاهده است.





شایان ذکر است که این روش با برنامه‌های غیر ASP.Net نیز کار می‌کند و تنها کافی است یک فایل app.config‌ به برنامه اضافه کرده و تنظیمات فوق را به آن اعمال نمائید.

مطالب
افزونه فارسی به پارسی برای word 2007

افزونه‌ی زیر کار مشخص کردن کلماتی که قابل تبدیل از فارسی به پارسی هستند را انجام می‌دهد (به صورت خودکار و در زمان تایپ) و همچنین امکان تبدیل خودکار آنها را نیز فراهم می‌کند.



برای نصب آن باید به ترتیب زیر عمل کنید (مهم)
لطفا این سه مرحله را به ترتیب انجام دهید در غیر اینصورت نتیجه نخواهید گرفت.
همچنین بدیهی است که برنامه باید با دسترسی admin نصب شود.
و همانطور که در عنوان این موضوع نیز ذکر گردید، این افزونه تنها برای MS-Word 2007 طراحی شده است.

سورس کامل و جزئیات نحوه‌ی برنامه نویسی آن‌را در طی روزهای آینده در این بلاگ مشاهده خواهید کرد.

پس از نصب به گزینه‌ی word options مراجعه کنید: (جهت اطمینان از نصب آن)



این افزونه را باید در لیست مربوطه مشاهده نمائید:



هر زمانیکه مایل به عدم استفاده از آن باشید با کلیک بر روی دکمه Go ، در صفحه بعد می‌توان افزونه را حذف کرد:



مثالی دیگر از نحوه‌ی بکارگیری این افزونه:


نظرات نظرسنجی‌ها
چه نوع محیط کاری را بیشتر ترجیح می‌دهید؟
من توی این مورد خیلی پوست کلفت شدم و به نظرم درمیان گذاشتن مشکلات توسط کاربران بصورت مستقیم با توسعه دهنده بسیار مفید و تقویت کننده ست .
از زمانی که توی شرکت نرم افزاری مشغول بکار شدم و محصول اتوماسیون ، وب سرویس‌ها و CRM  تحت وب و برخی پروژه‌های دیگه بطور همزمان در اختیارم هست بطور جدی بصورت مستقیم با انواع و اقسام کاربر از مبتدی (حتی کاربری که کلیک راست نمیدونسته چیه) تا مشتری هایی که خودشون شرکت‌های نرم افزاری یا توسعه دهنده هستند در ارتباطم .
 مهمترین دستاورد رابطه‌ی مستقیم کاربران با توسعه دهندگان "درک نیاز مشتری" میتونه باشه (که به نظرم خیلی مهمه و هربرنامه نویسی باید این گزار رو تجربه کنه)  .
نکته‌ی مثبت دیگری که در این روش وجود داره اینه که کاربر در مقام درخواست کننده قرار میگیره و برنامه نویس در مقام حلال مشکل ، اینم به خودی خود حس خوبی داره نسبت به اینکه درخواست توسط واحد دیگری اخذ بشه و در قالب کامند (یا بهتره بگیم تسک) در اختیار برنامه نویس گذاشته بشه .
نظرات نظرسنجی‌ها
آیا «بازی» هم می‌نویسید؟
با تشکر از این نظر سنجی 
برای دوستانی که علاقه به بازی سازی دارن این مطلبو میزارم...
همانطور که میدونید بازیهای روز از گرافیک فوق العاده ای برخورداره و مشخصه که این بازیهارو فقط با برنامه نویسی نمیشه ساخت. 
نیازهایی نرم افزاری که برای ساخت یک بازی باید در نظر گرفت:
1-استفاده از 3d-max یا maya برای ساختن کارکترها و متریالها
2-استفاده از موتورهای بازی سازی مانند  unity game engine یا unrealengine هر دوی این موتورها از C# پشتیبانی می‌کنند و منابع آموزشی خوبی دارن. دوستان مایه داری که هزینه براشون مهم نیست میتونن از آنرییل انجین استفاده کنند و دوستانی که مانند من از نرم افزارهای رایگان یا ک.ر.ک استفاده می‌کنن یونیتی بهترین گزینه هست(با نرم افزارهای تغییر آی پی وارد سایت یونیتی بشید)
3-سی شارپ یا سی پلاس در حد متوسط 
همچنین نیاز هست تا حدودی به هوش مصنوعی و تکنیک‌های درآمد زایی از طریق بازی سازی آگاه بود.(باید بدونید این بازی که میسازید قراره فقط از فروش خود بازی کسب درآمد کنه یا رایگان باشه و  پرداختهای درون برنامه ای داشته باشه مانند اغلب بازیهای اندروید)
نکته: توسط موتورهای بازی سازی می‌توانید خروجی سازگار برای اندروید، آی او اس ، رایانه  و... داشته باشید .

نظرات نظرسنجی‌ها
کدامیک از روش‌های زیر را برای تولید App های موبایل ترجیح می‌دهید؟ چرا؟
نظر من Native, به این دلیل که :1- گوگل به طور رسمی ازش پشتیبانی میکنه پس خیلی سریع به آخرین تغییرات و api‌های مرتبط دسترسی وجود داره  2- توسعه بصورت رایگان هست . 3- کامیونیتی بزرگ‌تری برای اون وجود داره ، حین برنامه نویسی احساس تنهایی نمیکنم :) 4- قدمت بیشتری داره بنابرین بسیاری از سوالات و مشکلاتی که حین توسعه پیش میاد ، قبلا برای سایر دولوپر‌ها پیش اومده و با یه سرچ کوچیک میشه به جواب رسید 5- یادگیری یه زبان و پلتفرم دیگه برام لذت بخش هست 6- روش‌های native به اصطلاح پخته‌تر و stable‌تر هستند .  7- و شاید بزرگترین دلیل اینکه خیالم راحته ، از این نظر که میدونم ابزاری که استفاده میکنم به احتمال قریب به یقین تا چند سال آینده تغییر چندانی نخواهد کرد ، با خاطر آسوده فقط به موضوع فنی که یه برنامه نویس باید مسلط باشه تمرکز میکنم و نگرانی ندارم که ممکنه ظرف مدت زمان کوتاهی مجبور شم سوئیچ کنم به یک محیط و ابزار دیگه .
دلایل ریز‌تر دیگه ای هم برای من وجود داره که به اندازه دلایل سبعه فوق (!) اهم نیستند .
نظرات نظرسنجی‌ها
بعنوان مدیر تیم نرم افزاری با تعداد متوسط (6-7 نفر) با متدولوژی اسکرام، کدام روش را بیشتر می پسندید و استفاده می کنید؟
وقتی حرف از متدولوژی میشه باید از قوانین متدولوژی تبعیت بشه. معمولا متدولوژی‌ها تمام چرخه عمر تولید یک نرم افزار را پوشش میدن. از تعیین نیازمندیهای اولیه گرفته تا تعیین و تشریح معماری نرم افزار و پیاده سازی و تست.معمولا در متدولوژی‌ها هم هر شخصی میتونه یک یا چند نقش ایفا کنه. مثلا هم میتونه تحلیلگر باشه و هم معمار نرم افزار. یا مثلا هم معمار باشه و برنامه نویس. ولی سوال شما بیشتر حول پیاده سازیه تا کل چرخه تولید. به نظر من این 7 نفر باید به 3 گروه تقسیم بشن. 2 نفر کار تحلیلگری و تجمیع نیازمندیهای اولیه رو انجام بدن. و بعدش 2 نفر که از همه با تجربه‌تر هستن به عنوان معمار نرم افزار . و 3 نفر آخر هم کار پیاده سازی رو انجام بدن.حالا بستگی به تخصص اون 3 نفر میتونید کار رو بین اونها تقسیم کنید. این عمل بصورت چرخشی و تکراری تا پایان چرخه تولید نرم افزار باید رعایت بشه. البته همون طور هم که قبلا گفتم چون در متدولوژی‌ها هر شخصی میتونه چندین نقش داشته باشه بنابراین هر کدام از اشخاص تحلیلگر یا معمار هم میتونن در امر پیاده سازی و برنامه نویسی ایفای نقش کنن.