مطالب
شروع کار با Apache Cordova در ویژوال استودیو #2
در قسمت اول، با Apache Cordova  آشنا شدیم. در این قست قصد دارم در مورد Phonegap, معایب و مزایای Cordova و روش نصب و راه اندازی آن را بر روی Visual Studio، خدمت شما ارائه دهم. 

توضیح مختصری در مورد  Adobe Phonegap
در حوالی سال 2009 ، phonegap به‌واسطه‌ی استارت آپی بنام Nitobi با هدف ایجاد یک راه حل سورس باز  برای  ساخت اپلیکیشن‌های بومی موبایل با تکنولوژی‌های تحت وب، تولید شد. شرکت Adobe در حوالی سال 2011 ، Notobi را به همرا حق مالکیت phonegap خریداری کرد و هسته‌ی سورس باز آن را با نام Cordova به شرکت Apache اهدا کرد. نسبت بین Cordova و phonegap مانند نسبت بین مرورگر Blink و کروم است. در واقع phonegap ترکیبی‌است از Cordova و یک سری امکانات اضافه‌ی شرکت Adobe. تفاوت اصلی بین Cordova و Phonegap مربوط است به ابزارهای Command-Line و سرویس Build فون گپ است که در مقالات بعدی به آنها خواهیم پرداخت.
بیشتر : اینجا و اینجا

 مزایای استفاده از Cordova:
  • محیط برنامه نویسی قدرتمند
  • هسته اصلی  کد‌های همه اپلیکیشن‌ها  تولید شده شبیه به هم است
  • نیازی به یادگیری زبان‌های مربوط به هر پلتفرم را ندارید
  • کم هزینه و زمان کمتر
  • طراحی رابط گرافیکی سریع و منعطف به کمک HTML5 , CSS3 
  • برنامه نویسی آسان و سریع با javascript , Typescript
  • قابلیت اجرا بر روی چندین پلتفرم مختلف(Android,iOS,Widnows Phone )
  • قابلیت استفاده از فریم‌ورکهای تحت وب مانند Bootstrap , Angular JS, ...
  • قابلیت طراحی پلاگین برای ارتباط با سیستم عامل
  • مناسب برای برای برنامه‌های چت و استفاد از وب سرویس‌ها
  • مناسب برای ساخت بازیهای آنلاین و آفلاین با تکنولوژی‌های تحت وب
  • راحتی کار با آن برای برنامه نویسان تحت وب 

معایب  استفاده از Cordova  :
  • نداشتن ابزار گزارش خطاهای مناسب؛ درنتیجه برطرف کردن خطاها خسته کننده خواهد بود .
  • UI, UX اپلیکیشن‌ها باید به نحوی باشد که کاربر حس کند با نرم‌افزارهای بومی گوشی کار می‌کند.
  • کاهش سرعت اجرایی جزئی نسبت به سایر برنامه‌ها (به دلیل استفاده از WebView)
  • عدم دسترسی مستقیم به سیستم عامل و امکانات آن 

نصب اتوماتیک وابستگی ها
ابزارهایی که ما نیاز داریم:

لازم است تا Visual Studio 2013، با حداقل آپدیت 2 بر روی سیستم شما نصب باشد.

بعد از اتمام دانلود فایل، اقدام به نصب آن نمایید. در این حین، یک سری وابستگی‌های مربوط به خود را دانلود و نصب خواهد کرد. لیست وابستگی ها:
  • Node.js
  • Git CLI
  • Google Chrome
  • Apache Ant
  • Oracle Java JDK 7 (حتما نسخه x86 نصب شود)
  • Android SDK 
  • SQLLite For Windows Runtime
  • Apple iTunes
فایل نصاب، همه‌ی این وابستگی‌ها را به‌غیر از Android SDK، نصب می‌کند. 
در آخر هم سیستم خود را راستارت کنید.

نصب دستی وابستگی‌ها:
اگر به هر دلیلی در نصب خودکار این وابستگی‌ها  توسط نصاب با مشکل بر خورد کردید، می‌توانید تک تک آنها را دانلود کرده و نصب کنید. لینک‌های مورد نظر را هم به همین دلیل قرار دادم. 
  1. node.js را از لینک مقابل دانلود کنید:  اینجا  (پیشنهاد می‌کنیم نسخه‌ی x86 آن را نصب کنید)
  2. Google Chrome را نصب کنید
  3. Git Command Line Tools را نصب کنید و توجه کنید که در هنگام نصب، گزینه مربوط به افزودن Git را به مسیر  Command Prompt  شما، انتخاب کرده باشید.
  4. Apchage Ant را  دانلود  و در مسیری از سیستم خودتان قرار دهید. 
  5. Java JDK 7 x86 را از لینک مشخص شده دانلود کنید و سپس عملیات نصب را انجام دهید.
  6. Android SDK را از آدرس مشحص شده دانلود کنید. پکیچ‌های مورد نیاز، به این SDK افزوده شده است. بعد از دانلود آن را در مسیری از سیستم خود قرار دهید.
  7. Apple iTunes و  SQLite را دانلود و نصب کنید.
  8. اگر از ویندوز 7 استفاده می‌کنید ، WebSocket4Net را از لینک مقابل دانلود کنید ( اینجا ) و سپس  فایل net45\Release\WebSocket4Net.dll  در مسیر زیر کپی کنید:
