مقالات آموزشی برنامه نویسی و شبکه با سلام، بنده این وب رو راه اندازی کردم تا اطلاعات خودم رو در اختیار دوستان قرار بدم ، امیدوارم از مطالب آموزشیم لذت ببرید. سوالات خودتونو می تونین تو بخش نظرات بپرسین ؛ حتما در اولین فرصت جواب سوالاتتونو تو همون بخش نظرات بدم. »» به سوالات خصوصی جواب داده نمی شود «« یا حق http://netnic.ir 2017-04-25T17:40:58+01:00 text/html 2016-10-25T16:12:49+01:00 netnic.ir H Moradof سه اصل مهم در برنامه نویسی که همیشه باید به یاد داشته باشید http://netnic.ir/post/1066 <p> درسته که خیلی زیاد از جوملا کارا و وردپرس کارا خوشم نمیاد و معتقدم که خیلی بازار کار نرم افزار رو خراب کردن ولی همیشه یک چیزی رو تحسین می کردم.<br><br>جوملا کارا و وردپرس کارا (توهین نشه، منظورم همکارانیه که با نرم افزارهای مشتری رو با بیس جوملا و وردپرس) دقیقا چیزی رو به مشتری میدن که بهش نیاز داره. نه کمتر و نه بیشتر. همیشه همه چیز رو به ساده ترین و سریع ترین روشی که میشه پیاده سازی می کنن؛ چیزی که شاید ما ASP کارها باید یاد بگیریم!<br>ما همیشه دوست داریم نرم افزارها را طوری بسازیم که نیازهای آتی کارفرما رو هم پوشش بده، البته این به تنهایی مشکلی نیست ولی مشکل از جایی پیش میاد که گاهی زیاده روی می کنیم. اینجاست که باید به یاد همکارامون بیفتیم. گاهی واقعا نیاز نیست که یک نرم افزار خیلی کامل و خوب و عالی بسازیم.<br>اگر مشتری فروشگاه الکترونیک ساده می خواد، نیاز نیست یک سیستم سبد خرید خیلی عالی یا یک سیستم حسابداری یا انبارداری براش بسازیم. همین که یک نفر بتونه بیاد توی فروشگاه چیزی که می خواد رو پیدا کنه و خریدشو انجام بده کافیه.<br><br>البته نمی خوام بگم قیمت پروژه های ASP واسه اینه که ما داریم چیزای اضافی می سازیم. بخشی از قیمت به دلیل اینه که ما از 0 همه چیز رو می سازیم و بخش دیگر مسئولیت پروژه است. مثلا وقتی شما دارید یک پروژه تراکنش های ارزی-ریالی تمام خودکار می نویسید، مطمئنا مسئولیت خیلی زیادی رو به دوش کشیده اید، هر گونه باگ امنیتی مساوی است با میلیون ها تومان ضرر مالی برای مشتری شما پس باید خیلی خیلی وقت بذارید تا هیچ باگی روی نرم افزار وجود نداشته باشه. کلیه محاسبات دقیق و بی نقص باشن و هزاران نگرانی دیگر ...<br><br>&nbsp;در ادامه سه اصل مهم که هر برنامه نویس باید موقع ساخت نرم افزار به خاطر داشته باشه رو بیان کرده ام.</p> text/html 2016-10-25T03:24:40+01:00 netnic.ir H Moradof دانلود فایل های آپدیت ویندوز 8.1 http://netnic.ir/post/1065 دیروز خواستم روی ویندوز 8.1 ویژوال استودیو 2015 نصب کنم؛ ارور داد که باید ویندوزتون اپدیت بشه. از طریق بخش آپدیت خود ویندوز 8.1 اقدام کردم ولی آپدیت های مورد نیاز جهت نصب ویژوال استودیو روی ویندوز 8.1 رو نصب نکرد.<br><br><b>برای نصب ویژوال استودیو 2015 روی ویندوز 8.1 چکار کنم ؟</b><br><br>بهترین راه برای نصب ویژوال استودیو 2015 روی ویندوز 8.1، دانلود فایل های آپدیت بصورت آفلاین و نصب آنها بصورت دستی روی ویندوزتونه.<br>برای دانلود فایل های آپدیت ویندوز 8.1 روی یکی از لینک های زیر کلیک کنید. سپس در صفحه ای که باز میشه روی Download کلید کنید، در پایان کافی است در صفحه جدید روی File Names کلیک کنید تا همه موارد انتخاب بشه، در پایان روی Next کلیک کنید تا دانلود فایل ها شروع بشه.<br>امیدوازم این مطلب بدردتون بخوره.<br><br><h3 align="center"><a title="صفحه دانلود" href="http://www.microsoft.com/en-us/download/details.aspx?id=42335" target="_blank" rel="nofollow"><strong><img src="http://mihanblog.comhttp://mihanblog.com/public/public/rte/images_new/smiles/103.gif" height="20" width="20">دانلود فایل های آپدیت آفلاین ویندوز 8.1 نسخه 64 بیتی</strong></a><br></h3><p align="center">&nbsp;<br></p><h3 align="center"> </h3><h3 align="center"><a href="https://www.microsoft.com/en-us/download/details.aspx?id=42327" target="_blank" rel="nofollow"><strong><img src="http://mihanblog.comhttp://mihanblog.com/public/public/rte/images_new/smiles/103.gif" height="20" width="20">دانلود فایل های آپدیت آفلاین ویندوز 8.1 نسخه 32 بیتی</strong></a></h3> text/html 2016-10-23T16:26:12+01:00 netnic.ir H Moradof طراحی متفاوت، رمز اصلی درخشیدن در میان رقباست http://netnic.ir/post/1064 <div align="center"><br><font size="3"><font size="5" color="#CC33CC">گروه نرم افزاری آرتاراکس</font><br><br><font size="4" color="#FF0000">با ما متفاوت باشید</font><br></font></div><br><ul><li><font size="2">طراحی و ساخت انواع وب سایت با طراحی های متفاوت<br></font></li><li><font size="2">طراحی و اجزای انواع نرم افزار</font></li><li><font size="2">مشاوره، طراحی و ساخت انواع ایده های شما در حوزه نرم افزار</font></li><li><font color="#3333FF"><font size="2" color="#000000">طراحی و ساخت انواع بازی (موبایل، کامپیوتر، PS4 و XBOX)</font><b><font size="2"><br></font></b></font></li></ul><b><font size="2"><br></font>گزیده ای از نمونه کارهای ما:<br><br></b><div align="center"><a href="http://www.artarax.com" title="گروه نرم افزاری آرتاراکس"><img src="http://file.mihanblog.com//public/user_data/user_files/102/304365/Azmoon.jpg" alt="نمونه کار طراحی شده توسط گروه نرم افزاری آرتاراکس" hspace="0" height="348" border="0" width="576" vspace="0" align="bottom"></a><br></div><br><div align="center"><b><br></b></div><div align="center"><b><font size="2"><font color="#CC0000"><img src="http://mihanblog.comhttp://mihanblog.com/public/public/rte/images_new/smiles/95.gif" height="15" width="15"> <a href="http://www.artarax.com" target="_blank" title="آرتاراکس | تولید کننده نرم افزار و بازی های تجاری">جهت مشاهده بقیه تصاویر نمونه کارهای ما اینجا کلیک نمایید</a> <img src="http://mihanblog.comhttp://mihanblog.com/public/public/rte/images_new/smiles/96.gif" height="16" width="16"></font></font></b></div><b><font size="2"><br></font></b> text/html 2016-10-17T02:14:21+01:00 netnic.ir H Moradof آموزش ساخت کتابخانه (فایل dll) در سی شارپ http://netnic.ir/post/1038 در پروژه های سی شارپی (پروژه ویندوزی یا پروژه asp.net) نوشتن کدهای آماده سی شارپ برای کارهای مختلف و استفاده مکرر از آنها درون پروژها و یا انتشار آنها بین همکاران و دوستان یک کار بسیار رایج می باشد.<br>از آنجایی که سی شارپ یک زبان شی گرا است می توان به راحتی قطعه کدهای آماده را درون اشیاء (کلاس ها و کتابخانه ها) مختلف قرار داد و به جای قطعه های کد ، شیء ها را در اختیار سایر افراد قرار داد.<br>از طرفی از آنجایی که برای کار با اشیاء سی شارپ نیاز نیست که استفاده کننده (همکار یا دوست شما که شیء ای را از شما گرفته است تا در پروژه خود استفاده نماید) از کدهای پیچیده داخل اشیاء مطلع باشد و به راحتی بدون نیاز به دانستن محتویات داخل شیء می تواند به متدهای داخلی شیء کار کند (به ورودی توابع داخلی شیء دیتا بدهد و خروجی دریافت نماید) از این رو dll نمودن اشیاء یک امر بسیار رایج محسوب می شود.<br>بدین صورت شما یک جعبه سر بسته به دوست یا همکار خود می دهید و یک توضیح ساده نیز درباره متدهای (توابع) شیء تان به او می دهید و او به راحتی با افزودن فایل dll در پوشه bin پروژه اش می تواند به اشیاء داخلی این جعبه سر بسته دسترسی داشته باشد و از آنها استفاده نماید.<br>در مقالات قبلی کتابخانه های دست سازی که برای دانلود قرار داده بودم به همین روش ساخته شده بودند.<br><br>توجه نمایید که برای dll نمودن اشیاء آنها را درون یک کتابخانه قرار می دهد و کل کتابخانه را dll می نمایند، به همین جهت در ادامه مقاله به فایل dll کتابخانه می گوییم.<br><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div style="text-align: left; "><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div style="text-align: left; "><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div style="text-align: left; "><img src="http://file.mihanblog.com//public/user_data/user_files/102/304365/netnic_logo.png" alt="مقالات آموزشی دانشجویی برنامه نویسی و الکترونیک و شبکه" align="bottom" border="0" hspace="0" vspace="0"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>سوالی که پیش می آید این است که <b>چگونه می توان یک کتابخانه در سی شارپ ایجاد نمود ؟</b><br><br>برای ساخت یک کتابخانه (فایل dll) کافی است درون ویژوال استودیو یک پروژه جدید از نوع Class Library بسازید و سپس همانند مثال زیر شیء مورد نظر خود را بسازید و در پایان پروژه خود را اجرا (run)&nbsp; نمایید ...<br><br><div align="left"> <textarea style="width:485px; height:424px; overflow:auto;direction:ltr;text-align:left;" name="S1">namespace MyLibrary { public MyClass { // props public int SomeProperty1{get;set;} public string SomeProperty2{get;set;} // ctor public MyClass() { } // methods public string DoSomthing(string value1, int value2) { // doing somethind .... return "Welcome To NetNic.ir"; } } }</textarea></div><br>پس از اجرای پروژه یک ارور مشاهده خواهید نمود که مهم نیست و بدین دلیل است که پروژه های از نوع Class Library امکان اجرا شدن را ندارند و با نمودن اجرای پروژه ، پروژه Build شده و فایل dll در مسیر پوشه debug ایجاد می شود که می توان فایل مورد نظر را از مسیر مذکور برداشت و به دوستان و همکاران تقدیم نمود <img src="http://mihanblog.comhttp://mihanblog.com/public/public/rte/images_new/smiles/4.gif"><br><br>موفق باشید.<br>سایت آموزشی دانشجویی NetNic<br> text/html 2016-10-13T06:45:30+01:00 netnic.ir H Moradof آموزش نحوه دریافت داده با استفاده از Entity Framework http://netnic.ir/post/1049 دریافت داده یکی از پر کاربردترین کارهای برنامه نویسان می باشد، شاید بتوان گفت "برنامه نویسی چیزی به جز بازی با داده ها نیست" و بنده کاملا به این جمله معتقدم ؛ زیرا اگر به نرم افزارهای اطراف خود به دقت توجه نمایید ، متوجه این نکته می شوید که همه نرم افزارها کاری به جز بازی با داده انجام نمی دهند، از این رو عملیات CRUD بین برنامه نویسان بسیار گفته می شود ، به طوری که اگر به صحبت های چند برنامه نویس گوش کنید احتمال شنیدن عبارت CRUD در بین جملات آنها بسیار زیاد می باشد...<br>CRUD چهار عمل اصلی است که روی داده ها انجام می شود و شامل CREATE ، READ (Retrieve) ، UPDATE و DELETE می باشد ، در نهایت بقیه کاری که در نرم افزارها ممکن است انجام شود،&nbsp; عملیات های محاسباتی می باشد.<br>Entity Framework یک پترن بسیار جذاب برای برنامه نویسان می باشد که با بررسی دقیق آن متوجه می شویم که Context آن نوعی پترن با نام <a href="http://www.codeproject.com/Articles/581487/Unit-of-Work-Design-Pattern" target="_blank" title="What is Unit Of Work Pattern">Unit Of Work</a> می باشد. (برای اطلاعات بیشتر درباره این پترن بسیار جذاب می توانید به <a href="http://www.codeproject.com/Articles/581487/Unit-of-Work-Design-Pattern" target="_blank" title="What is Unit Of Work Pattern">اینجا</a> مراجعه نمایید)<br>در ادامه در این پست آموزشی درباره عملیات READ صحبت خواهیم نمود و دریافت اطلاعات از منبع داده (دیتابیس) با کمک Entity Framework را بررسی خواهیم نمود.<br><br>در Entity Framework توابعی برای دریافت اطلاعات وجود دارند که عبارتند از:<br><b>First</b> - <b>FirstOrDefault</b> - <b>Single</b> - <b>SingleOrDefault</b> - <b>Find</b> - <b>ToList</b><br><br>اولین نکته ای که می توان درمورد توابع فوق بیان نمود این است که اجرای این دستورات موجب اجرا یک کد SQL روی دیتابیس می شود و در نتیجه خروجی این توابع داده می باشد.<br>من به شخصه دوست دارم اسم این توابع را توابع اجرایی بنامم ، زیرا این توابع موجب اتصال به دیتابیس و اجرای یک کد SQL روی آن و دریافت اطلاعات از دیتابیس می شوند.<br>در توضیح بیشتر باید بیان نمایم که خروجی تمامی توابع Entity Framework الزاما داده نیست و بسیاری از توابع خروجی از نوع IQueryable می باشد ، IQueryable در اصل دستور SQL می باشد و بنابراین داده نیست و برای تبدیل شده به داده می بایست بوسیله یکی از توابع فوق روی دیتابیس اجرا شوند.<br>شاید بپرسید "خوب ، خروجی IQueryable به چه درد ما می خوره ؟"<br>در جواب باید خدمتتون عرض کنم که این نوع خروجی یکی از جاذبه های Entity Framework می باشد ، بطوری که شما می توانید چندین خروجی را با هم ادغام نمایید<br>به تکه کد زیر توجه نمایید :<br><br><div align="left"> <textarea style="width:498px; height:158px; overflow:auto;direction:ltr;text-align:left;" name="S1">var db = new MyDBContext(); var query1 = db.Employees.Where(c =&gt; c.Name == "Hamid Reza"); var query2 = query1.Where(c =&gt; c.Family == "Moradof"); var query3 = query2.OrderByDescending(c =&gt; c.ID); var data1 = query3.ToList(); </textarea></div><br>در خط اول تکه کد بالا&nbsp; از کانتکس Entity Framework یک شیء ایجاد کرده ایم.<br><br>در ادامه ملاحظه می نمایید که درون query1 و query2 و query3 داده ای وجود ندارد و همه آنها حاوی دستور SQL می باشند (نوع این اشیاء IQueryable است) <br><br>خاصیت جالب اشیاء IQueryable این است که می توانید روی آنها شرط جدیدی بگذارید و در نتیجه شیء جدیدی از نوع IQueryable ایجاد نمایید ، بدون اینکه سرباری روی سرور داشته باشید (تا وقتی روی اشیاء IQueryable کار می کنید و از توابع اجرایی بیان شده در ابتدای این مقاله استفاده نمی نمایید ، هیچ اتصالی به دیتبایس انجام نمی شود و در نتیجه هیچ سرباری روی سرور نخواهید داشت)<br><br>به شخصه بیشترین استفاده ای که از IQueryable کرده ام ، ایجاد کوئری های پویا در جستجوی های پیشرفته بوده است ، بصورتی که شما می توانید بصورت پویا بر اساس پر بودن فیلدهای فرم جستجویتان به کررات شرط هایی به شیء IQueryable تان اضافه نمایید و در پایان شیء حاصل را توسط توابع اجرایی روی دیتابیس اجرا نمایید و خروجی آن را (که مسلما داده است) درون صفحه به کاربرتان نمایش دهید.<br><br>در کد فوق بنده در خط آخر به کمک تابع اجرایی ToList موجب اجرای دستور SQL موجود در شیء query3 بر روی دیتابیس شده ام و در نتیجه خروجی من از نوع داده است.<br><br>نکته جالب استفاده از IQueryable این است که Where های شما با هم AND می شوند و در اصل 2 دستور زیر با هم برابرند :<br><br><br><div align="left"> <textarea style="width:474px; height:158px; overflow:auto;direction:ltr;text-align:left;" name="S1">var db = new MyDBContext(); var query1 = db.Employees.Where(c =&gt; c.Name == "Hamid Reza"); var query2 = query1.Where(c =&gt; c.Family == "Moradof"); var query3 = db.Employees.Where(c =&gt; c.Name == "Hamid Reza" &amp;&amp; c.Family == "Moradof"); </textarea></div><br>در کد فوق query2 و query3 با یکدیگر برابر می باشند.<br><br><br>حال که به اهمیت IQueryable اشاره ای داشتیم و تفاوت توابع غیر اجرایی مانند Where و OrderBy را با توابع اجرایی مانند ToList و First فرا گرفتید، بهتر است به موضوع اصلی این پست که تفاوت توابع اجرایی با یکدیگر است بپردازیم.<br><br><b>تابع First</b> :<br>این تابع فقط در زمانی استفاده می شود که مطمئن باشید خروجی این تابع یک رکورد (یک شیء) یا بیشتر از یک رکورد می باشد ، بنابراین اگر خروجی نال باشد (هیچ رکوردی بر نگشته باشد) تابع Exception آزاد خواهد کرد.<br>معمولا به دلیل حساسیت بالای این تابع و امکان بروز خطا (Exception) خیلی کم از این تابع استفاده می نماییم.<br>دقت نمایید که این تابع معادل دستور TOP 1 در SQL می باشد و بنابراین در صورتی که خروجی شامل چندین رکورد می باشد این تابع اولین رکورد را برای ما برمی گرداند.<br><br><b>تابع FirstOrDefault</b> :<br>این تابع همانند تابع First می باشد ، با این تفاوت که در صورتی که خروجی حاوی داده نباشد (هیچ رکوردی بر نگردد) تابع مقدار نال برمی گرداند و ارور نمی دهد.<br>معمولا در کدهایمان بیشتر تمایل داریم از این تابع استفاده نماییم ، به نحوی می توان گفت به دلیل عدم بروز خطا در این تابع ، این تابع بهترین تابع برای دریافت یک رکورد از دیتابیس می باشد. (در بین برنامه نویسان بیشترین کاربرد را این تابع دارد)<br><br>باید توجه داشته باشید که اضافه شدن OrDefault به اسامی توابع دلیل بر این مورد دارد که اگر خروجی تابع دارای هیچ داده (رکوردی) نباشد ، تابع مقدار پیش فرض که همانا مقدار نال (NULL) است را بر می گرداند.<br><br>نکته قابل توجه دیگر این است که از آنجایی که خروجی توابعی که درون اسم آنها عبارت OrDefault می باشد ممکن است مقدار نال باشد ، در استفاده از خروجی این توابع باید دقت نمایید و حتما قبل از استفاده از خروجی&nbsp; نال نبودن خروجی را بررسی نمایید تا در زمان استفاده از آن به خطا بر نخورید<br><br>به تکه کد زیر توجه نمایید:<br><br><div align="left"> <textarea style="width:520px; height:160px; overflow:auto;direction:ltr;text-align:left;" name="S1">var db = new MyDBContext(); var data = db.Employees.Where(c =&gt; c.ID == 3).FirstOrDefault(); if(data == null) retuen; label1.Text = data.Name; label2.Text = data.Family; </textarea></div><br>در کد فوق در صورتی که من شرط if را قرار ندهم ، در زمان استفاده از شیء data جهت پر کردن لیبل ها ، در صورتی که خروجی تابع FirstOrDefault مقدار نال باشد ، شیء data حاوی مقدار نال بوده و با خطا مواجه خواهیم شد.<br><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div style="text-align: left; "><img src="http://file.mihanblog.com//public/user_data/user_files/102/304365/netnic_logo.png" alt="مقالات آموزشی دانشجویی برنامه نویسی و الکترونیک و شبکه" align="bottom" border="0" hspace="0" vspace="0"></div></div></div></div></div></div></div></div></div><br><br><b>تابع Single </b>:<br>این تابع تقریبا عملکردی مشابه تابع First دارد ، با این تفاوت که معادل دستور TOP 1 در SQL نمی باشد و بنابراین دیگر همانند تابع First در مقابل خروجی های بیش از یک رکورد ایمن نمی باشد و در این صورت خطا (Exceprion) آزاد می نماید.<br>به بیان دیگر می توان گفت معادل بوذن دستور First با دستور TOP 1&nbsp; در SQL این قابلیت را به تابع First داده است که در صورتی که با چندین رکورد مواجه شد ، اولین رکورد آن را برگرداند و بنابراین اروری نخواهیم داشت ، ولی در تابع Single ما باید فقط و فقط یک رکورد خروجی داشته باشیم و کمتر یا بیشتر از یک خروجی موجب بروز خطا (Exceprion) در کد ما خواهد شد که اصلا با ذائقه برنامه نویسان جور نیست <img src="http://mihanblog.comhttp://mihanblog.com/public/public/rte/images_new/smiles/47.gif"><br><br>بنابراین باید بسیار در استفاده از این تابع دقت نمایید تا کد شما دچار خطا نشود.<br>(معمولا به دلیل احتمال بالای خطا در این تابع ، از آن استفاده نمی نماییم)<br><br><br><b>تابع SingleOrDefault </b>:<br>این تابع مشابه تابع Single می باشد ، با این تفاوت که در برابر عدم وجود خروجی مقاوم است و دیگر ارور نمی دهد و مقدار نال بر می گرداند ، ولی کماکان در برابر تعداد بیش از یک رکورد در خروجی ضعف دارد و خطا می دهد.<br>همچنین همانطور که قبلا بیان شد ، توصیه می شود قبل از استفاده از خروجی توابعی که درون اسمشان OrDefault وجود دارد ، ابتدا نال نبودن خروجی را بررسی نمایید.<br>به تکه کد زیر توجه نمایید :<br><br><div align="left"> <textarea style="width:520px; height:160px; overflow:auto;direction:ltr;text-align:left;" name="S1">var db = new MyDBContext(); var data = db.Employees.Where(c =&gt; c.ID == 3).SingleOrDefault(); if(data == null) retuen; label1.Text = data.Name; label2.Text = data.Family; </textarea></div><br><b>تابع ToList :</b><br>این تابع برای دریافت لیستی از رکورد ها می باشد و تعداد رکورد های خروجی اصلا برایش مهم نیست، بدین معنی که بدون خروجی ، یک رکورد و یا چندین رکورد اصلا برای آن اهمیتی ندارد و خروجی را در قالب یک کالکشن از نوع List جنریک بر می گرداند که می تواند شامل آیتم هایی باشد و یا خالی باشد.<br>این تابع برای دریافت لیستی از داده ها مناسب می باشد و برای دریافت یک رکورد استفاده نمی شود.<br><br>به تکه کد زیر توجه نمایید:<br><br><div align="left"> <textarea style="width:544px; height:114px; overflow:auto;direction:ltr;text-align:left;" name="S1" class="auto-style1">var db = new MyDBContext(); var data = db.Employees.Where(c =&gt; c.Family == "Moradof").ToList(); Repeater1.DataSource = data; Repeater1.DataBind(): </textarea></div><br>ملاحظه می نمایید که یکی از بهترین روش ها برای پر کردن کنترل های داده ای ، استفاده از تابع ToList می باشد.<br><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div style="text-align: left; "><img src="http://file.mihanblog.com//public/user_data/user_files/102/304365/netnic_logo.png" alt="مقالات آموزشی دانشجویی برنامه نویسی و الکترونیک و شبکه" align="bottom" border="0" hspace="0" vspace="0"></div></div></div></div></div></div></div></div></div><br><br><b>تابع Find :</b><br>این تابع برای یافتن یک رکورد با کمک فیلد PrimatyKey می باشد ، تفاوت اصلی این تابع با بقیه توابع فوق این است که توابع فوق از درون دیتابیس داده را بر می گرداندند ولی این تابع از درون حافظ داده ها را بر می گرداند.<br>همانطور که می دانید EntityFramework یک نسخه از کل داده ها را روی حافظه کش می کند ، تابع Find در اصل درون کش EntityFramework را می گردد و داده مورد نظر را بر می گرداند.<br>البته بصورت دقیق نمی دانم که سیستم کش EntityFramework&nbsp; به چه صورت می باشد و آیا حتما می توان انتظار داشت که همه اطلاعات دیتابیس درون کش EntityFramework&nbsp; وجود داشته باشد ، ولی تا جایی که می دانم ، وقتی یک دیتایی را یکبار از طریق EntityFramework&nbsp; از دیتبایس دریافت نمایید ، آن دیتا درون کش EntityFramework&nbsp; قرار می گیرد.<br>(بررسی جزئیات دقیق تر این مورد را به خود شما می سپارم :دی )<br><br>تکه کد زیر طریقه استفاده از آن را نمایش می دهد:<br><br><div align="left"> <textarea style="width: 521px; height: 165px; overflow: auto; direction: ltr; text-align: left;" name="S1">var db = new MyDBContext(); var data = db.Employees.Find(c =&gt; c.ID == 3); if(data == null) retuen; label1.Text = data.Name; label2.Text = data.Family; </textarea></div><br>توجه نمایید که باید حتما در ورودی تابع ، شرط مورد نظر را بر اساس ستون PrimaryKey دیتابیس بدهید.<br>همچنین باید توجه داشته باشید که در صورتی که خروجی یافت نشود، این تابع مقدار NULL را بر می گرداند ، بنابراین همانند توابعی که درون اسمشان عبارت OrDefault وجود داشت ، قبل از استفاده از خروحی این تابع نیز باید ابتدا نال نبودن خروجی را بررسی نمایید و سپس از خروجی آن استفاده کنید.<br><br>این تابع بین برنامه نویسان حرفه ای از محبوبیت زیادی برخوردار است و تنها ایرادش این است که فقط بر اساس ستون PrimaryKey می توان روی خروجی شرط گذاشت و برای گذاشتن سایر شروط باید از تابع Where قبل از آن استفاده نمایید.<br><br>نکته دیگر توابع اجرایی در نحوه استفاده از آنان می باشد ، همه توابع اجرایی فوق را می توانیم بصورت زیر نیز استفاده نماییم :<br><br><div align="left"> <textarea style="width:520px; height:166px; overflow:auto;direction:ltr;text-align:left;" name="S1">var db = new MyDBContext(); var data = db.Employees.FirstOrDefault(c =&gt; c.ID == 3); if(data == null) retuen; label1.Text = data.Name; label2.Text = data.Family; </textarea></div>بصورتی که شرط فیلتر کردن خروجی را می توانیم در خود تابع وارد نماییم و دیگر نیازی به نوشتن تابع Where در قبل از آن نمی باشد ، البته استفاده از روش فوق و یا روشی که در بالای این پست بکار بردیم (همانند کد زیر) هیچ فرقی با هم ندارد و کاملا سلیقه ای می باشد.<br><br><div align="left"> <textarea style="width:520px; height:171px; overflow:auto;direction:ltr;text-align:left;" name="S1">var db = new MyDBContext(); var data = db.Employees.Where(c =&gt; c.ID == 3).FirstOrDefault(); if(data == null) retuen; label1.Text = data.Name; label2.Text = data.Family; </textarea></div><br>بنابراین این شمایید که باید تصمیم بگیرید از کدام یک از 2 کد فوق استفاده نمایید ، در عمل خروجی و کارکرد هر دو کد فوق یکسان می باشد.<br>خوب ، دریافت داده از EntityFramwork تقریبا نکته دیگه ای نداره ...<br>امیدوارم از این پست آموزشی لذت برده باشید.<br>خوشحال میشم اگر نظر شما در مورد این پست رو بدونم...<br>یا حق<br><br> text/html 2016-06-02T05:29:17+01:00 netnic.ir H Moradof مشکل در ساخت نظرسنجی http://netnic.ir/post/1063 محمد<br>20:30:03 یکم خرداد 1395<br>moradi1375@yahoo.com<br>نظرسنجی<br>با سلام.<br>ممنون از آموزش خوبی که برای ایجاد نظرسنجی<br>گذاشتید.<br>ولی من هر کاری کردم نتونستم درستش کنم.<br>میشه واضح تر مفهوم کلید خارجی رو توضیح بدید و بگید که چطوری یه فیلد میتونه مقدارش رو از کلید اصلی یه جدول دیگه بگیره؟؟؟؟؟؟؟؟؟؟<br>خواهش میکنم کمکم کنید دانشجو هستم و پروژه اخر ترم دارم.<br>خواهشششش<br><br>------------------------------------<br>سلام.<br>کلید اصلی : Primary Key<br>کلید خارجی : Foreign Key<br><br>اینا مفاهیم اصلی sql هستند و برای ارتباط بین جداول در بانک های اطلاعاتی رابطه ای مثل sql می باشند<br><br>پیشنهاد می کنم یک کتاب یا فیلم آموزش sql فارسی دانلود یا خریداری کنین و بخونین. <br> text/html 2016-01-22T12:30:34+01:00 netnic.ir H Moradof بوت استرپ چیست ؟ http://netnic.ir/post/1041 امروز نام بوت استرپ بسیار زیاد به گوشمون می خوره ولی به واقع بوت استرپ چیست ؟<br><br>آیا بوت استرپ چیز خطرناکیه ؟ آیا سخته ؟<br><br>کار با بوت استرپ بسیار ساده است، مثل این می مونه که کدهای css نوشته شده باشه و شما فقط کلاس های نوشته شده رو به تگ های صفحتون (div , a , ...) نسبت بدید.<br><br>به همین سادگی.<br>برای شروع کار با بوت استرپ ابتدا باید به سایت getbootstrap.com وارد بشید و فایل های مورد نیازتون رو دانلود کنین.<br>سپس از طریق http://getbootstrap.com/getting-started می تونین مراحل کار با بوت استرپ رو یاد بگیرین.<br><br>در پایین همین بخش چند تا نمونه قالب قرار داده شده تا بتونین بهتر با روش کار بوت استرپ آشنا بشین.<br>بعنوان نمونه این قالب http://getbootstrap.com/examples/carousel رو می تونین ببینین که تقریبا یک قالب خیلی آماده است.<br>اینجوری سایتی که بصورت عادی 2-3 روز وقت می گیره رو با بوت استرپ توی یک روز میشه زد !<br>چون توی بوت استرپ خیلی از کار گرافیک از استفاده نمیشه و بیشتر با رنگ ها و افکت های css3 استفاده میشه و از طرفی هم شما تقریبا هیچ کد css ای نمی نویسین !<br>موفق باشید<br> text/html 2016-01-03T02:09:21+01:00 netnic.ir H Moradof مشکل همیشگی جلسات تجاری شرکت های نرم افزاری http://netnic.ir/post/1062 <p>در اغلب جلسات تجاری مواردی وجود دارد که کابوس تیم توسعه و سرپرستان آنهاست.</p> <p>جهت&nbsp; شناخت عمق مشکل پیشنهاد می کنم ویدئوی زیر را مشاهده نمایید.</p><br><br>[http://www.aparat.com/v/Delx2] <br> text/html 2015-07-30T12:24:27+01:00 netnic.ir H Moradof چک لیست امنیتی پروژه های نرم افزاری تحت وب http://netnic.ir/post/1060 <p>امروزه یکی از بزرگترین دغدغه های فعالان حوزه آی تی، برقراری امنیت اطلاعات می باشد. با پدید آمدن بانک های داده ای آماری و مالی حساسیت مسئله صد چندان می شود. در ادامه چک لیستی ارائه می نمایم که با کمک آن می توانید تا حدود بسیار خوبی امنیت نرم افزار تحت وب خود را برقرار نمایید. در برخی از موارد مثال هایی از تکنولوژی مایکروسافت آورده شده است که این بدلیل تخصص نویسنده در تکنولوژی های مایکروسافت می باشد، در صورتی که شما از تکنولوژی ها و زبان های سورس باز بهره می برید، می بایست معادل مورد ذکر شده را در زبان مورد استفاده خود بیابید.</p><p>ابتدا اجازه دهید مقداری با حملات آشنا شویم و سپس راه مقابله را در کنار هم بررسی نماییم. (با <b>نت نیک</b> همراه باشید)<br></p><p><b>مهمترین و خطرناک ترین حملات سطح وب:</b></p><p><b>حمله XSS</b><br></p><p>این نوع حملات بدین صورت است که هکر با استفاده از فرم های عمومی یا خصوصی (پنل های سایت) اقدام به ثبت کدهای مخرب جاوااسکریپت درون دیتابیس شما می نماید. همانطور که می دانید بیس اصلی سیستم های احراز هویت، ساخت فایل کوکی بر روی کامپیوتر کاربران می باشد. زمانی که مطلب ثبت شده هکر برای کاربران شما نمایش داده می شود، کدهای جاوا اسکریپت هکر روی مرورگر کاربر شما اجرا شده و اطلاعات کوکی های کاربر به راحتی برای سایت هکر ارسال می شود (معمولا هکر یک صفحه روی وب می سازه تا بتونه اطلاعات دریافتی از کدهای جاوا اسکریپت خود را دریافت و در جایی ذخیره کنه).</p><p>حال هکر به راحتی کوکی رو روی مرورگر خودش تنظیم می کنه و بعد وارد سایت شما میشه، سیستم شما اونو با کاربر شما اشتباه می گیره و با راحتی هکر به اطلاعات پنل کاربری کاربر(ان) شما دست پیدا می کنه.</p><p><br></p><p><b>حمله SQL Injection</b></p><p>این حمله معروفترین حمله است که تقریبا با قدرت می تونم بگم که درتکنولوژی ASP.Net با امکانات فوق العاده ای که بصورت توکار در دات نت در نظر گرفته شده است ، بصورت کامل به فراموشی سپرده شده است. فقط 2 تا نکته ریز هست که باید در کداتون رعایت کنین و تمام <img src="http://mihanblog.comhttp://mihanblog.com/public/public/rte/images_new/smiles/1.gif"></p><p>در مورد حمله خدمت سروران عزیزم عارضم که بدین صورت است که هکر یک سری دستورات SQL رو توی کوئری استرینگ به صفحات تزریق می کنه و بدین صورت می تونه در کدهای کوئری TSQL شما اختلال ایجاد کنه و اطلاعات جداول شما رو بدست بیاره. در این نوع حمله ، هکر از طریق باگ سطح کد نویسی کدهای نرم افزار، به دیتابیس حمله می کنه و اطلاعاتی مثل نام کاربری و کلمه عبور ادمین یا کاربران رو می دزده و بعد میره داخل پنل و هر چی می تونه خرابکاری می کنه <img src="http://mihanblog.comhttp://mihanblog.com/public/public/rte/images_new/smiles/4.gif"></p><p><br></p><p><b>حمله CSRF</b></p><p>این حمله یکی از جالت ترین و جذاب ترین نوع حملات است که هوش بالای دوستان هکر رو نشون میده. عبارت CSRF مخفف Cross Site Request Forgery است. (احتمالا دوستان ام وی سی باز این عبارت براشون آشناست.)</p><p> در این نوع حمله هکر یک فایل برای کاربر شما از طریق ایمیل یا روش های دیگه ارسال می کنه و کاربر رو به این سمت سوق میده که فایل رو باز کنه. کاربر یک فایل به ظاهر معمولی مثل عکس یا ... می بینه و فایل رو باز می کنه. وقتی فایل باز میشه دیتای خاصی دیده نمیشه و گاهی هم اروری مبنی بر ناقص بودن فایل یا ... به کاربر نمایش داده میشه و کاربر فکر می کنه که فایل ناقص برای ارسال شده...</p><p>اما در حقیقت با کلیک روی فایل و باز کردن اون یک درخواست POST از کامپیوتر کاربر برای سایت شما ارسال میشه که در صورتی که کاربر در اون زمان در سایت شما لاگین باشه، سایت درخواست رو با روی باز می پذیره و درخواست رو اجرا می کنه و بدین صورت هکر می تونه درخواست هایی رو به سرویس های سایت شما که مثلا برای حذف یک سری داده است رو ارسال کنه و اطلاعات کاربر رو حذف کنه.</p><p><br></p><p><b>حمله Brute Force</b></p><p>در این حمله هکر از یک سری تولز یا برنامه برای ارسال درخواست های مکرر به فرم های سایت شما استفاده می کنه و بدین صورت فرم های عمومی سایت شما مورد حجوم انبوهی از درخواست ها قرار می گیره که این امر در بهترین حالت موجب ثبت کلی دیتای اسپم در دیتابیس شما و در بدترین حالت موجب داون شدن سایت شما میشه.</p><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div style="text-align: left; "><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div style="text-align: left; "><img src="http://file.mihanblog.com//public/user_data/user_files/102/304365/netnic_logo.png" alt="مقالات آموزشی دانشجویی برنامه نویسی و الکترونیک و شبکه" align="bottom" border="0" hspace="0" vspace="0"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div><p><b>حمله DDOS</b></p><p>این نوع حمله مانند حمله Brute Force است، با این تفاوت که درخواست به همه صفحات شما ارسال میشه و معمولا درخواست ها از چندین سرور مختلف برای سایت شما ارسال میشه و حجم درخواست ها به قدری زیاد است که عملا سرور شما هنگ می کنه و کاملا از دسترس خارج میشه. این نوع حمله در سطح کد راه حل زیادی نداره و در سطح سرور و فایروال باید حل بشه و حل اون هم بدین صورت است که درخواست های بیش از حد طبیعی از یک آی پی خاص تشخیص داده شده و به سرعت آی پی بلاک میشه و از اون به بعد درخواست های اون آی پی در فایروال از بین میره و دیگه به سرور نمیرسه<br></p><p>حملات دیگری هم هست که الان حضور ذهن ندارم و انشالاه در آینده این پست کامل تر و به یکی از مراجع مهم برنامه نویسان تبدیل میشه. کامنت های شما رو با روی باز می پذیریم <img src="http://mihanblog.comhttp://mihanblog.com/public/public/rte/images_new/smiles/48.gif"></p><p><br></p><p><b>حمله SHELL</b></p><p>شل فایلی است خطرناکه اگر روی سرور سایت شما آپلود و اجرا شود، هکر از طریق آن دسترسی کامل به کل سرور سایت شما خواهد داشت.</p><p>ابنجاست که باید شدیدا مراقب فایل هایی که روی سایت شما آپلود می شوند باشید.<br></p><p><br></p><p><b>حمله SNIFF</b></p><p>در این نوع حملات هکر پکت های رد و بدل شده بین کاربران شما و سرور شما را شنود می نماید و به راحتی می تواند اطلاعات مهمی مثل نام کاربری و رمز عبور کاربران شما را بدست آورد.<br></p><p><br></p><p><br></p><p><b>چک لیست امنیتی پروژه های نرم افزاری تحت وب</b><br></p><ol><li>بررسی کامل ورودی های دریافتی از فرم های سایت، هم در سمت کلاینت و هم در سطح سرور. <font color="#000099">&gt;&gt; حمله XSS</font><br></li><li>حتما در فرم های عمومی سایتتان از تصویر کپچا با امنیت بالا استفاده نمایید. <font color="#000099">&gt;&gt; حمله Brute Force<br></font></li><li>حتما سیستم شخصی سازی صفحات ارور را فعال نمایید و از نمایش صفحات ارور حاوی اطلاعات مهم مانند صفحات ارور ASP.Net جلوگیری نمایید.</li><li>استفاده از ORM ها یا استفاده از پروسیجرهای پارامتریک <font color="#000099">&gt;&gt; حمله SQL Injection</font></li><li>لاگ کردن ارورهای سطح کد و سطح روتینگ <font color="#000099">&gt;&gt; حمله SQL Injection</font></li><li>جلوگیری از ایندکس شدن صفحات لاگین مدیریت سایت</li><li>لاگ کردن ورود و خروج افراد</li><li>امن سازی سرویس های ای جکس و چک کردن&nbsp; ای جکس بودن درخواست ها</li><li>محدود کردن سرویس های حساس به درخواست های POST</li><li>عدم استفاده از آی دی در پنل های کاربران بالاخص در آدرس صفحات (کویری استرینگ) و ..استفاده از کد غیر قابل پیش بینی مثل GUID و حتی الامکان بررسی مالکیت داده ها در همه بخش ها جهت محکم کاری بیشتر (خدای نکرده کاربر با تغییر ادرس نتومه به داده های یک کاربر دیگه دسترسی داشته باشه)</li><li>حتی الامکان جداسازی فیزیکی پنل مدیران از کاربران جهت محکم کاری</li><li>استفاده از الگوریتم های کدگذاری ترکیبی و کد کردن اطلاعات حساس قبل از ذخیره سازی در دیتابیس</li><li>ساخت پروژه بصورت چند لایه</li><li>اشتراک گذاری اینترفیس در سرویس های خارج برنامه ای و عدم اشتراک گذاری کلاس اصلی</li><li>استفاده از تکنیک های مقابله با CSRF در همه سرویس های POST. در ام وی سی اتریبیوت AntyForgery استفاده گردد. <font color="#000099">&gt;&gt; حمله CSRF<br></font></li><li>استفاده از سیستم های مدیریت نقش امن مانند IDENTITY در ام وی سی و یا استفاده از امکانات توکار دات نت در سیستم های مدیریت نقش شخصی سازی شده ( Custom Role Provider ها)</li><li>بررسی فرمت و پسوند فایل های آپلود شده</li><li>استفاده از تکنیک های لاگین چند سطحی برای پنل ادمین (در این روش شما حتی با داشتن نام کاربری و کلمه عبور ادمین، قادر نخواهید بود وارد پنل ادمین شوید)</li><li>تنظیم iis&nbsp; جهت جلوگیری از اجرای فایل های اجرایی در مسیر اپلود فایل ها <font color="#000099">&gt;&gt; حمله SHELL</font></li><li>آپلود فایل ها در پوشه&nbsp; App_Data و&nbsp; دسترسی به فایل ها از طریق سرویس های خود شما.&nbsp; این پوشه امن است و دسترسب مستقیم از طریق ادرس بار مرورگر به فایل های درون ان توسط iis داده نمی شود و ملت فقط می تونن از طریق سرویس های خود شما به فایل ها دسترسی داشته باشن و بدین صورت در اکشن می تونین با Cast کردن فایل ها به نوع خودشون (تصویر. پی دی اف یا ...) هکر رو نا امید کنین <font color="#000099">&gt;&gt; حمله SHELL</font></li><li>استفاده از&nbsp; SSL بسیار اهمیت دارد. بالاخص اگر Service Oriented کار می کنین و سرویس هایی برای اپلیکیشن های خارجی مثل اپلیکیشن اندروید و ... دارین. این مورد در صفحات لاگین نیز بسیار مهم است و باعث می شود نام کاربری و کلمه عبور کاربران شما بصورت هش شده بین کامپیوتر کاربر و سرور شما رد و بدل شود و عملا شنود پکت ها فایده ای برای هکر نخواهد داشت.&nbsp; <font color="#000099">&gt;&gt; حمله SNIFF</font> </li></ol><p><br> </p><p><font color="#FF0000">* نسخه کامل تر مقاله رو می تونین از <a href="http://www.dotnettips.info/post/2167/%DA%86%DA%A9-%D9%84%DB%8C%D8%B3%D8%AA-%D8%A7%D9%85%D9%86%DB%8C%D8%AA%DB%8C-%D9%BE%D8%B1%D9%88%DA%98%D9%87-%D9%87%D8%A7%DB%8C-%D9%86%D8%B1%D9%85-%D8%A7%D9%81%D8%B2%D8%A7%D8%B1%DB%8C-%D8%AA%D8%AD%D8%AA-%D9%88%D8%A8" target="_blank" title="چک لیست امنیتی پروژه های نرم افزاری تحت وب"><b>ایــــنــــــجـــــــــــا</b></a><b> </b>مطالعه نمایید.</font><br></p> text/html 2015-04-26T07:13:21+01:00 netnic.ir H Moradof شاخص های تاثیر گذار در کیفیت پروژه های وب http://netnic.ir/post/1057 امروزه شرکت های زیادی خدمات طراحی و توسعه نرم افزار های وب رو انجام میدن که این شامل انواع وب سایت های شخصی، شرکتی،سازمانی،فروش،بازاریابی،برندسازی،مالی،حسابداری،انبارداری،گردش جنس و ... میشه.<br><br>به هر یک از شرکت ها هم که مراجعه می کنید یک رنج قیمتی جلوتون میزارن .<br>وقتی ازشون می پرسین که چرا شما؟ چرا باید پروژمو به شما بدم، کلی اصطلاح و شعار و ... به سمتتون شلیک می کنن.<br>خوب مشتریای بنده خدا هم که اکثریت اطلاعات تخصصی درباره نرم افزار ندارن و فقط چشمشون به جیبشون و قیمت های ارائه شده است.<br>(دقت کنین که گفتم اکثریت)<br><br>در مقاله پیش رو بنده سعی کرده ام عوامل موثری که مشتریان باید در هنگام سفارش پروژه های تحت وب در نظر داشته باشند رو اشاره کنم و نکاتی هم درباره درآمدزایی از بستر وب بگم.<br>البته موارد زیر کاملا تجربی می باشند و بنده طی سالهایی که تو عرصه وب مو سفید کردم این موارد رو برخورد کرده ام.<br><br><!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:TrackMoves/> <w:TrackFormatting/> <w:PunctuationKerning/> <w:ValidateAgainstSchemas/> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:DoNotPromoteQF/> <w:LidThemeOther>EN-US</w:LidThemeOther> <w:LidThemeAsian>X-NONE</w:LidThemeAsian> <w:LidThemeComplexScript>AR-SA</w:LidThemeComplexScript> <w:Compatibility> <w:BreakWrappedTables/> <w:SnapToGridInCell/> <w:WrapTextWithPunct/> <w:UseAsianBreakRules/> <w:DontGrowAutofit/> <w:SplitPgBreakAndParaMark/> <w:DontVertAlignCellWithSp/> <w:DontBreakConstrainedForcedTables/> <w:DontVertAlignInTxbx/> <w:Word11KerningPairs/> <w:CachedColBalance/> <w:UseFELayout/> </w:Compatibility> <m:mathPr> <m:mathFont m:val="Cambria Math"/> <m:brkBin m:val="before"/> <m:brkBinSub m:val="--"/> <m:smallFrac m:val="off"/> <m:dispDef/> <m:lMargin m:val="0"/> <m:rMargin m:val="0"/> <m:defJc m:val="centerGroup"/> <m:wrapIndent m:val="1440"/> <m:intLim m:val="subSup"/> <m:naryLim m:val="undOvr"/> </m:mathPr></w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true" DefSemiHidden="true" DefQFormat="false" DefPriority="99" LatentStyleCount="267"> <w:LsdException Locked="false" Priority="0" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Normal"/> <w:LsdException Locked="false" Priority="9" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="heading 1"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/> <w:LsdException Locked="false" Priority="39" Name="toc 1"/> <w:LsdException Locked="false" Priority="39" Name="toc 2"/> <w:LsdException Locked="false" Priority="39" Name="toc 3"/> <w:LsdException Locked="false" Priority="39" Name="toc 4"/> <w:LsdException Locked="false" Priority="39" Name="toc 5"/> <w:LsdException Locked="false" Priority="39" Name="toc 6"/> <w:LsdException Locked="false" Priority="39" Name="toc 7"/> <w:LsdException Locked="false" Priority="39" Name="toc 8"/> <w:LsdException Locked="false" Priority="39" Name="toc 9"/> <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/> <w:LsdException Locked="false" Priority="10" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Title"/> <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/> <w:LsdException Locked="false" Priority="11" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/> <w:LsdException Locked="false" Priority="22" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Strong"/> <w:LsdException Locked="false" Priority="20" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/> <w:LsdException Locked="false" Priority="59" SemiHidden="false" UnhideWhenUsed="false" Name="Table Grid"/> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/> <w:LsdException Locked="false" Priority="1" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 1"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 1"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 1"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/> <w:LsdException Locked="false" Priority="34" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/> <w:LsdException Locked="false" Priority="29" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Quote"/> <w:LsdException Locked="false" Priority="30" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 1"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 1"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 2"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 2"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 2"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 2"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 2"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 3"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 3"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 3"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 3"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 3"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 4"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 4"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 4"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 4"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 4"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 5"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 5"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 5"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 5"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 5"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 6"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 6"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 6"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 6"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 6"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/> <w:LsdException Locked="false" Priority="19" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/> <w:LsdException Locked="false" Priority="21" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/> <w:LsdException Locked="false" Priority="31" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/> <w:LsdException Locked="false" Priority="32" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/> <w:LsdException Locked="false" Priority="33" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Book Title"/> <w:LsdException Locked="false" Priority="37" Name="Bibliography"/> <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/> </w:LatentStyles> </xml><![endif]--><!--[if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-qformat:yes; mso-style-parent:""; mso-padding-alt:0in 5.4pt 0in 5.4pt; mso-para-margin-top:0in; mso-para-margin-right:0in; mso-para-margin-bottom:10.0pt; mso-para-margin-left:0in; line-height:115%; mso-pagination:widow-orphan; font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin;} </style> <![endif]--><!--[if gte mso 9]><xml> <o:shapedefaults v:ext="edit" spidmax="1026"/> </xml><![endif]--><!--[if gte mso 9]><xml> <o:shapelayout v:ext="edit"> <o:idmap v:ext="edit" data="1"/> </o:shapelayout></xml><![endif]--><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div style="text-align: left; "><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div style="text-align: left; "><img src="http://file.mihanblog.com//public/user_data/user_files/102/304365/netnic_logo.png" alt="مقالات آموزشی دانشجویی برنامه نویسی و الکترونیک و شبکه" align="bottom" border="0" hspace="0" vspace="0"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div><font color="#CC0000"><b>مهم ترین شاخص های تاثیر گذار در کیفیت و قیمت نرم افزارهای تحت وب</b></font><br><br><b>تکنولوژی ساخت</b>:<br>خیلی مهمه که چه تکنولوژی در ساخت نرم افزار استفاده میشه، تغییر در تکنولوژی می تونه روی امنیت، سرعت و کارایی سایت شما تاثیر زیادی داشته باشه و مسلما روی قیمتش هم تاثیر خواهد داشت.<br>مثلا ASP.Net MVC خیلی سریع تر از ASP.Net WebForm است و الان در بسیاری از کشورها اکثر پروژه ها با ASP.Net MVC ساخته میشه.<br>از طرفی توسعه نرم افزار با ASP.Net MVC نیاز به کدنویسی بیشتر و صرف زمان بیشتری است و مسلما قیمتش هم بالاتره ولی خوب این کجا و اون کجا ، فقط در یک <b>فاکتور سرعت</b> ، کلی تفاوت بین نرم افزار وب فرم و نرم افزار ام وی سی است.<br><br><br><b>معماری نرم افزار</b>:<br>خیلی مهمه که نرم افزار با چه معماری تولید میشه.<br>اکثر شرکت ها میگن که معماری 3و4و5 لایه داریم استفاده می کنیم و ...<br>ولی در عمل می بینیم که بخش زیادی از منطق برنامه در پشت فرم یا داخل اکشن ها داره انجام میشه<img src="http://mihanblog.comhttp://mihanblog.com/public/public/rte/images_new/smiles/13.gif"><br>معماری خوب تاثیر زیادی در <b>قابلیت نگهداری</b> ، <b>توسعه سریع و راحت نرم افزار در آینده</b> و همچنین <b>سرعت</b> نرم افزار می تونه داشته باشه<br><br><br><b>امکان توسعه راحت و سریع در آینده</b>:<br>مسلما هیچ نرم افزاری در نسخه اول آن کامل نیست و اغلب مشتریان پس از چند روز یا چند ماه کار با نرم افزار متوجه نیازهای جدیدی می شوند که در ابتدای کار متوجه آنها نبوده اند و یا حتی پس از طی زمان نیازهای جدیدی بوجود می آید که مشتری نیاز دارد آنها را در نرم افزارش داشته باشد.<br>حتی در بسیاری موارد مشتری مجبور است برای ماندن در کورس رقابت ، خدمات و امکانان جدیدی در سایتش ارائه دهد.<br>شاید نمونه بارزش سایت دیوار بود که سالها خدمات یکسانی ارائه می داد و به یکباره رقیب سر سختی به نام سایت شیپور پا به عرصه گذاشت.<br>حتی یک تغییر قالب هم می تونه شما رو از رقیبانیتون تمیز بده و حداقل این نوید رو به کاربرای سایتتون بده که شما دارین روی سایتتون کار می کنین.<br>حتی بعنوان مثال می تونم سایت بلاگفا رو عنوان کنم که سالهای سال هیچ خدمات جدیدی ارائه نمیداد و حتی یک صفحه بندی مطالب هم نداشت و برای دیدن مطالب قدیمی تر مجبور بودیم در آرشیو های ماهانه ساعت ها بچرخیم...<br>البته بنده قصد توهین به هیچ سایتی رو ندارم و همینطوری این سایت ها به ذهنم رسید و اونها رو مثال زدم و بیان بنده نشان بر بد بودن سایت ها نیست.<br><br>این مورد خیلی مهمه که شرکت چقدر تضمین می کنه که فازهای بعدی پروژه شما رو براتون انجام بده و هر تغییر چقدر زمان می بره تا انجام بشه ؟ (سرعت توسعه)<br>این مورد به عواملی چون <b>معماری نرم افزار</b>، <b>کدنویسی تمیز (Clean Coding)</b>، <b>مستند سازی پروژه (Documentation)</b> و ... بستگی داره<br><font color="#3333FF">اینجاست که تفاوت شرکت ها از یکدیگر مشخص میشه</font><b><br><br><font color="#990000">دوستان بنده مثلی ساخته اند که میگه: هیچ پروژه ای تموم نمیشه بلکه از فازی به فاز بعد یا از شرکتی به شرکت بعد منتقل میشه ، مگر اینکه پروژه&nbsp; کلا کنسل بشه!<br></font><br>پشتیبانی مناسب (در صورت بروز خطا و یا نیاز به توسعه نرم افزار در آینده)</b> :<br>پشتیبانی اصلی است که امروزه شرکت ها بسیار عالی به اهمیت آن پی برده اند.<br>پشتیبانی می تونه شامل رفع خطاهای برنامه نویسی احتمالی، تضمین توسعه نرم افزار در آینده و سایر خدمات باشه<br><br><br><b>بومی بودن کامل نرم افزار جهت اطمینان از امنیت هسته نرم افزار و توانایی توسعه سریع در آینده<br></b>متاسفانه برخی شرکت ها CMS های سورس باز رایگان رو ویرایش می کنن و به اسم نرم افزار بومی و با قیمت های نجومی در اختیار مشتریان قرار میدن.<br><br>البته بنده نمیگم که CMS سورس باز چیز بدیه ، اتفاقا در مواردی بسیار مناسبه.<br>یه وقتی مشتری سایتی می خواد که 4 تا مطلب و محصول توش معرفی کنه و ... ، که در این موارد بهترین گزینه استفاده از همین CMS های رایگانه که شرکت ها بر اساس سلیقه مشتری اونو شخصی سازی می کنن و با قیمت خوب به مشتری میدن<br><br>البته برای ایده های خاص و نرم افزار های خاص باید نرم افزار بصورت بومی برای مشتری و بر اساس نیازهای مشتری تولید بشه، چون هرچقدر هم که CMS سورس باز رو تغییر بدیم و ... نمی تونیم دقیقا چیزی که مشتری می خواد رو بسازیم و در نهایت هم چون هسته اصلی بومی نیست، در صورتی که مشکلی در هسته اصلی رخ بده به خوبی نمی تونیم پشتیبانی لازم رو به مشتری ارائه بدیم، و این میشه که در اکثر موارد این جمله رو از پشتیبانی می شنویم: "آخرین بکاپ پروژتونو برگردونین" ، خوب اگر چند ماه بعد مجدد هسته نرم افزار دچار مشکل شد چی ؟ اگر برگرداندن بکاپ موجب از بین رفتن اطلاعات مهم مالی میشد چی ؟<br>این موارد است که ذهنیت مشتریان رو نسبت به همه شرکت های برنامه نویسی منفی می کنه و هر چی بهشون میگیم که ما کاملا بومی داریم نرم افزار تولید می کنیم ، حرفمونو باور نمی کنن و معیار سنجششون فقط هزینه است و هر کس قالب زیباتر با قیمت پایین تر ارائه بده ، از نظر مشتریان شرکت بهتریه!<br><br><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div style="text-align: left; "><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div style="text-align: left; "><img src="http://file.mihanblog.com//public/user_data/user_files/102/304365/netnic_logo.png" alt="مقالات آموزشی دانشجویی برنامه نویسی و الکترونیک و شبکه" align="bottom" border="0" hspace="0" vspace="0"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div><b>طراحی و پیاده سازی شده بصورت اختصاصی بر اساس نیاز کارفرما</b><br>این مورد همون بومی بودن نرم افزار است بعلاوه این مورد که نرم افزارهای تحت وب (نه وب سایت) رو باید برای هر مشتری بصورت اختصاصی طراحی کنیم.<br>ممکنه که برخی بخش ها مشترک باشه ولی مسلما بسیاری از نیازهای مشتری جدید با مشتریان قبلی متفاوته.<br>البته حرف بنده درمورد نرم افزارهای مالی و ... است ، نه سایت های روال (اصطلاحا به سایت هایی گفته می شود که کاربردهای معمولی مثل فروشگاهی، معرفی شرکت و ... دارند ، به بیان بهتر سایت های غیر محاسباتی که بخشی برای نمایش به عموم دارند. در حالی که عبارت نرم افزار های تحت وب رو بنده به نرم افزارهای پیچیده مالی-حسابداری و .... میگم که کاملا جهت استفاده یک سری کارمند یا کاربر خاص طراحی شده اند و بخشی برای نمایش به عموم ندارند)<br><br><b>میزان تحمل بار</b><br>خیلی مهمه نرم افزار تحمل این رو داره که مثلا 10.000 یا 100.000 کاربر بصورت آنی ازش استفاده کنن ؟<br><br><b>میزان تحمل تعداد تراکنش در لحظه</b><br>مثلا سایتی مثل دیجی کالا که در هر ثانیه ممکنه n تا تراکنش مالی داشته باشه رو در نظر بگیرین، خوب آیا این سایت با یک سایت ساده که روزی 1 تراکنش مالی داره یکیه ؟ مسلما Stable بودن نرم افزار و قدرت تحمل تراکنش های بالا خیلی مهمه و مسلما برای داشتن همچین تحملی باید کلی روی کدهای نرم افزار کار بشه.<br>بدیهی است که قیمت و زمان طراحی همچین نرم افزاری هم خیلی بیشتره.<br>سال گذشته 2 تا از مشتریامون می گفتن که یک سایت مثل دیجی کالا می خوان ، و جالبه که وقتی می گفتیم بالای 60 میلیون هزینه اش میشه، تعحب می کردن و جالب تر این بود که انتظار رقمی در حدود 5 میلیون تومان رو داشتند !<br>این نشون میده که مشتریان به "<b>میزان تحمل تعداد تراکنش در لحظه</b>" سایت دیجی کالا اصلا توجه نکرده بودند ، حال آنکه طراحی دیزاین سنگین و کاملا ای جکس بیس و حجم دیتابیسی که این سایت داره بماند ...<br><br><br><b>طراحی کاربر پسند</b><br>عوامل ظاهری مواردی هستند که مشتریان بیشتر آنها را درک می نمایند و بیشتر به دنبال قالب های شیک و زیبا هستند<br>البته زیبایی خیلی مهمه ولی باید کاربردی بودن سایت و راحتی استفاده از آن را بسیار مورد توجه قرار داد بطوری که به نظر من نباید کارایی را فدای زیبایی کرد.<br>یادمه چند روز پیش یک سایت فروشگاهی پیدا کردم که کدنویسی و ظاهر بسیار عالی داشت ولی در صفحه جرئیات محصولات با اینکه کد نویسی زیادی هم انجام شده بود ، من احساس خوبی از کار با سایت نداشتم.<br>یادمه که مدت ها در صفحه جزئیات محصول دنبال قیمت یک قهوه ساز می گشتم و در آخر دیدم که در بالا و گوشه سمت چپ نوشته شده که "موجود نیست" سایت واقعا دیزاین خلاقانه و عالی داشت ولی من باهاش راحت نبودم و احساس اذیت شدن بهم دست میداد.<br>مشاهده تصاوی محصولات راحت نبود و افکت روم تصاویر اصلا کارایی لازم رو نداشت چون تصاویر کیفیت پایینی داشتند و همچنین من با زوم شدن اصلا حس خوبی نداشتم و همون اسلاید شوی دیجی کالا رو بیشتر می پسندیدم.<br>(الان یادم اومد که سایت <a href="http://www.boorsika.com/" target="_blank" title="سایت بورسیکا">بورسیکا</a> بود)<br><br><br><br><b>امکانات مدیریتی ارائه شده در نرم افزار و میزان مدیریت بخش های مختلف سایت</b><br>یکی از عوامل مهم در کیفیت نرم افزار امکاناتی است که در پنل مدیریتی در اختیار شما قرار داده شده است.<br>چقدر می تونین بخش های مختلف نرم افزار رو کنترل کنین ؟<br>&nbsp;چقدر می تونین راحت اطلاعات مورد نیازتونو پیدا کنین ؟<br>چقدر جزئیات از اطلاعات در اختیار دارید ؟<br>البته در این بین داشتن یک قالب مناسب (ترجیحا Responsive) خیلی می تونه مهم باشه و احساس خوبی در حین کار با پنل به شما بده.<br>برخی امکانات ممکنه تا مدت ها به چشم نیان ولی یه موقع متوجه وجودشون میشی که واقعا کارت گیره.<br>مثلا وجود دکمه Settle دستی در پنل نرم افزارهایی که دارای درگاه بانکی (پرداخت آنلاین) هستند ممکنه تا ماه ها مهم نباشه ولی یک موقع می بینین یکی از مشتری های مهمتون پرداختش به مشکل می خوره و پول به حساب شما واریز نمیشه (Settle عملیاتی است که طی اون نرم افزار درخواستی به درگاه بانکی ارسال می کنه تا پولی که از حساب مشتری کسر و در دست بانک قرار داره ، به حساب صاحب سابت واریز بشه، جالبه که بدونین اگر عملیات Settle با موفقیت انجام نشه، پول پیش بانک می مونه! و انگار شما پولی دریافت نکرده اید <img src="http://mihanblog.comhttp://mihanblog.com/public/public/rte/images_new/smiles/13.gif">)<br>بسیاری از نرم افزارها فاقد دکمه Settle دستی هستند و مدیریت سایت بنده خدا در این مواقع دستش به جایی بند نیست !<br>حتی نرم افزارهای بنده تا چند ماه پیش همین مشکل رو داشتند و تا وقتی که دوستم به مشکل فوق الذکر برخورد نکرده بود ، نیاز به همچین دکمه ای رو احساس نکرده بودم (اینو گفتم که بگم تولیدات خود بنده نیز کامل نیستند تا اینجور برداشت نشه که این مقاله رو دارم برای کوبیدن شرکت های مختلف و خوب نشون دادن خودم می نویسم، هدف بنده ارائه یک سری معیار برای تشخیص کیفیت نرم افزارهاست، کاری که خیلی پیش باید از طرف یک سازمان حامی انجام میشد) .<br>اینجاست که تجربه شرکت های تولید نرم افزار می تونه اونارو از هم متمایز کنه.<br><br><br><b>امنیت کنترل پنل ها ، اطلاعات تراکنش ها و اطلاعات کاربران سایت</b><br>بخش ورود به پنل مدیریتی تا چه حد امن سازی شده است ؟<br>یادمه وقتی سایت WMFA.ir رو برای یکی از بهترین دوستانم می ساختم ، خیلی روی امنیت پنل مدیریتی سایتش حساس بود، بطوری که مجبور شدم یک سیستم امنیتی 3 لایه روی پنلش پیاده سازی کنم که حتی خودمم نمی تونم الان حتی با داشتن یوزرنیم و پسورد پنلش ، وارد پنل مدیریتیش بشم<img src="http://mihanblog.comhttp://mihanblog.com/public/public/rte/images_new/smiles/4.gif"><br>همچنین امنیت اطلاعات حساس مثل نام های کاربری ، کلمات عبور ، اطلاعات مهم درگاه های بانکی داخلی یا خارجی و ... بسیار مهم است.<br><br><br><b>امکانات بکاپ گیری از اطلاعات</b><br>این خیلی مهمه که نرم افزار چه امکاناتی برای بکاپ گیری از اطلاعات نرم افزار بهتون میده و اینکه آیا امکان ریستور کردن بکاپ ها از طریق پنل مدیریتی میسر است یا خیر.<br>آیا بدون نیاز به داشتن اطلاعات تخصصی می تونین به راحتی از اطلاعات بکاپ تهیه کنین و در صورت نیاز بکاپ ها رو ریستور کنین؟<br><br><div align="center"><div><div><div><div><div><div><div><div style="text-align: left; "><div><div><div><div><div><div><div><div><div style="text-align: left; "><img src="http://file.mihanblog.com//public/user_data/user_files/102/304365/netnic_logo.png" alt="مقالات آموزشی دانشجویی برنامه نویسی و الکترونیک و شبکه" align="bottom" border="0" hspace="0" vspace="0"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div><b>انواع گزارشات</b><br>گزارش گیری مهم ترین وظیفه یک نرم افزار خوب است، نمایش اعداد بصورت نموداری ، جدولی و ... یکی از مهم ترین بخش های هر نرم افزار است<br>توانایی جستجوی داده ها و گرفتن خروجی هایی مثل اکسل ، اکسس ، CSV، XML و خروجی جهت چاپ (پرینت) جهت نگهداری در بایگانی خیلی مهمه<br><br>اینکه بتونین بر اساس پارامترهای مختلف از اطلاعات در بازه های زمانی مختلف گزارشات مختلفی تهیه کنین خیلی می تونه روی کیفیت نرم افزار تاثیر داشته باشه.<br>حجم جزئیات اطلاعات در دسترس هم خیلی مهمه ، مثلا ممکنه در یک نرم افزار وضعیت فاکتور فقط با "پرداخت شده" و "پرداخت نشده" در گزارشات مشخص شده باشه ولی در نرم افزار دیگری جزئیات دقیق پرداخت بانکی هم قابل مشاهده باشه (اطلاعات دریافتی از درگاه بانک) که به راحتی بتونین جزئیات پرداخت ها رو هم توی گزارشات مالیتون داشته باشین و حتی در صورت نیاز تراکنش ها رو از داخل پنل اینترنتی بانک بتونین بررسی و ردیابی کنین.<br><br><br><br><b>سیستم ثبت و گزارش دهی لاگ</b><br>لاگ یکی از مهم ترین اماکانات نرم افزارهای مالی و حسابداری است، خیلی مهمه که سوابق اطلاعات مالی و تغییرات صورت گرفته در اختیار باشه و از دست نره.<br>گرازش گیری از لاگ های سیستم هم یکی از عوامل مهم در کیفیت نرم افزار است.<br>حتی لاگ ورود و خروج کاربران هم می تونه یکی از لاگ های مهم باشه ، مخصوصا در سایت هایی نیاز دارن نظارتهای خاصی روی ورود و خروج کاربران انجام بدن.<br><br>پ.ن: <br>شایان ذکر است که در بحث سایت های خبری ، لاگ تغییرات خبرها رو گردش خبر می نامند(شامل لاگ کلیه تغییرات هر خبر بعلاوه یک سری سلسله مراتب جهت دریافت تاییدیه نمایش خبر میشه)<br><br><br><b>سیستم لاگ خطاهای نرم افزار</b><br>امروزه نرم افزارها را به سیستم های لاگی مثل ELMAH مجهز می کنن که کلیه خطاهای برنامه&nbsp; (Exception ها) رو لاگ می کنند و شرکت های سازنده بصورت دوره ای لاگ ها را بررسی می کنند تا اگر مشکلی در سیستم وجود دارد ، سریعا شناسایی و رفع گردد.<br>این مورد روی امنیت نیز تاثیر زیادی دارد ، چرا که اغلب حمله های سایبری موجب تزریق اطلاعات نادرست به سایت می شود و در این حین خطاهایی نیز در نرم افزار رخ می دهد که می تواند شما را از وجود حملات باخبر سازد تا سریعا راه های نفوذ را شناسایی و برای بستن یا محکم تر کردن سدهای دفاعی نرم افزار اقدام نمایید.<br><br><br>در پایان امیدوارم که مشتریان و عموم مردم با خواندن این مقاله بهتر بتوانند نرم افزار خوب رو از بد تشخیص بدن و انشالله ذهنیت همه مشتریان و همه عموم از توسعه دهندگان مثبت بشه و روزی برسه که همه مشتریان توسعه دهندگان رو به چشم دوست و کسی که درکنارشونه تا مشکلشونو حل کنه ببینند .<br><br>موفق باشید<br> text/html 2015-04-18T02:18:08+01:00 netnic.ir H Moradof دستور جادویی virtual در سی شارپ http://netnic.ir/post/1048 اگر تا به حال برنامه نویسی سی شارپ انجام داده باشید و در حوزه برنامه نویسی فعال بوده باشید ، با احتمال زیاد نام دستور virtual را به کررات شنیده اید و حتی شاید از آن در برنامه های خود استفاده نیز کرده باشید ، ولی آیا به واقع می دانید که کاربرد اصلی آن چیست ؟<br>شاید دوستانی که MVC کار کرده باشند بیشتر با این دستور دست و پنجه نرم کرده باشند تا دوستانی که به شکل سنتی با ASP.Net WebFrom کار می نمایند ، البته شاید دوستان ناراحت بشن که من وب فرم را با عنوان روش سنتی یاد می کنم ، ولی خوب این دوستان اگر به ام وی سی مراجعه نمایند ، شوکه میشن که چقدر دستشون توی ام وی سی بازه و اینکه چقدر معماری قشنگی داره ...<br>در توضیح این مطلب باشد عرض کنم که مدت ها بود به این موضوع فکر می کردم که بخشی از کند بودن پروژه های وب فرم به دلیل رندر شدن کنترل های ASP.Net به تگ های HTML ای است که در ام وی سی تقریبا میشه گفت مهر تاییدی به فکر من زده شده و کلا دیگه خبری از کنترل های ASP.Net نیست <img src="http://mihanblog.comhttp://mihanblog.com/public/public/rte/images_new/smiles/1.gif"><br><br>در کل بی خیال این حرف ها ، بهتره بریم سر اصل مطلب.<br>فرض کنین شما کلاسی دارین که یک رویداد (Event) یا تابع درون اون داره ، فرض کنین کلاس شما قراره DLL بشه و DLL اون در اختیار همکار شما قرار بگیره ؛ همکار شما DLL رو توی پروژه اش استفاده می کنه و در این حین نیاز پیدا می کنه که قبل یا بعد از اجرای تابع شما یک سری کد رو اجرا کنه !<br>فرض کنین می خواد یک سیستم لاگ بسازه که هر بار Event موجود در DLL شما اجرا شد ، درون دیتابیس یک لاگ ذخیره بشه...<br>بعنوان مثال می تونیم اینجوری فرض کنیم که شما یک DLL برای عملیات لاگین نوشته اید که وقتی لاگین با موفقیت انجام میشه ، یک Event با عنوان SuccessLogin اجرا میشه و یک سری داده رو درون کوکی یا سشن ذخیره میکنه.<br>حال همکار شما درون پروژه ای این DLL رو استفاده کرده ولی مشتری از اون خواسته که پروژه اش دارای سییتم لاگ باشه و تمامی آی پی و تاریخ لاگین های موفق درون دیتابیس ثبت بشه.<br><br><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div style="text-align: left; "><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div style="text-align: left; "><img src="http://file.mihanblog.com//public/user_data/user_files/102/304365/netnic_logo.png" alt="مقالات آموزشی دانشجویی برنامه نویسی و الکترونیک و شبکه" align="bottom" border="0" hspace="0" vspace="0"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>خوب در چنین مواردی باید چکار کرد ؟<br><br>اینجاست که دستور Virtual به کمک شما می تونه بیاد.<br>کافی است شما تابع Event تون رو بصورت Virtual بنویسین:<br><br><div align="left"> <textarea style="width:387px; height:174px; overflow:auto;direction:ltr;text-align:left;" name="S1">public class Login { public Login() { } public virtual void SuccessLogin() { // some codes here ... } } </textarea></div><br>در کد نمونه بالا مشاهده می نمایید که ما تابع Event مون رو بصورت Virtual ساخته ایم.<br><br>حال همکار شما می تونه DLL شما رو بدین صورت استفاده کنه :<br><br><div align="left"> <textarea style="width:390px; height:290px; overflow:auto;direction:ltr;text-align:left;" name="S1">public class CustomLogin : Login { public CustomLogin() { } public override void SuccesLogin() { // کدهای مورد نیاز خودمان // some codes here ... // اجرای کدهای موجود در کلاس پدر base.SuccessLogin(); // کدهای مورد نیاز خودمان // some codes here ... } }</textarea></div><br>مشاهده می نمایید که بدین صورت همکار شما می تواند یک کلاس جدید بسازد ، سپس کلاس جدید را از کلاس شما ارث بدهد و سپس متد مورد نظر را Override نماید.<br>درون متد Override شده همکار شما می تواند به راحتی کدهای مورد نظر را قبل یا بعد از اجرا کد تابع اصلی (تابعی که Override شده است) اضافه نماید و در هر زمان که نیاز داشت به کمک دستور base می تواند تابع اصلی را اجرا نماید.<br>بدین صورت می توان نتیجه گرفت که دستور Virtual دو خاصیت جدید را به کلاس شما می دهد:<br><ol><li>امکان تغییر کامل رفتار تابع را به کلاس های فرزند می دهد. بدین صورت که در صورتی که در مثال بالا همکار شما درون تابع از دستور base استفاده ننماید ، در اصل همکار شما بصورت کامل رفتار تابع شما را تغییر داده است</li><li>امکان تغییر جزئی رفتار تابع را به کلاس های فرزند می دهد. بدین صورت که به کلاس های فرزند این امکان را می دهد که یک سری کد در قبل یا بعد از اجرا تابع شما اجرا نمایند که در مثال بالا به عینه می توانید این موضوع را مشاهده نمایید که همکار شما بطور مثال کدهای ثبت لاگ را در قبل یا بعد از اجرای کدهای تابع شما (تابع کلاس پدر) اضافه نموده است.</li></ol><p>دوستانی که MVC&nbsp; یا Entity Framework Code First کار می کنن و بالاخص دوستانی که E.F Code First کار می کنن ، به کررات کلاس هایی مشابه کلاس زیر را ساخته اند و بیشتر موضوع این پست را لمس کرده اند.</p><p align="left"> <textarea style="width:530px; height:255px; overflow:auto;direction:ltr;text-align:left;" name="S1">internal sealed class Configuration : DbMigrationsConfiguration&lt;Models.DatabaseContext&gt; { public Configuration() { AutomaticMigrationsEnabled = true; ContextKey = "Models.DatabaseContext"; AutomaticMigrationDataLossAllowed = true; } protected override void Seed(Models.DatabaseContext context) { // some codes here ... } }</textarea></p><p>در کد فوق مشاهده می نمایید که در کد نویسی Migration در E.F Code First نیز مایکروسافت بصورت Virtual تابع Seed را ساخته است که این امکان را به ما می دهد که بتوانیم کدهایی را درون این تابع اضافه نماییم.</p><p>(تابع Seed تابعی است که در زمان ساخت دیتابیس اجرا می شود که توضیح تفصیلی این تابع خارج از بحث پست ما می باشد)</p><p>امیدوارم از این آموزش لذت برده باشید<br></p> text/html 2015-02-02T03:32:53+01:00 netnic.ir H Moradof 12 مشخصه یک محل کار ایده آل http://netnic.ir/post/1054 <p dir="rtl" style="color: rgb(68, 68, 68); font-family: Tahoma; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" align="justify"><b>امروز مطلب جالبی از یکی از بلاگ ها پیدا کردم که از زبون خودشون نقل قول می کنم :</b></p><p dir="rtl" style="color: rgb(68, 68, 68); font-family: Tahoma; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" align="justify"><b><br></b></p><p dir="rtl" style="color: rgb(68, 68, 68); font-family: Tahoma; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" align="justify">سایت Harvard Business Review چند روز پیش مطلبی را منتشر کرده که 12 مشخصه یک مکان ایده آل برای کار را برشمرده است. این مطلب بر اساس بیش از 100 مطالعه صورت گرفته تنظیم شده است.</p><p dir="rtl" style="color: rgb(68, 68, 68); font-family: Tahoma; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" align="justify">به قول نویسنده - Tony Schwartz &nbsp;- در صورتی که شرکتی این شرایط را فراهم کند، کارکنان حداکثر رضایت شغلی ممکن را خواهند داشت و در نتیجه بیشترین بهره وری و وفاداری به سازمان حاصل خواهد شد.</p><p dir="rtl" style="color: rgb(68, 68, 68); font-family: Tahoma; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" align="justify">بر اساس این مطالعه در سرتاسر جهان تنها 20% افراد از محیط کار خود ابراز رضایت کامل کرده اند.</p><p dir="rtl" style="color: rgb(68, 68, 68); font-family: Tahoma; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" align="justify">1. پرداخت دستمزد کافی که شخص بتواند در حوزه استاندارهای خود زندگی کند.</p><p dir="rtl" style="color: rgb(68, 68, 68); font-family: Tahoma; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" align="justify">2. شریک کردن مالی کارکنان در موفقیتهای کسب شده برای سازمان نظیر سهامدار کردن کارکنان، پرداخت پاداش متناسب با کارایی و بهره وری و از این دست.</p><p dir="rtl" style="color: rgb(68, 68, 68); font-family: Tahoma; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" align="justify">3. طراحی محیط کاری به شکلی که محل امن، راحت و لذت بخشی برای کارکنان به وجود آورد، محیطی که امکان تعامل و فعالیتهای اجتماعی را فراهم کرده و در عین حال به اندازه کافی به شخص حس خصوصی بودن فضای اطراف خود را بدهد.</p><p dir="rtl" style="color: rgb(68, 68, 68); font-family: Tahoma; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" align="justify">4. فراهم کردن مواد غذایی سالم و با کیفیت با کمترین هزینه ممکن.</p><p dir="rtl" style="color: rgb(68, 68, 68); font-family: Tahoma; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" align="justify">5. ایجاد امکاناتی برای استراحت و کسب انرژی مجدد و ترغیب کارکنان به استفاده از این امکانات. در حالت ایده آل ایجاد محیطی برای چرت در میان روز برای کسب انرژی مجدد برای ساعتهای بعد از ظهر.</p><p dir="rtl" style="color: rgb(68, 68, 68); font-family: Tahoma; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" align="justify">6. ایجاد امکانات ورزشی و فعالیتهای بدنی برای کارکنان و ترغیب آنان برای استفاده حتی در میان روز.</p><p dir="rtl" style="color: rgb(68, 68, 68); font-family: Tahoma; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" align="justify">7. تعریف دقیق و روشن وظایف فرد و انتظارات سازمان از شخص و سپس واگذاری اختیار به فرد برای تصمیم گیری و پیشبرد کارها به شکل دلخواه در محدوده تعریف شده.</p><p dir="rtl" style="color: rgb(68, 68, 68); font-family: Tahoma; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" align="justify">8. ایجاد شرایطی برای تعامل دوسویه برای بازخورد، انتقاد و بررسی عملکرد، به شکلی که کارکنان تنها گیرنده و شنونده بازخورد از بالا دست خود نبوده و این امکان برای آنان فراهم باشد که در مورد بالادستی های خود – در صورت لزوم به شکل بی نام – نظر دهند و انتقاد کنند.</p><p dir="rtl" style="color: rgb(68, 68, 68); font-family: Tahoma; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" align="justify">9. ملزم کردن مدیران و راهبران سازمان به احترام و دلسوزی نسبت به زیردستان.</p><p dir="rtl" style="color: rgb(68, 68, 68); font-family: Tahoma; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" align="justify">10. وضع قوانینی برای آزاد گذاشتن کارکنان برای تمرکز و تخصیص زمان برای پروژه هایشان خصوصا پروژه های طولانی مدت و در صورت امکان دنبال کردن پروژه هایی که صرفا به آن علاقه مند هستند و این گونه پروژه ها در بلند مدت برای سازمان ارزشمند خواهد بود (یا دستکم دارای این پتانسیل است)</p><p dir="rtl" style="color: rgb(68, 68, 68); font-family: Tahoma; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" align="justify">11. ایجاد شرایطی برای آموزش، مطالعه و پیشرفت کارکنان در زمینه های مرتبط با حرفه و حتی مهارتهای درونی و شخصی.</p><p dir="rtl" style="color: rgb(68, 68, 68); font-family: Tahoma; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" align="justify">12. ایجاد برنامه هایی در سازمان که صرفا منجر به سود نشده و در عوض تمرکز بیشتری بر روی ایجاد ارزش برای آینده گان، محیط زیست و دیگران داشته باشد. در این حالت در کارکنان حس بهتری نسبت به کار و سازمانی که برای آن کار می کنند ایجاد خواهد شد.</p><p dir="rtl" style="color: rgb(68, 68, 68); font-family: Tahoma; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 18px; orphans: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" align="justify">منبع: http://softwaring.blogfa.com<br></p> text/html 2015-01-30T14:34:57+01:00 netnic.ir H Moradof ساخت پروژه MVC5 در ویژوال استودیو 2013 http://netnic.ir/post/1053 چند وقتی بود که یک پروژه MVC رو شروع کرده بودم ، لایه های مختلف نرم افزار رو ساختم و داشتم خوب پیش ممی رفتم.<br>همه چیز خوب بود تا اینکه نیاز پیدا کردم که Enum های برنامم رو داخل دراپ داون لیست بایند کنم.<br>خوب روش های معمول نیاز به کدنویسی زیادی داشتند که اصلا به نظرم مناسب نیومدند ، در روش های معمول برای هر Enum باید یک Extention Method&nbsp; (متد الحاقی) بنویسیم که در برنامه هایی که دارای تعداد زیادی Enum هستند مناسب به نظر نمیرسه.<br><br>روش جدیدتری که در MVC5 ارائه شده ، ساخت یک Html Helper سفارشی از نوع جنریک می باشد که برای انواع Enum می تواند مورد استفاده قرار گیرد<br><br><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div style="text-align: left; "><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div style="text-align: left; "><img src="http://file.mihanblog.com//public/user_data/user_files/102/304365/netnic_logo.png" alt="مقالات آموزشی دانشجویی برنامه نویسی و الکترونیک و شبکه" align="bottom" border="0" hspace="0" vspace="0"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div><br>بنابراین برای Enum ها کدی مشابه کد زیر خواهیم داشت :<br><br><div align="left"> <textarea style="width:495px; height:30px; overflow:auto;direction:ltr;text-align:left;" name="S1">@Html.EnumDropDownListFor(model =&gt; model.Title)</textarea></div><br>خوب وارد جزئیات کار نمی خوام بشم چون هر کس علاقه داره می تونه از <a href="http://stackoverflow.com/questions/22588629/enum-to-dropdown-in-mvc-5" target="_blank" title="ساخت helper سفارشی برای enum ها در ام وی سی">اینجا</a> جزئیات پیاده سازی رو بخونه<br><br><br>مشکل جایی پیش اومد که یکی از متدهای کد من ارور می داد و متن ارور مشخص می کرد که همچین متدی در کلاس HtmlHelper وجود ندارد !<br>ولی HtmlHelper که در فضا نام System.Web.Mvc است باید همچین متدی داشته باشه ! <br>در بین مقالات خوندم که این تکنیک فقط در mvc 5 می باشد و در نسخه های قبلی امکان ساخت helper سفارشی میسر نبوده است ...<br><br>با کلی سرچ در اینترنت به این نتیجه رسیدم که کدم مشکلی نداره و حتی در ساخت مایکروسافت هم همچین کدی پیشنهاد شده ! پس مشکل کد من از کجا بود ؟!<br>در مقاله ای بیان شده بود که باید یک سری تگ به فایل کانفیگ برنامه اضافه بشه .. در این تگ ها تگی نظرمو جلب کرد :<br><br><div align="left"> <textarea style="width:572px; height:45px; overflow:auto;direction:ltr;text-align:left;" name="S1">&lt;add assembly="System.Web.Mvc, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /&gt;</textarea></div><br>&nbsp;در این کد نسخه ام وی سی را 5.1 معرفی کرده اند ، ولی من با بررسی نسخه اسمبلی system.web.mvc دیدم که نسخه من 4 است !<br><br>مگر پروژه من ام وی سی 5 نیست ! <img src="http://mihanblog.comhttp://mihanblog.com/public/public/rte/images_new/smiles/13.gif"><br>داستان چی بود ؟<br><br>با کمی سرچ توی اینترنت به <a href="http://stackoverflow.com/questions/21096746/how-to-add-mvc5-to-visual-studio-2013" target="_blank" title="افزودن mvc 5 به ویژوال استودیو 2013">این مقاله</a> جالب برخورد کردم ، این مقاله مشخص می کنه که در ویژوال استودیو 2013 در زمان ساخت پروژه جدید mvc باید دقت کنید که به اشتباه پروژه رو از نوع mvc4 نسازید !<br>این یک کار عجیب غریب از مایکروسافته که 2 نوع منو برای ساخت پروژه ام وی سی داره که بایدحواستون جمع باشه که به اشتباه از طریق زیر اقدام به ساخت پروژه جدید mvc کنید ، چون اینجوری پروژه شما mvc 4 ساخته می شود!<br><div align="left"><b>File &gt; New &gt; Project &gt; C# &gt; Web &gt; Visual Studio 2012</b><br></div><br>برای اینکه پروژه شما mvc 5 بشه باید پروژتونو اینطوری ایجاد کنین :<br><br><div align="left"><b>File &gt; New &gt; Project &gt; C# &gt; Web</b><br></div><br>باید دقت کنین که نباید زیر منوی Visual Studio 2012 رو انتخاب کنین.<br>در مرحله بعدی باید در پنجره جدیدی که باز میشه MVC رو انتخاب کنین و در پایان OK رو بزنین.<br><br>خوب پس از این به بعد حواستون به نحوه ساخت پروژه mvc تون باشه <img src="http://mihanblog.comhttp://mihanblog.com/public/public/rte/images_new/smiles/1.gif"><br><br> text/html 2015-01-26T15:53:44+01:00 netnic.ir H Moradof کسب درآمد از طریق اینترنت! http://netnic.ir/post/1058 <br>اگر قصد <b>سرمایه گذاری برای راه اندازی کسب و کار در عرصه وب</b> رو دارید ، توصیه می کنم ادامه مقاله من رو مطالعه کنید.<br><br>بدیهی است که سایت خوب مثل داشتن یک مغازه با دکوراسیون مناسبی است که اجناس اون کاملا توی چشم هستند و دارای کارمندان خوش برخوردی نیز هست.<br><br>طبق تجربه بنده ، توی عرصه وب پول خوب بدست نمیاری مگر اینکه <b>3 اصل</b> زیر رو داشته باشی :<br><br><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div style="text-align: left; "><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div style="text-align: left; "><img src="http://file.mihanblog.com//public/user_data/user_files/102/304365/netnic_logo.png" alt="مقالات آموزشی دانشجویی برنامه نویسی و الکترونیک و شبکه" align="bottom" border="0" hspace="0" vspace="0"></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>1- <b>ایده خوب</b><br>اگر ایده شما یک ایده تک باشه خوب خیلی عالیه ، ولی اگر تک هم نباشه می تونه ایده ای باشه که کامل شده ایده دیگران باشه مشابه <a href="http://www.sheypoor.com" target="_blank" title="سایت شیپور">سایت شیپور</a> که کامل شده ایده <a href="http://www.divar.ir" target="_blank" title="سایت دیوار">سایت دیوار</a> است<br><br>2- <b>پیاده سازی صحیح و کامل ایده</b><br>ایده باید به نحوی پیاده سازی بشه که مشتری رو به خودش جذب کنه و مشتری باهاش راحت بتونه ارتباط برقرار کنه<br>ولی باید در نظر داشته باشید که هیچگاه نباید کارایی رو فدای زیبایی کنیم.<br><br>3- <b>صرف وقت و هزینه</b><br>باید پشت ایدتون بمونین و روش وقت بذارید<br>تجربه ثابت کرده که خیلی از پروژه ها در همین مرحله متوقف میشن! <img src="http://mihanblog.comhttp://mihanblog.com/public/public/rte/images_new/smiles/2.gif"><br>نمونه عملیش <a href="http://WhatsJob.ir" target="_blank" title="سایت WhatsJob.ir">سایت WhatsJob.ir</a> است که حدود 3 ماه با تلاش یک تیم روش کار کردیم و ایده و پیاده سازیش عالی بود ولی بانیان پروژه پای ایدشون نموندند و بعد از حدود 9 ماه تازه داشتن روش دیتا اینتری انجام میدادن&nbsp; و در آخر هم استفاده ای از سایت نشد!<br>بازاریابی و صرف وقت جهت معرفی سایت به مردم از طریق شبکه های اجتماعی، تبلیغات اینترنتی و بالا بردن رنک در موتورهای جستجو بخش اعظم کار است.<br><br>به نظر من مرحله اول و دوم تازه 50% کار است ، بخش مهم تر کار بازاریابی و کسب کاربر است.<br>البته اگر خدمات ارائه شده و همچنین طراحی سایت شما بصورتی باشد که مطابق با علاقه کاربران باشد، این مورد می تواند در مرحله سوم بسیار به شما کمک کند.<br>سایت خوب سایتی است که تجربه ای دلنشین به کاربران خود هدیه می دهد و بدین صورت هر کاربر خود به یک پایگاه تبلیغاتی برای شما تبدیل می شود.<br><br>در این مرحله داشتن ارتباط پیوسته با کاربران و دریافت انتقادات و پیشنهادات می تواند خیلی روی تجارت شما تاثیر گذار باشد.<br><br>شایان ذکر است که داشتن یک دامین کوتاه و به یاد ماندنی و زیبا تاثیر زیادی می تواند در سرعت جذب کاربر داشته باشد.<br><br>اشتباه نکنید ، کار تمام نشده است ، هیچوقت نباید به خدماتی که روی سایت خود ارائه می دهید راضی باشید و همیشه باید در پی توسعه خدمات و امکانات سایت خود با کمک نظرات دریافتی از کاربرانتان باشید ، در این بین می توانید ایده های خلاقانه خود را نیز بکار ببندید.<br><br>سایتی در چرخه رقابت می ماند که مرتب خدمات جدید ارائه دهد و مرتبا دسترسی به خدمات خود را سریع تر و آسان تر نماید.<br>در این بین می توان به ارائه نرم افزارهای اختصاصی برای گوشی های موبایل اشاره نمود که می تواند بسیار تاثیر گذار باشد.<br><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div align="left"><div style="text-align: left; "><img src="http://file.mihanblog.com//public/user_data/user_files/102/304365/netnic_logo.png" alt="مقالات آموزشی دانشجویی برنامه نویسی و الکترونیک و شبکه" align="bottom" border="0" hspace="0" vspace="0"></div></div></div></div></div></div></div></div></div></div><br><img src="http://mihanblog.comhttp://mihanblog.com/public/public/rte/images_new/smiles/100.gif"> پیشنهاد می کنم اگر ایده نابی در زمینه وب دارید ، همین امروز استارت کار خود را بزنید.<br>فردا ممکن است شخصی دیگر ایده شما را به سرانجام برساند.<br>موفق باشید<br><br> text/html 2015-01-25T14:58:16+01:00 netnic.ir H Moradof جذاب ترین فونت ها برای وب سایت http://netnic.ir/post/1051 جذابیت و زیبایی سایت یکی از مهم ترین عوامل موثر در جذب مشتری است.<br>در گذشته با استفاده از تصاویر ، رنگ ها و جلوه های بصری مانند گرادیانت های رنگی سایت هایی جذاب ایجاد می کردیم ولی امروزه سایت ها به سمت جذابیت در عین سادگی می روند<br>با وجود سبک هایی مانند بوت استرپ ، مشاهده می نماییم که دیگر خبری از باکس ها و کادر بندی های بین بخش های مختلف سایت نیست و با تغییر در بک گراند بخش های مختلف را از یکدیگر تفکیک می نمایند<br>امروزه فونت سهم بسیار زیادی در زیبایی وب سایت ها دارد، تا جایی که یک قالب ساده با کمک یک یا دو فونت مناسب بسیار زیباتر جلوه می کند.<br><br><b>در زیر تعدادی فونت عالی رو معرفی کرده ام:</b><br><br><ul><li><a href="http://awebfont.ir/fonts?cat_id=2&amp;fonts_id=1201" target="_blank" title="فونت زیبای دینار برای سایت">فونت دینار (dinarb)</a></li><li><a href="http://awebfont.ir/fonts?cat_id=1&amp;fonts_id=1116" target="_blank" title="فونت زیبای byekan برای سایت">فونت بی یکان (B Yekan)</a></li><li><a href="http://awebfont.ir/fonts?cat_id=1&amp;fonts_id=1047" target="_blank" title="فونت زیبای bkoodak برای سایت">فونت کودک (B Koodak)</a></li><li><a href="http://awebfont.ir/fonts?cat_id=1&amp;fonts_id=1083" target="_blank" title="فونت زیبای broya برای وب سایت">فونت رویا (B Roya)</a></li><li><a href="http://awebfont.ir/fonts?cat_id=1&amp;fonts_id=1799" target="_blank" title="فونت زیبای میترا برای وب سایت">فونت میترا (Mitra)</a></li><li><br></li></ul>