پرسش | پاسخ |
برای ایجاد یک وبلاگ بلاگری از کجا شروع کنم؟ | با داشتن یک اکانت جی میل، به آدرس زیر مراجعه کرده و هر تعداد که مایل بودید میتوانید وبلاگ ایجاد نمائید: |
قالبهای پیش فرض گوگل چنگی به دل نمیزنند و بود و نبود آنها احساس نمیشود! چه باید کرد؟ | برای تهیه قالبهای فارسی به آدرس زیر مراجعه نمائید: |
تاریخ فارسی را چه کنم؟ | روش دوستان ، روش من |
برنامه نویسم! کدهای من یا نمایش داده نمیشود یا فرمت آنها هنگام ارسال به هم میریزد. چه باید کرد؟ | روش مورد علاقهی من ، روش مایکروسافت (+ و + و افزونهای برای اینکار) |
آخرین نظرات کاربران سایت را چگونه در ستون کناری سایت نمایش دهم؟ | یکی از ویجتهای پرکاربرد گوگل در بلاگر، ویجت فید است. هر بلاگ دارای دو فید مطالب و نظرات است. ویجت فید را اضافه کرده و سپس آدرس فید نظرات سایت خود را به آن معرفی کنید. همیشه آخرین 5 نظر ارسالی را نمایش میدهد. این ویجت کاربردهای قابل توجهی میتواند داشته باشد. |
آمار مراجعان به سایت را باید در کجا ملاحظه کرد؟ | جای پیش فرضی وجود ندارد! یک اکانت Analytics برای خود تهیه کرده و آنرا به سایت اضافه کنید. همچنین پس از آن یک اکانت فید برنر را نیز برای خود تهیه کنید. فیدبرنر اکنون جزیی از گوگل است و پس از معرفی آدرس فید سایت خود به آن، یک آدرس جدید به همراه آیکونی برای نمایش در سایت به شما میدهد که میتوانید تگهای آن تصویر را توسط ویجت html نمایش دهید. همچنین از همین طریق نیز میتوان اشتراک از طریق ایمیل را به وبلاگ اضافه کرد. |
کامنتهای سایت من در بیرون از سایت باز میشوند. چرا؟ | به این مطلب مراجعه نمائید: |
چگونه برای بلاگ خود قسمت ارسال نظرات را تهیه نمایم؟ | من از سرویس فرم ساز Zoho استفاده میکنم که در سال 2008 جزو برترینهای وب شناخته شده بود. بعد از ایجاد فرم خود و دریافت کد مربوطه، یک مطلب جدید را ارسال کنید و در بدنهی آن ، کدی را که Zoho به شما ارائه میدهد قرار دهید. سپس لینک این مطلب را توسط یک ویجت html به کنار سایت اضافه کنید تا همیشه در دسترس باشد. |
مراحل کلی سفارشی سازی قالبهای Scaffolding پیش فرض ASP.NET MVC
قالبهای Scaffolding پیش فرض ASP.NET در مسیر Microsoft Visual Studio X\Common7\IDE\ItemTemplates\CSharp\Web\MVC X\CodeTemplates قرار دارند. برای نمونه اگر بخواهیم پیش فرضهای تولید فرمهای MVC4 را تغییر دهیم، باید به پوشه MVC 4\CodeTemplates\AddView\CSHTML مراجعه و فایل Create.tt را ویرایش کنیم.
اینکار هرچند عملی است اما آنچنان جالب نیست؛ از این جهت که تاثیری کلی و سراسری خواهد داشت.
برای اعمال محلی این تغییرات فقط به یک پروژه خاص، تنها کافی است همین مسیر CodeTemplates\AddView\CSHTML به همراه تمام فایلهای tt آن، در پوشه جاری پروژه مدنظر ما کپی شود. به این ترتیب ابتدا به این پوشه محلی مراجعه خواهد شد.
روش دوم کپی کردن این فایلها، استفاده از بسته نیوگت ذیل است:
PM> Install-Package Mvc4CodeTemplatesCSharp
سفارشی سازی فایل Create.tt پیش فرض ASP.NET MVC جهت سازگار سازی آن با Twitter bootstrap
در اینجا قصد داریم همان 8 مرحله مطلب «اعمال کلاسهای ویژه اعتبارسنجی Twitter bootstrap به فرمهای ASP.NET MVC» را به فایل Create.tt که اکنون در پوشه CodeTemplates\AddView\CSHTML\Create.tt ریشه پروژه جاری قرار دارد، اعمال کنیم.
الف) ابتدا نام این فایل را به CreateBootstrapForm.tt تغییر میدهیم. از این لحاظ که این نام جدید در drop down مرتبط با scaffold template صفحه Add view ظاهر خواهد شد. به علاوه نیازی نیست تا این فایل tt در همان لحظه اجرا شود، بنابراین به خواص آن در VS.NET مراجعه کرده و مقدار گزینه custom tool آنرا خالی میکنیم (مانند سایر فایلهای tt اضافه شده).
ب) قسمت ابتدایی فایل CreateBootstrapForm.tt را که همان کپی مطابق اصل فایل Create.tt است، به نحو ذیل تغییر میدهیم:
<# if (!mvcHost.IsContentPage) { #> <script src="~/Scripts/jquery-1.9.1.min.js"></script> <script src="~/Scripts/jquery.validate.min.js"></script> <script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script> <# } } #> @using (Html.BeginForm()) { @Html.ValidationSummary(true, null, new { @class = "alert alert-error alert-block" }) <fieldset class="form-horizontal"> <legend><#= mvcHost.ViewDataType.Name #></legend> <# foreach (ModelProperty property in GetModelProperties(mvcHost.ViewDataType)) { if (!property.IsPrimaryKey && !property.IsReadOnly && property.Scaffold) { #> <div class="control-group"> <# if (property.IsForeignKey) { #> @Html.LabelFor(model => model.<#= property.Name #>, "<#= property.AssociationName #>",new {@class="control-label"}) <# } else { #> @Html.LabelFor(model => model.<#= property.Name #>,new {@class="control-label"}) <# } #> <div class="controls"> <# if (property.IsForeignKey) { #> @Html.DropDownList("<#= property.Name #>", String.Empty) <# } else { #> @Html.EditorFor(model => model.<#= property.Name #>) <# } #> @Html.ValidationMessageFor(model => model.<#= property.Name #>,null,new{@class="help-inline"}) </div> </div> <# } } #> <div class="form-actions"> <button type="submit" class="btn btn-primary">ارسال</button> <button class="btn">لغو</button> </div> </fieldset> } <div> @Html.ActionLink("Back to List", "Index") </div> <# if(mvcHost.IsContentPage && mvcHost.ReferenceScriptLibraries) { #> @section JavaScript { }
دریافت فایل CreateBootstrapForm.tt اصلاح شده:
همانطور که عنوان شد، برای استفاده از آن فقط کافی است آنرا در مسیر CodeTemplates\AddView\CSHTML\CreateBootstrapForm.tt ریشه پروژه جاری خود کپی کنید.
فرض کنید تیم برنامهنویس متلب و تیم برنامهنویس دات نت در تعامل با یکدیگر هستند. وظیفه تیم برنامه نویسی متلب به شرح زیر میباشد :
1- نوشتن توابع در متلب و تست کردن آنها جهت توسعه و ارائه مناسب به تیم مقابل
2- درست کردن کامپوننت دات نت در متلب با استفاده از محیط Deployment Tool GUI (با اجرای دستور deploytool در متلب)
3- استفاده از یک پکیج بستهبندی شده از فایلهای قابل ارائه به تیم مقابل (اختیاری)
4- کپی پکیج در محل از قبل تعیین شده توسط دو تیم یا ارائه آن به تیم مقابل جهت استفاده
برای مثال M فایل (اصطلاح فایلها در متلب همانند کلاس در دات نت) makesquare.m را که در مسیر
matlabroot\toolbox\dotnetbuilder\Examples\VS8\NET\MagicSquareExample\MagicSquareComp
function y = makesquare(x) %MAKESQUARE Magic square of size x. % Y = MAKESQUARE(X) returns a magic square of size x. % This file is used as an example for the MATLAB % Builder NE product. % Copyright 2001-2012 The MathWorks, Inc. y = magic(x);
در صورتی که x برابر 5 انتخاب شود خروجی متلب بصورت زیر خواهد بود :
17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9
makeSqr | Project Name |
MLTestClass | Class Name |
makesquare.m | File to compile |
نام و مسیر پروژه را تعیین کنید سپس از منوی کشویی نوع پروژه، که دات نت اسمبلی باشد را انتخاب کنید. پنجرهای در به شکل زیر مشاهده خواهد شد :
در تب build اگر قصد استفاده از اپلیکیشن COM را دارید و یا فایلهایی جهت تکمیل پروژه قصد پیوست دارید را در قسمت پایین Add files را انتخاب کنید. و اگر قصد استفاده از اپلیکیشن دات نت را دارید قسمت بالایی Add classes را انتخاب کنید و نام کلاس را وارد کنید.
سپس برای کلاس مورد نظر فایلهای متلبی که قصد کامپایل کردن آنها را دارید از قسمت Add files پیوست کنید. در صورتیکه قصد اضافه کردن کلاس اضافی را داشتید مجددا مراحل را طی کنید. در انتها دکمه build را زده تا عملیات کامپایل آغاز شود. اما برای استفاده تیم برنامهنویسی دات نت احتیاج به کامپایلر متلب میباشد که این مهم در پکیجی که به این تیم ارائه خواهد شد مد نظر قرار خواهد گرفت.در قسمت تب Package گزینه Add MCR را انتخاب نمائید :
بعد از انتخاب، دو گزینه برای انتخاب وجود دارد که بطور خلاصه گزینه اول فایلهای کامپایلر متلب در داخل پروژه جهت ارائه قرار میگیرد. همچنین این گزینه جهت استفاده در مواقع درون شبکهای، مواردی که فضای دیسک و عملکرد و .... چندان اهمیت ندارد مورد استفاده قرار میگیرد. اما گزینه دوم عکس قضیه بالا عمل میکند و برای تعداد یوزر بالا و شبکهای و ... مورد استفاده میباشد.
در اینجا گزینه اول را انتخاب میکنیم. در صورتیکه فایلهای دیگری جهت ضمیمه به پکیج احتیاج است به آن اضافه میکینم.
سپس کلید پکیج را زده تا پکیج مورد نظر آماده شود. دقت داشته باشید که بعد از انتخاب کامپایلر متلب، حجم پکیج نزدیک به 400 مگابایت خواهد شد. پکیج مورد نظر بصورت یک فایل exe فشرده خواهد شد.
معمولا پکیج شامل فایلهای زیر باید باشد :
Documentation files | componentName.xml |
Program Database File, which contains debugging information | componentName.pdb (if Debug optionis selected) |
Component assembly file | componentName.dll |
MCR Installer (if not already installed on the target machine). | MCR Installer |
بعد از طی مراحل فوق نوبت به تیم برنامهنویسی دات نت میرسد. بعد از دریافت پکیج از تیم برنامهنویسی متلب در صورتیکه بر روی سیستم هدف کامپایلر متلب و یا خود متلب نصب نیست باید از داخل پکیج این کامپایلر نصب شود.
دقت داشته باشید که ورژن کامپایلر بر روی سیستم باید با ورژن پکیج دریافتی یکی باشد.
در VS یک پروژه کنسول ایجاد کنید و از فولدر پکیج پروژه دریافتی در زیرفولدر distrib فایل makeSqr.dll را به رفرنس برنامه VS اضافه کنید.
در ادامه از مسیر نصب کامپایلر فایل MWArray.dll را هم به رفرنس پروژه اضافه کنید. این فایل جهت تبادل داده اپلیکیشن با کامپایلر متلب مورد استفاده قرار میگیرد.
installation_folder\toolbox\dotnetbuilder\bin\architecture\framework_version
using System; using MathWorks.MATLAB.NET.Arrays; using MyComponentName;
static void Main(string[] args) { MLTestClass obj = new MLTestClass(); MWArray[] result = obj.makesquare(1, 5); MWNumericArray output = (MWNumericArray)result[0]; Console.WriteLine(output); }
1- MWNumericArray یک اینترفیس جهت تعیین و نمایش نوع آرایههای عددی در متلب است.
2- MWArray یک کلاس abstract جهت دسترسی، فرمتدهی و مدیریت آرایههای متلب میباشد.
3- عدد 1 مشخص کننده تعداد خروجی تابع متلب و عدد 5 ورودی تابع میباشد.
نکته:
ورژن فریمورک دات نت در هنگام کامپایل با ورژن Mwarray.dll باید یکی باشد.
با تکامل SQL server و بهبودهای حاصل شده، یک سری از ویژگیهای موجود صرفا جهت حفظ سازگاری با نگارشهای قبلی ارائه میشوند. لیست کامل آنها را در آدرس زیر میتوان مشاهده نمود:
Deprecated Database Engine Features in SQL Server 2008
لیست بلند بالایی است. اما در یک محیط کاری، نوعهای زیر از سایر موارد ذکر شده بیشتر مورد استفاده قرار میگیرند:
منسوخ شدهها: text ، ntext و image . جایگزینها : varchar ، nvarchar و varbinary از نوع max دار
عموما علت استفاده از نوعهای text یا ntext (نمونه یونیکد text) ، مشخص نبودن تعداد کاراکتری است که کاربر قرار است وارد کند. برای مثال یک سایت خبری ایجاد کردهاید و طول محتوای خبر ثبت شده در بانک اطلاعاتی از یک خبر به خبر دیگر کاملا متفاوت است. در اینجا برای حل این مشکل از نوعهای text یا ntext استفاده میشد (این مورد تا اسکیوال سرور 2000 توصیه میشود).
varchar max تا 2,147,483,648 کاراکتر را میتواند ذخیره کند، یعنی تا 2 GB و nvarchar max تا نصف این مقدار را. در اس کیوال سرور 2000 محدودیت 8000 کاراکتر برای نوع vrachar وجود داشت (و نوع nvrachar تا 4000 کاراکتر).
مزایای استفاده از نوعهای max دار (از اس کیوال سرور 2005 به بعد) :
- بهبود کارآیی کوئریهای جستجو نسبت به نوعهای Text
- اگر مطلب تشخیص کمبود ایندکسها را دنبال کرده باشید، در آنجا ذکر شد که در قسمت included columns نمیتوان از text و ntext استفاده کرد اما نوعهای max دار متنی مجازند.
- امکان استفاده از فیلدهای max دار برای مرتب سازی کوئری مجاز است. (به شخصه با این مورد زیاد برخورد داشتم. برای مثال امکان سورت کردن یک گرید را در ASP.Net فراهم کردهاید و کاربر با کلیک بر روی سر ستون فیلدی از نوع ntext با یک خطا متوقف خواهد شد)
- امکان استفاده از نوعهای Text بهعنوان متغیر در رویههای ذخیره شده یا توابع T-SQL مهیا نیست اما این محدودیت در نوعهای max دار برطرف شده است.
- نوعهای text را در توابع REPLACE ، CHARINDEX و SUBSTRINGنمیتوان بکار برد (برخلاف نوعهای متنی max دار).
Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
بعد از این تغییر به سادگی میتوان عملیات ارتقاء را بدون نگرانی از بروز خطای فوق انجام داد.
تزریق وابستگیها در فیلترهای ASP.NET MVC
public interface ILogActionService { void Log(string data); } public class LogAttribute : ActionFilterAttribute { public ILogActionService LogActionService { get; set; } public override void OnActionExecuted(ActionExecutedContext filterContext) { LogActionService.Log("......data......"); base.OnActionExecuted(filterContext); } }
[Log] public ActionResult Index() {}
روش متداول تنظیمات تزریق وابستگیها در ASP.NET MVC، بیشتر به بحث کنترلرها مرتبط است و سایر قسمتها را پوشش نمیدهد. برای این مورد خاص ابتدا نیاز است یک FilterProvider سفارشی را به نحو ذیل تدارک دید:
using StructureMap; using System.Collections.Generic; using System.Web.Mvc; namespace DI06.CustomFilters { public class StructureMapFilterProvider : FilterAttributeFilterProvider { private readonly IContainer _container; public StructureMapFilterProvider(IContainer container) { _container = container; } public override IEnumerable<Filter> GetFilters(ControllerContext controllerContext, ActionDescriptor actionDescriptor) { var filters = base.GetFilters(controllerContext, actionDescriptor); foreach (var filter in filters) { _container.BuildUp(filter.Instance); yield return filter; } } } }
پس از اینکه FilterProvider سفارشی مخصوص کار با استراکچرمپ را تهیه کردیم، اکنون نوبت به جایگزین کردن آن با FilterProvider پیش فرض ASP.NET MVC در فایل global.asax.cs به نحو ذیل است:
//Using the custom StructureMapFilterProvider var filterProvider = FilterProviders.Providers.Single(provider => provider is FilterAttributeFilterProvider); FilterProviders.Providers.Remove(filterProvider); FilterProviders.Providers.Add(SmObjectFactory.Container.GetInstance<StructureMapFilterProvider>());
همچنین در این مثال چون تزریق وابستگی در کلاس LogAttribute از نوع setter injection است، نیاز است در تنظیمات ابتدایی Container مورد استفاده، Policies.SetAllProperties نیز قید شود:
namespace DI06.IocConfig { public static class SmObjectFactory { private static readonly Lazy<Container> _containerBuilder = new Lazy<Container>(defaultContainer, LazyThreadSafetyMode.ExecutionAndPublication); public static IContainer Container { get { return _containerBuilder.Value; } } private static Container defaultContainer() { return new Container(x => { x.For<ILogActionService>().Use<LogActionService>(); x.Policies.SetAllProperties(y => { y.OfType<ILogActionService>(); }); }); } } }
کدهای کامل این مثال را از اینجا میتوانید دریافت کنید:
DI06
نگاهی به SignalR Hubs
services.AddAntiforgery (x => x.HeaderName = "X-XSRF-TOKEN"); services.AddMvc (options => { options.Filters.Add (new AutoValidateAntiforgeryTokenAttribute ()); });
بازنویسی سطح دوم کش برای Entity framework 6
var f = db.Faq.Where(x=>x.IdHamayesh == id && x.IdLanguage == idLanguage).OrderBy(x=>x.Order).Cacheable().ToList();