%ProgramFiles(x86)%\Microsoft Visual Studio 12.0\Common7\IDE\CommonExtensions\Microsoft\WebClient\Diagnostics\ToolWindows 


ویژوال استودیو  پیکربندی‌های مربوط به نرم افزار‌های  thrid-party (سوم شخص/ثالث: نرم افزارهایی که برای دستکاری بر روی سیستم عامل، توسط شرکت‌هایی غیر از شرکت‌های تولید کننده سیستم عامل تولید می‌شوند) را که شما نصب کرده‌اید، تشخیص می‌دهد و مسیر‌های نصب آنها را درون متغیر‌های محیطی (environment variables)  به شکل زیر نگه می‌دارد:
ADT_HOME :به مسیر نصب اندروید اشاره می‌کند
ANT_HOME: به فولدری که Apache Ant در آن قرار دارد اشاره می‌کند
JAVA_HOME: به مسیر نصب جاوا اشاره می‌کند
GIT_HOME: به مسیر نصب GIT اشاره می‌کند.
دقت کنید باید نام‌های متغیر‌ها، دقیقا به همین نام‌ها باشند.
برای تنظیم این متغیر‌ها، به مسیر Control Panel\System and Security\System وارد شده و گزینه‌ی Advanced System Setting را انتخاب کنید. سپس در پنجره‌ی باز شده گزینه‌ی Environment Variables را انتخاب کنید و در قست system variables، این 4 متغیری که ذکر شد را ایجاد کنید. سپس نیاز است این مسیر‌ها را به system path اضافه کنید. برای این کار از همان قسمت system variables متغییر path را انتخاب کرده و گزینه‌ی ویرایش را بزنید و ابتدا محتویات آن را در یک فایل notepad کپی کنید و مسیر‌های زیر را به اول آن اضافه کنید :
%GIT_HOME%\cmd;C:\Program Files (x86)\nodejs\;%JAVA_HOME%\bin;%ANT_HOME%\bin;
%ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools; C:\ProgramData\Oracle\Java\javapath;
 دقت کنید که مسیر‌های ذکر شده فقط یکبار در کل فایل وجود داشته باشند و سپس کل محتوای فایل را کپی کرده و در قسمت مربوط به path پیست کنید و با کلیک بر روی دکمه‌های OK کار را به اتمام رسانید.












نکته تکمیلی
نیازمندی Apache Cordova CTP3.1   :
یکی از سیستم عامل‌های مقابل: Windows 7, Windows 8, Windows 8.1, or Windows Server 2012 R2. 
آپدیت 4 مربوط به ویژوال استدیو (دقت کنید قبل از نصب آپدیت 4 ویژوال استدیو باید نسخه قبلی  Cordova CTP  را حذف کنید(uninstall) )
امکان توسعه اپلیکیشن‌های windows phone , windows برای کاربران ویندوز 7 وجود ندارد .


در مقاله‌ی بعدی یک پروژه جدید خواهیم ساخت .
منبع مفید برای نصب و راه اندازی :اینجا
ادامه دارد...
نظرات مطالب
زیر نویس فارسی ویدیوهای ساخت برنامه‌های مترو توسط سی شارپ و XAML - قسمت پنجم
حالت auto-start مربوط به ASP.NET 4 و البته IIS7 به بعد (^)، مقدار همیشه در حال اجرا هم دارد؛ اما این مورد از تنظیمات Application pool تاثیر می‌پذیره و پس از recycle شدن برنامه مجددا برنامه رو اجرا می‌کنه به صورت خودکار. اما برنامه بر اساس تنظیمات Application pool، پس از یک مدت بیکاری حتما خاتمه خواهد یافت.
در مورد جزئیات کاری Application pool در IIS مطالبی در سایت هست : (^) و (^)
نظرات مطالب
Claim Based Identity
- بعد از لاگین، claims و خیلی موارد دیگر به کوکی(های) دومین جاری شما اضافه می‌شوند. اگر تعداد زیادی claim را تعریف کرده باشید یا اطلاعات زیادی را در کوکی ذخیره کنید، پیام طولانی بودن هدر یا تصویر فوق (request too long) را از طرف برنامه یا وب سرور دریافت خواهید کرد؛ چون جمع تمام این کوکی‌ها به صورت خودکار، با هر درخواست، به سمت سرور ارسال می‌شوند و مشکل بیش از اندازه طولانی بودن درخواست را ایجاد می‌کنند.
- برای اینکه با مرورگر فعلی مجددا بتوانید با سایت کار کنید، فقط یک راه حل را دارید: به developer tools -> application -> cookies مرورگر مراجعه کرده و تمام کوکی‌های دومین و آدرس جاری را پاک کنید. البته این راه حل موقت است و اگر اندازه‌ی کوکی‌ها را مدیریت نکنید، دوباره تکرار می‌شود.
- در ASP.NET Identity Core راه حلی برای کاهش اندازه‌ی کوکی‌های برنامه و انتقال آن‌ها به بانک اطلاعاتی با یک ITicketStore سفارشی وجود دارد که در قسمت «مدیریت اندازه‌ی حجم کوکی‌های ASP.NET Core Identity» با ارائه‌ی کدهای کامل آن بررسی شده‌است.
اشتراک‌ها
پیاده سازی RSS Reader در ASP.NET MVC
 In this post I am going to explain you how we can create a basic RSS Reader with the help of Linq-To-Xml and ASP.NET MVC Razor. 
