نظرات مطالب
Angular CLI - قسمت پنجم - ساخت و توزیع برنامه
یک نکته‌ی تکمیلی در مورد «استخراج فایل تنظیمات webpack از Angular CLI »
در این حالت اگر علاقمند به آشنایی با جزئیات این فایل و در حقیقت پشت صحنه‌ی Angular CLI بودید، می‌توانید به سری « Web Performance Optimization with webpack » مراجعه کنید.
نظرات مطالب
مدیریت اعمال آغازین در برنامه‌های Angular
یک نکته‌ی تکمیلی
فایل assets/config.json که در اینجا بارگذاری می‌شود، در پوشه‌ی src\assets\config.json یک برنامه‌ی مبتنی بر Angular CLI قرار می‌گیرد و همچنین باید در فایل angular-cli.json. به نحو ذیل ذکر شود:
{  
  "apps": [
    {
 //...
      "assets": [
        "assets",
        "favicon.ico",
        "config.json"
      ],
 //...
}
یک مثال کامل
نظرات مطالب
تفاوت AngularJS با KnockoutJS
مقایسه از این قبیل زیاد است  
اگر نگاهی به جامعه کاربری استفاده کننده کنیم به طور مثال در Stackoverflow با تگ Angular حدود 25 هزار سوال پرسیده شده در حالی که با تگ Backbone حدود 14 هزار سوال پرسیده شده.
Angular امکانات کاملی برای توسعه‌ی SPA در بر دارد.
مطالب
تفاوت بین Throw و Throw exception در #C

یکی از سؤالاتی که ممکن است در مصاحبه‌ها با آن روبرو شوید، عنوان این مطلب است. در این مقاله قصد داریم تفاوت بین این دو را بررسی کنیم.

در علم کامپیوتر، یک call stack، یک ساختار داده‌ای پشته می‌باشد که اطلاعات جزئی را راجع به زیرروال‌های فعال یک برنامه، ذخیره می‌کند. این نوع پشته با اسامی مختلفی از جمله Execution Stack (ES)، Program Stack (PS)، Control Stack، Runtime Stack یا Machine Stack شناخته می‌شود و یا اینکه به صورت کلی به آن The Stack یا همان پشته هم می‌گویند. با استفاده از صفحه Call Stack می­توانیم توابع و پروسیجرهایی را که فراخوانی شده‌اند، ببینیم. Call Stack به ما می‌گوید که کدام متدها و توابع، با چه ترتیبی اجرا شده‌اند. Call Stack یک راه بسیار خوب، برای فهم درست نحوه‌ی اجرای یک برنامه است. با رهگیری یا Track کردن Call Stack می­توانیم بفهمیم که مکانیزم کار داخلی برنامه چگونه است و برای بهتر رفع کردن مشکلات، از آن استفاده کنیم. در سی شارپ، Stack Trace یک پشته‌ی اجرایی یا Execution Stack است که تمامی متدهای درحال اجرا را رهگیری (Track) می‌کند. Stack Trace راهی است که با استفاده از آن می‌توانیم  Call Stack را بررسی کنیم، تا شماره خط متدی را که Exception درآن رخ داده است، ببینیم. از این به بعد برای سادگی مطلب، Stack Trace را به صورت ST بیان می‌کنیم. برای دسترسی به ST از فضای نام System.Diagnostics مانند زیر استفاده می‌کنیم.

System.Diagnostics.StackTrace myTrack = new System.Diagnostics.StackTrace();

و یا برای مشاهده‌ی آن در کنسول از کد زیر استفاده میکنیم:

static void Main(string[] args)
{
    Console.WriteLine("Stack Trace: {0}", Environment.StackTrace);
}

نتیجه:

Stack Trace:at System.Environment.get_StackTrace()
 at DiffThrowAndThrowException.Program.Main(String[] args) in Program.cs:line 9


استفاده از ST در Try Catch :

static void Main(string[] args)
{
  try
  {
     throw new Exception();
  }
  catch (Exception ex)
  {
     Console.WriteLine("Stack Trace: {0}", Environment.StackTrace);
  }
}

نتیجه:

Stack Trace:at System.Environment.get_StackTrace()
 at DiffThrowAndThrowException.Program.Main(String[] args) in Program.cs:line 11


حالا که مفهوم Stack Trace و نحوه کار و نمایش آن را بررسی کردیم، به راحتی می‌توان تفاوت بین Throw و Throw Exception را درک کرد. به طور کلی می‌توان اینطور گفت، در حالتیکه در داخل بلاک Catch، از Throw استفاده کنیم، این کار باعث می‌شود استثنائی که در اینجا رخ داده، به ابتدای ST افزوده شده و در واقع سلسله مراتب اجرای برنامه تا جایی که Throw نوشته شده، در ST نگهداری شود. اما در صورتیکه به جای Throw از Throw Exception استفاده کنیم، اتفاقی که رخ می‌دهد این است که ST تا اینجای کار که throw exception را استفاده می‌کنیم، نگهداری میشود و اطلاعات متدهایی که بعد از throw exception اجرا شده‌اند، از آن حذف می‌شود. در نهایت در این حالت ST شامل اطلاعات متدهای اجرا شده در فرآیند جاری، از ابتدا تا رسیدن به throw exception می‌باشد.

در زیر، نمونه کدی را برای استفاده از Throw، می‌بینید:

    class Program
    {
        static void Main(string[] args)
        {
            FirstExceptionMethod firstException = new FirstExceptionMethod();
            try
            {
                firstException.Method1();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.StackTrace);
            }
        }
    }
    class FirstExceptionMethod
    {
        public void Method1()
        {
            try
            {
                SecondExceptionMethod secondException = new SecondExceptionMethod();
                secondException.Method2();
            }
            catch (Exception ex)
            {
                throw;
            }
        }
    }
    class SecondExceptionMethod
    {
        public void Method2()
        {
            try
            {
                ThrowExMethod();

            }
            catch (Exception ex)
            {
                throw;
            }
        }
        public void ThrowExMethod()
        {
            throw new Exception();
        }
    }  


نتیجه:

at DiffThrowAndThrowException.SecondExceptionMethod.ThrowExMethod() in Program.cs:line 51
   at DiffThrowAndThrowException.SecondExceptionMethod.Method2() in Program.cs:line 41
   at DiffThrowAndThrowException.FirstExceptionMethod.Method1() in Program.cs:line 27
   at DiffThrowAndThrowException.Program.Main(String[] args) in Program.cs:line 12  

همانطور که می‌بینید اطلاعات متدهایی که در این فرآیند اجرا شده‌اند، در داخل Stack Trace رهگیری (track) شده‌اند.


این دفعه برای نشان دادن تفاوت محتویات ST، کدهای Method1 را به شکل زیر تغییر میدهیم که در بخش catch آن، از throw exception استفاده کرده‌ایم:

public void Method1()
        {
            try
            {
                SecondExceptionMethod secondException = new SecondExceptionMethod();
                secondException.Method2();
            }
            catch (Exception ex)
            {
                throw new Exception("Some Text ...");
            }
        }

نتیجه:

   at DiffThrowAndThrowException.FirstExceptionMethod.Method1() in Program.cs:line 31
   at DiffThrowAndThrowException.Program.Main(String[] args) in Program.cs:line 12

در اینجا اطلاعات متدهای برنامه از شروع فرآیند تا جائیکه از throw exception استفاده کرده، در ST نوشته می‌شود.

با دیدن خروجی‌های بالا می‌توان دریافت که استفاده از throw exception بجای throw باعث می‌شود تا اطلاعات کمتری از فرآیند اجرا شده در ST ذخیره شود و در واقع رهگیری متدهای فرآیند از ابتدا تا جائیکه throw exception استفاده می‌شود، پیش میرود و بعد از آن اطلاعاتی را ثبت نمی‌کند.

اشتراک‌ها
سری 10 قسمتی توسعه‌ی برنامه‌های React با TypeScript از JetBrains

ReactJS is wildly popular and thus wildly supported. TypeScript is increasingly popular, and thus increasingly supported.

The two together? Not as much. Given that they both change quickly, it's hard to find accurate learning materials.

React+TypeScript, with JetBrains IDEs? That three-part combination is the topic of this series. We'll show a little about a lot. Meaning, the key steps to getting productive, in the IDE, for React projects using TypeScript. Along the way, we'll show test-driven development and emphasize tips and tricks in the IDE.

Other videos from this series:
1. Project Setup: https://youtu.be/wm8WdAB64gw
2. Project Cleanup: https://youtu.be/b0KrB31hN5k
3. Testing: https://youtu.be/Y_TGIsFnvo4
4. Debugging Node.js: https://youtu.be/r1kwXZnO8gw
5. Debugging in Chrome: https://youtu.be/dvmZi_DWu9I
6. TSX and ES6: https://youtu.be/JXrZDUzkc2Q
7. Class Props: https://youtu.be/HYmoeUF9ZH0
8. Class State: https://youtu.be/21-VMTmiV8E
9. Rich Events and Testing: https://youtu.be/OO7OmA5UlQM
10. Presentation Components: https://youtu.be/SnCGW6JUo4E 

سری 10 قسمتی توسعه‌ی برنامه‌های React با TypeScript از JetBrains
مطالب
ساختن code snippet ( قطعه کد ) در ویژوال استودیو 2010
ویژوال استودیو به توسعه دهندگان این امکان را می‌دهد تا کدهایی را که تکراری بوده و به  دفعات در متن برنامه مورد استفاده هستند به شکل یک قطعه کد آماده (در صورت نیاز با مقادیر پیش فرض ) ذخیره کنند ، سپس در مواقع نیاز بدون اینکه مجبور باشند آن را دوباره و دوباره بنویسند ، تنها با تایپ کردن نام قطعه کد ذخیره شده  و دو بار فشردن  کلید Tab ، کد  تعریف شده توسط ویژوال استودیو  در محل تعیین شده اضافه می‌گردد. به این  قطعه کدهای آماده code snippet گفته می‌شود .
خود ویژوال استودیو تعدادی code snippet آماده  دارد که آشنایی با آنها می‌تواند سرعت کدنویسی را افزایش دهد . برای دیدن لیست کامل و مدیریت آنها به مسیر

Tools -> Code Snippets Manager (Ctrl+K,Ctrl+B)
بروید .

در ویژوال استودیو 2010 دو نوع snippet وجود دارد :

 1- Expansion snippets : که در محل کرسر (Cursor) اضافه می‌شوند . مثل cw و enum که به ترتیب دستور writeLine و ساختار یک enum را ایجاد می‌کنند .

 2- SurroundsWith snippets : که  می‌توانند یک تکه کد انتخاب شده را در بر بگیرند مثل for و یا do که کد انتخاب شده را در یک حلقه for و do-while محصور می‌کنند  .

نکته ای که باید توجه داشت این است که یک snippet می‌تواند از هر دو نوع باشد . برای مثال  for و do و یا if ، در صورتی که  کدی انتخاب شده باشد آن را محصور می‌کنند و گرنه  ساختار خالی مرتبط را در محل cursor اضافه می‌کنند .

همانطور که در ابتدا هم ذکر شد ، علاوه بر snippet‌های آماده‌ی موجود ، توسعه دهنده می‌تواند قطعه کدهایی را خود ایجاد کرده و مورد استفاده قرار دهد .

در اینجا یک expansion snippet  خواهیم ساخت تا  کار اضافه کردن بلاک try-catch-finally  را برای ما انجام دهد .

- ابتدا یک فایل xml به پروژه اضافه می‌کنیم و آنرا TryCatchFinally.snippet می‌نامیم . توجه کنید که نام فایل باید به .snippet ختم شود .

- فایل را باز  و درون آن راست کلیک کرده و گزینه Insert snippet > Snippet را انتخاب می‌کنیم . با اینکار یک قالب پایه snippet ( که یک ساختار xml ) است به فایل اضافه می‌شود .  هر فایل snippet از دو بخش اصلی header و  snippet تشکیل شده که بخش header اطلاعاتی کلی درباره قطعه کد را نگهداری می‌کند و بخش snippet مربوط به تعریف محتوای قطعه کد است .

<codesnippet format="1.0.0" xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
  <header>
    <title>title</title>
    <author>author</author>
    <shortcut>shortcut</shortcut>
    <description>description</description>
    <snippettypes>
      <snippettype>SurroundsWith</snippettype>
      <snippettype>Expansion</snippettype>
    </snippettypes>
  </header>
  <snippet>
    <declarations>
      <literal>
        <id>name</id>
        <default>value</default>
      </literal>
    </declarations>
    <code language="XML">
      <!--[CDATA[<test-->
      <name>$name$</name>
      $selected$ $end$]]>
    </code>
  </snippet>
</codesnippet>
 

- قالب پیش فرض شامل هر دو نوع snippet است .


<codesnippet format="1.0.0" xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
  <header>
...
    <snippettypes>
      <snippettype>SurroundsWith</snippettype>
      <snippettype>Expansion</snippettype>
    </snippettypes>
  </header>
...
</codesnippet>

از آنجا که قصد داریم یک Expansion snippet بسازیم پس تگ SurroundsWith را حذف می‌کنیم . 


    <snippettypes>
      <snippettype>Expansion</snippettype>
    </snippettypes>

- در بخش header مقدار تگ Title را به “Try Catch Finally”و  مقدار تگ Shortcut را به “trycf” و Description را به “Adds a try-catch-finally block ” تغییر می‌دهیم . Title عنوان snippet است و وجود آن ضروری است . اضافه کردن shortcut  اختیاری است  و به عنوان یک متن میانبر برای اضافه کردن snippet استفاده می‌شود .


    <Header>
      <Title>Try Catch Finally</Title>
      <Author>mohsen.d</Author>
      <Shortcut>trycf</Shortcut>
      <Description>Adds a try-catch-finally block</Description>

- تگ Literal برای تعریف جایگزین برای  بخشی از کد  درون snippet  که احتمال دارد پس از اضافه شدن ، توسط  برنامه نویس و یا در صورت استفاده از  function توسط خود ویژوال استودیو تغییر کند استفاده می‌شود . در قطعه کد try-catch-finally ، ما می‌خواهیم به کاربر اجازه بدهیم که نوع استثنائی را که catch می‌شود تغییر دهد .
تگ id نامی برای بخش قابل ویرایش تعریف می‌کند ( که از آن در  ادامه در تعریف خود قطعه کد استفاده می‌کنیم ) . آنرا به “ExceptionName” تغییر می‌دهیم . تگ default هم مقدار پیش فرضی را  برای آن بخش مشخص می‌کند . ما می‌خواهیم تمام استثناها را Catch کنیم پس مقدار پیش فرض را برابر "Exception" قرار می‌دهیم .


.....
    <declarations>
      <literal>
        <id>ExceptionName</id>
        <default>Exception</default>
      </literal>
    </declarations>
...

- و در تگ Code ، خود قطعه کدی که ویژوال استودیو باید آن را اضافه کند ، تعریف می‌شود . مقدار مشخصه Language آن را به CSharp تغییر می‌دهیم و محتویات داخل آنرا به شکل زیر اضافه می‌کنیم . 


<code language="CSharp">
<!--[CDATA[
try
{
    $end$
}
catch($ExceptionName$)
{
  
}
finally
{
  
}
      ]]-->
</code>

به نحوه استفاده از ExceptionName که در قسمت Literal تعریف کردیم توجه کنید  . عبارت $end$ هم یک کلمه رزرو شده است که محل قرار گرفتن cursor را بعد از اضافه شدن قطعه کد مشخص می‌کند .

- در نهایت snippet ما به شکل زیر خواهد بود : 


<codesnippet format="1.0.0" xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
  <header>
    <title>Try Catch Finally</title>
    <author>mohsen.d</author>
    <shortcut>trycf</shortcut>
    <description>Adds a try-catch-finally block</description>
    <snippettypes>
      <snippettype>Expansion</snippettype>
    </snippettypes>
  </header>
  <snippet>
    <declarations>
      <literal>
        <id>ExceptionName</id>
        <default>Exception</default>
      </literal>
    </declarations>
    <code language="CSharp">
      <!--[CDATA[
try
{
    $end$
}
catch($ExceptionName$)
{
  
}
finally
{
  
}
      ]]-->
    </code>
  </snippet>
</codesnippet>

اضافه کردن snippet ساخته شده به visual studio


دو راه برای اضافه کردن snippet تعریف شده به ویژوال استودیو وجود دارد :
روش اول قرار دادن فایل .snippet در پوشه code snippets ویژوال استودیو است که مسیر پیش فرض آن 

C:\Users\<UserName>\Documents\Visual Studio 2010\Code Snippets\
است . این پوشه به ازای هر زبان دارای یک زیر پوشه است . این snippet را باید در پوشه C# قرار دهیم . همین که فایل را در پوشه مناسب قرار دهیم ویژوال استودیو بدون نیاز به restart شدن آن را خواهد شناخت .

گزینه دوم import کردن فایل .snippet به داخل ویژوال استودیو است . در ویژوال استودیو به مسیر

Tools -> Code Snippets Manager (Ctrl+K,Ctrl+B)
می‌رویم . در پنجره Code Snippets Manager ، بر روی کلید import کلیک و فایل موردنظر را یافته و انتخاب کرده و پوشه‌ی محل ذخیره شدن آن را تعیین می‌کنیم .

استفاده از snippet ساخته شده

برای استفاده از snippet می‌توانیم متن میانبر تعریف شده را تایپ کنیم و با دو بار فشردن کلید tab قطعه کد تعریف شده به محل کرسر اضافه می‌شود 



همینطور با فشردن کلیدهای Ctrl+K و Ctrl+X  به صورت پشت سر هم منوی “Insert Snippet” ظاهر می‌شود که از طریق آن می‌توانیم Snippet موردنظر را یافته  ( بدنبال Title تعریف شده برای snippet  در پوشه ای که آنرا ذخیره کرده اید بگردید ) و با انتخاب آن کد تعریف شده اضافه خواهد شد .



 برای آشنایی با روش‌های مختلف دسترسی به snippet‌ها اینجا را بررسی کنید .

ابزارها

دستکاری خود فایل xml چندان جالب و خالی از خطا نیست . روش‌های بهتری برای ساخت و ویرایش snippet‌ها وجود دارد . Snippet Editor ابزاری برای ویرایش و ساخت snippet هاست و Snippet Designer هم یک پلاگین برای ویژوال استودیوست که کار مشابهی را انجام می‌دهد . یکی از کارهای جالبی که با این ابزار می‌توانید انجام دهید انتخاب یک قطعه از کد ( مثل یک تابع ) و سپس ساختن یک snippet از روی آن است .

در این پروژه هم مجموعه snippet‌های موجود ویژوال استودیو 2010 برای زبان سی شارپ ، جهت سازگاری با stylecop ویرایش و refactor شده اند ( در کنار تعریف snippet‌های دیگر ).
اشتراک‌ها
7 دلیل برای انتقال کدهای ++C به Visual Studio 2017

Come learn the top 7 reasons to use Visual Studio 2017 if you are a C++ developer. Whether you are using the product and are looking to upgrade, or you never used it before but you are considering it now, join us to discover how Visual Studio 2017 raises the bar in terms of C++ productivity. From C++ standards conformance to coding productivity, cross-platform development for Windows, Linux, Android, and iOS and CMake support, these are only a few of the topics we discuss in this demo-packed session. 

7 دلیل برای انتقال کدهای ++C به Visual Studio 2017