نظرات مطالب
هزینه استفاده از دات نت فریم ورک چقدر است؟
علاوه بر مطالبی که دوستان در مورد اشتراک MSDN و فواید آن گفتند ... برنامه‌ی دیگری به نام bizspark از طرف مایکروسافت برای شرکت‌های تازه تاسیس و کمک به آن‌ها وجود دارد. به این ترتیب به مدت سه سال مشترک MSDN خواهید شد و تنها 100 دلار در پایان سه سال باید پرداخت کنید. در طی این مدت دسترسی قانونی به تمام محصولات مهم مایکروسافت را دارید (VS2010, Office2010, MS Axapta, SQL SERVER, SERVER 2008, Windows 7-8 و ...)
http://www.microsoft.com/bizspark/
نظرات مطالب
هزینه استفاده از دات نت فریم ورک چقدر است؟
علاوه بر مطالبی که دوستان در مورد اشتراک MSDN و فواید آن گفتند ... برنامه‌ی دیگری به نام bizspark از طرف مایکروسافت برای شرکت‌های تازه تاسیس و کمک به آن‌ها وجود دارد. به این ترتیب به مدت سه سال مشترک MSDN خواهید شد و تنها 100 دلار در پایان سه سال باید پرداخت کنید. در طی این مدت دسترسی قانونی به تمام محصولات مهم مایکروسافت را دارید (VS2010, Office2010, MS Axapta, SQL SERVER, SERVER 2008, Windows 7-8 و ...)
http://www.microsoft.com/bizspark/
بازخوردهای پروژه‌ها
ادامه آموزش MVVM در صورت امکان با MVVM Light
با توجه به اهمیت روزافزون مباحثی مثل UnitTest، قابلیت نگهداری برنامه، جداسازی منطق برنامه از UI  و ... باید توجه بیشتری به مباحثی مانند MVVM کرد.
در این سایت حدود 15 مطلب مفید درباره MVVM موجود می‌باشد ولی به نظر بنده هنوز امکان ادامه این سری آموزشی، با استفاده از یکی از Framework‌های موجود مانند MVVM Light وجود دارد و میتوان بیشتر به مباحثی مانند بازکردن پنجره جدید، EventToCommand و ... که اکثر کاربران با آن مشکل دارند پرداخت.
ممنون.
بازخوردهای پروژه‌ها
اضافه کردن فیلد به مدل ذخیره سازی
به نظرم برای ثبت اطلاعات پرداخت در بانک اطلاعاتی باید همانند فایل XML باشد
فیلد Type و فیلد Status باید در بانک اطلاعاتی ذخیره شوند.
الان فیدی به نام Status هست که دارای چهار مقدار
        Requested = 0,
        Verified = 1,
        Refunded = 2,
        Failed = 3
که باید داری 3 مقدار اول باشد با نام Type
و فیلد Status دارای 2 مقدار Success یا Failed باشد کی می‌توان آن را به نوع bool تغییر داد
* مقدار Failed به چه منظوری هست؟
نظرات نظرسنجی‌ها
آیا از برگزاری دوره‌های دات نت غیر رایگان آنلاین توسط نویسندگان سایت در سال آینده پشتیبانی می‌کنید؟
کاملا با این قضیه موافقم ما که انتظار داریم کپی رایت رعایت بشه و تلاش و زحمت یک برنامه نویس دیده بشه باید از خودمون شروع کنیم و بهای چیزهایی که یادم می‌گیریم رو پرداخت کنیم.
نحوه اجرای این قضیه چه جوریه؟
  • کل سایت با حق عضویت ثابت در دوره
  • بخش ویژه برای آموزش‌های غیر رایگان
  • هزینه بر اساس هر آموزش 
  • ...
نظرات مطالب
ارتقاء به ASP.NET Core 1.0 - قسمت 7 - کار با فایل‌های config
یک نکته‌ی تکمیلی:  ارتقاء به ASP.NET Core 2.0 

بر اساس مستندات دات نت Core 2.0،  در فایل Startup.cs، الزاما نیازی به تنظیمات ذیل
public Startup(IHostingEnvironment env)
        {
            var builder = new ConfigurationBuilder()
                .SetBasePath(env.ContentRootPath)
                .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
                .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
                .AddEnvironmentVariables();
            Configuration = builder.Build();
        }
نیست و با جایگزین کردن این قطعه کد با
public IConfiguration Configuration { get; }

public Startup(IConfiguration configuration)
{
     Configuration = configuration;
}
و سپس انجام این تغییرات
public static void Main(string[] args)
        {
            BuildWebHost(args).Run();
        }

        public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .Build();
