نظرسنجی
علاقه مند به کار در کدام شرکت هستید؟








 
خروجی RSS

اضافه کردن Watermark به تصاویر یک برنامه ASP.NET MVC


31 مرداد 1392

 درگیر شدن با سایت‌های دیگر که چرا مطالب ما را کپی کرده‌اید نهایتا بجز فرسایش عصبی حاصل دیگری را به همراه ندارد.اساسا زمانیکه مطلبی را به صورت باز در اینترنت انتشار می‌دهید، قید کپی شدن یا نشدن آن‌را باید زد. اما ...می‌توان همین سایت‌ها را تبدیل به تبلیغ کننده‌های رایگان کار خود نمود که در ادامه نحوه انجام آن‌ را در یک برنامه ASP.NET MVC بررسی خواهیم کرد:

 

الف) نیاز است ارائه تصاویر تحت کنترل برنامه باشند.

using System.IO;
using System.Net.Mime;
using System.Web.Mvc;
 
namespace MvcWatermark.Controllers
{
    public class HomeController : Controller
    {
        const int ADay = 86400;
 
        public ActionResult Index()
        {
            return View();
        }
 
        [OutputCache(VaryByParam = "fileName", Duration = ADay)]
        public ActionResult Image(string fileName)
        {
            fileName = Path.GetFileName(fileName); // تمیز سازی امنیتی است
            var rootPath = Server.MapPath("~/App_Data/Images");
            var path = Path.Combine(rootPath, fileName);
            if (!System.IO.File.Exists(path))
            {
                var notFoundImage = "notFound.png";
                path = Path.Combine(rootPath, notFoundImage);
                return File(path, MediaTypeNames.Image.Gif, notFoundImage);
            }
            return File(path, MediaTypeNames.Image.Gif, fileName);
        }
    }
}

Closure چیست؟


3 تیر 1392

C#, Closureاگر برنامه نویس C# باشید حتما به یاد دارید که Anonymous Method ها یا متد های بی نام یکی از ویژگی هایی بود که در نسخه دوم سی شارپ معرفی شد و همینطور در نسخه سوم عبارت های Lambda شکل بهتری به متد های بی نام دادند. مسلما بسیاری از ما کدی یا کد هایی مشابه زیر نوشته ایم:

static void Main(string[] args)
{
    int x = 0;
    Action action = delegate { Console.WriteLine(x); };
    x = 1;
    action();
}

یا به فرم ساده تر:

static void Main(string[] args)
{
    int x = 0;
    Action action = () => Console.WriteLine(x);
    x = 1;
    action();
}

در ابتدا ممکن است فکر کنید عدد صفر نمایش داده می شود، اما با اجرای برنامه خواهید دید جواب 1 است. اما چطور این اتفاق می افتد؟ در واقع سوال این است که متد های بی نام یا عبارات لامبدا چطور هنگام فراخوانی به پارامتر x و حتی مقدار آپدیت شده ی آن دسترسی پیدا می کنند؟

جواب این سوال ها وجود مفهومی است به نام Closure در پس این سینتکس ساده و روان.

بررسی Local Storage - قابلیت جدید HTML5


30 تیر 1391

html5اجازه بدید بدون هیچ مقدمه ای و با یک مثال کوچک بحث را آغاز کنم. فرض کنید فرمی برای ثبت یادداشت در وبسایت خود داریم که از فیلد های نام، ایمیل و متن یادداشت تشکیل شده است، می خواهیم برای کاربری که یکبار نام و ایمیل خود را وارد کرده و یادداشت ثبت کرده است، در دفعات بعد این دو فیلد با همان مقادیر وارد شده به صورت پیش فرض پر شده باشند. چه روشی برای این کار پیشنهاد می کنید؟

مسلما استفاده از کوکی و بازیابی اطلاعات از آن، یا از سمت سرور و هنگام لود صفحه، یا از سمت کلاینت توسط جاوا اسکریپت. اما استفاده از کوکی معایبی هم دارد:

  • کوکی در هر Http Request به سمت سرور ارسال می شود، حتی در صفحاتی که نیازی به استفاده از آن نداریم.
  • کوکی ها فقط می توانند تا 4 کیلوبایت دیتا در خود ذخیره کنند و این حجم با توجه به نسل جدید وب و افزایش قابلیت ها و نیاز های نرم افزار های تحت وب، تا حدودی کم به نظر می رسد.
  • اطلاعات موجود در کوکی در صورتی که از SSL استفاده نشده باشد به صورت Clear ارسال شده و امکان Sniff شدن در بین راه وجود دارد.

نگاهی به ASP.NET MVC و بررسی ساختار آن


8 اردیبهشت 1391

MVC یا Model View Controller معماری بود که مایکروسافت در سال 2009 از آن در پیاده سازی فریم ورکی بر روی بسترASP.NET استفاده کرد. همونطور که می دانید .Net Framework  پلتفرمی برای ساخت انوع نرم افزار ها، از جمله نرم افزار های Desktop، Web، Console و ... می باشد و از زیرساختی خاص وهزاران کلاس پایه برای رفع نیاز های کلی برنامه نویسان تشکیل شده است.

بر روی بستر دات نت، پلتفرم و زیر ساخت دیگری به نام ASP.NET Framework و به منظور تولید نرم افزارهای تحت وب تولید شد و در نهایت، چیزی که عملا ما با آن ها سر و کار داریم، دو فریم ورک WebForm و MVC هستند که مایکروسافت آن ها بر روی  فریم ورک ASP.NET توسعه داد. به طور مثال کلاس های مربوط که Caching، Authentication، Authorization و بسیاری موارد دیگر در Framework ASP.NET قرار دارند و WebForm و MVC از آن ها بهره می گیرند.

