اشتراک‌ها
مزایای کار با Postman

Postman is a great tool to quickly create a request and run it against your API. This is a flexible tool created to make your work simpler. 

مزایای کار با Postman
مطالب
CoffeeScript #13

بخش‌های بد

در ادامه‌ی قسمت قبل، به مواردی که توسط CoffeeScript اصلاح شده‌اند، می‌پردازیم.

Reserved words

کلمات کلیدی خاصی در جاوااسکریپت وجود دارد مانند class، enum و const که برای نسخه‌های بعدی جاوااسکریپت در آینده رزرو شده‌اند. استفاده از این کلمات در برنامه‌های جاوااسکریپت می‌تواند نتایج غیرقابل پیش بینی داشته باشد. برخی از مرورگرهای به خوبی از عهده‌ی این کار برمی‌آیند و بعضی دیگر به طور کامل جلوی استفاده از این‌ها را گرفته‌اند. CoffeeScript بعد از تشخیص استفاده از یک کلمه‌ی کلیدی، با یک راه کار خاص، از این موضوع می‌گریزد.

به عنوان مثال، فرض کنید می‌خواهیم از کلمه کلیدی class به عنوان یک خصوصیت در یک شیء استفاده کنیم:

myObj = {
  delete: "I am a keyword!"
}
myObj.class = ->
پس از کامپایل، پارسر CoffeeScript متوجه استفاده شما از کلمه کلیدی رزرو شده می‌شود و آنها را در بین "" قرار می‌دهد.
var myObj;
myObj = {
  "delete": "I am a keyword!"
};
myObj["class"] = function() {};

Equality comparisons

مقایسه برابری ضعف دیگری است که در جاوااسکریپت باعث ایجاد رفتاری گیج کننده و اغلب باعث ایجاد اشکالاتی در کد نوشته شده می‌شود. به مثال زیر توجه کنید:

""           ==   "0"// false
0            ==   ""// true
0            ==   "0"// true
false        ==   "false"// false
false        ==   "0"// true
false        ==   undefined// false
false        ==   null// false
null         ==   undefined// true
" \t\r\n"    ==   0// true
مطمئنم که شما هم با من موافقید که همه‌ی مقایسه‌های بالا بسیار مبهم هستند و استفاده از آن‌های می‌توانند منجر به نتایج غیر منتظره شوند و همچنین مشکلاتی را پیش بیاورند.
راه حل این کار استفاده از عملگر برابری سختگیرانه است، که از 3 مساوی تشکیل شده است: === عملگر برابر سخت گیرانه دقیقا مانند عملگر برابری عادی عمل می‌کند و تنها نوع داده‌ها را بررسی می‌کند که با هم برابر باشند.
توصیه می‌شود که همیشه از عملگر برابری سختگیرانه استفاده کنید و هرجا لازم بود قبل مقایسه عمل تبدیل نوع داده‌ها را انجام دهید.
CoffeeScript این مشکل را به صورت کامل حل کرده است؛ یعنی هر جایی که عمل مقایسه == انجام شود به === تبدیل می‌شود. شما باید به صورت صریح نوع داده‌ها را قبل از مقایسه تبدیل کرده باشید.
نکته: در مقایسه‌ها رشته خالی ""، null ،undefined و عدد 0 همگی false برمی گردانند.
alert "Empty Array"  unless [].length
alert "Empty String" unless ""
alert "Number 0"      unless 0
که پس از کامپایل می‌شود:
if (![].length) {
  alert("Empty Array");
}

if (!"") {
  alert("Empty String");
}

if (!0) {
  alert("Number 0");
}
در صورتیکه می‌خواهید به صورت صریح null و یا undefined را بررسی کنید، می‌توانید از عملگر ? CoffeeScript استفاده کنید:
alert "This is not called" unless ""?
پس از کامپایل می‌شود:
if ("" == null) {
  alert("This is not called");
}
با اجرای مثال بالا alert اجرای نمی‌شود چون رشته خالی با null برابر نیست.

Function definition


خیلی جالب است که در جاوااسکریپت می‌توانید تابعی را بعد از اینکه فراخوانی کردید، تعریف کنید. به عنوان مثال، کد زیر به صورت کامل اجرا می‌شود:
wem();
function wem() {alert("hi");}
این به دلیل دامنه (scope) تابع است. تمام توابع قبل از اجرای برنامه، به بالا برده می‌شوند و در همه جا در دامنه‌ای که در آن تعریف شده‌اند، قابل دسترسی می‌باشند؛ حتی اگر قبل از تعریف واقعی در منبع، فراخوانی شده باشد. مشکل اینجاست که عمل بالابردن توابع در مرورگرها با یکدیگر متفاوت است. به مثال زیر توجه کنید:
if (true) {
  function declaration() {
    return "first";
  }
} else {
  function declaration() {
    return "second";
  }
}
declaration();
در بعضی از مرورگرها مانند Firefox ، تابع ()declaration مقدار "first" را برگشت خواهد داد و در دیگر مرورگرها مانند Chrome، مقدار "second" برگشت داده خواهد شد. در حالیکه به نظر می‌رسد که قسمت else هیچگاه اجرا نخواهد شد.
در صورتیکه علاقمند به کسب اطلاعات بیشتری درباره‌ی نحوه تعریف توابع، هستید باید راهنمای آقای Juriy Zaytsev را مطالعه کنید. به صورت خلاصه، رفتار نسبتا مبهم مرورگرها می‌تواند منجر به ایجاد مشکلاتی در مسیر نوشتن یک پروژه شوند.
همه چیز در CoffeeScript در نظر گرفته شده است و بهترین روش برای حل این مشکل، حذف کلمه function و به جای آن استفاده از عبارت (expression) تابع است.