در فایل Program.cs موجب فراخوانی کلیه تنظیمات پیش فرض خواهد شد.
در واقع متد CreateDefaultBuilder این کار را انجام می‌دهد. البته همچنان امکان تنظیمات سفارشی نیز موجود است.
public static IWebHost BuildWebHost(string[] args)
{
  return WebHost.CreateDefaultBuilder()
    .ConfigureAppConfiguration((ctx, cfg) =>
    {
      cfg.SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("config.json", true) // require the json file!
        .AddEnvironmentVariables();
    })
    .ConfigureLogging((ctx, logging) => { }) // No logging
    .UseStartup<Startup>()
    .Build();
}

لازم به ذکر است سرویس IConfiguration از ابتدا در سیستم ثبت شده است و جهت دسترسی به تنظیمات میتوان در قسمت‌های مختلف برنامه آن را تزریق نمود.
نظرات مطالب
ساخت بسته‌های نیوگت مخصوص NET Core.
به روز رسانی
با حذف فایل project.json در VS 2017، اکنون با کلیک راست بر روی گروه نام پروژه (فایل csproj)، گزینه‌ی Edit آن ظاهر شده و مداخل ذکر شده‌ی در مطلب فوق، چنین تعاریفی را پیدا می‌کنند: 
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <Description>desc.</Description>
    <VersionPrefix>1.0.0</VersionPrefix>
    <Authors>name</Authors>
    <TargetFramework>netstandard1.6</TargetFramework>
    <GenerateDocumentationFile>true</GenerateDocumentationFile>
    <AssemblyName>name</AssemblyName>
    <PackageId>name</PackageId>
    <PackageTags>MVC;aspnetcore</PackageTags>
    <PackageProjectUrl>https://github.com/proj</PackageProjectUrl>
    <PackageLicenseUrl>https://github.com/proj/blob/master/LICENSE.md</PackageLicenseUrl>
    <PackageTargetFallback>$(PackageTargetFallback);dnxcore50</PackageTargetFallback>
    <GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
    <GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
    <GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Mvc.Core" Version="1.1.2" />
  </ItemGroup>
  <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
    <PlatformTarget>anycpu</PlatformTarget>
  </PropertyGroup>
  <Target Name="PostcompileScript" AfterTargets="Build">
    <Exec Command="dotnet pack --no-build --configuration $(Configuration)" />
  </Target>
</Project>
برای تولید مستندات و کنترل اخطارهای آن:
  <PropertyGroup>
    <NoWarn>$(NoWarn);1591</NoWarn>
    <GenerateDocumentationFile>true</GenerateDocumentationFile>
  </PropertyGroup>
و اگر خواستید دات نت 4.6 یا فریم ورک‌های دیگر را نیز پشتیبانی کنید، ItemGroupهای آن‌ها به این صورت اضافه می‌شوند:
  <PropertyGroup>
    <TargetFrameworks>net46;netstandard1.3</TargetFrameworks>
  </PropertyGroup>

  <ItemGroup Condition=" '$(TargetFramework)' == 'net46' ">
    <Reference Include="System" />
    <Reference Include="System.Core" />
  </ItemGroup>

  <ItemGroup Condition=" '$(TargetFramework)' == 'netstandard1.3' ">
    <PackageReference Include="System.Data.Common" Version="4.3.0" />
  </ItemGroup>
نظرات مطالب
استفاده از Kendo UI TreeView به همراه یک منبع داده راه دور
مطابق مستندات KendoUI، برای ایجاد tree view از دو روش می‌توانیم استفاده کنیم:
  • تعریف ساختار درختی به صورت استاتیک HTML
  • با استفاده از یک منبع راه دور 
بنده از حالت اول استفاده می‌کنم، یعنی یک ساختار ul li را در ویو تولید میکنم و در نهایت نتیجه به صورت زیر خواهد بود:
<ul id="treeview">
    <li>
Parent 1

        <ul>
            <li>Child</li>
            <li>Child</li>
            <li>Child</li>
        </ul>
    </li>
    <li>Parent 2</li>
    <li>
Parent 3

        <ul>
            <li>Child</li>
            <li>Child</li>
        </ul>
    </li>
    <li>Parent 4</li>
    <li>Parent 5</li>
    <ul>

 برای فعال‌سازی tree view نیز:
<link href="~/Content/kendo.common.min.css" rel="stylesheet"/>
<link href="~/Content/kendo.default.min.css" rel="stylesheet"/>
<link href="~/Content/kendo.dataviz.min.css" rel="stylesheet" />
<link href="~/Content/kendo.dataviz.default.min.css" rel="stylesheet"/>
<link href="~/Content/kendo.rtl.min.css" rel="stylesheet"/>
<script src="~/Scripts/kendo.all.min.js"></script>
<script type="text/javascript">
        $(document).ready(function() {
            $("#treeView").kendoTreeView({
                checkboxes: {
                    checkChildren: true
                }
            });
        });