کتاب امنیت گوگل (Google Security Book)


29 بهمن 1390

بعد از چند ماه وقفه در فعالیت کار کتابخانه که با مشکلات زیادی روبرو بودیم و کمبود وقت و ترک کردن بعضی از دوستان از تیم گویاآی تی و همچنین بد قولی‌های انجام شده توسط برخی دوستان امروز موفق شدیم از ده کتاب در حال انجام کتاب امنیت گوگل را که توسط تیم خود گوگل نوشته شده و به زبان انگلیسی در سایت گوگل منتشر شده است برای شما آماده کنیم امید است رضایت شما کاربران را جلب کرده باشیم .

اما در این کتاب شما

مطمئنا با مطالعه این کتاب به درک عمیق تر و متفاوتی نسبت به قبل از امنیت دست پیدا خواهید کرد و دید وسیع تری از آن خواهید داشت.گوگل،می داند چه بنویسد تا با ذهن ما و شما سازگار باشد به همین دلیل فکر می کنم کتاب پیش رو،متفاوت ترین کتاب امنیتی خواهد بود که تا به حال مطالعه کرده اید!در پایان از شما عزیزان و صاحب نظران درخواست می کنم تا بعد از مطالعه این کتاب،نسبت به ارسال بازخورد ها،انتقادات و پیشنهادات سازنده خود دریغ نفرمایید و این بنده را در جهت بهبود کیفیت کتاب ها یاری کنید.

 

نگاهی به Combinator ها در Css


17 دی 1390

بعد از مدت ها بلاخره فرصتی پیش اومد تا مجددا مقاله ای بنویسم. این بار قصد دارم با مقاله ای در خصوص CSS اما خارج از دنیای طراحی و ساخت آیتم های مختلف در خدمت شما باشم.

شاید تا به حال کمتر نام Combinator  ها را در CSS شنیده باشید، اما مطمئنا به وفور از برخی از آن ها استفاده کرده اید. در واقع همانطور که از نام Combinator بر می آید، تنها یک ترکیب کننده است، ترکیب کننده ی چند گزینشگر ساده مثل Tag Selector و یا Class Selector که به عنوان تعیین کننده ی ارتباط بین دو آن ها ایفای نقش می کند. به طور کلی Combinator ها به چهار گروه مختلف تقسیم می شوند که در ادامه به بررسی هر کدام خواهیم پرداخت.

String Transitivity - String Interning


29 مهر 1390

csharpیکی از ویژگی های تساوی در ریاضیات، ویژگی تعدی (Transitivity)  می باشد، به عبارتی اگر A=B و B=C باشد، بنابراین A=C نیز خواهد بود. این قانون به صورت کلی در C# یا سایر زبان های برنامه نویسی نیز صدق می کند، اما آیا همیشه و در همه ی موارد اینچنین است؟

به طور مثال کد زیر را در نظر بگیرید:

object obj = "Int32";
string str1 = "Int32";
string str2 = typeof(int).Name;
Console.WriteLine(obj == str1); // true
Console.WriteLine(str1 == str2); // true
Console.WriteLine(obj == str2); // false !?

همانطور که مشاهده می کنید با اینکه سه متغیر دارای مقادیر یکسانی می باشند، اما رابطه ی تعدی در مورد آن ها صدق نمی کند و عبارت سوم مقدار false بر می گرداند. جالبه نه؟

Covariance و Contravariance در C# 4.0


25 مرداد 1390

واریانس یکی از قابلیت هایی است که در C# 4.0 به این زبان اضافه شد که خوب شاید تا به حال به عدم پشتیبانی از آن در نسخه های قبلی C# هم برخورد نکرده باشید. به طور مثال کد زیر را در نظر بگیرید:

IList<string> strings = new List<string>();
IList<object> objects = strings;

در نگاه اول کد بالا صحیح به نطر میاد چون کلاس string از کلاس object  مشتق شده و می توان شی کلاس مشتق شده را به کلاس پایه نسبت داد اما کامپایلر از خط دوم کد خطا می گیرد.

CSS 3.0 را با اینترنت اکسپلورر تجربه کنید


19 تیر 1390
pieطراحی و سازگاری قالب سایت ها با اینترنت اکسپلورر، به خصوص نسخه های 6 و 7 آن، همواره یکی از معضلاتی بوده است که طراحان وب با آن دست و پنجه نرم می کنند، البته ie9 را از این مورد مستثنی کنید، چون تا حد زیادی مشکلات ورژن های قبل در آن رفع شده است. به دلیل استفاده زیاد از نسخه های قبل همچون 6، 7 و 8 و عدم پشتیبانی این نسخه ها از css3، ابزار های متفاوتی برای پیاده سازی خصوصیات ورژن سوم css در ie طراحی شده اند. یکی از این ابزار ها که قصد معرفی آن را دارم، PIE نام دارد.

حذف صفحات تکراری با Canonical Url Tag


22 اردیبهشت 1390
یکی از نکاتی که معمولا در seo بر روی آن تاکید می شود، جلوگیری از ایجاد صفحات تکراری در سایت است. صفحات تکراری صفحاتی هستند که محتوای یکسانی دارند، اما url های متفاوت، و همین url های متفاوت باعث ایندکس شدن چندین صفحه ی یکسان در موتور های جستجو خواهد شد. این صفحه ها معمولا به واسطه ی پارامتر ها در آدرس (query string)، session id و یا وجود www یا عدم وجود آن به وجود می آیند.