Number property lookups

نقصی که در پارسر جاوااسکریپت در مواجه با نماد نقطه (dot notation) بر روی اعداد وجود دارد، تفسیر آن به ممیز شناور، بجای مراجعه به ویژگی‌های آن است. برای مثال کد جاوااسکریپت زیر باعث ایجاد خطای نحوی می‌شود:
5.toString();
پارسر جاوااسکریپت بعد از نقطه به دنبال یک عدد دیگر می‌گردد و با برخورد با ()toString، باعث ایجاد یک Unexpected token می‌شود. راه حل این مشکل، استفاده از پرانتز یا اضافه کردن یک نقطه دیگر است.
(5).toString();
5..toString();
خوشبختانه پارسر CoffeeScript به اندازه‌ی کافی هوشمندانه با این مسئله برخورد می‌کند و هر زمانی که شما دسترسی به ویژگی‌های اعداد را داشته باشید، به صورت خودکار با اضافه کردن دوتا نقطه (همانند مثال بالا) جلوی ایجاد خطا را می‌گیرد.
نظرات مطالب
ساخت DropDownList های مرتبط به کمک jQuery Ajax در MVC
در این حالت شما می‌تونید هنگام دریافت اطلاعات شهرها، اطلاعات مربوط به منطقه و محله رو نیز دریافت کنید:
$(function (){
  $('#ostan').change(function () {
    jQuery.getJSON('shahrestan.json', { id: $(this).attr('value') }, function (data) {
        jQuery.each(data, function (i) {
            var option = $('<option></option>').attr("value", data[i].Id).text(data[i].Title);
            $("#shahrestan").append(option);
        });
    });
    jQuery.getJSON('mantaqeh.json', { id: $("#shahrestan").attr('value') }, function (man) {
        jQuery.each(man, function (i) {
            var option = $('<option></option>').attr("value", man[i].Id).text(man[i].Title);
            $("#mantaqeh").append(option);
        });
    });
    jQuery.getJSON('mahaleh.json', { id: $("#mantaqeh").attr('value') }, function (ma) {
        jQuery.each(ma, function (i) {
            var option = $('<option></option>').attr("value", ma[i].Id).text(ma[i].Title);
            $("#mahaleh").append(option);
        });
    });
});
});
ساختار HTML هم باید همچین حالتی داشته باشه:
  <select id="ostan">
    <option>--انتخاب کنید--</option>
    <option value="1">کردستان</option>
  </select>
  <select id="shahrestan">
    <option>--انتخاب کنید--</option>
  </select>
  <select id="mantaqeh">
    <option>--انتخاب کنید--</option>
  </select>
  <select id="mahaleh">
    <option>--انتخاب کنید--</option>
  </select>

اشتراک‌ها
اورلیا به صورت عملی

This books shows all the steps necessary for the development of SPA (Single Page Application) applications with the Aurelia. With this book you will learn:

  • How to create a project in Aurelia
  • How to create Aurelia plugin
  • Understand how the SystemJS imports works
  • Using HTTP to connect to a server
  • HttpClient
  • FetchClient
  • How to use Firebase
  • Offline the app data
  • Working with loopback
  • ... 
اورلیا به صورت عملی
اشتراک‌ها
مشکلات امنیتی SHA-1

a research project that demonstrates how the security of the SHA-1 hashing standard can be fully compromised 

مشکلات امنیتی SHA-1
اشتراک‌ها
از پشت پرده API های async/await دات نت بیشتر بدانید + سوالات متداول ConfigureAwait
  • What is a SynchronizationContext?
  • What is a TaskScheduler?
  • How do SynchronizationContext and TaskScheduler relate to await?
  • What does ConfigureAwait(false) do?
  • Why would I want to use ConfigureAwait(false)?
  • Why would I want to use ConfigureAwait(true)?
  • When should I use ConfigureAwait(false)?
  • ...
از پشت پرده API های async/await دات نت بیشتر بدانید + سوالات متداول ConfigureAwait
اشتراک‌ها
اجرای دات نت در مروگر توسط Ooui

Earlier this year, Microsoft announced their support for Blazor, and now Frank A. Krueger has developed the Ooui library which allows C# or F# to be used to write applications that run in the browser.  Ooui can target WASM, enabling Xamarin.Forms app to be deployed in web assembly and the result runs entirely in-browser without the need for an application server. 

اجرای دات نت در مروگر توسط Ooui
اشتراک‌ها
کتابخانه perfect-scrollbar

Minimalistic but perfect custom scrollbar plugin  Demo

perfect means...

  • There should be no css change on any original element.
  • The scrollbar should not affect the original design layout.
  • The design of the scrollbar should be (nearly) fully customizable.
  • If the size of the container or the content changes, the scrollbar size and position should be able to change.
  • New! It should work with vanilla JavaScript and major tools like NPM or Browserify.
کتابخانه perfect-scrollbar