</script>
ساختار tree view به خوبی نمایش داده می‌شود، اما هیچکدام از CheckBoxها نمایش داده نمی‌شوند. به نظر شما مشکل از کجا می‌تواند باشد.
با تشکر
مطالب
ارسال پیام های تبلیغاتی به Telegram با استفاده از #C
ارسال پیام‌های تبلیغاتی از طریق نرم افزارهایی مثل Viber , Telegram  این روزها بازار داغی دارند. این نرم افزارها به همراه خود Api هایی را نیز جهت توسعه دهندگان ارائه می‌دهند. Telagram هم که به یکی از محبوب‌ترین نرم افزارها در ایران تبدیل شده‌است. اگر به مستندات Telegram مراجعه کنید، می‌توانید نحوه‌ی استفاده را مشاهده کنید. ولی روش‌های دیگری هم هستند که بسیار ساده‌تر هستند.
اگر به سایت notificatio.me مراجعه کنید، در این زمینه Api ایی را ارائه می‌دهد که به راحتی می‌توانید از آن برای ارسال پیام استفاده کنید. البته تا ارسال 100 پیام آن رایگان هست.
ابتدا یک پروژه‌ی از نوع Windows و یا console را ایجاد کنید.
سپس  در خط فرمان package manager console دستور زیر را کپی کنید:
Install-Package Notificatio.TelegramClient
پس از نصب شدن بسته‌ی Nuget، یک دکمه روی فرم قرار دهید و در رویداد OnClick آن دستورات زیر را تایپ کنید:
var api = NotificatioApi.Initialize(" Your Hash_Key");
            api.SendMessage("Phone Number", "this is a test Message");
سپس در سایت notificatio.me ثبت نام کنید و پس از ثبت نام، به پروفایلتان رفته و Api Hash ایی را که در آنجا قابل مشاهده هست، کپی و به جای Your Hash_Key قرار دهید. برای شماره تلفن هم فقط از اعداد استفاده کنید.
در آخر برنامه را اجرا کنید و بر روی دکمه، کلیک کنید. پس از اتمام کار ارسال، برای مشاهده‌ی تعداد پیام‌های ارسال شده و یا آمار ماهانه، در سایت فوق میتوانید به Dashboard آن مراجعه کنید و تعداد و آمار پیام‌های ارسالی را ببینید.

 البته با استفاده از jQuery هم میتوانید کار ارسال پیام را انجام دهید:
$.ajax({
    url: "http://www.api.notificatio.me/v1/user/message",
    type: "POST",
    dataType: "json",
    crossDomaint: true,
    data: {
        phoneNumber: "your_phone_number",
        apiHash: "your_api_hash",
        message: "your_message"
    },
    cache: false,
    success: function() {
        // Your code to handle success message sent
    },
    error: function(error) {
        // Your code to handle error
    }
});
مطالب
SFDown

چند روز قبل جهت دریافت فایل‌های تنظیم سطح دوم کش NHibernate به سایت سورس فورج مراجعه کردم و ... آه از نهادم برخاست! نه از این جهت که این سایت مدت مدیدی است ما رو تحریم کرده، به این دلیل که سورس فورج حتی با IP غیر ایرانی تونسته بود موقعیت من رو شناسایی کنه. شبیه به همین مورد مدتی است توسط گوگل نیز بکارگرفته میشه. به نظر میرسه این وسط جایی نشتی وجود داره. برای مثال در فایرفاکس امکان گزارش Geo Location به صورت پیش فرض فعال است. هر چند در مستندات آن صراحتا عنوان شده که ... خیر ... ما این اطلاعات را بدون تائید شما بروز نمی‌دهیم؛ ولی سؤال اینجا است که چطور تونستند از روی IP غیرایرانی، موقعیت من رو تشخیص دهند؟!
غیر فعال کردن این مورد هم ساده است. مطابق تصویر زیر عمل کنید:



به عبارتی در نوار آدرس فایرفاکس عبارت about:config را تایپ کرده، سپس عبارت geo.enabled را یافته و غیرفعال کنید. اکنون نیاز است یکبار مرورگر را بسته و باز کنید.
و ... IP ایی که سوخت ... تا یکی دو هفته عمل نخواهند کرد و بعد از لیست سیاه پاک خواهد شد.

برای رفع این نقیصه و ساده‌تر کردن دریافت فایل‌ها از سورج فورج، برنامه‌ی کوچکی را تهیه کرده‌ام که با گرفتن آدرس یک پروژه سورس فورج، لینک مستقیم قابل دریافت فایل‌های آن‌را در اختیار شما قرار می‌دهد. این برنامه بر اساس Mirror های سورس فورج عمل می‌کند و به صورت خودکار تمام آن‌ها را بررسی کرده و مورد قابل استفاده را گزارش خواهد داد. یا می‌توانید توسط خود برنامه فایل نهایی را دریافت کنید یا امکان کپی کردن یا ذخیره کردن لینک‌های مستقیم نهایی یافت شده، در برنامه پیش بینی شده است (جهت دریافت توسط برنامه download manager مورد علاقه شما).