پیاده سازی RSS Reader در ASP.NET MVC
نظرات مطالب
ارتقاء به ASP.NET Core 1.0 - قسمت 8 - فعال سازی ASP.NET MVC
با سلام. بعد از فعال کردن mvc ، خطای زیر همواره دریافت می‌شود:
 Error while building type Microsoft.AspNetCore.Routing.DefaultInlineConstraintResolver
با این پیغام برای inner exception:
 An item with the same key has already been added 
محتوای startup هم به این صورت است:
startup.txt
پاسخ به بازخورد‌های پروژه‌ها
خروج کاربر
سلام؛ من یک پروژه asp.net mvc with Identity انجام داده ام و به این مشکل برخوردم. کاربر وقتی بر روی دکمه LogOff کلیک میکنه اولا خارج نمیشود و بعد به صفحه لاگین بازگشت داده میشود. من قطعه کد شما را هم اضافه کردم اما همچنان مشکل وجود دارد می‌شود لطف کنید و راهنمایی ام کنید.
پاسخ به بازخورد‌های پروژه‌ها
ایجاد یک گزارش تمام صفحه از چارت بدون رکورد
لطفا به این دو مطلب مراجعه نمائید:
- قرار دادن جدول و چارت با هم : «قرار دادن نمودارهای MS Chart در گزارشات PdfReport»
- فقط قرار دادن چارت در فایل PDF :
 «Microsoft Chart Controls to PDF with iTextSharp and ASP.NET MVC »

نظرات مطالب
اعتبارسنجی مبتنی بر JWT در ASP.NET Core 2.0 بدون استفاده از سیستم Identity
ممنون؛ خروجی که توی برنامه نشون میده به این صورت است:
Microsoft.AspNetCore.Hosting.Internal.WebHost:Information: Request starting HTTP/1.1 POST http://localhost:45225/api/account/login application/json; charset=utf-8 
Microsoft.AspNetCore.Hosting.Internal.WebHost:Information: Request starting HTTP/1.1 POST http://localhost:45225/api/account/login application/json; charset=utf-8 
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker:Information: Route matched with {action = "Login", controller = "Account", area = ""}. Executing action DrugExchange.Controllers.AccountController.Login (DrugExchange)
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker:Information: Route matched with {action = "Login", controller = "Account", area = ""}. Executing action DrugExchange.Controllers.AccountController.Login (DrugExchange)
Microsoft.EntityFrameworkCore.Infrastructure:Information: Entity Framework Core 2.1.1-rtm-30846 initialized 'ApplicationDbContext' using provider 'Microsoft.EntityFrameworkCore.SqlServer' with options: MaxPoolSize=128 CommandTimeout=180 
Microsoft.EntityFrameworkCore.Infrastructure:Information: Entity Framework Core 2.1.1-rtm-30846 initialized 'ApplicationDbContext' using provider 'Microsoft.EntityFrameworkCore.SqlServer' with options: MaxPoolSize=128 CommandTimeout=180 
Microsoft.AspNetCore.Mvc.Infrastructure.ObjectResultExecutor:Information: Executing ObjectResult, writing value of type 'DrugExchange.Common.ApiError'.
Microsoft.AspNetCore.Mvc.Infrastructure.ObjectResultExecutor:Information: Executing ObjectResult, writing value of type 'DrugExchange.Common.ApiError'.
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker:Information: Executed action DrugExchange.Controllers.AccountController.Login (DrugExchange) in 42.4741ms
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker:Information: Executed action DrugExchange.Controllers.AccountController.Login (DrugExchange) in 42.4741ms
Microsoft.AspNetCore.Hosting.Internal.WebHost:Information: Request finished in 62.5345ms 500 application/ion+json; charset=utf-8
Microsoft.AspNetCore.Hosting.Internal.WebHost:Information: Request finished in 62.5345ms 500 application/ion+json; charset=utf-8
Microsoft.AspNetCore.Server.Kestrel:Information: Connection id "0HLFGFSKPQEQC", Request id "0HLFGFSKPQEQC:00000001": the application completed without reading the entire request body.
Microsoft.AspNetCore.Server.Kestrel:Information: Connection id "0HLFGFSKPQEQC", Request id "0HLFGFSKPQEQC:00000001": the application completed without reading the entire request body.
البته اگر نیاز می‌بینید تا کد استارت اپ را هم بفرستم شاید بتونه کمک کنه.