مرجع تخصصی برنامه نویسان :: نشریه خبری پایدار


معرفی کامل data warehouse و اهمیت آن

درخواست حذف این مطلب
data warehouse از دسته ابزارهای بسیار مهم و قدرتمند در عصر امروز محسوب می شود. وجود data warehouse سبب می شود که عملکرد شرکت های بزرگ بهتر شود. وقتی صبحت از data warehouse می شود در واقع می خواهیم در خصوص انبار داده ها صحبت کنیم. در این مقاله در ابتدا سعی می کنیم تعاریف مختلف در خصوص این گزینه را مورد بررسی قرار دهیم سپس شرایطی فراهم می شود تا بتوانیم این موضوع مهم را از نظر کاربرد نیز مورد تایید قرار دهیم. اهمیت data warehouse در تکنولوژی بسیار زیاد است به طوری که بسیاری از شرکت های بزرگ بدون داشتن انبار داده ای صحیح در عمل دچار مشکل شده و مختل می شوند.تعریف data warehouse از دید rahphرالف تعریف واضحی از data warehouse دارد، او می گوید که data warehouse نسخه ای از داده های تراکنشی است به طوری که سازماندهی آن ها به صورت اختصاصی برای پرس و جوها و همین طور گزارش دهی فراهم شده است. با گذر زمان به این تعریف 2 ایراد وارد شده است: در وهله اول باید بدانیم که گاها داده هایی که در یک data warehouse ذخیره می شود تراکنشی نیستند و به اصطلاح صحیح تر غیر تراکنشی هستند! بنابراین وجود کلمه تراکنشی در این تعریف نمی تواند یک اصل باشد! مورد بعدی در خصوص خروجی اصلی سیستم های data warehouse است، به طوری که لیست گیری های فهرست وار در حجم کم دیده می شوند در صورتی که وقتی صحبت از گزارش گیری های اداری است در واقع به حجم زیادی از داده ها اشاره می شود! به راستی تعریف صحیح از انبار داده چیست؟ با ما همراه باشید. تاریخچه data warehouseمی دانیم که سیستم های کامپیوتری در دهه های گذشته پیشرفت های زیادی کرده اند. در سال 1960 mainframe ها اهمیت زیادی داشتند و پس از گذشت 10 سال mini computer ها به بازار آمدند و از دهه 1990 با پدیده ارزشمند server/client آشنا شدیم. در این بین یک واقعیت بسیار مهم وجود دارد به این صورت که بیشتر برنامه های تجاری هنوز هم بر روی mainframe ها سوار هستند و به اصطلاح اجرا می شوند. در بررسی های اخیر یک تخمین در این خصوص وجود دارد به این ترتیب که بیش از 70 درصد از اطلاعات سازمان های مختلف بر روی mainframe ها قرار دارد. شاید یکی از دلایل آن به این شکل باشد که این سیستم ها آنقدر پیشرفت داشته اند که انتقال آن ها به یک محیط جدید بسیار هزینه بر و مشکل است.اگر به زمان های گذشته نگاهی بیندازیم می بینیم که بسیاری از سیستم های پایگاه داده ای برای پردازش های داده های عملیاتی بوده است. اگر بخواهیم یک تعریف ساده از داده های عملیاتی داشته باشیم به این شکل است که داده های عملیاتی به مجموعه ای از داده ها گفته می شود که در یک سازمان در لاین کارهای روزانه قرار دارد. چنین داده هایی در پایگاه های داده ای ذخیره می شوند و دستیابی به آن ها توسط سیستم های oltp انجام می شود.data warehouse در دهه 1970در دهه 1970 فردی که اسم وی به اختصار codd است یک مدل رابطه ای برای پایگاه های داده ای معرفی کرده است که کاربر بتواند به صورت مستقیم با استفاده از data warehouse به داده ها دسترسی داشته باشد. مجموعه داده هایی که در سازمان ها استفاده می شود در طول زمان های گذشته با سرعت افزایش می یابد، به این ترتیب در سال 1980 سازمان های بزرگ با یک سری از داده هایی در محدوده petabyte کار می کردند. هرچه حجم داده های موجود افزایش یابد نیاز به روش های آنالیز قابل لمس تر و به اصطلاح پیشرفته تر خواهد بود. سازمان ها تصمیم گرفتند که تعداد و نوع سیستم هایی را که به کار می بردند افزایش دهند به این ترتیب در یک سازمان هر یک از واحدهای سازمان برای خود دارای یک سیستم جداگانه برای ذخیره اطلاع شدند. به این ترتیب data warehouse اهمیت خاصی پیدا کرد و برای دسترسی به آن نیاز به برنامه های کاربردی خاصی بود.علت اهمیت data warehouseیکی از ویژگی های بسیار مهم داده های موضع گرا بودن است! مبرهن است که هر موضوع یکی از فعالیت های سازمان را بیان می کند و به نوعی اهداف سازمان بر اساس آن شکل می گیرد. موضوعی به نام olap وجود دارد که اجازه آنالیز سریع و موثر را بر روی انبوهی از داده می دهد در این صورت است که data warehouse وارد مدل های چند بعدی شده است و کاربر می تواند بسیار سریع تر و همین طور آسان تر به داده های خلاصه شده دسترسی داشته باشد.از طرف دیگر یک سری سیستم های پردازش تراکنش بر خط و یا oltp نیز دیده می شود که مبتنی بر اعمال روزانه است، مثالی که برای این گزینه می توان زد. سیستم های تراکنشی بانکی است. در چنین سیستم هایی تراکنش ها درخواست خواندن داده ها و همین طور به روز رسانی داده ها را برعهده دارد. موضوع دیگری که در خصوص انبار داده دیده می شود وجود مکانیزم های کنترل همروندی و همین طور ریکاوری داده است. اما باید بدانیم که وظیفه اصلی سیستم های data warehouse فرآیند تصمیم سازی است. در سیستم های data warehouse عموما شاهد تاریخچه ای از داده ها به صورت خلاصه شده هستیم و هدف اصلی یکپارچگی برای دسترسی آسان تر است.جمع بندیبه طور دقیق پردازش های تراکنش بر خط درانبار داده رابطه ای جایگاهی مشخص دارند و سیستم های پردازش تحلیل در data warehouse تحلیلی جانمایی خواهند شد.

روش صحیح کامنت گذاری در کدها

درخواست حذف این مطلب
از آنجا که مبحث کدینگ و کدنویسی بهینه حائز اهمیت است بنابراین توسعه دهندگان همواره به دنبال راهی برای ارتقاء کد خود هستند. کامنت گذاری مسئله مهمی است که در روند بهبود کد نقش اساسی را ایفا می کند، از این رو در این مقاله در مورد روش صحیح کامنت گذاری و دیدگاه هایی که در این باره مطرح می شود مطالبی گنجانده شده است. امیدواریم برای شما عزیزان مفید واقع گردد.در پاسخ به این سوال که آیا روش صحیحی برای کامنت کردن کد وجود دارد، دیدگاه های متفاوتی وجود دارد، برخی به این سوال پاسخ آری و برخی پاسخ خیر داده اند، برخی هم معتقدند که پاسخ به این سوال به مهارت های برنامه نویس بستگی دارد. بنابراین آیا پاسخ قطعی برای این سوال وجود دارد؟ برخی از نگرش ها را در این باره بخوانید.با توجه به این که ما علاوه بر مشاور بودن، کارهایی که بین عموم رایج است (مانند وبلاگ نویسی) را نیزانجام می دهیم، اما قادر نیستیم سولات بسیاری را پاسخ دهیم. برای نمونه، موضوع کامنت کردن کد در یک بازه زمانی مطرح می شود. ما روشی صحیح را برای کامنت کردن کد پیشنهاد می دهیم. اما به یاد داشته باشید که ما یک مشاور هستیم، بنابراین ما همواره یک پاسخ قانع کننده داریم که بیان می کند که بستگی دارد.با این حال، قبل از اینکه سراغ روش پیشنهادی مان برویم، کار برنامه نویسانی که دغدغه شان به نوعی دغدغه ما است را بررسی می کنیم و نظاره گر می شویم. در مبحث کامنت ها آنطور که به نظر می رسد برنامه نویسان به دو گروه تقسیم می شوند : گروه اول عقیده شان بر این است که "کد تمیز و اصولی کدی است که به کامنت نیاز نداشته باشد" و گروه دوم این عقیده را دارند که " کامنت گذاری، کدنویسی را حرفه ای می کند". به عبارت دیگر:احتمالاً، اگر شما به کامنت نیاز داشته باشید، پس به اصلاح و تغییر آن نیز نیاز خواهید داشت. اگر آن چیزی که نیاز به بازبینی و تغییردارد، تحت کنترل شما نیست، پس وجود کامنت ضرورت ندارد.و سپس، از سوی دیگر:اگر شما با جدیت ارزش نوشتن کامنت ها را زیر سوال ببرید، شما نیز در گروه "برنامه نویسان جوان و تازه کار" قرار خواهید گرفت از آنجا که کامنت ها بسیار حیاتی هستند.انواع کامنت هاهر زمان که دو طرف روی یک موضوع اختلاف نظر داشته باشند، دیپلمات های جامعه برای یافتن زمینه های مشترک اقدام می کنند. زمانی که با کامنت های کد همراه می شود، به طور کلی فرم اعلاناتی در مورد چراها در کامنت ها دریافت می کند. برای مثال، این قانون مفید و موثر از موضوع stack overflow را در نظر بگیرید:برنامه نویسان خوب برای کدشان کامنت قرار می دهند.برنامه نویسان عالی دلیل انتخاب یک پیاده سازی خاص را بیان می کنند.برنامه نویسان ارشد دلیل عدم انتخاب پیاده سازی های دیگر را بیان می کنند.jeff atwood این موضوع را چندین بار مطرح کرده است:زمانی که کدتان را بازنویسی، اصلاح و چندین بار بارگزاری مجدد می کنید، کار را برای همکاران توسعه دهنده که می خوانند و درک می کنند ساده می سازید. هر زمان که شما قادر نیستید که هیچ روش امکان پذیری را تصور کنید، کدتان را به یک کد سرراست تر و واضح تر تبدیل کنید- تنها زمانی این اتفاق می افتد که یک توضیح کامنت راجع به اینکه کدتان چه کاری انجام می دهد اضافه کنید....توسعه دهندگان تازه کار به جای اینکه روی کدی که دربرگیرنده توضیحات است تکیه کنند روی کامنت هایی که در برگیرنده کد است تکیه می کنند.مشکل اساسی کامنت هاتاکنون، مثال ها و نظرات افراد را برای شما ارائه دادیم. اما بدون اینکه آن ها پایه و اساس منطقی داشته باشند این کار را انجام دادیم. در برخی موارد، کامنت ها به خاطر اینکه حذف شده اند، ما قادر به انجام این کار نبودیم و در موارد دیگر، ما آن را مناسب نقل قول نمی دانستیم. احتمالاً، آن ها منطق خودشان را دارند. اما ما در شرایط بهتری صحبت می کنیم.کامنت ها یک هدف جدی را دنبال می کنند: ارتباطات و شفاف سازی. و آن ها یک افت جدی دارند: زمانی که برای نوشتن آن ها صرف می شود. در صورتی که اگر مسئله بین زمانی که برای کامنت نویسی گذاشته شده و فواید کامنت گذاری که به وضوح مشخص است می بود حل مسئله به سادگی انجام می گرفت. اما کامنت ها یک افت مخرب تر دارند: در یک مدت زمان طولانی اطلاعاتی نادرست و فریب دهنده در اختیار توسعه دهندگان قرار می دهند.//returns x + y or, if x or y is less than zero, throws an exception public int add(int x, int y) { return x + y; }در کد بالا چه اتفاقی رخ داده است؟ آنطور که به نظر می رسد عبارتی قبلاً وجود داشته است که فردی آن را حذف کرده است در صورتی که در مورد آپدیت کردن آن هیچ فکری نکرده است.این موضوع به مشکل اساسی و ذاتی اشاره دارد. به طور تخصصی، کامنت ها یک non-compiled ، رابطه غیر مجاز بین کد و فراشناخت در مورد کد را نمایش می دهند. اضافه کردن کامنت ها بار مسئولیت نگهداری را برای همه افرادی که کد را در آینده لمس می کنند، افزایش می دهد. از آنجایی که هیچ موردی افراد را مجبور به آپدیت کامنت ها نمی کند، آن ها از همگام سازی خارج می شوند که درنتیجه باعث بازخورد منفی در کامنت نویسی می شود.بررسی هزینه نگهداری کامنت هادر این نقطه، ما این نکته را ابراز می کنیم که همه چیز بحث برانگیز است. نظر بر این است که کسانی که با کامنت نویسی مخالف هستند بر این باورند که کامنت نویسی باعث ایجاد بار اضافی برای نگهداری می شود و آن ها بیشتر روی این نکته تاکید دارند که کد باید واضح باشد تا این بار اضافی را هم نداشته باشیم.در صورتی که موافقان کامنت گذاری کد استدلالشان این گونه است که حفظ کامنت ها به عنوان حفظ کد است. اما مخالفان کامنت نویسی مخالف این نظر هستند و اعتقادشان بر این است که همه تلاش ها باید در راستای ایجاد کد واضح تر باشد و می گویند وقتی روی کامنت گذاری سرمایه گذاری نکنیم درنتیجه هزینه ای هم برای نگهداری از کامنت ها وجود ندارد و در نهایت برداشت نادرستی هم که ممکن است از کامنت ها داشته باشیم رخ نمی دهد.در حالی که هر دو دیدگاه را دیدیم و با آن ها آشنا شدیم، نمی توان به طور قطع و یقین یکی از دیدگاه ها را پذیرفت و دیگری را رد کرد. گفته می شود که توسعه دهندگان وظیفه دارند که قسمت هایی از کدشان را برای کامنت اختصاص دهند گرچه برخی از آن ها هرگز این بار مسئولیت را نمی پذیرند. با این کار افرادی که علاقه مند به کامنت گذاری نیستند را علی رغم میل باطنی شان مجبور به این کار می کنیم. که یقیناً آن ها این کار را نمی پذیرند و از انجام آن سرباز می زنند و اگر هم انجام دهند با نارضایتی این مسئولیت را عهده دار می شوند و منجر به ناراحتی میشود.یک اهرم اصلی برای کامنت گذاری کداحتمالاً شما قادر به تقاضای این استاندارهای حرفه ای باشید. و ممکن است خودتان را در یک گروه دوست داشتنی قرار دهید که این کار را انجام می دهند. اما به احتمال زیاد، این فقط نتیجه درگیری بی پایان بین شما و دیگران است. و اگر شما نسبت به کامنت نویسی بی اعتنا باشید دوره کامنت ها رو به نابودی می رود و دارای ارزش منفی است.با توجه به توضیحات بالا و نتیجه گیری از آن، پیشنهاد ما این است که حتی الامکان از کامنت نویسی خودداری کنید.توجه داشته باشید که ما به طور مطلق و صد در صد موردی را تایید یا رد نمی کنیم. ما نگفته ایم که کامنت نویسی خوب نیست. در عوض، پیشنهاد ما این است که منحصر به فرد باشید. احتمالا نتیجه کامنت گذاری در مدت زمانی طولانی ارزش منفی دارد، مانند بازی کردن در یک کازینو (casino). اما ما به شما نمی گوییم که بازی بزور و با تهدید را انجام دهید و به شما نمیگوییم که کامنت نگذارید. تنها روی این مسئله تاکید می کنیم که به حداقل رساندن این فعالیت هایی که ارزش منفی دربردارد یک استراتژی خوب ایجاد می کند.بنابرین رویکرد کامنت گذاری همراه با شک و تردید است.گاهی اوقات به کامنت گذاری نیاز است.اما در نظر داشته باشید که در برخی شرایط ما به کامنت گذاری کاملاً نیاز داریم. مثلاً برخی سازمان ها در هر فایل برای کامنت های قانونی/کپی رایت مجوز دارند. به هر حال باید در صورت نیاز این کامنت ها را درهر زمان که نیاز شد اضافه کنید، برای این منظور ممکن است به یکgeneratorیا موردی نیاز داشته باشید که این کار را برای تان انجام دهد تا از اتلاف وقت جلوگیری کنید.علاوه بر این، شما برای داشتن مستندات و intellisense باید کامنت هایی را در قسمت هدر یا متدهای خود اضافه کنید. هر زمان که شما کد را برای استفاده دیگران آماده می سازید، این کامنت ها عملاً مستندات کاربر هستند. در این وضعیت، کامنت ها در مقایسه با هزینه نگهداری آن ها ارزشمندتر هستند ازآنجا که این امر قابلیت استفاده از محصول شما را تحت تاثیر قرار می دهد.درنهایت گاهی اوقات ممکن است هرآنچه در ذهنتان بوده است را روی کدتان پیاده کرده باشید و یا آن را refactor یا تغییر داده باشید. اما هنوز هم امکان سردرگمی توسعه دهندگان وجود داشته باشد. در چنین مواقعی شما با دو تا slash به کدتان کامنت اضافه کنید. آنچه که نیاز است را انجام دهید.اما همینطور که در این مسیر قدم بر می دارید کامنت ها را با توجه به نیاز توسعه دهندگان بشناسید. کامنت ها یک بار نگهداری را ایجاد می کنند و یک نتیجه منفی انتظار می رود. بنابراین آن ها را باید محتاطانه استفاده کرد و گزینه های بهتر را انتخاب کرد.

8 مورد از نکات و ویژگی های visual studio code

درخواست حذف این مطلب
در این مقاله در مورد visual studio code و اهمیت آن به عنوان یک ویرایشگر پر کاربرد و کاربر پسند و همچنین کاربرد و نحوه استفاده از آن با نمایش تصاویر شرح داده شده است، امیدواریم مطالب ارائه شده مفید واقع شود. visual studio code، در سال های اخیر تبدیل به یکی از پرکاربردترین و محبوب ترین ویرایشگرهای متن شده است. در اینجا stackoverflow آماری از نظرسنجی هایی که در سال 2018 گرفته شده است را در اختیار ما قرار داده است : - محبوب ترین محیط های توسعه1. visual studio code cli visual studio code، با واسط کاربری command line می آید. شما فقط یک بار visual studio code را نصب می کنید، آن را باز می کنید، روی ⇧⌘p برای باز شدن پالت دستوری(command palette) در سیستم عامل mac فشار دهید و یا می توانید تنها روی ⌘pکلیک کرده و دکمه > را فشار دهید.در مرحله بعد، shell command را تایپ کنید، install code command in path را انتخاب نموده و enter کنید.اکنون اگر شما code را تایپ کنید، visual studio code باز خواهد شد و code ،visual studio code را در مسیری که توسط path نمایش داده شده است، باز می کند.با این وجود، برای مشاهده رابط command line ،code -h را تایپ کنید. code -h visual studio code 1.25.1 usage: code [options] [paths...] to read from stdin, append '-' (e.g. 'ps aux | grep code | code -') options: -d, --diff compare two files with each other. -a, --add add folder(s) to the last active window. -g, --goto open a file at the path on the specified line and character position. -n, --new-window force to open a new window. -r, --reuse-window force to open a file or folder in an already opened window. -w, --wait wait for the files to be closed before returning. --locale the locale to use (e.g. en-us or zh-tw). --user-data-dir specifies the directory that user data is kept in. can be used to open multiple distinct instances of code. -v, --version print version. -h, --help print usage.خروجی که در بالا مشاهده می کنید بیشتر از آن چیزی است که نشان داده شده است و من آن را کاهش داده ام. شما می توانید دستورات و شرح این دستورات را از طریق commandبخوانید و ابزارهای مفیدی که وجود دارد را مشاهده نمایید. ما یک مورد به نام --diffرا که در command مشاهده می کنید بررسی خواهیم کرد.همیشه می خواستم تفاوت بین دو فایل را ببینم، بیایید یک مثال را نگاه کنیم. در اینجا دو فایل داریم که تفاوت کمی بین آن ها وجود دارد.app1.js var app = new vue({ el: '#app', data: { message: 'hello vue 1!' } })app2.js var app = new vue({ el: '#app', data: { message: 'hello vue 2!' } })این فایل، یک فایل کوچک است، و ما قادر هستیم تفاوت آن ها را دریابیم. اما برای مشخص شدن هدف، کدی که در تصویر مشاهده می کنید را در command line تایپ می کنیم. code --diff app1.js app2.jsvisual studio code، به شکل زیر قابل رویت است.ما قادر هستیم تفاوت دو فایل را ببینیم. این صفحه همان صفحه ای است که زمانی که شما git diff با پشتیبانی یکپارچه git در visual studio code را بررسی می کنید، مشاهده می کنید.2. git integration گاهی اوقات استفاده از git می تواند سرگرم کننده و یا مشکل باشد، اما visual studio code همراه با git یکپارچه اجازه اضافه کردن، committing، pulling وpushing کردن تغییرات به remote git repository از راه دور با استفاده از gui ساده را می دهد .یک روند کاری ساده که گام های زیر از آن استخراج می شود را دنبال می کنیم:1. یک پروژه که با git مقداردهی شده است را ایجاد کنید.2. برخی از تغییرات را انجام دهید.3. تغییرات را commit کنید.ما دو فایل به نام های app1.js و app2.jsداریم. بیایید git repository را در این پوشه مقداردهی اولیه کنیم. سپس visual studio code را با این پوشه باز می کنیم. git init code .که . نشان دهنده پوشه فعلی است که ترمینال شما در آن است.بلافاصله متوجه خواهید شد که git فعال در سمت چپ ترین قسمت پنجره است که با علامت 2 که روی آن است مشخص شده است.این دو فایل در سمت راست خود دارای u هستند، به این معنی که آنها شناخته شده نیستند. اگر بر روی آیکون gitکه با علامت 2 مشخص شده است کلیک کنید، این صفحه را مشاهده خواهید کرد. اگر روی اولین فایل یعنی app1.js حرکت کنید این آیکون ها ظاهر می شوند.علامت + معادل فرمان git add است. روی آن کلیک کنید و تغییرات را مشاهده نمایید.اکنون ما می توانیم بخش staged changes را با فایلی که به آن اضافه کرده ایم و وضعیت را که به a که نشان دهنده index addedمی باشد، تغییر کرده است را مشاهده نماییم.در مرحله بعد، روی آیکن open file در فایل app1.js در staged changes کلیک کنید و فایل را باز کنید. فایل را به این فایل که برای شما نمایش داده ایم، ویرایش کنید. message را جایگزین کنید. var app = new vue({ el: '#app', data: { message: 'hello scotch!' } })در حال حاضر، یک ورودی جدید در بخشchanges با همان فایل وجود دارد. هنگامی که شما بر روی فایل app1.js در قسمتchanges کلیک می کنید، یک diff نمایش داده می شود، مانند آنچه که در عنوان1 دیدیم.سپس می توانید بر روی علامت + کلیک کنید تا تغییراتی را انجام دهید. commit کردن فایل ها برای git به سادگی تایپ commit message باmessage (press..., and pressing cmd + enter or ctrl + enterدر بخش بالاست. منinitial commit را تایپ کردم. cmd + enter را فشار دهید، تنها برای فایل هایی که اضافه نشده اند برای اعمال تغییرات بهchanges برگردید.دیگر ویژگی های مفید که مربوط به git هستند عبارتند از:یک context menu : - وقتی در git panel روی آیکون ...menu کلیک می کنید، تصویری مانند زیر مشاهده می نمایید.ما دستورات مفیدی را می بینیم که گاهی اوقات فهم آن بسیار دشوار است.در پایین visual studio code، در نوار وضعیت، شما همچنین می توانید شاخه ای که در حال حاضر در آن هستید را مشاهده کنید. کلیک بر روی شاخه (branch ) ، به شما اجازه می دهد شاخه های موجود دیگر را انتخاب کنید.هنگامی که روی آن کلیک می کنید، لیستی از شاخه ها (branches ) در پنل جستجو ظاهر می شود، با اولین گزینه قادر به ایجاد یک شاخه جدید هستید(create a new branch).3. debugging visual studio code دارای یک api قدرتمند برای فعال کردن ابزارهای debugging است.debugging یک مسئله اساسی است، و معمولا زبان / پشته خاص است. بسته به زبان مورد استفاده شما، پلاگین هایی وجود دارد که debugging را پشتیبانی می کنند و شما می توانید breakpoint ها را برای debug کردن کدتان در هنگام توسعه استفاده کنید.4. live sharevisual studio code live share یک ویژگی است که شما را قادر می سازد تا نمونه vs code خود را به اشتراک بگذارید و به فرد اجازه کنترل از راه دور را می دهد و موارد دیگر را مانند اشکال زدایی(debugger) اجرا می کند.live share ، به عنوان یک پلاگین publish شده است و در حال حاضر به صورت پیش نمایش است.نیاز دارید که پلاگین را نصب کنید و نوار وضعیت شما را قادر می سازد هر جلسه کاری را با یک لینک به اشتراک بگذارید، هنگامی که وارد سیستم می شوید(signed in)..5. split views, zen modeاگر شما دوست دارید بر روی چند ویرایشگر باز در پروژه یکسان کار کنید، شما متوجه جالب بودن این ویژگی خواهید شد. شما می توانید opt را فشار دهید و بر روی یک فایل کلیک کنید و یا روی یک فایل کلیک راست کرده و گزینه open to the side را انتخاب کنید. برای باز نمودن چندین فایل، صفحه نمایش را به چندین قسمت (split) مانند آنچه که در تصویر زیر مشاهده می کنید، تقسیم کنید.برای مثال، برای split کردن صفحه نمایش این مسیر را پیش بروید. به منوی view > editor layout بروید.در شکل زیر grid 2*2 نشان داده می شود.zen mode : گاهی اوقات شما فقط می خواهید روی کدتان تمرکز کنید. شکل زیر zen mode را نمایش می دهد که می تواند از طریق view > toggle zen mode یا با باز کردن command palette و تایپ کردن zen integrated terminal در دسترس است، و از طریق تنظیمات"terminal.external.osxexec": "iterm.app" قابل تنظیم است. ترمینال معمولا به طور پیش فرض در فضای کاری که شما قرار دارید، باز می شود و همچنین می تواند به صورت split باشد.8. plugins and themes ویژوال استودیو کد دارای یک پلاگین قدرتمند api است که توسعه دهندگان را قادر می سازد پلاگین های بسیار جذاب ایجاد کنند. من تعدادی از موارد رایجی که استفاده کرده ام را لیست می کنم، اما برای به دست آوردن لیست جامع، می توانید visual studio code marketplace را نگاه کنید. تم ها را می توان در اینجا یافت. linterseslint- ما را قادر می سازد تا کد جاوا اسکریپت را براساس قوانین eslint ای که ما فراهم کرده ایم قرار دهیم.tslint- ما را قادر می سازد تا کد typescript را بر اساس قوانین tslint ای که ما فراهم کرده ایم، لینک دهیم.prettier- یک قالب کد رایج با محبوبیت رو به رشد است و امکان جا به جایی javascript، typescript و css را فراهم می کند.language supportvisual studio code برای اکثر زبان های رایج، از نحو(syntax) پشتیبانی می کند، اما برای دریافت ویژگی ها و ابزارهای کامل زبان ، خودتان قادر هستید دانلود پلاگین های زبان را بیابید. از آنجا که من جاوا اسکریپت وgolang را بیشتر کار کرده ام، ابزار vscode-go را نصب کرده ام. شما می توانید لیستی از پلاگین های زبان را در اینجا ببینید.gitپلاگین های زیادی وجود دارد که پشتیبانی بیشتری برای git اضافه می کنند، اما یکی از رایج ترین آن هاgit lense است. در اینجا در مورد یک ویژگی مثالی زده شده است:هر زمان که روی یک خط کد کلیک می کنید، به شما نشان می دهد که چه کسی آن را ویرایش کرده است و اطلاعات بیشتری را در مورد آن کسب می کنید. شما می توانید در gitlense مستندات (داکیومنت) بیشتری بخوانید.settings رایج ترین تنظیمات پلاگین، تنظیمات sync نامیده می شود و به شما این امکان را می دهد تا نصب vs code را روی دستگاه های مختلف همگام سازید.dockerتوسعه توسط docker گاهی اوقات می تواند به معنی اجرای دستورات پیچیده docker و نظارت بر کارها باشد. نصب this docker extensions برخی از ابزارهای مفیدdocker مانند ایجاد فایلهایdocker ، فایلهای docker intellisense و حتی monitoring را اضافه می کند. در اینجا یک نمونه از container های در حال اجرا در vs code می باشد.همچنین با یک منوی context مفید همراه است. اگر با docker آشنا هستید، این پلاگین بسیار مفید خواهد بود.npm من ابزارهای npm داخلی را در بالا توضیح دادم. در اینجا تعدای پلاگین وجود دارد که کار npm را برای من ساده تر می کنند.version lenseبه راحتی نسخه های بسته های npm خود را مدیریت کنید.import cost بایت هایی که هر بسته در codebase شما import می کند را به راحتی ببینید.نشانه گذاری همه در یکی (markdown all in one):اجازه می دهد که markdown را زمانی که یک داکیومنت ورد و ویژگی های دیگری را می نویسید ویرایش کنید. زمانی که تعداد زیادی markdown می نویسید مفید است.:frameworksمن عمدتاً با vuejs و golang کار می کنم، اما چند پلاگین وجود دارد که از framework های مختلف جاوا اسکریپت پشتیبانی می کنند.vetur : برای vuejs به ما پشتیبانی می دهد.:angular essentials برای توسعه دهندگان angular دانلود نسخه ی pdf این مطلب به اشتراک بگذارید :

فریم ورک های جاوا اسکریپت touch به جای طراحی ریسپانسیو

درخواست حذف این مطلب
فریم ورک های جاوا اسکریپت touch دارای قابلیت های بسیار بیشتر نسبت به طراحی واکنش گرا هستند. فریم ورک های جاوا اسکریپت touch سبب افزایش کارایی اپلیکیشن می شود. آیا فریم ورک های touch javascript را می شناسید؟ اپلیکیشن های تحت وب روز به روز افزایش می یابند و این موضوع سبب شده است پیاده سازی اپ های بزرگ تحت وب کمی عذاب آور به نظر برسد. به هر حال باید فکری به حال معماری وب اپلیکیشن کرد. در واقع نیاز است که هسته کار میزان پشتیبانی خود را افزایش دهد. حال سؤال اینجا است که آیا دستگاه های جانبی مانند موبایل نیز باید از پشتیبانی وب اپلیکیشن ها بهرمند شوند یا خیر. در زمان ساخت و ایجاد یک اپلیکیشن باید به مسائلی از قبیل لود شدن در زمان کم، قابلیت توسعه پذیری و همین طور مطابقت داشتن با تم های مختلف توجه شود. وجود فریم ورک های touchjavascript سبب شده است که تا حدی بتوانید طراحی ریسپانسیو را بهبود بخشیم. باید بدانیم که فریم ورک های touch در واقع جایگزینی مناسب برای طراحی ریسپانسیو محسوب می شود.ویژگی های فریم ورک های touchjavascriptدر ابتدا می خواهیم به زبان ساده تعریفی از فریم ورک داشته باشیم. باید بدانید که فریم ورک ها در واقع مجموعه ای از توابع و همین طور ابزار محسوب می شوند، که کمک می کند وب اپلیکیشن ها با سرعت بیشتر و همین طور با اختلال و درگیری کمتر لود شود. حال باید بررسی کنید که ویژگی های touch javascript چیست. در نظر داشته باشید که مسائل گفته شده در این بخش باید برای تمامی فریم ورک های javascript اعمال شود. کامپوننت های ارائه شده باید فعال و فورم های اعمال شده باید پر کاربر باشد، از معماری های مختلف باید پشتیبانی صورت پذیرد. گسترش آن باید ساده و راحت باشد. بر پایه شی گرایی توسعه یافته باشد، قابلیت بهینه شدن باید بر روی آن اعمال شود. باید از html5 پشتیبانی کند.touch javascript و مدیریت رویدادهاحال می خواهیم بررسی کنیم که touch javascript چه می کند. در فریم ورک ها اغلب رویدادهای زیادی صورت می پذیرد و از این گزینه در طراحی ریسپانسیو وجود ندارد و البته کتابخانه و ابزارهای دیگر نیز وجود ندارد که چنین قابلیتی را به اپلیکیشن ها بدهد. در نظر داشته باشید که در touch یک سری رویدادها موجود است که سبب می شود اپلیکیشن حرفه ای شود. این رویدادها عبارت اند از : tap,tapstart,pinch و ... در صورتی که اگر بخواهید این گزینه را در طراحی ریسپانسیو اعمال کنید قطعاً باید به صورت جداگانه اقدام نمایید. بنابراین یکی از مهم ترین مزایای touch javascript وجود رویدادهای آماده است. در نظر داشته باشید که این گزینه سبب می شود که تعامل با کاربر آسان تر شود.touch javascript و کامپوننت های آمادهمی دانیم که در طراحی واکنش گرا چیزی به اسم کامپوننت های ui وجود ندارد و برنامه نویس مجبور به ساختن آن است در حالی که در فریم ورک touch بسیاری از ui باارزش وجود دارد که سبب می شود خیال برنامه نویس از وجود آن جمع شود. عده ای معتقد هستند که یک سری از کتابخانه ها در طراحی واکنش گرا وجود دارد که اجازه می دهد کامپوننت های ui را بنویسیم، بله این موضوع صحیح است اما باید بدانیم که این گزینه تنها برای حل مشکلات عمومی html مناسب است، اما هدف اصلی ما به این صورت است که بتوانیم حرکت قوی تری داشته باشید و فریم ورک های touch این امکان را در اختیار ما قرار می دهد. وجود فریم ورک های touch سبب می شود که تمامی اپلیکیشن ها به سادگی بر روی موبایل و تبلت ها نمایش داده شود و این موضوع می تواند کمک بزرگی به تکنولوژی کند.touch javascript و اجرای هماهنگ روی تمامی مرورگرهاافرادی که در لاین html برنامه نویسی می کنند بهتر می دانند که خروجی گرفتن برای مرورگرهای مختلف کار آسانی نیست! قطعاً برای این گزینه زمان زیادی صرف خواهد شد و هزینه های زیادی نیز در بر می گیرد. در نظر داشته باشید که فریم ورک های touchjavascript خروجی را در وضعیت از پیش تنظیم شده قرار می دهد و این موضوع سبب می شود که تا بتوانید بهترین خروجی را بر روی مرورگرهای مختلف به دست آورید. فرم های نمایشی یکسان در مرورگرهای دیگر سبب می شود که روند برنامه نویسی و همین طور سطح رضایت کاربران بیشتر شود.موضوع دیگری که در خصوص touch دیده می شود تغییر قالب بندی آسان است. در پروژه های نیمه تجاری باید شرایطی فراهم باشد تا بتوان به سادگی قالب و تم ها را تغییر داد. به این ترتیب فریم ورک های touchjavascript به شما این امکان را می دهد تا بتوانید یک مدیریت بسیار قوی بر روی تم ها داشته باشید و خروجی کار نیز بسیار زیبا خواهد بود.touch javascript و سازگاری با سیستم عامل های مختلفیکی از موضوعاتی که برنامه نویس ها به آن اهمیت می دهند یکبار نوشتن یک برنامه و اجرای آن در محیط های مختلف است. در واقع یکی از بهترین قابلیت های فریم ورک های touch javascriptاین است که سبب می شود برنامه نویس تنها یک بار زحمت نوشتن را بکشد و سپس آن را در بخش های مختلف استفاده کند. در نظر داشته باشید که کارایی touch javascript بسیار زیاد است و این موضوع برای افکت های انیمیشنی نیز بسیار دیده می شود و سبب یکنواخت سازی خروجی خواهد شد.

سوال هایی که باید از مشتریان قبل از شروع یک پروژه بپرسید.

درخواست حذف این مطلب
هیچ کس دوست ندارد وقت خود را روی یک پروژه تلف کند و بعد هیچ دستمزدی برای این کار نگیرد. به عنوان یک فرد خلاق، زمانی که یک مشتری کار شما را رد کند، برای شما دشوار خواهد بود و همین موضوع روی اعتماد به نفس شما در رفتن به پروژه ی بعدی تاثیر خواهد گذاشت.اگر شما سوال های درست بپرسید، راه درست در انجام وظیفه ی خود را خواهید دانست و نتیجه برای تمام کسانی که درگیر پروژه هستند بهتر خواهد بود بنابراین در این مقاله می خواهیم سوال هایی که باید از مشتریان قبل از شروع یک پروژه بپرسید را بررسی کنیم.مشتریان طراحی گرافیک در تنوع شگفت انگیزی، ظاهر می شوند اما هر مبتدی داستان خودش از ترس از برخی برخورد هایی که از مشتریان دریافت کرده اند را دارند. بسیاری از مشکلات زمانی، از سوءتفاهم ها ناشی می شود بنابراین اگر پتانسیل این کار از ابتدا کاهش داده شود از به وجود آمدن مشکلات می توان پیشگیری کرد.دانستن اینکه چه چیزی بپرسید مهم است و درواقع پرسیدن سوالات واقعا ضروری، مهم تر است. در این مقاله بخش اول این کاررا به اشتراک خواهیم گذاشت و زمانی که وقت آن برسد این کار را پیاده سازی خواهیم کرد.1.بودجه ی شما برای این پروژه چه قدر است؟این مورد مهم ترین سوال است. برخی از مشتریان انتظارات غیرواقعی دارند و انتظار یک هزینه ی ثابت برای پوشش هر چیزی که می خواهند را دارند. پرسیدن این سوال به صورت رک به مشتری این امکان را می دهد که بداند هزینه های شما ممکن است ثابت نباشد و باید انتظارات خودشان را مناسب با بودجه ی خود تنظیم کنند.به این روش شما قادر خواهید بود پیشنهادات بهتری را به مشتریان خود بدهید. زمانی که شما بدانید مشتری شما چقدر می تواند پرداخت کند، می توانید محاسبه کنید که چه گزینه هایی را به او پیشنهاد کنید. برای مثال تصاویر on-location بسیار گران تر از تصاویر stock هستند اما نتایج بسیار بهتری را می دهد. شما می توانید پیشنهاداتی بدهید که مشتری بتواند تصمیم های درست بگیرد.2. تا چه زمانی نیاز دارید که پروژه تکمیل شود؟مشتریان ممکن است انتظارات غیرواقعی درباره ی روند ساخت داشته باشند و متوجه نباشند که برای ساخت کار با کیفیت، زمان لازم است و از کار شما چیزی مانند نوشتن انتظار دارند.کار خلاقانه روندی است که بطور طبیعی زمان بر است ما باید لحظاتی از الهامات قوی داشته باشیم که یک شاهکار تولید شود. اما بطور طبیعی گام های زیادی برای اتمام یک پروژه وجود دارد: مفهوم سازی، جستجو، طراحی، ویرایش، تفسیر و غیره چند نمونه از این گام ها است.اگر مشتری زمان محدودی را مشخص کرد، آن ها را توجیه کنید. گاهی مشتریان واقعا نیاز دارند تا کار در یک بازه ی زمانی مشخص انجام شود گاهی اوقات هم وجود دارد که واقعا دلیلی برای زمان محدودی که مشخص می کنند ندارند. مشتریانی که با دلیل این کار را انجام می دهند باید اولویت های خود را مشخص کنند زیرا آن ها می دانند که چه چیزی را به چه دلیلی می دانند.3. مخاطبان این کار چه کسانی هستند؟این سوال در این که شما با رفتن راه غلط زمان خود را هدر ندهید بسیار مهم است. شما در اینکه چه گروهی از مخاطبان جذب کار شما می شوند نمی توانید با حدس و گمان پیش بروید. با داشتن این اطلاعات شما می توانید پیشنهاداتی به مشتری بدهید که به ذهن او خطور نکرده است. با این کار مشتری یک حس امنیت پیدا می کند که یک فرد حرفه ای را انتخاب کرده که در گرفتن تصمیمات درست می تواند به او کمک کند.4. این کار چه ویژگی هایی را حتما باید داشته باشد؟مشتریان باید تصویر خود از پروژه ای که می خواهند مخاطبان ببینند را شرح دهند. اگر آن ها نظری قطعی از پروژه و هدف خود نداشتند شما بدون هیچ هدف و نقطه ی شروعی خواهید بود.سپس چیزی که اتفاق خواهد افتاد این است که شما وقت روی طراحی چیزی می گذارید که ممکن است مشتری آن را نپسندد و این اتفاق نیز می افتد زیرا شما هیچ چشم انداز مشترکی ندارید.بهترین طراحی زمانی اتفاق می افتد که شما و مشتری خود، در هماهنگی در شکل نهایی پروژه و اهدافی که باید به آن دست یابید، باشید.5.چه موارد مشابهی را معرفی می کنید؟ممکن است شما به روشن سازی این سوال نیاز داشته باشید. برای مثال اگر یک پروژه ی طراحی وبسایت دارید باید از مشتری بپرسید که چه وبسایت هایی را از همه بیشتر دوست دارد و دلیلی که آن سایت ها را دوست دارد چیست. اگر یک پروژه ی طراحی طولانی مدت دارید بپرسید که لوگوی کدام شرکت ها را دوست دارند و دلیل آن چیست و به همین ترتیب ادامه دهید.پرسیدن این گونه سوال ها در ساخت پروژه ی موردنظر کمک می کند. این اطلاعات ممکن است لزوما بهترین چیز برای آن ها نباشد و اگر شما دانشی داشته باشید که در تصمیم گیری بهتر بتواند به آن ها کمک کند می توانید به مشتریان خود مشاوره دهید البته این کار به شما کمک می کند تا از موقعیت هایی که مشتری از آنچه تولید شده ناراضی باشد، جلوگیری کنید.اگر شما بدانید که مشتری چه چیزی را دوست دارد کار شما بسیار ساده تر می شود زیرا شما می توانید طراحی مناسبی داشته باشید. فقط اطمینان حاصل کنید که علاقه مندی های مناسب را گرفته اید به این ترتیب نقاط مشترک مثال ها را خواهید یافت.6. چه طراحی هایی در این مجموعه کمتر مورد علاقه ی شما است؟این سوال هم احتمالا مانند سوال های دیگر مهم است زیرا به شما کمک می کند تا متوجه شوید از چه چیز هایی باید بپرهیزید. هیچ چیزی مانند اینکه ندانید مشتری شما در طراحی از چه چیز هایی خوشش نمی آید پروژه ی شما را با شکست مواجه نمی کند.دوباره شما برای متوجه شدن ویژگی های مشترکی که مشتری به آن ها علاقه ندارد به مثال هایی مناسب نیاز دارید. دلیل دوست نداشتن این ویژگی ها را می توانید از مشتری بپرسید اما ممکن است پاسخ ها مبهم باشند و نتوانند به شما کمک کنند.چیزی که شما تلاش می کنید به آن دست پیداکنید چیزی است که در ذهن مشتری می گذرد ، تعداد کمی از مشتریان وجود دارند که به خوبی خودشان را بشناسند و بتوانند بینش خود را صریحا به شما بگویند. دیدن مواردی که مشتری دوست دارد و مواردی که دوست ندارد، به صورت بصری بیشتر از هرچیزی می تواند به شما کمک کند.7.آیا درحال حاضر یک طراحی یا سبک آماده دارید؟یکی از موارد شگفت انگیز ، این است که گاهی مشتری فراموش می کند بگوید درحال حاضر یک طراحی یا سبک آماده دارد و به شما برای تکمیل آن نیاز دارد. هرچه بیشتر درباره ی طرح فعلی مشتری خود بدانید طراحی باقی کار برای آن ها ساده تر است.گاهی مشتریان انتظار دارند شما درباره ی آن ها بدانید و مطمئن هستند که شما از قبل درباره ی تجارت آن ها شنیده اید و همه چیز را درباره ی آن ها می دانید بنابراین اطلاعات مهمی که شما برای تولید بهترین نتیجه برای آن ها نیاز دارید را به شما نمی گویند.گرفتن این اطالاعات وظیفه ی شما است. شما نمی توانید این کار را واگذار کنید تا خود مشتری به شما بگوید زیرا تقریبا هیچگاه آن ها این کار را نمی کنند.جمع بندیپرسیدن این سوال های ضروری قبل از اینکه پروژه را شروع کنید به شما در جلوگیری از اینکه مشکلی به وجود بیاید کمک می کند و همچنین به شما کمک می کند تا کار خود را بطور موثر تر و کارامد تر انجام دهید.هیچ کس دوست ندارد وقت خود را روی یک پروژه تلف کند و بعد هیچ دستمزدی برای این کار نگیرد. به عنوان یک فرد خلاق، زمانی که یک مشتری کار شما را رد کند، برای شما دشوار خواهد بود و همین موضوع روی اعتماد به نفس شما در رفتن به پروژه ی بعدی تاثیر خواهد گذاشت.اگر شما سوال های درست بپرسید، راه درست در انجام وظیفه ی خود را خواهید دانست و نتیجه برای تمام کسانی که درگیر پروژه هستند بهتر خواهد بود.

چرا net core. سی شارپ را به زبانی مهم برای یادگیری تبدیل کرده است؟

درخواست حذف این مطلب
آیا درحال حاضر #c بهترین زبان برای آموزش می باشد؟ با تنوع، ویژگی های جدید و oss گسترده می تواند بهترین گزینه باشد. چگونگی اینکه net core . سی شارپ را گام بزرگ بعدی قرار داده است را در این پست متوجه خواهید شد. برای سال ها من درباره زبان های برنامه نویسی چند منظوره و اینکه چگونه برخی از زبان های جدید یک پدیده ی جالب شدند مطالعه کردم. با گذشت زمان زبان هایی نظیر ruby، python، scala، go، node.js، swift و موارد دیگر به وجود آمدند. جالب است که ببینید مایکروسافت و گروه آن چه کاری را net core. انجام دادند و چگونه این زبان به یک پدیده ی جذاب جدید تبدیل شد.مشکل بسیاری از زبان های برنامه نویسی موجود این است که فقط برای یک مورد استفاده مناسب هستند. ruby و php برای وب اپلیکیشن ها عالی هستند swift یا objective-c، برای ساخت اپلیکیشن های ios یا macos هستند اگر شما خواستید که یک بک اند سرویس بنویسید می توانید از python ، جاوا یا زبان های دیگر استفاده کنید در کنار این موارد c# ، جاوااسکریپت و جاوا تنها زبان هایی هستند که برای طیف گسترده ای از موارد استفاده مناسب هستند.اگر بخواهید زبانهای برنامه نویسی زیادی را یاد بگیرید، مسئله ای دشوار خواهد بود و این موضوع فرصت های شغلی را محدود می کند. موضوع فوق العاده درباره ی c# تنوع بالای آن است که می تواند برای طیف متنوعی از اپلیکیشن ها استفاده شود. امروزه با net core. حقیقتا کار با macos و لینوکس هیچ محدودیتی وجود ندارد. این موضوع را در ادامه با جزئیات بیشتری بررسی خواهیم کرد.چرا c# و net core. گام های بزرگ بعدی هستند؟من با net core. بیش از یک سال کار کرده ام و بسیار تحت تاثیر آن قرار گرفته ام. حتی یک اپلیکیشن net. را برای اجرا روی یک mac پورت کرده ام که دیدن اجرای آن بعد از همه ی این سال ها بسیار شگفت انگیز بود.از آنجایی که شرکت ما ابزار های توسعه که با net core. هم کار می کند، می سازد، احساس می کنم که ما بیشتر با آن چیزی که در حال رخ دادن است مرتبط هستیم. پیش بینی می شود که net core. رشدی بسیار سریع خواهد داشت و من پیشبینی می کنم که نیاز به توسعه دهندگان net core. در سال 2018 بسیار زیاد خواهد بود. ما هرروزه با مشتریانی که هم اکنون در تولید، درحال اجرای اپلیکیشن های net core. صحبت می کنیم.بنابر شاخص برنامه نویسی tiobe، c# درحال حاضر یکی از پنج زبان برنامه نویسی برتر است.6 موردی که باید درباره ی c# و net core. بدانیداگر شما به یادگیری یک زبان برنامه نویسی جدید فکر می کنید، من می خواهم برخی از دلایل خود که چرا c# و net core. باید در راس لیست شما قرار بگیرد را در اختیار شما قرار دهم.یادگیری آساناگر شما در c ، جاوا یا حتی جاوااسکریپت برنامه نویسی کرده باشید syntax سی شارپ برای شما بسیار آشنا خواهد بود. خواندن و فهم syntax ساده است. بنابر شاخص tiobe که پیش تر آن را دیدیم میلیون ها توسعه دهنده وجود دارد که می توانند به راحتی از جاوا یا c به این زبان بیایند.منابع زیادی برای کمک به شما در یادگیری c# وجود دارد که بسیاری از آن ها رایگان هستند و برخی هم هزینه ی کمی دریافت می کنند.pluralsight: هزینه ی اشتراکی کمی را برای محتوا های آموزشی عالی دریافت می کند.microsoft virtual academy: فیلم ها و ارزیابی های رایگان دارد.microsoft getting started with c# : آموزش های تعاملی رایگان دارد.ویژگی های زبان مدرنnet. سابقه ی طولانی دارد و در طی 15 سال اخیر دائما تغییر و پیشرفت داشته است. در طی سال های اخیر من پیشرفت های بی نظیری از جمله mvc ، generic ها، linq، async/awaitو بسیاری موارد دیگر را دیده ام. به عنوان فردی که شخصا وقت خود را وقف این زبان کرده ام، مشاهده ی پیشرفت آن در طی زمان بسیار شگفت انگیز است. net core. تغییرات زیادی داشته است از جمله اینکه stack کاملا تغییر کرده است.در اینجا برخی از ویژگی های برتر را معرفی خواهیم کرد:-strongly typedclass librarie- های پایه ای قوی-برنامه نویسی ناهمگام (asynchronous)- سهولت استفاده از الگوی async/await-کالکشن garbage و مدیریت خودکار حافظهlinq- – زبان تجمیع شده ی کوئری هاgeneric- ها - list, dictionary-مدیریت پکیج-قابلیت اشتراک گذاری باینری ها از طریق framework ها و platform های چندگانهframework- هایی که استفاده از آن ها برای ساخت وب اپلیکیشن های mvc و api های restful ساده است.تطبیق پذیری: وب، موبایل، سرور، دسکتاپیکی از بهترین موارد درباره ی c# و net. تنوع بالای آن است. من می توانم اپلیکیشن های دسکتاپ،وب اپلیکیشن ها ،سرویس های پیش زمینه ای و حتی اپلیکیشن های موبایل را با استفاده از xamarin بنویسیم. درکنار c# تمام چیزی که باید بدانم کمی جاوااسکریپت (به کمک typescript) برای هک برخی از کد های ui (که من هنوز سعی می کنم از آن جلوگیری کنم) می باشد. templateها ی asp.net core حتی از layout های bootstrap و npm برای استفاده از کتابخانه های سمت کلاینت استفاده می کند.تطبیق پذیری یک چالش بزگ است زیرا سرمایه گذاری برای یادگیری زبان می تواند برای مجموعه ای گسترده از موارد استفاده شود. مجموعه ی مهارت های شما بسیار منعطف است. اگر شما می خواهید مواردی را که درحال انجام هستید را بایکدیگر ترکیب کنید، می توانید از ساخت وب اپلیکیشن ها به ساخت اپلیکیشن های موبایل پرش کنید. این مورد یک تفاوت اساسی با بسیاری از زبان های برنامه نویسی که تنها در سمت سرور کار می کنند، می باشد.اجازه دهید بهترین پشتیبانی از microsoft azure را فراموش نکنیم. هیچگاه مانند الان اجرا و توسعه در کلود تنها با چند کلیک ساده نبوده است. همچنین از مخازن docker نیز پشتیبانی می شود که توسعه ی اپلیکیشن ها aws یا ارائه دهندگان هاست دیگر را آسان می کند.ابزار های توسعه ی عالیویژوال استدیو همیشه به عنوان یکی از بهترین ide های دردسترس برای توسعه دهندگان معرفی شده است. این ide یکی از بهترین ویرایشگر های کد است که از ویژگی هایی نظیر کد کامپلیشن،دیباگ کردن، پروفایلینگ، ادغام با git ، تست unit و بسیاری موارد دیگر پشتیبانی می کند. در حال حاضر ویژوال استدیو یک نسخه ی کامل رایگان را به عموم ارائه می دهد.همچنین ممکن است که برای net core. به عنوان فایل های متنی پایه ای با ویرایشگر متنی مورد علاقه ی خود کدنویسی کنید. شما همچنین می توانید از visual studio code برای هر سیستم عاملی به عنوان یک ویرایشگر کد عالی استفاده کنید. برای افرادی که هیچگاه از vim یا emacs دست نمی کشند باید بگوییم که شما می توانید c# را نیز توسعه دهید.شما همچنین می توانید یک پلاگین برای ویژوال استدیو برای اضافه کردن همه ی کلید های میانبر مورد علاقه ی خود نصب کنید.تمام محیط net. سرشار از ابزار های توسعه ای شگفت انگیز است. برای مثال من کار بدون resharper از jetbrains را نمی توانم تصور کنم. تعداد زیادی از ابزار های عالی وجود دارد که شامل ترکیبی از محصولات open source و تجاری می باشد.استاندارد سازی مهارت هاnet. با مجموعه ای از class librarie های بسیار عالی همراه است. برخلاف node.js توابع رشته ای ساده نظیر leftpad() وجود دارد. آرایه ی وسیعی از کلاس های پایه ای واقعا نیاز به پکیج های خارجی را کاهش می دهد. مایکروسافت به برخی از پروژه های عمومی نظیر json.net برای اینکه یکی از کتابخانه های کلیدی که در بسیاری از پروژه ها استفاده شود، نیز تکیه کرده است.مایکروسافت مجموعه ی بسیار خوبی از طرح ها و تمرینات برای net. ارائه می دهد. برای مثال دسترسی به داده های استاندارد (entity framework) و frameworkهای آماده ی model-view-controller (mvc) وجود دارد. بسیاری از توسعه دهندگان از این framework های استاندارد استفاده می کنند. این ویژگی به توسعه دهندگان امکان جابجایی بین تیم ها و استانداردسازی های سریع ازاینکه چگونه موارد کار می کنند را می دهد. با این امکان دانش و مهارت شما قابل انتقال می شود.دات نت کور ، open source استیکی از بزرگترین تغییراتی که در net. اتفاق افتاده است open source کردن کد ها بوده است. درحال حاضر به صورت مجازی تمام کد ها در github برای عموم به منظور مشاهده، بررسی و مشارکت دردسترس است. این تغییر بزرگی بود که اکثر افراد در این حرفه فکر نمی کردند اتفاق بیفتد. (سورس کد)به عنوان یک توسعه دهنده نیاز دارید که عمیقا بررسی کنید که کد شما واقعا چه کاری انجام می دهد برای مثال در گذشته، یکبار فکر کردم که اگر dispose() را در database connection فراخوانی کنم آیا ارتباط را می بندد یا نه. اگر شما بتوانید به نحوی به source code دسترسی داشته باشید به سرعت می توانید اینگونه سوال ها را بررسی کنید.حتی اگر در source code مشارکتی نداشته اید از اجتماع بزرگی که در آن هستید سود خواهید برد. مسائل و بهبود ها به سرعت بحث کدزنی می شوند و برای استفاده در اختیار شما قرار می گیرد. دانلود نسخه ی pdf این مطلب به اشتراک بگذارید :

چه کارهایی را نباید هنگام یادگیری کدنویسی انجام دهیم؟

درخواست حذف این مطلب
تعدادی از خطاهای بسیار رایج وجود دارد که شما هیچگاه نباید در زمان یادگیری کد نویسی انجام دهید. این اشتباهات می تواند مشکلاتی در به دست آوردن سرعت اولیه در روند کاری ایجاد کند. بنابراین اگر شما به تازگی درحال شروع هستید این اشتباهات رایج را به خاطر داشته باشید.1. سرچ های بی پایان در تکنولوژی بدون صرف زمان روی نوشتن کدشروع کار بسیار مهم است. اگر یک زبان برنامه نویسی، framework وب یا پایگاه داده ی اشتباه انتخاب کنید چه می شود؟ کارشناسان اغلب در این مرحله با یکدیگر اختلاف نظر دارند بنابراین در تحقیق در این مورد با نظرات مختلفی روبرو خواهید شد.یکی از خوانندگان اخیرا درباره ی یکی از پست های اخیر من درباره ی این ایده کامنتی گذاشته است:تحقیقات من یک سال تمام طول کشید. درباره ی کدزنی و بخصوص درباره ی جاوااسکریپت بسیار مطالعه کردم بدون اینکه هیچ کدزنی اجام بدهم.متوجه شدم که با روزانه یک ساعت کدزنی در چند هفته بسیار بیشتر از تمام آن یک سال یاد گرفتم.حالا آرزو می کنم که کاش آن یک سال تمام را بجای خواندن، صرف، کدزنی می کردم. حالا کدزنی بهتر از این است که هیچ گاه شروع نمی کردم. من این کار را دوست دارم و با هر شرایطی دوست دارم یک برنامه نویس کامپیوتر شوم.حقیقت این است که شما نمی توانید کدزنی را با خواندن درباره ی آن یادبگیرید تنها راه یادگیری، کدزنی واقعی است.درباره ی یادگیری موارد اشتباه نگران نباشید. هر زبان برنامه نویسی که انتخاب کنید حداقل مفاهیم پایه ای برنامه نویسی را خواهید آموخت. مهارت هایی نظیر نام گذاری متغیر ها ، تعریف توابع و شکستن مسائل پیچیده برای هر زبان برنامه نویسی مورد نیاز است. بنابراین اینکه از کجا شروع به کار می کنید چالش بزرگی نیست.زمانی که شما یک زبان را یاد می گیرید شروع زبان دوم بسیار آسان تر است بنابراین اجازه ندهید که یک تحلیل غلط شما را از شروع کار بازدارد.2. در یادگیری کدزنی مانند مطالعه برای یک آزمون رفتار کردنصرف زمان برای حفظ جزئیات مانع شما در یادگیری مطالب مهم تر که مسائل اصلی هستند می شوند. در برنامه نویسی قرار نیست از شما امتحان گرفته شود. احتمالا شما هنگامی که نیاز دارید جواب را بدون استفاده از هیچگونه منبعی بیابید در شرایط سختی قرار نمیگیرید.درعوض همیشه قادر خواهید بود که با تکیه بر منابع راه حل ها را بیابید. استفاده از google یا کد هایی که قبلا نوشته اید، برای یافتن پاسخ تقلب نیست.با کد یادگیری اینکه از کجا پاسخ را بیابید مهم تر از حفظ کردن پاسخ است.3. اجازه دادن اینکه مشکلاتتان روی هم بدون بررسی اینکه آیا واقعا کار می کنند، انباشته شوند.بهترین توسعه دهندگان شکاک هستند و دائما بررسی می کنند تا اطمینان حاصل کنند کد آن ها همان کاری را که می خواهند به درستی انجام می دهد یا نه. این به این معنی است که زمان کمی را برای دوبرابر و سه برابر کردن بررسی ها قبل از رفتن به گام بعدی، صرف می کنند.بسیاری از مبتدیان تغییرات زیادی را در کد خودشان به وجود می آورند و انتظار دارند بطور معجزه آسایی کد آن ها به درستی کار کند. مشکل این دیدگاه این است که مسائل به صورت پشته ها روی یک دیگر قرار می گیرند و پیدا کردن اینکه چه چیزی مشکل ایجاد کرده است دشوار می شود.حل یک اپلیکیشن با یک مشکل کوچک راحت تر از اصلاح یک اپلیکیشن با 10 مشکل وابسته به هم است.بنابراین اگر می خواهید یک توسعه دهنده باشید، شکاک باشید.4. یادبگیرید به صورت ایزوله (isolation) کد بزنیدبهترین برنامه نویسان شامل اجتماع خود هستند. اکثر شهر ها جلسات متعددی با افراد، برای برنامه نویسی دارند و اجتماعات آنلاین بی نظیری مانندreddit و stackoverflow وجود دارد.مبتدیان معمولا در پیوستن به رویداد ها و اجتماعات آنلاین نگران هستند. دغل و کلاهبرداری حقیقی است اما اگر شما یک مبتدی هستید بدانید که دیگر برنامه نویسان می خواهند شما را به عنوان یک توسعه دهنده بالا بکشند. این دیدگاهی است که اکثر توسعه دهندگان با تجربه دارند و همچنین این دیدگاه در بسیاری از گروه ها مشترک است.هیچگاه اهمیت برقراری ارتباط یا دیگر توسعه دهندگان را زیر سوال نبرید. قبول کردن کدزنی و شرکت در پروژه ها یکی از بهترین راه ها برای بهبود و ایجاد اعتماد به نفس است.5. در روند برنامه نویسی بسیار احساسی برخورد کردندر راهی که می خواهید برنامه نویس بشوید با پیام های خطا مواجه خواهید شد. دچار مشکل شدن طبیعی است اما شما باید این دیدگاه را داشته باشید که اشتباه کردن طبیعی است.هرچه شما بیشتر و بیشتر پیغام های خطا ببینید سرانجام در فهم و حل مسائل بهتر و بهتر خواهید شد. یادگیری نحوه ی حل مسائل و خواندن پیام های خطا مهارتی است که یادگیری آن زمان بر است و اکثر افراد بطور طبیعی بلد نیستند.بدانید که دیدن یک پیغام خطا در مانیتور به این معنی نیست که شما یک برنامه نویس بد هستید درعوض به این معنی است که دنباله ای از سمبل های نامربوط را در ویرایشگر متن نوشته اید. این مشکل با تایپ کردن مورد درست در ویرایشگر متن قابل حل است.6. فکر کردن اینکه به 5 مانیتور برای یادگیری کدزنی نیاز داریدبرخلاف چیز هایی که هالیوود ممکن است به شما القا کند شما به تنظیم مانیتور های اضافه برای یادگیری کدزنی نیاز ندارید. حتی به یک کامپیوتر فوق العاده قوی نیز برای نوشتن اکثر برنامه های کامپیوتری نیاز ندارید. من اکثر کد های خود را در یک macbook air تقریبا قدیمی می نویسم که برای ساخت اکثر وب اپلیکیشن های مدرن مناسب است.احتمالا کامپیوتری که هم اکنون دارید به اندازه ی کافی برای استفاده در شروع برنامه نویسی مناسب است. بنابراین با همین کامپیوتری که دارید شروع کنید و همیشه بدانید که می توانید محیط کاری خود را بعدا بهبود دهید. در ابتدای شروع برنامه نویسی شما برنامه های پیچیده نخواهید نوشت. این را فراموش نکنید.7. از تفاوت بین حروف بزرگ و کوچک چشم پوشی نکنیددر برنامه نویسی مسائل جزئی نیز مهم هستند. حتی جزئیات کوچک نظیر تفاوت بین حروف بزرگ و کوچک. توجه زیادی به مواردی از قبیل موارد زیر داشته باشید:مفرد و جمع متفاوت هستند.عدد 0 با حرف o متفاوت است.dash با underscore متفاوت است.مهم است که به تفاوت های ظریف بین سمبل های مشابه توجه کنید.8.درخواست کمک با راه های اشتباهبعضی مواقع در روند کدزنی شما، به کمک نیاز خواهید داشت. هرکسی به کمک نیاز خواهد داشت. اگر شما سوال خود را به درستی بپرسید اغلب یک پاسخ مختصر و درست خواهید گرفت. اما اگر سوال خود را به درستی نپرسید اغلب این تجربه برای شما دشوار خواهد بود.4 مورد است که اگر انجام دهید می توانید اطمینان حاصل کنید که به درستی درخواست کمک کرده اید:جزئیات بیشتری را درنظر بگیرید و جزئیات اضافی را در سوال های خود مطرح کنید. ممکن است کسی بخواهد بداند اما ممکن است نیاز هم نشود.توضیح دهید که دقیقا چه چیزی انتظار دارید اتفاق بیفتد.توضیح دهید که دقیقا چه اتفاقی درحال رخ دادن است.توضیح دهید که چرا فکر می کنید باید برنامه ی شما به صورت دیگری اجرا شود.بار ها اتفاق افتاده است که شروع به ارسال یک پست در stackoverflow کرده ام و درحالی که این 4 قدم را شرح می دادم متوجه راه حل شده ام. این راه حل به شما کمک می کند به مشکلات به روش جامع تری فکر کنید.این کار به عنوان "rubber ducking" شناخته می شود و تکنیکی است که برنامه نویسان کامپیوتر استفاده می کند یعنی از یک اردک اسباب بازی روی میز کارشان سوال خود را می پرسند تا متوجه مشکل شوند.9. تصور اینکه برای اینکه یک برنامه نویس خوب باشید باید یک نابغه ی ریاضی باشیدداشتن درکی از جبر دوره ی دبیرستان می تواند مفید باشد اما مهارت حل مساله که شما در برنامه نویسی نیاز دارید با مهارتی که برای حل مسائل ریاضیات نیاز دارید متفاوت است. اگر شما یک فرد ریاضیاتی نیستید یا در ریاضیات دانشگاه مردود شده اید احتمالا بسیاری از مهارت های ریاضیاتی مورد نیاز را دارید (واگر این مهارت ها را ندارید می توانید کاملا سریع آن ها را یادبگیرید)10. اجتناب از عوض کردن کد های بدهر برنامه نویس بزرگی کد های بد بسیاری نوشته اند. بنابراین اگر شما تازه شروع به یادگیری کرده اید نیاز دارید که برای رسیدن به یک وضعیت بهتر، به راحتی بتوانید کد های بد خودتان را عوض کنید. شما این کار را با یادگیری راه های موثر و متفاوت برای حل مسائل، خواهید آموخت.زمان بلند کردن وزنه در باشگاه یک فرم کاملا مطمئنی برای هر نوع ورزشی وجود دارد هرچه این فرم را بهتر انجام دهید کار شما موثر تر خواهد بود کدزنی نیز مشابه همین کار است شما همیشه باید کد خود را بازبینی کنید و بررسی کنید که آیا باید آن را به روشی کارآمد تر بنویسید یا نه.زمان شروع اشتباه کردن کاملا طبیعی است. فقط این موضوع را مدنظر داشته باشید که چگونه می توانید کد خود را بهبود دهید.11. تنها درنظر گرفتن زمان تایپ فیزیکیتایپ کردن کد فقط بخشی از برنامه نویسی است اما ممکن است شما به صرف زمان برای تحقیقات/مطالعه وآموزش مفاهیم جدید برنامه نویسی به خودتان یا فهم راه حل و مواردی از این دست نیاز داشته باشید.یک روز معمولی برای یک برنامه نویس100% تایپ های بی پایان با یک صفحه کلید، کدزنی و حل مسائل نیست. برنامه نویسان زمان زیادی را برای تحقیقات درباره ی موضوعات فنی، تست موارد، آزمایش با اپلیکیشن و همچنین خواندن فایل ها صرف می کنند.12. یادگرفتن موردی قبل از رفتن به مورد بعدی کامپیوتر ها از سطوح متفاوتی ساخته شده است، بنابراین فهم 100% هر سطح غیر ممکن است.برای مثال اگر درحال یادگیری ruby هستید احتمالا می خواهید نحوه ی تعریف متد ها را یادبگیرید اما اگر بخواهید بدانید که چطور اینگونه کار می کند باید در source code عمیق شوید که با c که یک زبان برنامه نویسی متفاوت است، نوشته شده است. در این مثال این به این معنی است که برای فهم کامل ruby نیاز به فهم c هم دارید اما در حقیقت این کار نیاز نیست.در عوض در برنامه نویسی پذیرفتن حقایق همانطور که آن ها را یاد می گیرید مشکلی ندارد. شما نیاز ندارید که در هر روزنه ای که می بینید عمیق شوید تا بدانید "از کجا آمده و چگونه کار می کند؟". شکستن این عادت بسیار سخت می باشد زیرا شما شرطی شده اید که جواب هر سوالی را بدانید اما این دیدگاه را نباید در یادگیری کدزنی داشته باشید.13.انتظار اینکه زمان کافی وجود خواهد داشت تا همه ی جنبه های برنامه نویسی را یاد بگیرید.joel spolsky اصطلاح "duct-tape programmer" را تعریف کرد که تعریفی از اینکه چگونه نرم افزار ساخته می شود را ارائه می دهد.اکثر مردم فکر می کنند نرم افزار مانند ساخت یک موشک است که باید ماهرانه طراحی،ساخته و نهایتا پرتاب شود. درحقیقت ساخت نرم افزار بیشتر شبیه تعمیر یک موتور است که درحال پایین رفتن از یک تپه می باشد با استفاده از تنها کمی چسب و wd40 است.اجازه ندهید که انتظارات غیرحقیقی از اینکه جهان حقیقی چگونه کار می کند بر قضاوت شما تاثیر بگذارد. گاهی ممکن است احساس کنید هیچ ایده ای درباره ی کاری که درحال انجام آن هستید ندارید که این موضوع هیچ اشکالی ندارد.14.تسلیم شدن قبل از اینکه تغییرات مشخص شوندیادگیری کدزنی (مخصوصا در نقطه ای که بتوانید بین حرفه ها جابه جا شوید) کار بزگی است بنابراین بدترین کاری که می توانید انجام بدهید این است که دقیقا در نزدیکی دیدن نتیجه تسلیم شوید. برای رسیدن به اهدافتان نیاز به انضباط، زمان و تلاش زیادی دارید. در رسیدن به جایی که می خواهید باشید اشتباه در کار کافی که باید انجام دهید، نکنید.اگر از این 14 خطا های رایج اجتناب نکنید به شکلی عالی در روند برنامه نویسی خود پیش خواهید رفت بنابراین منتظر چه هستید؟ هیچ زمانی بهتراز حالا برای شروع نوشتن اولین خط کدتان نیست.

9 روش برای افزایش سرعت بارگذاری وب سایت

درخواست حذف این مطلب
یکی از مهم ترین جنبه های هر وبسایتی زمان بارگذاری آن است. مهم نیست که گرافیک شما چقدر جذاب یا محتوای آن چقدر جذاب باشد اگر وبسایت شما به سرعت به بازدیدکنندگان نمایش داده نشود، بعید است که دوباره از آن بازدیدکنند. در ادامه چند نکته ی کارا برای بارگذاری وبسایت دریک چشم به هم زدن و نگه داشتن بازدیدکنندگانتان ارائه خواهیم داد. 1.بهینه سازی، بهینه سازی، بهینه سازیدرصورتی که صفحات شما بیش از پنج عکس برای نمایش دادن دارد شما برای اینترنت به بهینه سازی تصاویر نیاز دارید که یعنی ضرورتا به معنی استفاده از یک روش فشرده سازی برای کوچک تر کردن تصاویر و بارگذاری سریع تر، می باشد. بسیاری از وبسایت های تجاری از این تکنیک برای تاثیرات عالی استفاده می کنند. فکر می کنید facebook چگونه به این سرعت بارگذاری می شود؟ یک راه حل خوب استفاده از فایل های gif تا حد امکان در گرافیک صفحات با فشرده سازی های کمتر ، می باشد. علاوه براین اگر تصاویر مهم هستند استفاده از تصاویر jpgs فشرده شده نیز بسیار خوب می باشد. فایل های png فضای زیادی را می گیرند و به راحتی به bitmap تبدیل نمی شوند.2.هنوز در عصر مجازی فاصله ی فیزیکی مهم است.اگر هاست وب شما از جایی که زندگی می کنید 40 مایل دورتر است بهتر است یک هاست جدید بگیرید. شما می توانید مکان هاست وب خودتان را با یک تست ساده ی ping متوجه شوید. اگر تست ping نشان دهد که هاست وب شما در سمت دیگر جهان است، بهتر است به هاست کردن در مکانی دیگر فکر کنید. هرچه افراد به شما نزدیک تر باشند زمان بارگذاری نیز کمتر خواهد بود.3. آیا تجهیزات هاست شما ارزان است؟امروزه به نظر می رسد که هاست وب سایت را با قیمت کمتری بگیرید بهتر باشد اما بطور کلی ممکن است این مورد چیز خوبی برای کسانی که نمی خواهند ماهانه صد ها دلار برای هاست کردن بپردازند، به نظر برسد اما همین می تواند روی زمان بارگذاری شما تاثیر بگذارد. معمولا شرکت های ارزان تر از تجهیزات ارزان تری استفاده می کنند که این به این معنی است که بازدیدکنندگان شما باید زمان بیشتری را برای بارگذاری صفحات صبر کنند. به خاطر داشته باشید که شما چیزی که بهای آن را پرداخته اید دریافت می کنید این قضیه درمورد هاست ها نیز صادق است. هزینه ی هاست کردن وب را درمقابل میزان ترافیکی که وبسایت شما را می گیرد محاسبه کنید. اگر شما روزانه هزاران بازدیدکننده دارید، ارتقاء به یک وب هاست گران تر که از تجهیزات بهتری استفاده می کند مقرون به صرفه است.4.ذخیره سازیآیا می خواهید که وب سایتتان برای بازدیدکنندگان تکراری در یک چشم به هم زدن بارگذاری شود؟ caching در php را فعال کنید با این کار زمانی که وبسایت بارگذاری شد، مرورگر تصاویر یا هرچیز دیگری را برای بازدید های بعدی ذخیره می کند. با این کار تنها یک بار بازدیدگنندگان باید منتظر اینترنت بمانند تا تصاویر را تولید کند.5.آیا پهنای باند شما کم است؟بسیاری از هاست های بزرگ تامین کنندگان پهنای باند چندگانه برای مدیریت ترافیک زیاد دارند. شما می توانید سرعت پهنای باند خود را با انجام تست trace route بدست آورید. زمانی که این کار را انجام دادید بررسی کنید که آیا تامین کنندگان شما با شرکت هایی نظیر sprint،level (3) communications،at&t،mci-verizon یا mizma لینک هستند یا نه اگر لینک بودند، پهنای باند شما شانس خوبی برای سریع بودن دارد اما بسیاری از وب هاست های کوچک تر نمی توانند با این شرکت ها همکاری داشته باشند. اهمیت این موضوع به اندازه ی وبسایت شما بستگی دارد. اگر شما درحال اجرای صفحات بزرگ هستید، بهتر است با یکی از وب هاست هایی که با یکی از شرکت های بالا لینک هستند کار کنید. این کار باعث می شود تا اطمینان حاصل کنید که صفحات شما به صورت مطمئن و سریع برای بسیاری از بازدیدکنندگان بارگذاری شود.مخاطبان خود را با وبسایت های انیمیشنی و وب های نمایشی تحت تاثیر قرار دهیدبا اسلاید ها، ما با یک صفحه ی خالی شروع نمی کنیم تنها کاری که باید انجام دهید این است که اجزایی که می خواهید را انتخاب کنید و آن ها را با یکدیگر ترکیب کنید. هر اسلاید باید با دقت ساخته شود تا سه معیار کلیدی زیبایی، کارایی و قابلیت استفاده ی مجدد را داشته باشد. به این ترتیب شما می دانید که همه ی اجزا با یکدیگر بصورت هماهنگ با افزایش تاثیر محتوا کار می کنند.6. فایل های css خود را کوچک نگه دارید.اگر سایز css شما بیش از 75kb است ممکن است باعث افت ui شما شود. اگر شما درحال اجرای وبسایت کوچک تری هستید، اطمینان حاصل کنید که این اندازه را کمتر از مقدار گفته شده نگه دارید. اما اگر وبسایت بزرگی با صفحات زیاد و گرافیک و کد زیاد دارید ضرورتا اندازه ی فایل css شما از مقدار گفته شده بیشتر خواهد بود. در این صورت اطمینان حاصل کنید که وبسایت خود را مرتبا مانیتور می کنید و قطعه کد هایی که مرتبا استفاده نمی کنید را حذف می کنید. این کار به خصوص زمانی که درحال انجام عملیات های بزرگ هستید، باعث کاهش زمان و هزینه هایی که به طراح وب برای ویرایش فایل css می پردازید، می شود.css بهینه سازی نشدهcss بهینه سازی شده7.چگونه پایگاه داده ی شما بهینه سازی شده؟پایگاه داده هایی که بطور ضعیف بهینه سازی شده اند باعث کندی وبسایت شما می شوند. اگر درباره ی نحوه ی انجام این کار مطمئن نیستید به سادگی در گوگل یک جستجو درباره ی بهینه سازی پایگاه داده برای پایین آوردن زمان بازگذاری صفحات انجام دهید. صد ها روش برای اطمینان حاصل کردن از اینکه پایگاه داده های شما به منظور بیشترین عملکرد بهینه سازی شده اند وجود دارد.8. حدف hotlinkingاصطلاح "hotlinking" یه معنی زمانی است که وبسایت های دیگر از وبسایت شما به عنوان یک سرور برای فایل ها استفاده می کنند، می باشد. برای مثال اگر یک فایل ویدیویی تعبیه شده در وبسایت خود دارید و وبسایت دیگری همان فایل را تعبیه کرده است هنوز از source code شما استفاده می کند این وبسایت hotlinking است یعنی یک وبسایت دومی از پهنای باند شما برای اجرای آن فایل استفاده می کند. hotlinking حجم بزرگی از پهنای باند وبسایت شما را می گیرد و واقعا زمان بارگذاری شما را کند می کند. برای حذف کردن hotlinking می توانید بررسی کنید که آیا وبسایت های شبکه های اجتماعی نظیر myspace در فایل های ارجاعی شما نشان داده می شود یا نه و یا بررسی کنید که آیا یک فایل خاص بیشتر از دفعاتی که فایل در آن صفحه قرار گرفته استفاده شده است یا نه. اگر متوجه hotlinking شدید معمولا می توانید ازطریق control panels وب هاست خودتان به محافظت از hotlinking دسترسی داشته باشید و اگر دسترسی نداشتید باید آن فایل را حذف کنید.9. استفاده ی کمتر از کد javascript و فشرده سازی آنکد های کمتر معمولا باعث بارگذاری سریع تر صفحات می شود. یک راه این است که کامنت کد های جاوااسکریپت صفحه ی خود را حذف کنید و فایل آن را فشرده کنید. با این کار تعداد خطوط کد شما کم می شود و همه چیز در یک جمله ی بلند قرار می گیرد. اما اگر شما یک کاربر باتجربه ی جاوااسکریپت نیستید این کار باعث می شود که خواندن کد شما سخت تر شود بنابراین قبل از اجرای این روش از کاری که می خواهید انجام دهید، اطمینان حاصل کنید. اگر به توانایی خود در خواندن کد جاوااسکریپت بدون کامنت یا خطوط کوتاه اطمینان ندارید، این کار را انجام ندهید. پس از فشرده سازی کد جاوااسکریپت برگرداندن آن به حالت اولیه، یک دردسر بزرگ است.جاوااسکریپت فشرده سازی نشدهجاوااسکریپت فشرده سازی شدهبا درنظر گرفتن این راهکار ها وبسایت شما شناخته شده می شود. اگر وبسایت شما به خوبی فشرده سازی شود به سرعت بارگذاری می شود و هدایت آن آسان می شود. شما تا به حال نیمی از رقابت را برده اید و مابقی آن به محتوا و ui شما بستگی دارد اما زمان بارگذاری سریع، اولین قدم در اطمینان حاصل کردن از اینکه کاربران وب، زمان استفاده از وبسایت شما زیاد صبر نمیکنند، می باشد. به اشتراک بگذارید :

آیا react.js بهترین فریمورک جاوااسکریپت در سال 2018 است؟

درخواست حذف این مطلب
react.js یک کتابخانه ی جاوااسکریپت front end منعطف و پویا برای ساخت ui است و پراستفاده ترین framework در بازار کار در سال 2018 شناخته شده است و همچنین امروزه یکی از محبوب ترین frameworkهای جاوااسکریپت است. اگرچه ما می دانیم که یادگیری react با یک شیب تند همراه است اما یادگیری آن ارزش دارد زیرا توسعه ی اپلیکیشن ها را کارامدتر و جذاب تر می کند. با درنظر گرفتن همه ی موارد گفته شده می توانیم بگوییم امسال ، سالی است که react.js در آن به عنوان بهترین framework دردسترس در بازار معرفی می شود.react چیست؟به زبان ساده react ،view ‘v’ در مدل model view controller (mvc) است. view ها فایل هایی هستند که در آن ها از منطق کمتر استفاده می شود و توسط ‘controller’ کنترل می شوند. react جایگزین view ها نمی شود بلکه آن ها را با ساخت کامپوننت های قابل استفاده ی مجدد (modal های pop up ، لیست ها، جدول های با قابلیت مرتب کردن و غیره) ماژولارتر می کند.ایده ی بزرگ پشت react این است که اجزای خودتان را مانند اجزای html بسازید. در react یک صفحه مجموعه ای از اجزای کوچک تر است، این اجزای کوچک تر کامپوننت نامیده می شود. توسعه دهندگان می توانند از این کامپوننت ها استفاده کنند و صفحات وب اپلیکیشن بزرگ بسازند که می تواند اجزای نمایش داده شده یا داده ها را بدون نیاز به بارگذاری مجدد صفحه، تعویض کند. یک مثال ساده از این موضوع می تواند like های facebookباشد. تعداد like ها می تواند بدون بارگذاری مجدد صفحه افزایش یا کاهش یاید. این متد باعث شده است که ساخت ui های پیچیده و مدرن بسیار آسان تر شود.تکامل reactدر سال 2011، توسعه دهندگان facebook با مشکلاتی در نگهداری و تعمیر کد ها روبرو شدند. همانطور که اپلیکیشن facebook ads به سرعت درحال رشد بود تیم نیاز به افراد بیشتری برای اجرای درست آن داشت. با گذشت زمان مدیریت اپلیکیشن دشوار شد زیرا با به روزرسانی های متعددی روبرو شدند. کد آن ها نیاز به یک به روزرسانی فوری برای کارآمدتر شدن نیاز داشت.مدل آن ها درست بود اما نیاز به تغییراتی در ux داشتند. jordan walke یک مهندس نرم افزار در facebookیک مدل اولیه ساخت که روند کار را سیستماتیک می کرد و این زمانی بود که react.js به وجود آمد.سیر زمانی reactنیاز بازار به توسعه دهندگان reactreact.js به یک مرتبه ی بلند جدیدی در june سال 2018 می رسد به این صورت که در بین زبان های محبوب بیش از 28% از موقعیت های شغلی را به خود اختصاص می دهد. شکاف بزرگ بین angular و react با کاهش محبوبیت angular حتی از قبل نیز بیش تر می شود.نیاز بازار برای توسعه دهندگان جاوااسکریپتنه تنها react در بازارکاری پیروز شد، بلکه در میزان دانلود npm نیز پیشتاز شد.تعداد دانلود های npmویژگی های مهم reactjsxاساسا jsx یک افزونه ی syntax از جاوااسکریپت است که توصیف می کند ui ما به چه صورتی باید باشد. jsxهمه کاره است و به شما این امکان را می دهد که هر افزونه ی جاوااسکریپتی را در آکولاد قرار دهید که می تواند یک عبارت منطقی نظیر (2+9) ، فراخوانی یک تابع یا دسترسی به اشیاء باشد. پس از کامپایل این افزونه های jsxبه فراخوانی های توابع جاوااسکریپت که اشیاء جاوااسکریپت را برمی گردانند، تبدیل می شوند. jsx همچنین می تواند در حلقه ها و جمله های شرطی نیز استفاده شوند. قطعه کد زیر مثالی از کد jsx می باشد:const person = { f_name: 'john', l_name: 'doe', }; function returnname(person) { return person.f_name + ' ' + person.l_name; } const elementjsx = hello, {returnname(person)}!; reactdom.render(elementjsx, document.getelementbyid('root'));در مثال بالا نتیجه ی تابع javascript ، returnname(person) ، را در اجزای و تعبیه کرده ایم.نتیجه ی این کد به صورت زیر می باشد:hello, john doe!dom مجازیreact یک حافظه ساختاری داده داخل حافظه می سازد که تغییرات ایجاد شده را محاسبه می کند و سپس مرورگر را به روزرسانی می کند. این ویژگی این امکان را می دهد که به جای به روزرسانی کل صفحه تنها کامپوننت هایی که تغییر کرده اند به روزرسانی شوند.جریان داده ی تک مسیریدر react ویرایش مستقیم هر ویژگی ممکن نیست درعوض باید یک فراخوانی تابع با کمک ویژگی هایی که می توانند تعریف شود فرستاده شود. این جریان داده به عنوان “single way data flow” (جریان داده ی تک مسیری) شناخته می شود.react nativereact کتابخانه های native دارد که facebook آن ها را در سال 2015 معرفی کرد. این کتابخانه های nativeمعماری برای اپلیکیشن های ios و android ارائه می دهد.react بطور خلاصهکامپوننت ها در reactیک کامپوننت react قطعه کدی است که بلاک های ساخت هر صفحه را نمایش می دهد. هر کامپوننت خودش یک تابع جاوااسکریپت است. برای ساخت یک صفحه ما هریک از این توابع را در یک ترتیب مشخص فراخوانی می کنیم، اگر نتوانستیم کامپوننت ها را در ترتیب درست خودشان را مدیریت کنیم layout نهایی صفحه به همان صورتی که ما می خواهیم، نخواهد بود.کامپوننت کلاس هاهمانطور که بالا اشاره کردیم یک راه نوشتن کامپوننت ها توابع جاوااسکریپت است. یک راه دیگر نوشتن کامپوننت ها نوشتن آنها به صورت کلاس یعنی کلاس های جاوااسکریپت است. این کلاس های جاوااسکریپت کامپوننت کلاس ها نامیده می شود. یک کامپوننت کلاس باید شامل یک تابع به نام render() باشد. این تابع رندر برای بازگرداندن jsx از کامپوننت پشتیبانی می شود. این کلاس کامپوننت ها به همان روش کامپوننت های تابعی استفاده می شوند ( بهتر است که از کامپوننت های تابعی بیش از کلاس کامپوننت ها استفاده کنید زیرا خوانا تر هستند.تغییر کامپوننت ها برمبنای وضعیتstate راهی برای تغییر ظاهر ui ما برمبنای event ها است. وقتی که کاربر روی یک دکمه کلیک می کند (button click -> event) state به روزرسانی خواهد شد که باعث تغییر در ui می شود. ما می توانیم وضعیت کامپوننت خودمان را با this.state ببینیم. در تابع render() همیشه “this” به معنی کامپوننتی در آن هستیم، می باشد.const comp = this.state.ismovieplaying ? ‘playing’ : ‘not playing’;قطعه کد بالا بررسی می کند که آیا فیلم در حال اجرا است یا نه و کامپوننت را برطبق پاسخ تغییر می دهد.تعامل بین کامپوننت هاباید راهی وجود داشته باشد تا کامپوننت ها بتوانند با یکدیگر تعامل داشته باشند. ما نیاز داریم تا بتوانیم داده ها را ارسال کنیم یا اگر کامپوننت درحال استفاده هست یا نه به آن بگوییم ما این کار را با prop ها انجام می دهیم. یک prop اطلاعات به اشتراک گذاشته شده توسط یک کامپوننت والد به کامپوننت فرزند می باشد. prop های jsxشبیه attribute های html است. زمانی که وضعیت container تغییر کند prop ما نیز تغییر می کند.event ها به عنوان prop هاprop ها محدود به تگ های اطلاعاتی نیستند بلکه می توانند توابع (event ها) نیز باشد. اگر prop یک event باشد بنابراین (برای مثال) event مربوط به “on click” وضعیت container را در حالتی که prop در آن قرار دارد تغییر خواهد داد. بنابراین صفحه ی مربوطه و داده ها یا کامپوننت هایی که درحال استفاده از آن container می باشند، روزرسانی می شود.معایب setstateتغییر مستقیم وضعیت با setstate روش خوبی نیست. react کمی صبر می کند تا ببیند آیا تغییرات دیگری وجود دارد یا نه سپس وضعیت را به روزرسانی می کند. setstate یک فراخوانی ارائه می دهد که شما باید از آن استفاده کنید.ref ها چه هستند؟در یک جریان معمولی ، prop ها تنها راه برای تعامل بین کامپوننت های والد و فرزند است. بعضی مواقع وجود دارد که شما باید یک فرزند بیرون از جریان کاری معمول تعریف کنید برای چنین مواقعی ref ها استفاده می شوند. refها راهی برای مدیریت کامپوننت هایی است که شما ساخته اید و یک ارجاع به element ها را برمی گرداند. خوب است که اجتناب از استفاده از ref ها برای هر چیزی که می تواند به صورت عادی انجام می شود را تمرین کنید.اجازه دهید از index.html بیرون برویمخوشبختانه ابزار هایی نظیر create react app به همه ی نیاز های شما توجه می کند. این ابزار را برای ساخت پروژه های react خودتان نصب کنید. آموزش های کوتاه آن ها دنبال کنید و با استفاده از دانشی که یادگرفته اید شروع به ویرایش جاوااسکریپت در دایرکتوری src کنید. react نیازی ندارد تا در تگ باشد.برترین وبسایت هایی که از react استفاده کرده اندلیست زیر 10 وبسایت ساخته شده است که از react.js در front end جاوااسکریپت استفاده کرده اند می باشد.facebookuberinstagramwhatsappkhan academyairbnbdropboxflipboardnetflixpaypalآیا react انتخاب مناسبی برای من است؟react یکی از framework های جاوااسکریپت پراستفاده و یکی از محبوب ترین framework های جاوااسکریپت front end از سال 2018 تاکنون است. ما صادقانه فکر می کنیم که react اولین انتخاب برای ساخت یک uiپیشرفته می باشد. برای جمع بندی مطالب 5 حسن react موارد زیر می باشد: 1.سهولت در یادگیری و استفاده2.کامپوننت ها با قابلیت استفاده ی مجدد3. dom مجازی (دیگر نیازی به بارگذاری مجدد کل صفحه نیست)4.ابزار های توسعه ی عالی5.نوشتن ساده تر با استفاده از jsx6.جامعه ی بزرگ که آماده ی کمک هستند.

نحوه قرار دادن متا تگ های html در angular 4

درخواست حذف این مطلب
متا تگ های html ، فرا داده (metadata) را برای صفحات html فراهم میکند.در angular 4 ، یک سرویس به نام “meta” وجود دارد که برای گرفتن و اضافه کردن متا تگ ها از آن استفاده می شود در این مقاله درباره ی نحوه ی استفاده از این سرویس و متا تگ های get/set html در angular 4 صحبت خواهیم کرد. همان طور که میدانید فرا داده ها (metadata) در صفحه نشان داده نمی شوند المان های meta معمولا برای مشخص کردن توضیحات صفحه ، کلمات کلیدی ، نویسنده ، آخرین تغییرات و برای دیگرفرا داده ها استفاده میشوند.فرا داده ها توسط مروگر (درباره ی نحوه نمایش محتوی یا بارگذاری صفحه) ، موتور های جست و جو(کامات کلیدی)،یا دیگر وب سرویس ها ، استفاده میشوند . تگ های متا نقش بسیار مهمی در seo دارند. در angular 4 ، یک سرویس به نام “meta” وجود دارد که برای گرفتن و اضافه کردن متا تگ ها از آن استفاده می شود. این سرویس می تواند به شما کمک کند که متا تگ های مربوطه را بر اساس مسیرهای فعال تنظیم کنید این سرویس به نوبه خود روی seo وبسایت شما تاثیر می گذارد.نحوه قرار دادن متا تگ های html در angular 4استفاده از سرویس meta انگولار 4 بسیار آسان است . این سرویس حاوی متد ها و نام ها یی است که آنقدر ساده هستند اصلا نیازی به توضیح ندارند.با یک مثال شما را با همه ی متد های آن آشنا میکنیمaddtagaddtagsgettaggettagsupdatetagremovetagremovetagelementما باید این سرویس را از @angular/platform-browser وارد (import) کنیم و آن را در یک کامپوننت یا در یک سرویس شما تزریق کنیم مثل : import { meta } from '@angular/platform-browser';addtagهدف این متد از روی نامش هم مشخص است . از این متد برای اضافه کردن تگ های متا استفاده میشود import { component } from '@angular/core'; import { meta } from '@angular/platform-browser'; @component({ selector: 'my-app', templateurl: './home.html', }) export class homecomponent { constructor(private meta: meta) { this.meta.addtag({ name: 'description', content: 'how to use angular 4 meta service' }); this.meta.addtag({ name: 'author', content: 'talkingdotnet' }); this.meta.addtag({ name: 'keywords', content: 'angular, meta service' }); } }addtagsمتد addtag ، متا تگ ها را یکی یکی اضافه میکند ، اما با استفاده از متد addtags شما می توانید یکجا ، چندین متا تگ را اضافه کنید. import { component } from '@angular/core'; import { meta } from '@angular/platform-browser'; @component({ selector: 'my-app', templateurl: './home.html', }) export class homecomponent { constructor(private meta: meta) { this.meta.addtags([ {name: 'description', content: 'how to use angular 4 meta service'}, {name: 'author', content: 'talkingdotnet'}, {name: 'keywords', content: 'angular, meta service'} ]); }هر دو متد addtag و addtags یک پارامتر دومی دارند (forcecreation) که از جنس bool می باشد.مقدار true یا false این پارامتر نشان دهنده این است که تگ حتی اگر از قبل موجود است ولی باز باید ایجاد شود import { component } from '@angular/core'; import { meta } from '@angular/platform-browser'; @component({ selector: 'my-app', templateurl: './home.html', }) export class homecomponent { constructor(private meta: meta) { this.meta.addtag({ name: 'description', content: 'how to use angular 4 meta service' }); this.meta.addtag({ name: 'description', content: 'how to use angular 4 meta service' },true); this.meta.addtag({ name: 'author', content: 'talkingdotnet' }); this.meta.addtag({ name: 'author', content: 'talkingdotnet' }); } }و در زیر html تولید میشوداین جا ، تگ متایی که نام (description) دارد دوباره اضافه شد . چون که force creation را روی true گذاشته ایمgettagمتد gettag مقدار متا تگ را بر میگرداند . این متد رشته یک selectorattribute (('name=author')) را میگیرد و یک htmlmetaelement را برمی گرداند . مثال زیر را ببینید import { component } from '@angular/core'; import { meta } from '@angular/platform-browser'; @component({ selector: 'my-app', templateurl: './home.html', }) export class homecomponent { constructor(private meta: meta) { this.meta.addtag({ name: 'description', content: 'how to use angular 4 meta service' }); this.meta.addtag({ name: 'author', content: 'talkingdotnet' }); const author = this.meta.gettag('name=author'); console.log(author.content); //talkingdotnet } }gettagsشبیه gettag میباشد ، متد gettags رشته یکattribute selector (('name=author')) را میگیرد و یک آرایه ای از htmlmetaelement را برمیگرداند import { component } from '@angular/core'; import { meta } from '@angular/platform-browser'; @component({ selector: 'my-app', templateurl: './home.html', }) export class homecomponent { constructor(private meta: meta) { this.meta.addtag({ name: 'description', content: 'how to use angular 4 meta service' }); this.meta.addtag({ name: 'author', content: 'talkingdotnet' }); this.meta.addtag({ name: 'author', content: 'other author' }, true); const author = this.meta.gettags('name=author'); console.log(author[0]); // console.log(author[1]); // } }updatetagاین متد محتوای(content) هر تگ موجود را آپدیت میکند this.meta.addtag({ name: 'description', content: 'how to use angular 4 meta service' }); this.meta.updatetag({ name: 'description', content: 'angular 4 meta service' });در اینجا، محتوای(content) متا تگِ با نام description ، آپدیت شد در این جا به “angular 4 meta service” تغییر پیدا کرد.removetagاین متد یک attribute selector میگیرد و تگ را حذف میکند . در یک برنامه ی واقعی ، گاهی وضعیت هایی وجود دارند که شما باید این کار را انجام دهید . اگر نیاز به این کار بود ، شما میتوانید از این متد برای حذف هر متا تگی استفاده کنید this.meta.addtag({ name: 'author', content: 'talkingdotnet' }); this.meta.removetag('name="author"'); removetagelementاین متد شبیه removetag می باشد ، متد removetagelement هم متا تگ حذف میکند اما این متد به جای گرفتن یک انتخابگر بصورت رشته ای (string selector)، بصورت مستقیم htmltagelement را به عنوان ورودی میگیرد this.meta.addtag({ name: 'author', content: 'talkingdotnet' }); const author = this.meta.gettag('name=author'); this.meta.removetagelement(author); در این جا ، ابتدا متا تگ author را از طریق متد gettag گرفتیم و آن را به removetagelement پاس دادیم تا آن را حذف کندنتیجه گیریسرویس meta انگولار 4 ، به شما امکان اضافه کردن ، آپدیت کردن ، گرفتن (get) ، و حذف متا تگ ها را می دهد. این سرویس درساخت متا تگ های داینامیک بر اساس مسیر های فعال برنامه ی انگولار به منظور seo بهتر ، کمک میکند. به اشتراک بگذارید :

معرفی middleware در asp.net core

درخواست حذف این مطلب
middleware یک نرم افزار است که به یک اپلیکیشن pipeline برای مدیریت درخواست ها و پاسخ ها اسمبل شده است. بنابراین در این مقاله می خواهیم asp.net core middleware را با یکدیگر بطور کامل بررسی کنیم. middleware چیست؟middleware یک نرم افزار است که به یک اپلیکیشن pipeline برای مدیریت درخواست ها و پاسخ ها اسمبل شده است. هر کامپوننت به صورت زیر است:انتخاب می کند که آیا درخواست ها را به کامپوننت بعدی در pipeline ارسال کند یا نه.می تواند کار ها را قبل و بعد از اینکه کامپوننت بعدی در pipeline استفاده شود، انجام دهد.request delegate ها برای ساخت pipeline درخواست ها استفاده می شوند. request delegate ها ، هر درخواست http را مدیریت می کند.request delegate ها با استفاده از متد های run ، map و use extension پیکربندی می شوند. یک request delegate شخصی می تواند به صورت in-line و به عنوان یک متد anonymous (in-line middleware نامیده می شود) و یا در یک کلاس با قابلیت استفاده ی مجدد تعریف شود. این کلاس های با قابلیت استفاده ی مجدد و متد های in-line anonymous ، middleware یا کامپوننت های middleware هستند. هر کامپوننت middleware در پایپ لاین request ها مسئول invoke کردن کامپوننت بعدی در pipeline یا قطع زنجیره در صورت لزوم است.migrate http modules to middleware (مهاجرت ماژول های http به middleware) تفاوت بین پایپ لاین request ها در asp.net core و asp.net 4.x را توضیح می دهد و نمونه های بیشتری از middleware را ارائه می دهد.ساخت یک پایپ لاین middleware با iapplicationbuilderپایپ لاین request ها در asp.net core از ترتیب request delegate ها همانطور که در نمودار زیر نشان داده است یکی پس از دیگری فراخوانی می شوند، تشکیل شده است :هر delegate می تواند عملیات ها را قبل و پس از delegate بعدی انجام دهد. یک delegate می تواند تصمیم بگیرد که یک request را به delegate بعدی ارسال نکند که به این کار قطع request های پایپ لاین می گویند. این قطع کردن، معمولا مطلوب است زیرا از کارهای غیرضروری جلوگیری می کند. برای مثال فایل استاتیک middleware می تواند یک request به یک فایل استاتیک برگرداند و باقی پایپ لاین را قطع کند. delegate های مدیریت exception باید درهمان ابتدا در پایپ لاین فراخوانی شوند تا بتوانند exception هایی که بعد ها در مراحل مختلف پایپ لاین اتفاق می افتد را بگیرند.ساده ترین اپلیکیشن ممکن asp.net core یک delegate برای request تنظیم می کند که همه ی request ها را مدیریت می کند این مورد شامل یک پایپ لاین واقعی نیست در عوض یک تابع anonymous برای پاسخ به هر درخواست http فراخوانی می شود. using microsoft.aspnetcore.builder; using microsoft.aspnetcore.hosting; using microsoft.aspnetcore.http; public class startup { public void configure(iapplicationbuilder app) { app.run(async context => { await context.response.writeasync("hello, world!"); }); } }اولین delegate در app.run پایپ لاین را مشخص می کند.شما می توانید delegate هایی از request های چندگانه را با استفاده از app.use زنجیر کنید. پارامتر next، delegate بعدی در پایپ لاین را نشان می دهد. ( به خاطر داشته باشید که شما می توانید پایپ لاین را با فراخوانی نکردن پارامتر next قطع کنید.) همانطور که در این مثال نشان داده شده است شما معمولا می توانید عملیات ها را هم قبل و هم بعد از delegate بعدی انجام دهید: public class startup { public void configure(iapplicationbuilder app) { app.use(async (context, next) => { // do work that doesn't write to the response. await next.invoke(); // do logging or other work that doesn't write to the response. }); app.run(async context => { await context.response.writeasync("hello from 2nd delegate."); }); } }هشدارnext.invoke را پس ازاینکه پاسخ به کلاینت ارسال شد فراخوانی نکنید. تغییرات در httpresponse پس ازاینکه پاسخ شروع شد باعث exception می شود. برای مثال تغییراتی نظیر تنظیم header ها، کد وضعیت(status code) وغیره باعث یک exception می شود. نوشتن در بدنه ی پاسخ پس از فراخوانی next:ممکن است باعث نقض پروتکل شود. برای مثال نوشتن بیشتر از طول محتوای تعیین شده باعث این مشکل می شود.ممکن است فرمت body را خراب کند. برای مثل نوشتن یک footer با html در یک فایل css باعث ایجاد این مشکل می شود.httpresponse.hasstarted یک سرنخ کارا برای مشخص کردن این است که آیا header ها ارسال شده اند یا نه و/یا بدنه نوشته شده است یا نه.ترتیب (ordering)ترتیبی که کامپوننت های middleware در متد configure اضافه می شوند ترتیبی که آن ها روی request ها invoke می شوند را مشخص می کند و ترتیب عکس هم ترتیب response ها را مشخص می کند. این ترتیب برای امنیت، کارایی و عملکرد بسیار مهم است.متد configure (در ادامه نشان داده است) کامپوننت های middleware زیر را اضافه می کند:مدیریت exception/خطافایل سرور استاتیکاهرازهویتmvcasp.net core 2.x public void configure(iapplicationbuilder app) { app.useexceptionhandler("/home/error"); // call first to catch exceptions // thrown in the following middleware. app.usestaticfiles(); // return static files and end pipeline. app.useauthentication(); // authenticate before you access // secure resources. app.usemvcwithdefaultroute(); // add mvc to the request pipeline. }asp.net core 1.x public void configure(iapplicationbuilder app) { app.useexceptionhandler("/home/error"); // call first to catch exceptions // thrown in the following middleware. app.usestaticfiles(); // return static files and end pipeline. app.useidentity(); // authenticate before you access // secure resources. app.usemvcwithdefaultroute(); // add mvc to the request pipeline. }در کد بالا useexceptionhandler اولین کامپوننت middleware اضافه شده به پایپ لاین است بنابراین تمام exception هایی که در فراخوانی های بعدی اتفاق می افتد را می گیرد.فایل استاتیک middleware در همان ابتدای پایپ لاین فراخوانی شده است بنابراین می تواند request ها و قطع کردن ها را بدون رفتن به کامپوننت های بعدی مدیریت کند. فایل استاتیک middleware هیچ امکان بررسی را ارائه نمی دهد. هر فایلی که توسط این موارد ارائه می شود از جمله مواردی که در wwwroot هستند بطور عمومی دردسترس هستند. فایل های استاتیک را به عنوان روشی برای امنیت فایل های استاتیک بررسی کنید.asp.net core 2.xاگر request به وسیله ی فایل استاتیک middleware مدیریت نشده بود به identity middleware (app.useauthentication) که اهراز هویت را انجام می دهد، ارسال می شود. در اینجا request های اهرازهویت نشده قطع نمی شوند و اگرچه identity ، request ها را اعتبارسنجی می کند اما مجوزدهی (و حذف کردن ها) تنها پس از اینکه mvc یک razor page خاص یا controller و اکشن را انتخاب می کند، اتفاق می افتد.asp.net core 1.xاگر request به وسیله ی فایل استاتیک middleware مدیریت نشده بود به identity middleware (app.useidentity) که اهراز هویت را انجام می دهد، ارسال می شود. در اینجا request های اهرازهویت نشده قطع نمی شوند و اگرچه identity ، request ها را اعتبارسنجی می کند اما مجوزدهی (و حذف کردن ها) تنها پس از اینکه mvc یک razor page خاص یا controller و اکشن را انتخاب می کند، اتفاق می افتد.مثال زیر یک ترتیب middleware که request ها برای فایل های استاتیک قبل از فشرده سازی پاسخ middleware توسط فایل استاتیک middleware مدیریت می شوند را نشان می دهد. فایل های استاتیک با این ترتیب از middleware ها فشرده سازی نمی شود. پاسخ های mvc از usemvcwithdefaultroute می توانند فشرده شوند. public void configure(iapplicationbuilder app) { app.usestaticfiles(); // static files not compressed // by middleware. app.useresponsecompression(); app.usemvcwithdefaultroute(); }استفاده از run و mapشما پایپ لاین http را با استفاده از use ، run و map پیکربندی می کنید. متد use می تواند پایپ لاین را قطع کند ( یعنی اگر next برای request delegate فراخوانی نشود.) run یک قرارداد است و برخی از کامپوننت های middleware ممکن است از متد های run [middleware] که در انتهای پایپ لاین اجرا می شوند، استفاده نکنند.افزونه های map* به عنوان یک قرارداد برای شاخه بندی(branching) پاپ لاین استفاده می شود. map پایپ لاین request را برمبنای منطبق شدن با مسیر داده شده منشعب می کند. اگر مسیر request با همان مسیر داده شده شروع شود، آن شاخه اجرا می شود. public class startup { private static void handlemaptest1(iapplicationbuilder app) { app.run(async context => { await context.response.writeasync("map test 1"); }); } private static void handlemaptest2(iapplicationbuilder app) { app.run(async context => { await context.response.writeasync("map test 2"); }); } public void configure(iapplicationbuilder app) { app.map("/map1", handlemaptest1); app.map("/map2", handlemaptest2); app.run(async context => { await context.response.writeasync("hello from non-map delegate. "); }); } }جدول زیر request ها و response ها از http://localhost:1234 را با استفاده از کد قبلی نشان می دهد:زمانی که map استفاده می شود سگمنت های مسیر منطبق شده از httprequest.path حذف می شود و برای هر request به httprequest.pathbase ملحق می شود. mapwhenپایپ لاین request را برمبنای پیش فرض داده شده منشعب می کند. هر پیش فرض از نوع func می تواند برای نگاشت request ها به یک شاخه ی جدید از پایپ لاین استفاده شود. در مثال زیر یک پیش فرض برای مشخص کردن وجود یک شاخه ی متغیر رشته ای کوئری وجود دارد: public class startup { private static void handlebranch(iapplicationbuilder app) { app.run(async context => { var branchver = context.request.query["branch"]; await context.response.writeasync($"branch used = {branchver}"); }); } public void configure(iapplicationbuilder app) { app.mapwhen(context => context.request.query.containskey("branch"), handlebranch); app.run(async context => { await context.response.writeasync("hello from non-map delegate. "); }); } }جدول زیر request ها و response ها از http://localhost:1234 با استفاده از کد قبلی را نشان می دهد:map از موارد تودرتو نیز پشتیبانی می کند. برای مثال: app.map("/level1", level1app => { level1app.map("/level2a", level2aapp => { // "/level1/level2a" //... }); level1app.map("/level2b", level2bapp => { // "/level1/level2b" //... }); });map همچنین می تواند سگمنت های چندگانه را به یکباره با یکدیگر منطبق کند. برای مثال: app.map("/level1/level2", handlemultiseg);middleware های داخلیasp.net core کامپوننت های middleware زیر را دارد و همچنین توصیفی از ترتیبی که باید اضافه شوند نیز وجود دارد: نوشتن middlewareدراصل middleware در یک کلاس کپسوله سازی می شود و با یک متد افزونه ای نمایش داده می شود. middleware زیر را درنظر بگیرید که culture را برای request جاری از رشته ی کوئری تنظیم می کند. public class startup { public void configure(iapplicationbuilder app) { app.use((context, next) => { var culturequery = context.request.query["culture"]; if (!string.isnullorwhitespace(culturequery)) { var culture = new cultureinfo(culturequery); cultureinfo.currentculture = culture; cultureinfo.currentuiculture = culture; } // call the next delegate/middleware in the pipeline return next(); }); app.run(async (context) => { await context.response.writeasync( $"hello {cultureinfo.currentculture.displayname}"); }); } }توجه: کد نمونه ی بالا برای ساخت یک کامپوننت middleware نوشته شده است. سراسری سازی و محلی سازی برای پشتیبانی از محلی سازی های داخلی asp.net core را بررسی کنید.شما می توانید middleware را با ارسال در culture آزمایش کنید. برای مثال: http://localhost:7997/?culture=noکد زیر delegate مربوط به یک middleware را به یک کلاس انتقال می دهد: using microsoft.aspnetcore.http; using system.globalization; using system.threading.tasks; namespace culture { public class requestculturemiddleware { private readonly requestdelegate _next; public requestculturemiddleware(requestdelegate next) { _next = next; } public async task invokeasync(httpcontext context) { var culturequery = context.request.query["culture"]; if (!string.isnullorwhitespace(culturequery)) { var culture = new cultureinfo(culturequery); cultureinfo.currentculture = culture; cultureinfo.currentuiculture = culture; } // call the next delegate/middleware in the pipeline await _next(context); } } }توجهدر asp.net core 1.x نام متد های task در middleware باید invoke باشد. در asp.net core 2.0 یا به بعد نام می تواند invoke یا invokeasync باشد.متد افزونه ای زیر middleware را از طریق iapplicationbuilder به نمایش می گذارد: using microsoft.aspnetcore.builder; namespace culture { public static class requestculturemiddlewareextensions { public static iapplicationbuilder userequestculture( this iapplicationbuilder builder) { return builder.usemiddleware(); } } }کد زیر middleware را از configure فراخوانی می کند: public class startup { public void configure(iapplicationbuilder app) { app.userequestculture(); app.run(async (context) => { await context.response.writeasync( $"hello {cultureinfo.currentculture.displayname}"); }); } }middleware باید اصول وابستگی صریح را به وسیله ی به نمایش گذاشتن وابستگی های خود در constructor، دنبال کند. middleware در طول حیات هر اپلیکیشن یک بار ساخته می شود. اگر می خواهید سرویس ها را با middleware در یک request به اشتراک بگذارید، در ادامه وابستگی های per-request را مطالعه کنید.کامپوننت های middleware می توانند وابستگی های خود را از طریق تزریق وابستگی ها از طریق پارامتر های constructor تامین کنند. همچنین usemiddleware می تواند پارامتر های اضافی را مستقیما بپذیرد.وابستگی های per-request چون middleware در تنظیمات اپلیکیشن ساخته می شود ونه در هر request ،بنابراین محدوده ی طول عمر سرویس های استفاده شده توسط سازنده های middleware با سایر انواع وابستگی های تزریق شده در هر request به اشتراک گذاشته نمی شود. اگر شما باید یک محدوده ی سرویس بین middleware خودتان وسایر انواع دیگر به اشتراک بگذارید این سرویس ها را به متد های invoke اضافه کنید. متد invoke می تواند پارامتر های اضافی که توسط تزریق وابستگی ها جمع شده اند را بپذیرد. برای مثال: public class mymiddleware { private readonly requestdelegate _next; public mymiddleware(requestdelegate next) { _next = next; } public async task invoke(httpcontext httpcontext, imyscopedservice svc) { svc.myproperty = 1000; await _next(httpcontext); } } به اشتراک بگذارید :

تفاوت بین frontend و backend چیست؟

درخواست حذف این مطلب
برای اینکه در دنیای وب موفق شوید نیاز است که شما با دو مفهموم مهم و کاربردی در دنیای وب، frontend و backend و تفاوت بین این دو آشنا باشید و بتوانید با توجه به نیازتان از آن ها بهره مند شوید. در این مقاله سعی بر این است که در مورد این دو مفهوم و تفاوت بین آن ها، مطالب آموزنده و مفیدی در اختیار شما عزیزان قرار گیرد.اگر تازه شروع به یادگیری توسعه وب کرده اید، احتمالا در مورد frontend و backend زیاد شنیده اید. اما دقیقاً منظورچیست؟ اگر شما یک مبتدی در این زمینه هستید، شناخت نسبت به آن ها و اینکه هر کدام چه مواردی را پوشش می دهند مشکل است.در حالی که توسعه دهنده frontend و backend به طور مشخصی از یکدیگر متمایز شده اند و مانند دو روی یک سکه مشابه هستند. عملکرد وب سایت این گونه است که با هر طرف که ارتباط برقرار می کند به آن اعتماد کرده و به طور موثر با طرف دیگر به عنوان یک واحد تنها عمل می کند. آیا یکی از دیگری مهم تر است؟ نه. هر دوی آن ها نقش بسیار مهمی در توسعه وب دارند. پس ما باید از کجا شروع کنیم؟ بیایید با یک سکه موضوع را بررسی کنیم.معرفی توسعه دهنده frontendfrontend یک وب سایت به معنای هر آنچه در یک سایت مشاهده می کنید و با مرورگرتان در تعامل و ارتباط است، می باشد. همچنین تحت عنوان "سمت سرویس گیرنده" شناخته می شود و شامل همه مواردی است که کاربر مستقیماٌ تجربه می کند: از متن ها و رنگ ها گرفته تا دکمه ها، عکس ها و منوها.بیایید یک کسب و کار را شروع کنیم. برای مثال، یک شرکت دارید، بنابراین به یک وب سایت حرفه ای نیاز دارید تا شرکت و جایگاهتان و موقعیت شرکت را به مشتریان معرفی کنید. ممکن است شما تعدادی عکس و یکسری اطلاعات در مورد محصولات خود داشته باشید. شما به همه فناوری های frontend برای ایجاد سایتتان نیاز دارید.زبان های frontendاین سه زبان با هم قادر هستند موارد ذکر شده در بالا را برای ما انجام دهند:html- این زبان، یک زبان برنامه نویسی اساسی و کاربردی است که محتوای وب را ایجاد و سازماندهی می کند و توسط یک مرورگر نمایش داده می شود. شما می توانید در مورد html بیشتر بدانید.css- یک زبان همراه با html است که سبک محتوای یک وب سایت مانند طرح، رنگ، فونت ها و غیره را مشخص می کند.javascript- این زبان برنامه نویسی، بیشتر برای عناصر تعاملی برای مثال، منوهای کشویی، فرم های تماس و پنجره هایی که به صورت modal باز می شوند، استفاده می شود.بودن همه این ملزومات در کنار هم، تمام موارد بصری هنگام بازدید سایت را ایجاد خواهد کرد- برای مثال، خرید آنلاین، خواندن اخبار، بررسی ایمیل و یا جستجوی گوگل.علاوه بر زبان های front-end اساسی و پایه ای، شما با framework هایی مانند bootstrap و angular و همچنین کتابخانه های جاوا اسکریپت مانند jquery ، و افزونه های css مانند sass و less آشنا خواهید شد. یک لیست طولانی از منابع مانند مواردی که ذکر شد وجود دارد که html، css و جاوا اسکریپت را پشتیبانی می کنند. هدف آنها، ساده ساختن کد (و فرآیند نوشتن آن) و کنترل بهتر کد و سازماندهی با ارائه ابزار و قالب های مختلف است که با زبان های برنامه نویسی رایج سازگار می باشند.مقایسه توسعه frontendبا طراحی وب سایتاز نکات مهم و حائز اهمیت این است که هرچند توسعه frontend با سمت بصری و تعاملی یک وب سایت سروکار دارد، اما نمی توان آن را طراحی وب محسوب کرد.توسعه دهندگان frontend در واقع این جنبه های front-facing یک وب سایت را طراحی نمی کنند؛ این کار، تخصص یک طراح وب یا به طور تخصصی تر، طراح uiاست. توسعه دهنده frontend این طرح را میگیرد و با استفاده از زبانهای frontend که در بالا صحبت کردیم، قابلیت های کاربردیی را ایجاد می کند.بنابراین، طراحان وب با طرح سروکار دارند: ظاهر و احساسی که وب سایت به کاربر منتقل می کند، نحوه قرار دادن آن، و اینکه چه دکمه ها و نقاط لمسی را کاربر تجربه می کند. توسعه دهندگان frontend با قابلیتها سروکار دارند؛ در واقع این طراحان، مهندسانی هستند که این طرح ها را به یک وب سایت تعاملی زنده تبدیل می کنند.پشت صحنهبه سرعت چند ماه به جلو پیش بروید. وب سایت کسب و کار شما عالی به نظر می رسد، و شرکتتان فوق العاده موفق شده است. در حال حاضر مشتریان می خواهند از شرکت شما برای دوستانشان خرید کنند و طرح چنین سوالاتی شروع می شود که آیا می توانند آنلاین سفارش دهند؟بنابراین شما تصمیم می گیرید یک فروشگاه آنلاین باز کنید که در آن افراد می توانند هر زمان که بخواهند خرید کنند و سفارش دهند. به این معنی است که سایت شما اکنون باید اطلاعات مربوط به محصولات، خرید، پروفایل کاربر، کارت اعتباری و غیره را ذخیره کند. چگونه این داده ها را مدیریت می کنید؟ این جاست که توسعه backend به وجود می آید.معرفی توسعه دهنده backendآنچه که تاکنون در اختیار داشته اید، نمونه ای از یک وب سایت استاتیک است – در واقع محتوای آن تغییر چندانی نمی کند. برای سایت های استاتیک، تمام اطلاعات ضروری، کد frontend درون صفحه وب را تعیین می کنند. وب سایت های استاتیک برای نمایش چیزهایی مانند کسب و کار، رستوران ها، اوراق بهادار و یا پروفایل های حرفه ای مناسب هستند. اما اگر میخواهید سایت شما آنگونه شود که کاربران بتوانند با آن ارتباط برقرار کنند، باید در مورد آنچه که در پشت صحنه وب سایت اتفاق می افتد، عمیق تر بنگرید و بیشتر بدانید.قسمت backend (یا "سمت سرور")، آن قسمت از وب سایت شماست که دیده نمی شود. این قسمت، مسئولیت نگهداری و سازماندهی داده ها و اطمینان از اینکه همه موارد در سمت سرویس گیرنده واقعاً کار می کنند را برعهده دارد. backend با front-end ارتباط برقرار می کند، اطلاعات ارسال و دریافت می شود تا به عنوان یک صفحه وب نمایش داده شود. هر بار که یک فرم تماس را پرمی کنید، یک آدرس وب را تایپ می کنید یا خرید انجام می دهید (هر تعامل کاربر در سمت سرویس گیرنده)، مرورگر شما یک درخواست را به سمت سرور ارسال می کند، که اطلاعات را در فرم کد frontend که مرورگر قادر است تفسیر کند و نمایش دهد باز می گرداند.سایت جدیدتان به component های اضافی backend نیاز دارد تا به یک برنامه وب سایت داینامیک تبدیل شود- وب سایتی که محتوای آن می تواند بر اساس آنچه در پایگاه داده آن است و توسط ورودی کاربر تغییر یابد. و از یک وب سایت استاتیک که پایگاه داده ای ندارد، متمایز است به دلیل این که محتوای آن تغییر نمی کند.تنظیمات سمت سرور وبسایت شما نیاز به یک پایگاه داده برای مدیریت تمام اطلاعات مشتری و محصول دارد. یک پایگاه داده محتوای وب سایت را در یک ساختار ذخیره می کند که بازیابی، سازماندهی، ویرایش و ذخیره سازی اطلاعات را آسان می کند. روی یک کامپیوتر از راه دور به نام سرور اجرا می شود. پایگاه های داده های مختلفی وجود دارد که به طور گسترده ای مورد استفاده قرار می گیرند، مانندmysql، sql server، postgressqlوoracleبرنامه شما هنوز دارای کد frontend است، همچنین باید با استفاده از یک زبان که یک پایگاه داده می تواند آن را تشخیص دهد، ساخته شود. برخی از زبانهای backend رایج، ruby، php، java،.net وpythonهستند. این زبان های برنامه نویسی اغلب روی framework هایی که فرآیند توسعه وب را ساده می کنند، اجرا می شوند. برای مثال،rails، framework ای است که در ruby نوشته شده است. “ruby on rails”، فن آوری محبوبی برای ساخت برنامه های وب داینامیک است که روند را بسیار سریعتر می کند.اگر تمام مواردی که ذکر شد در کنارهم درست کار کنند، مشتریان می توانند وب سایت شما را بازدید کنند و آنچه که می خواهند خرید کنند را جستجو کنند. وقتی که آن چیزی را که برای خرید مدنظرشان است را در قسمت جستجو (درfrontend) تایپ می کنند، برنامه عبارت تایپ شده در این قسمت را در تمام داده های ذخیره شده در پایگاه داده (backend) جستجو کرده و اطلاعات مناسب را در فرمی که در قسمت frontend به عنوان لیست درخواست شده کاربر قرار گرفته است، نمایش می دهد.باز برای کسب و کار!بنابراین در حال حاضر شما یک برنامه وب داینامیک دارید که از فن آوری های frontend و backend استفاده می کند. شما از زبان های frontend برای عالی به نظر رسیدن سایتتان استفاده می کنید. در پشت صحنه، backend تمام component های frontend را در بر می گیرد و امکان انجام دادن کارهایی مانند ذخیره کردن سوابق و تاریخچه خرید و جزئیات محصول، ایجاد حسابهای کاربری قابل ویرایش و موارد دیگر را فراهم می کند. همانطور که مشاهده می کنید، هر دو قسمت نقش های متفاوتی دارند. اما در نهایت این دو قسمت با هم تجربه کاربر را تعریف می کنند و باعث می شوند که وب سایت به کلی کار کند.frontend در مقابل backend: کدام یک را باید یاد بگیرم؟اگر علاقه مند به یادگیری وب سایت هستید اما در انتخاب frontend وbackendمطمئن نیستید، درنظر گرفتن وظایف روزانه هر کدام حائز اهمیت است. اگر شما علاقه مند به ایجاد طرح های بصری واعمال آن ها در زندگی وایجاد یک تجربه کاربری درجه اول هستید، پس احتمالاً کار frontend برای شما لذت بخش است.اگر از کار کردن با داده ها، بدست آوردن الگوریتم ها و پیش بردن راه هایی برای بهینه سازی سیستم های پیچیده لذت می برید، احتمالاً ترجیح می دهید به عنوان یک توسعه دهنده backend کار کنید.با این حال، تمایز بین frontend و backend همیشه خیلی واضح نیست. برخی از توسعه دهندگان هم در frontend و هم در backend مهارت دارند؛ این افراد تحت عنوان full stack developers شناخته می شوند.در حال حاضر خوشبختانه شما با تفاوت های frontend و backend و اینکه چگونه برای ایجاد وب سایت های کاربردی و کاربرپسند با هم کار می کنند، آشنا شدید.

20 طراحی ui برای footer وبسایت

درخواست حذف این مطلب
از مثال های این مقاله می توانیم مطالب مختلفی درباره ی footer ها و طراحی آن ها متوجه شویم. طراحان می توانند footer های مشابهی نظیر مواردی گفته خواهد شد طراحی کنند و از آن ها در وبسایت خود استفاده کنند. بسیاری از ما footer را به عنوان یک المان مهم درنظر نمی گیریم اما درواقع footer شامل موارد مهمی در رابطه با وب سایت و شرکت یا سازمان وبسایت می باشد بنابراین تمام این وبسایت دررابطه با طراحی ui برای footer های وبسایت خواهد بود. واضح است زمانی که کسی وارد یک وبسایت می شود اول به header و template وب سایت توجه می کند نه به محتوای آن. بسیاری از طراحان به footer به عنوان یک المان مهم در طراحی وبسایت توجه نمی کنند. اما طراحی footer در یک وبسایت به صورت عالی بسیار مهم است. به همین دلیل است که زمانی که یک شخص به دنبال چیزی درباره ی شرکت یا اطلاعات مرتبط با وبسایت است برای جزئیات بیشتر به footer مراجعه می کند. برای مثال تلفن تماس، مکان شرکت یا سازمان در footer وبسایت ارائه می شود. بنابراین اینجا به طراحی های خلاقانه ی ui برای footer وبسایت خواهیم پرداخت.بطور کلی footer به همان صورتی که header طراحی می شود، طراحی می شود. رنگ و template برای header و footer یکسان است بنابراین درباره ی رنگ footer صحبت نخواهیم کرد.اما شکل یا طراحی footer ممکن است با خلاقیت های طراحی تفاوت کند. طراحان ممکن است درحین طراحی footer ها به موارد مختلفی فکر کنند که می تواند شامل شکل یا طراحی های برخی سمبل ها در footer باشد.مقالات مرتبط: template های زیبای bootstrap برای footerبرای کمک به طراحان در طراحی footer های زیبا ما لیستی از footer ها که مثال های زیادی از footer ها را نمایش می دهد تهیه کرده ایم و طراحان به راحتی می توانند به آن ها ارجاع دهند. این لیست به صورت زیر است:footer برای go2africafooter وبسایت wedyطراحی footer materialie footernewsletter و اشتراک در خبرنامه وبوبسایت footerطراحی footer خرید آنلاینfooter وبسایت meetinghero به اکتشاف دعوت می کندfooter گسترده – foodspaceطراحی footerبازطراحی homepage مدیریت مدل divisionیک طراحی دیگر از footerاخبار و footerfooter آکادمیکطراحی ui برای footerlandrover footerkiddo – footer فروشگاه لباس کودکانfooterآزمایش با layoutexit hero styleguide wrapperنتیجهاز مثال های بالا می توانیم مطالب مختلفی درباره ی footer ها و طراحی آن ها متوجه شویم. طراحان می توانند footer های مشابهی نظیر موارد بالا طراحی کنند و از آن ها در وبسایت خود استفاده کنند. بسیاری از ما footer را به عنوان یک المان مهم درنظر نمی گیریم اما درواقع footer شامل موارد مهمی در رابطه با وب سایت و شرکت یا سازمان وبسایت می باشد بنابراین تمام این وبسایت دررابطه با طراحی ui برای footer های وبسایت بود.

نحوه نصب و پیکربندی typescript

درخواست حذف این مطلب
در این مقاله به روند نصب typescript و تنظیمات ویرایشگر برای توسعه ی typescript خواهیم پرداخت. مایکروسافت در ارائه تنظیمات ساده برای نصب typescript در همه ی platform ها یعنی windows ، macos و linux به خوبی عمل کرده است. که در این پست آن ها را بررسی خواهیم کرد. توجهاین مقاله از کتاب typescript 2.x by example توسط sachin ohri نوشته شده است. این کتاب شامل مثال ها و پروژه های ساده برای یادگیری مفاهیم اساسی زبان محبوب برنامه نویسی typescript است.نصب typescriptوبسایت رسمی typescript بهترین منبع برای نصب آخرین ورژن است. در وبسایت به قسمت دانلود بروید در آن جا می توانید جزئیات چگونگی نصب typescript را پیدا کنید. node.js و visual studio دو مورد از معمول ترین راه ها برای گرفتن آن است. این وبسایت هاستی از دیگر ویرایشگر ها را پشتیبانی می کند و پلاگین هایی برای آن ها در همان لینک وجود دارد.ما از node.js و visual studio code به عنوان ویرایشگر اولیه ی خود استفاده خواهیم کرد. شما می توانید از هر ویرایشگری به انتخاب خودتان استفاده کنید و قادر خواهید بود اپلیکیشن ها را بطور یکپارچه اجرا کنید. اگر شما از visual studio کامل به عنوان ide توسعه ی اولیه ی خود استفاده کنید می توانید از یکی از این دو لینک visual studio 2017 یا visual studio 2013 برای دانلود typescript sdk استفاده کنید. visual studio با یک کامپایلر typescript همراه است اما بهتر است که آن را از این لینک دانلود کنید تا آخرین نسخه را بگیرید.برای نصب typescript با استفاده از node.js از npm که با node.js همراه است استفاده خواهیم کرد.node.js یک جاوااسکریپت زمان اجرای محبوب برای ساخت و اجرای اپلیکیشن های جاوااسکریپت سمت سرور است. همانند کامپایلر های typescript در جاوااسکریپت، node یک گزینه ی ایده آل برای توسعه ی اپلیکیشن های سمت سرور با زبان typescript است. همانطور که در وبسایت گفته شده است اجرای دستور زیر در ترمینال( در macos) / command prompt (در ویندوز) پنجره ی باز شده آخرین نسخه را نصب خواهد کرد. npm install -g typescriptبرای بارگذاری هر پکیجی از node.js دستور npm با npm install شروع می شود پرچم –g مشخص می کند که ما درحال نصب پکیج به صورت سراسری هستیم. آخرین پارامتر نام پکیجی است که می خواهیم نصب کنیم. زمانی که نصب انجام شد می توانید نسخه ی typescript را با اجرای دستور زیر در ترمینال ویندوز بررسی کنید: tsc -vمی توانید با دستور زیر با تمام گزینه های دیگر که با tsc دردسترس است کمک بگیرید: tsc -hویرایشگر های typescriptیکی از ویژگی های برجسته ی typescript پشتیبانی آن از ویرایشگرها است همه ی ویرایشگر ها پشتیبانی هایی برای سرویس های زبان ها ارائه می دهد بنابراین ویژگی هایی نظیر intellisense ، تکمیل جملات و برجسته سازی خطا ها ارائه می شود.اگر شما پیش زمینه از .net دارید visual studio 2013/2015/2017 بهترین گزینه برای شما می باشد. visual studio نیاز به هیچ پیکربندی ندارد و با آن شروع کار با typescript آسان است. همانطور که قبلا گفتیم فقط sdk را نصب کنید و بعد آماده ی شروع هستید.اگر شما پیش زمینه ی جاوا دارید typescript ، eclipse را نیز به خوبی پشتیبانی می کند و همچنین از پلاگین ها برای sublime ، webstorm و atom نیز پشتیبانی می کند و هر کدام از این موارد مجموعه ی غنی از ویژگی ها را دارند.visual studio code (vs code) یک گزینه ی خوب دیگر به عنوان یک ide می باشد که نسخه ی کوچک تر و سبک تر از visual studio است که عمدتا توسط توسعه دهندگان وب اپلیکیشن استفاده می شود. vs code سبک و cross-platform و مناسب برای اجرا در ویندوز، لینوکس و macos است و پلاگین های درحال رشد برای کمک به بهتر نوشتن کد دارد نظیر tslint که یک ابزارآنالیز استاتیک برای کمک به کدنویسی typescript است که برای خوانایی، قابلیت نگهداری و بررسی خطا ها می باشد. vs code گزینه ای مناسب به عنوان ide پیش فرض برای همه ی انواع اپلیکیشن های توسعه ی وب است.در این پست بطور خلاصه به تنظیمات visual studio و vs code برای typescript خواهیم پرداخت.visual studiovisual studio یک ide کامل توصیه شده توسط مایکروسافت برای زبان های توسعه ای برپایه ی net. است اما امروزه visual studio پشتیبانی عالی برای typescript با template های آماده ی پروژه دارد. یک کامپایلر typescript در ویژوال استدیو تجمیع شده که امکان ترجمه ی اتوماتیک کد به جاوااسکریپت را می دهد. visual studio همچنین سرویس های زبان های typescript برای ارائه ی intellisense و بررسی خطای طراحی زمان، بین دیگر موارد را می دهد.با visual studio ساخت یک پروژه با یک فایل typescript به سادگی اضافه کردن یک فایل با افزونه ی ts. است. visual studio همه ی ویژگی های آماده را ارائه می دهد.vs codevs code یک ide سبک از مایکروسافت است که برای توسعه ی اپلیکیشن های وب استفاده می شود. vs code روی ویندوز، macos و سیستم های برمبنای لینوکس قابل نصب است. vs code می تواند انواع فایل های کد را تشخیص بدهد و با مجموعه ی عظیمی از افزونه ها برای کمک به فرایند توسعه همراه است. شما می توانید vs code را از https://code.visualstudio.com/download نصب کنید.vs code با یک کامپایلر typescript تجمیع شده است بنابراین می توانیم مستقیما پروژه را بسازیم. screenshot زیر نشان می دهد که یک فایل typescript در vs code باز شده است:برای اجرای پروژه در vs code به یک اجراکننده ی task نیاز داریم. vs code شامل اجراکننده های task چندگانه نظیر gulp، grunt و typescript است که می توانند برای پروژه پیکربندی شوند. ما از اجرا کننده ی task به نام typescript برای ساخت استفاده خواهیم کرد.vs code یک command palette دارد که به شما اجازه ی دسترسی به ویژگی های مختلفی نظیر build task، themes ، گزینه های debug و غیره را می دهد. برای باز کردن command palette در ویندوز از ctrl + shift + p استفاده کنید و در macos از cmd + shift + p استفاده کنید در command palette همانطور که در تصویر نشان داده شده است build را تایپ کنید با این کار دستور ساخت پروژه نشان داده خواهد شد:هنگامی که دستور انتخاب می شود vs code یک هشدار نشان می دهد. هیچ دستور ساختی همانطور که نشان داده شده است از قبل تعریف نشده است:configure build task را انتخاب می کنیم و از تمام گزینه های موجود همانطور که در تصویر نشان داده شده است ساخت typescript را انتخاب کنید:با این کار پوشه ی جدید vscode. و فایل task.json در پروژه ی شما ساخته می شود. این فایل json برای ساخت یک task جدید که مسئول کامپایل کردن کد typescript در vs code می باشد، استفاده می شود.typescript به یک فایل json دیگر (tsconfig.json) نیاز دارد تا بتواند گزینه های کامپایلر را پیکربندی کند هربار که کد را اجرا می کنیم tsc به دنبال فایلی با این نام میگردد تا خودش را پیکربندی کند. typescript در ترجمه ی کد به جاوااسکریپت، به عنوان نیاز توسعه دهندگان، بسیار قابل انعطاف است که این با پیکربندی گزینه های کامپایلر typescript به دست آمده است.کامپایلر typescriptکامپایلر typescript ، tsc نامیده می شود و مسئول ترجمه ی کد typescript به جاوااسکریپت می باشد. کامپایلر typescript، cross-platform می باشد و روی ویندوز، macos و لینوکس پشتیبانی می شود.برای اجرای کامپایلر typescript چندین گزینه وجود دارد. یک مورد این است که کامپایلر را با ویرایشگر انتخابی خود یکی کنید که این گزینه را در قسمت قبلی توضیح دادیم همچنین در قسمت قبلی کامپایلر typescript را با vs code یکی کردیم که به ما اجازه ی ساخت کد از خود ویرایشگر را می دهد. همه ی پیکربندی های کامپایلر که استفاده خواهیم کرد در فایل tsconfig.json اضافه شده است.گزینه ی دیگر استفاده ی مستقیم از tsc از command line / ترمینال ویندوز است. دستور tsc در typescript گزینه های پیکربندی کامپایلر را به عنوان پارامتر می گیرد و کد را در جاوااسکریپت کامپایل می کند. برای مثال یک فایل ساده ی typescript در notepad بسازید و خط کد های زیر را به آن اضافه کنید برای ساخت یک فایل به عنوان فایل typescript فقط نیاز داریم که اطمینان حاصل کنیم که افزونه ی فایل *.ts است: class editor { constructor(public name: string,public istypescriptcompatible : boolean) {} details() { console.log('editor: ' + this.name + ', typescript installed: ' + this.istypescriptcompatible); } } class visualstudiocode extends editor{ public ostype: string constructor(name: string,istypescriptcompatible : boolean, ostype: string) { super(name,istypescriptcompatible); this.ostype = ostype; } } let vs = new visualstudiocode('vscode', true, 'all'); vs.details();این همان مثال کدی است که در قسمت ویژگی های typescript در این فصل استفاده کردیم. این فایل را به عنوان app.ts ذخیره کنید (تا زمانی که افزونه ی فایل *.ts است هر نامی که می خواهید با هر طولی را می توانید بگذارید) در command line/ ترمینال ویندوز مسیری که این فایل را ذخیره کرده اید مسیریابی کنید و دستور زیر را اجرا کنید: tsc app.tsاین دستور کد را خواهد ساخت و آن را به جاوااسکریپت ترجمه خواهد کرد. فایل جاوااسکریپت نیز در همان محلی که typescript قرار دارد ذخیره شده است. اگر در ساخت مشکلی وجود داشته باشد، tsc این پیغام ها را در command line نشان خواهد داد:همانطور که حدس می زنید اجرای دستور tsc بطور دستی برای پروژه های متوسط تا بزرگ رویکرد کارایی نیست از این رو ما ترجیح می دهیم تا از ویرایشگری استفاده کنیم که typescript را بصورت تجمیع شده دارد.جدول زیر پرکاربردترین پیکربندی های کامپایلر typescript که بطور معمول استفاده می شود را نشان می دهد که درباره ی جزئیات آن در فصل های بعدی صحبت خواهیم کرد. دیدیم که تنظیمات و پیکربندی های typescript تقریبا ساده است و حالا ما آماده ی شروع اولین پروژه ی خود هستیم.برای یادگیری بیشتر نوشتن و کامپایل کردن اولین پروژه ی typescript حتما به کتاب typescript 2.x by example مراجعه کنید. به اشتراک بگذارید :

شروع کار با javascript animation api

درخواست حذف این مطلب
همان طور که می دانید اضافه کردن انیمیشنها به محیط کاربری وب ، باعث القا شدن حس تعامل بین صفحه های وب و کاربر میشود. در این مقاله با استفاده از css و javascript وب انیمیشن خواهیم ساخت. بسته شدن منوی کناری سایت با افکت انیمیشنی و روان نسبت به منویی که بدون افکت غیب میشود تجربه ی بهتری از کار با سایت را به کاربر میدهد.برای ساخت انیمیشن ها تا اینجا، در محیط وب از css transition ها، css keyframe ها و یا یک کتابخانه ی جداگانه مثل animate.css یا velocity بهره میبردیم اما حالا با استفاده از api جدید و تحت جاوا اسکریپت میتوانیم هر کدام از اجزای html که لازم داشتیم را فقط با کد جاوااسکریپت و در همان فایل js متحرک کنیم.ساخت انیمیشنحال برای نشان دادن ویژگی های این api جدید، یکبار با استفاده از css و بار دیگر بااستفاده از javascript، انیمیشنی را خلق میکنیم.ویرایشگر پایین دارای دو div است که در هنگام کلیک به سمت راست حرکت داده میشوند و همزمان رنگ آنها نیز عوض میشود. مربع با استفاده از css keyframe متحرک شده و دایره نیز با استفاده از js web animations api.کد htmlکد css #square, #circle { width: 100px; height: 100px; margin: 10px 10px 30px; background-color: #2196f3; } #circle { border-radius: 50%; } .animate { animation-name: move-and-change-color; animation-duration: 0.4s; animation-fill-mode: forwards; } @keyframes move-and-change-color { 0% { transform: translatex(0); } 80% { transform: translatex(100px); background-color: #2196f3; } 100% { transform: translatex(100px); background-color: #ef5350; } }کد js var square = document.getelementbyid('square'); square.addeventlistener('click', function() { square.classname += " animate"; }); var moveandchangecolor = [ { transform: 'translatex(0)', background: '#2196f3' // blue }, { offset: 0.8, transform: 'translatex(100px)', background: '#2196f3' // blue }, { transform: 'translatex(100px)', background: '#ef5350' // red } ]; var circle = document.getelementbyid('circle'); circle.addeventlistener('click', function() { circle.animate(moveandchangecolor, { duration: 400, fill: 'forwards' }); });خروجی:بیشتر برنامه نویسان، احتمالا با قسمتی که با keyframe ساخته شده آشنایی دارند، ما این کد را در مرحله ی نخست بررسی میکنیم:استفاده از css برای ساخت انیمیشنما کد مربوط به انیمیشن css را در قسمت keyframe تعریف کردیم که timeline از کلیه ی حرکت ها(transition) را در بر دارد. زمانی که حرکات مربوط به هر قسمت را تعریف کردیم، میتوانیم آنها را به وسیله ی پراپرتی animation و گزینه های موجود برای آن به یک سلکتور متصل کنیم. .animate { animation-name: move-and-change-color; animation-duration: 0.4s; animation-fill-mode: forwards; } @keyframes move-and-change-color { 0% { transform: translatex(0); } 80% { transform: translatex(100px); background-color: #2196f3; } 100% { transform: translatex(100px); background-color: #ef5350; } }ما قصد داریم تا انیمیشن در هنگام تعامل کاربر شروع شود، پس ما از event listener هنگام کلیک کاربر استفاده میکنیم که یک کلاس را به جزء html مناسب متصل میکند. var square = document.getelementbyid('square'); square.addeventlistener('click', function() { square.classname += " animate"; });هر چند این روش به خوبی کار میکند اما تا حدودی غیر مستقیم به نظر میرسد، ما رویدادهایی که رخ میدهند را در فایل css تعریف کردیم، اما درواقع این فایل js بود که کار اصلی را شروع میکرد. همچنین زمانی که کد اجرا شود ما دسترسی محدودی به انیمیشن(برای انجام تغییرات) خواهیم داشت.هر دو این مشکلات مطرح شده در api وب انیمیشن قابل حل میباشند.استفاده از جاوااسکریپتما میتوانیم تقریبا با همان کد هایی که در css نوشته بودیم حرکت شی را در جاوااسکریپت تعریف کنیم: var moveandchangecolor = [ { transform: 'translatex(0)', background: '#2196f3' // blue }, { offset: 0.8, transform: 'translatex(100px)', background: '#2196f3' // blue }, { transform: 'translatex(100px)', background: '#ef5350' // red } ];هر شیء داخل آرایه یکی از حالات انیمیشن را نشان میدهد. حالت ها بصورت برابر در زمان تقسیم شده اند(سه حالتِ 0 درصد، 50 درصد و 100 درصد)، مگر اینکه ما با استفاده از گزینه ی offset زمانبندی را تغییر دهیم، همانطور که در حالت میانی این کار را انجام داده ایم.پس از تعریف آرایه ی animation، میتوانیم آن را با تابع animate() صدا بزنیم. این تابع شی با همان مقادیر پراپرتی animation که در css داشتیم را بعنوان آرگومان دوم میگیرد(با نام هایی متفاوت از آنچه در قسمت css دیدیم، نام هایی مثل animation-fill-mode که همان fill است و animation-iteration-count که iterationمیباشد و ....( var circle = document.getelementbyid('circle'); circle.addeventlistener('click', function() { circle.animate(moveandchangecolor, { duration: 400, fill: 'forwards' }); });همانطور که میبینید روش js با استفاده از انیمیشن های ذخیره شده در یک متحرک و تابع animate() برای انجام دادن هر کاری که لازم باشد، بسیار سازمان دهی شده تر از روش css عمل میکند.کنترل انیمیشن هاapi وب انیمیشن همچنین به کاربر اجازه میدهد تا دوباره یک انیمیشن را به آسانی و با شیوه های مختلف کنترل کند. تابع animate() یک شیء animation را برمیگرداند که ما میتوانیم آن را در یک متغیر بریزیم و بعدا از آن استفاده کنیم. var animation = elem.animate(transitions, options);این api توابع زیر را در اختیار ما میگذارد:pause – انیمیشن را در حالت کنونی اش نگه میداردplay – انیمیشن را از حالت pause خارج میکند و در صورتی که پایان یافته بود دوباره آن را اجرا میکند.reverse – حرکت انجام شده را به صورت معکوس انجام میدهد.finish – پایان انیمیشن را نشان میدهد (درصورتی که معکوس شده باشد آغاز را نشان میدهد)cancel – پخش انیمیشن را متوقف میکند و به حالت آغازین میروددر پایین انیمیشنی از گردانه ی متحرک و بینهایت loading… را مشاهده میکنید. ما دکمه هایی را برای حالت ها و رویدادهای مختلف تنظیم کرده ایم تا بتوانید آنها را امتحان کنید:کد js var spinner = document.getelementbyid('spinner'); var spinneranimation = spinner.animate([ { transform: 'rotate(0)' }, { transform: 'rotate(359deg)' } ], { duration: 1000, iterations: infinity }); document.getelementbyid('pause').addeventlistener('click', function() { spinneranimation.pause(); }); document.getelementbyid('play').addeventlistener('click', function() { spinneranimation.play(); }); document.getelementbyid('reverse').addeventlistener('click', function() { spinneranimation.reverse(); }); document.getelementbyid('cancel').addeventlistener('click', function() { spinneranimation.cancel(); });کد html try controlling the animation: pause play reverse cancelکد css #spinner { width: 40px; height: 40px; border-radius: 50%; border: 3px solid #e2e2e2; border-top-color: #186aab; margin: 50px; }پراپرتی ها و event listener هاشیء انیمیشن که از تابع ()animate بازگردانده می شود پراپرتی های مفید زیادی را در خود نگه میدارد که دسترسی به گزینه هایی مانند زمان فعلی، نرخ پلی بک و چیزهای دیگری را به ما می دهد. با وجود اینکه برخی از آنها فقط قابلیت خواندن(read-only) دارد ولی بیشتر آنها هم قابلیت تنظیم و هم قابلیت برگرداندن مقادیر(set & get) را دارند.شما میتوانید کد جاوا اسکریپت زیر را مشاهده کنید تا ببینید این پراپرتی ها چگونه کار می کنند برای مشاهده لیست کامل این پراپرتی ها به سایت mdn مراجعه کنید.کد js var spinner = document.getelementbyid('spinner'); var spinneranimation = spinner.animate([ { transform: 'rotate(0)' }, { transform: 'rotate(359deg)' } ], { duration: 1000, iterations: infinity }); document.getelementbyid('half').addeventlistener('click', function() { spinneranimation.playbackrate = 0.5; }); document.getelementbyid('normal').addeventlistener('click', function() { spinneranimation.playbackrate = 1; }); document.getelementbyid('double').addeventlistener('click', function() { spinneranimation.playbackrate = 2; }); document.getelementbyid('triple').addeventlistener('click', function() { spinneranimation.playbackrate = 3; });کد html set playback speed: 0.5 normal 2 3کد css #spinner { width: 40px; height: 40px; border-radius: 50%; border: 3px solid #e2e2e2; border-top-color: #186aab; margin: 50px; }علاوه بر اینها، این api دو event handler کاربردی را در مواقعی که انیمیشن تمام شده یا کنسل شده نیز برای ما فراهم می آورد: spinneranimation.addeventlistener('finish', function() { // animation has completed or .finish() has been called. dosomething(); }); spinneranimation.addeventlistener('cancel', function() { // animation has been canceled. dosomething(); }); پشتیبانی و کارکردبیشتر ویژگی های api آزادانه در کروم و فایرفاکس قابل دسترسی هستند اما در مورد مرورگرهایedge و safari پیاده سازی ها ادامه دارد، همچنین یک open-source polyfill دارای پشتیبانی خوب نیز در این زمینه موجود است که توسعه دهندگان می توانند از آن تا زمانی که پشتیبانی کامل api برای تمام مرورگرها ارائه شود استفاده کرد.زمانی که حرف کارایی به میان می آید نباید فرقی بین css و جاوا اسکریپت باشد چون مرورگرها از یک موتور مشابه برای اجرای هر دو استفاده می کند. اگر شما فقط از انیمیشن هایی که نیاز به دوباره اجرا شدن ندارند استفاده میکنید، مثل transform یا opacity، نرخ به روز رسانی تصویر آن باید ۶۰ فریم ثانیه بماند.جمع بندیاین api به توسعه دهندگان راه جدیدی برای ساخت و کنترل انیمیشن های تحت وب را با استفاده از جاوا اسکریپت اصل نشان می دهد. برای انیمیشن های که به تعامل کاربر و یا بقیه رخدادهای پویا لازم دارند، این خبر خوبی است که کل انیمیشن میتواند توسط کد جاوااسکریپت و بدون استفاده از یک فایل css برای جابجایی ها انجام گیرد. به اشتراک بگذارید :

ایجاد crud api در asp.net core 2.0

درخواست حذف این مطلب
asp.net core یک مکانیزم یک پارچه برای ساخت mvc و اپلیکیشن web api ارائه می دهد. تفاوت کلیدی این است که web api برای ارتباط با کلاینت json (یا xml) و کدهای وضعیت http به جای view ها برخواهد گرداند بنابراین در این مقاله ساخت crud api در asp.net core 2.0 را بطور کامل بررسی خواهیم کرد. مسالهچگونه یک crud web api با استفاده از asp.net core بسازیم؟راه حلدر یک پروژه ی خالی کلاس startup را برای اضافه کردن سرویس ها و middleware ها به mvc به روزرسانی کنید: public void configureservices( iservicecollection services) { services.addsingleton(); services.addmvc(); } public void configure( iapplicationbuilder app, ihostingenvironment env) { app.useexceptionhandler(configure => { configure.run(async context => { var ex = context.features .get() .error; context.response.statuscode = 500; await context.response.writeasync($"{ex.message}"); }); }); app.usemvcwithdefaultroute(); }یک سرویس و مدل دامنه اضافه کنید: public class movie { public int id { get; set; } public string title { get; set; } public int releaseyear { get; set; } public string summary { get; set; } } public interface imovieservice { list getmovies(); movie getmovie(int id); void addmovie(movie item); void updatemovie(movie item); void deletemovie(int id); bool movieexists(int id); }مدل های input و output (برای دریافت و ارسال داده از طریق api) را اضافه کنید: public class movieinputmodel { public int id { get; set; } public string title { get; set; } public int releaseyear { get; set; } public string summary { get; set; } } public class movieoutputmodel { public int id { get; set; } public string title { get; set; } public int releaseyear { get; set; } public string summary { get; set; } public datetime lastreadat { get; set; } }یک controller برای api با سرویس های تزریق شده از طریق constructor اضافه کنید: [route("movies")] public class moviescontroller : controller { [httpget] public iactionresult get() { var model = service.getmovies(); var outputmodel = tooutputmodel(model); return ok(outputmodel); } [httpget("{id}", name = "getmovie")] public iactionresult get(int id) { var model = service.getmovie(id); if (model == null) return notfound(); var outputmodel = tooutputmodel(model); return ok(outputmodel); } [httppost] public iactionresult create([frombody]movieinputmodel inputmodel) { if (inputmodel == null) return badrequest(); var model = todomainmodel(inputmodel); service.addmovie(model); var outputmodel = tooutputmodel(model); return createdatroute("getmovie", new { id = outputmodel.id }, outputmodel); } [httpput("{id}")] public iactionresult update(int id, [frombody]movieinputmodel inputmodel) { if (inputmodel == null || id != inputmodel.id) return badrequest(); if (!service.movieexists(id)) return notfound(); var model = todomainmodel(inputmodel); service.updatemovie(model); return nocontent(); } [httpdelete("{id}")] public iactionresult delete(int id) { if (!service.movieexists(id)) return notfound(); service.deletemovie(id); return nocontent(); } }بحثasp.net core یک مکانیزم یک پارچه برای ساخت mvc و اپلیکیشن web api ارائه می دهد. تفاوت کلیدی این است که web api برای ارتباط با کلاینت json (یا xml) و کدهای وضعیت http به جای view ها برخواهد گرداند.مسیریابیبرای web api و مسیریابی های عادی برای mvc استفاده از ویژگی هایی برمبنای مسیریابی (همراه با ویژگی های افعالی) معمول است. با uri زیر به controller دسترسی خواهید داشت:ما همچنین می توانیم uri های تودرتو نیز تعریف کنیم برای مثال در ادامه یک reviews controller وجود دارد که برای هر فیلم صفر یا تعداد بیشتری بازبینی ممکن است وجود داشته باشد:توجه کنید که شناسه برای منبع والد (فیلم) بخشی از ریشه است و می تواند بخشی از اکشن متد نیز باشد. uri زیر به controller دسترسی خواهد داشت:مدل هامدل در mvc اصطلاحی است که به درستی تعبیر نشده است زیرا معمولا گفته می شود که تنها یک مدل وجود دارد که درست نیست. ما انواع مختلفی از مدل ها را در اپلیکیشن خود داریم برای نمونه input ، output ، view ، domain ، entity و غیره. این مدل ها بخش هایی از لایه های متفاوت هستند و انتزاعی از مفاهیم مختلف هستند. کتاب های ddd و solid را برای مباحث دقیق تر بررسی کنید.نکته ی کلیدی زمان توسعه ی web api این است که مدل هایی که توسط controller ارسال و دریافت می شوند data transfer objects (dto) هستند و جدای از مدل های domain یا entity است.بازیابی (get)یک get موفق کد وضعیت 200 (ok) با داده می فرستد.اگر داده ای پیدا نشود کد 404 (not found) بازگردانده می شود.ساخت (post)post موفق کد 201 (created) برمی گرداند و header مربوط به location را روی http response تنظیم می کند تا به uri آیتم جدید اشاره کند.برای موضوعاتی با مدل input یک کد 400 (bad request) برگردانده می شود. همچنین برای پاسخ های تودرتو اگر والد برگردانده نشود یک کد 404 (not found) برگردانده می شود.update (put)یک put موفق کد 204 (no content) برمی گرداند.برای مسائل با مدل input کد 400 (bad request) برگردانده می شود. همچنین برای منابع تودرتو اگر والد پیدا نشود کد 404 (not found) برگردانده می شود.update (patch)اگرچه این مورد کمتر استفاده می شود می توانیم اجزای داده را با استفاده از افعال patch به روزرسانی کنیم.content-type برای به روزرسانی patch باید application/json-patch+json باشد. بدنه ی request نیاز دارد که شامل یک آرایه ای از عملیات patch باشد تا به مدل خودمان اعمال کنیم و پارامتر های اکشن نیاز به استفاده از jsonpatchdocument برای دریافت این عملیات ها دارند: [httppatch("{id}")] public iactionresult updatepatch( int id, [frombody]jsonpatchdocument patch) { if (patch == null) return badrequest(); var model = service.getmovie(id); if (model == null) return notfound(); var inputmodel = toinputmodel(model); patch.applyto(inputmodel); tryvalidatemodel(inputmodel); if (!modelstate.isvalid) return new unprocessableobjectresult(modelstate); model = todomainmodel(inputmodel); service.updatemovie(model); return nocontent(); }در اینجا ما 1) یک مدل را از منبع داده بازیابی می کنیم. 2) آن را به مدل input تبدیل می کنیم 3) از patch ، apply می کنیم 4) اعتبار سنجی می کنیم و5) منبع داده را به روزرسانی می کنیم.جدول زیر عملیات های patch را و توضیح استفاده از آن ها را لیست می کند:delete (delete)یک delete موفق کد 204 (no content) را برمی گرداند.برای منابع تودرتو اگر والد پیدا نشود کد 404 (not found) برگردانده می شود.اعتبارسنجی (post/put/patch)مدل های input همانطور که قبلا دراینجا بحث کردیم می توانند با تفسیر داده ها یا کد های معمول اعتبارسنجی شوند. کد وضعیت 422 (unprocessable entity) برای نشان دادن عدم موفقیت در اعتبارسنجی، به کاربر برگردانده می شود. در اینجا هیچ action result آماده ای برای این کار نداریم اما ساخت آن ها آسان است: public class unprocessableobjectresult : objectresult { public unprocessableobjectresult(object value) : base(value) { statuscode = statuscodes.status422unprocessableentity; } public unprocessableobjectresult(modelstatedictionary modelstate) : this(new serializableerror(modelstate)) { } }حال در post/put/patch می توانید مسائل مورد اعتبارسنجی را بررسی کنید و این نتیجه را بازگردانید: if (!modelstate.isvalid) return new unprocessableobjectresult(modelstate);دراین کد نمونه یک متد helper در base controller ساخته ایم: if (!modelstate.isvalid) return unprocessable(modelstate); public class basecontroller : controller { [nonaction] public unprocessableobjectresult unprocessable( modelstatedictionary modelstate) { return new unprocessableobjectresult(modelstate); } [nonaction] public objectresult unprocessable(object value) { return new unprocessableobjectresult(value); } }توجه: فایل postman شامل نمونه درخواست های http برای get, post, put, delete و patch می باشد.سورس کد : (github) به اشتراک بگذارید :

10 مورد از نکات مهم و کاربردی در طراحی ui (رابط کاربری)

درخواست حذف این مطلب
تمام افرادی که در حوزه ی طراحی سایت فعالیت دارند یکی از مواردی که باید نسبت به آن توجه اساسی داشته باشند، طراحی ui یا رابط کاربری می باشد. از این رو ما در اینجا 10 مورد از نکات کلیدی و مهم که در طراحی رابط کاربری باید بدانید را برای شما عزیزان آماده کرده ایم.اگر هدفتان ایجاد رابط کاربری زیبا، استفاده آسان و کاربر پسند است این 10 دستورالعمل را به خاطر بسپارید.یک وب سایت، شامل تعدادی صفحه است که این صفحات با لینک به هم مرتبط شده اند. این سایت یک رابط است، فضایی که در آن چیزهای مختلف - در این مورد، یک فرد و یک وب سایت شرکتی یا فردی – یکدیگر را ملاقات می کنند، با هم ارتباط برقرار می کنند و بر روی یکدیگر تاثیر می گذارند. این تعامل یک تجربه برای بازدید کننده به وجود می آورد و به عنوان یک طراح وب، این وظیفه شماست تا اطمینان حاصل کنید که این تجربه به همان میزان انتظار، خوب است.و کلید محقق شدن این امر، این است که ابتدا، در درجه نخست و همواره، در مورد کاربر خود فکر کنید.خوشبختانه، در حالی که طراحی وب یک رشته نسبتا جدید است، به مطالعه علمی تعامل انسان و کامپیوتر (hci) بسیار اهمیت می دهد. و این 9 دستورالعمل مفید که مستقیماً از تحقیقات hci می آیند، در طراحی وب سایت ها و برنامه ها، به شما کمک خواهند کرد تا روی کاربرتان تمرکز کنید.طراحی رابط کاربری، که بر روی طرح عملکرد رابط های کاربری متمرکز است، یک زیرمجموعه از طراحی تجربیات کاربر است که بر روی نگرش بزرگتری متمرکز است: یعنی تمام تجربه، نه فقط رابط.1. کاربران خود را بشناسیدمهمتر از همه، شما باید کاربرانتان را بشناسید. این بدان معناست که زمانی که برنامه هایتان را تحلیل می کنید، قادر هستید همه اطلاعات جامعه شناسی را استخراج کنید. اما مهمتر از همه، دانستن نیاز آن هاست، و آنچه که آن ها را به اهدافشان می رساند.رسیدن به این سطح همدلی به تحلیل آماری دقیق تری نیاز دارد که نیازمند شناخت افرادی است که از وب سایتتان استفاده می کنند. این بدان معناست که با آنها به صورت حضوری و رو در رو صحبت کنید، کسانی که محصولات شما را استفاده می کنند نظاره گر باشید وسوالات عمیق تری را برای آن ها مطرح کنید، «نظرتان در مورد این طرح چیست؟»اهداف آنها چیست؟ روش آن ها برای رسیدن به اهدافشان چیست؟ چگونه یک وب سایت می تواند به آنها کمک کند تا بر چالش هایشان غلبه کنند یا کاری انجام دهند؟هیچ گاه از شناخت و آگاهی از خواسته های کاربرتان دست برندارید. عمیق تر شوید و نیاز آن ها را دریابید. خواسته ها فقط نیازهایی هستند که رشد و نمو یافته اند. اگر شما بتوانید نیازهای عمیق کاربر را درک کنید، به خواسته های آنها پاسخ خواهید داد و در عین حال قادر هستید نیازهای اساسی بیشتری را برآورده کنید.بینشی که از تجزیه و تحلیل داده ها و صحبت با کاربران به دست می آورید، روی تصمیم گیری شما در مورد شناخت کاربرانتان و محتوای مورد علاقه آن ها تاثیر می گذارد.2. نحوه استفاده افراد از رابط کاربری تان را مشخص کنید.قبل از اینکه رابط کاربری خود را طراحی کنید، نحوه استفاده از آن باید برای افراد مشخص باشد. با افزایش استفاده از دستگاه های لمسی، این مسئله نگران کننده تر از چیزی است که فکرش را بکنید. فقط مشاهده کنیدtinder: تجربه کاربر برنامه به معنای واقعی کلمه ساده تعریف شده است.افراد از وب سایت ها و برنامه ها به دو روش استفاده می کنند: به طور مستقیم (با یک element از محصول تعامل دارند) و به طور غیر مستقیم (با یک elementخارجی از محصول تعامل دارند).نمونه هایی از تعاملات مستقیم-ضربه زدن روی یک دکمه-کارت کشیدن-کشیدن و رها کردن یک آیتم با نوک انگشت (drag and drop)نمونه هایی از تعاملات غیر مستقیم-اشاره و کلیک با یک ماوس-استفاده از دستورات کلیدی / کلید های میانبر-تایپ کردن در یک فرم-نقاشی روی تبلت wacomگاهی اوقات تعامل خیلی آسان است.اینکه کاربران شما چه کسانی هستند و چه دستگاه هایی استفاده می کنند، تصمیمات شما را تحت تاثیر قرار می دهد. اگر شما برای افراد سالخورده و یا افرادی که از نظر مهارت هایی که با دست سروکار دارند، کار می کنند محدودیت دارند طراحی می کنید، شما روی کشیدن تکیه نکنید. اگر شما برای نویسندگان یا برنامه نویسان طراحی می کنید که عمدتا با استفاده از صفحه کلید با برنامه ها ارتباط برقرار می کنند، از کلیدهای میانبر معمولی پشتیبانی کنید تا زمان کار با موس را به حداقل برسانید.3. انتظارات را تعیین کنیدبسیاری از تعاملات با یک سایت یا برنامه عواقبی دارد : کلیک کردن بر روی یک دکمه می تواند به معنای پول خرج کردن، پاک کردن یک وب سایت و یا قرار دادن یک کامنت در وب سایت شود.بنابراین اطمینان حاصل کنید که کاربران قبل از کلیک روی دکمه ای نسبت به آن آگاهی داشته باشند و بدانند پس از کلیک روی آن دکمه چه اتفاقی خواهد افتاد. شما می توانید این کار را از طریق طراحی و یا کپی انجام دهید.تعیین انتظارات با طراحی کردنhighlight- کردن دکمه ای که عمل درستی نشان میدهد.-با استفاده از یک علامت و نشانه برای درک بیشتر(مانند یک سطل زباله برای یک دکمه حذف، یک علامت (+) برای اضافه کردن چیزی یا یک ذره بین برای جستجو) و ...-انتخاب رنگ با معنی مرتبط با آن (سبز برای دکمه "برو"، قرمز برای "توقف")تعیین انتظارات با کپی کردن-به وضوح نوشتن دکمه کپی -آماده کردن کپی هدایت/تشویق در فضای خالی-تحویل هشدارها و درخواست تأییداگر قصد اقداماتی با پیامدهای غیر قابل برگشت، برای مثال حذف دائمی چیزی دارید منطقی است که از افراد این سوال مطرح شود که آیا نسبت به حذف اطمینان دارند.کلیک کردن روی آیکون سطل زباله یک صفحه را بلافاصله حذف نمی کند. در عوض، از شما در مورد اینکه آیا نسبت به حذف اطمینان دارید سوال می پرسد و شما را در جریان می گذارد که در صورت حذف قادر به لغو آن نیستید.4. پیش بینی اشتباهاتانسان ها اشتباه می کنند، اما نباید (همیشه) مجبور شوند از عواقب آن رنج ببرند. دو راه برای کمک به کاهش تاثیر خطاهای انسانی وجود دارد:-جلوگیری از اشتباهات قبل از وقوع آن-راه هایی برای حل اشتباهات و خطاها پس از اتفاق افتادنشانشما بسیاری از تکنیک های جلوگیری از اشتباه را در تجارت الکترونیک و طراحی فرم می بینید. تا زمانی که شما تمام فیلد ها را پر نکنید، دکمه ها غیر فعال باقی می مانند. فرم ها تشخیص می دهند که آدرس ایمیل به درستی وارد نشده است.pop-upها از شما میپرسند آیا واقعا میخواهید سبد خرید خود را رها کنید. این پیام های هشدار و تایید برای ادامه دادن در نظر گرفته میشود ..پیش بینی اشتباهات اغلب کمی خسته کننده تر از تلاش برای درست کردن آن ها بعد از وقوع است. دلیل آن این است که با کلیک بر روی دکمه « next » یا « submit » احساس رضایت بخشی حاصل می شود.5. بازخورد سریع داشته باشید.(feedback—fast)در دنیای واقعی، محیط به ما بازخورد می دهد. ما صحبت می کنیم، و دیگران (معمولا) پاسخ می دهند. ما یک گربه را نوازش میکنیم و آن خرخر می کند و یا خس خس می کند (بسته به خلق و خوی آن و اینکه چقدر ما به گربه خراش وارد کرده ایم).اغلب، رابط های کاربری دیجیتال به عقب برمی گردند و ما را متعجب می کنند که آیا ما باید صفحه را دوباره بارگذاری کنیم، لپ تاپ را مجددا راه اندازی کنیم یا فقط از نزدیک ترین پنجره موجود آن را پرتاب کنیمmailchimp، هر زمان که شما یک فهرست یا ایمیل می فرستید، هم بازخورد وهم تشویق را پیشنهاد می کند.فقط مطمئن شوید که همه چیز سریع اتفاق می افتد. usability.gov هرگونه تأخیر بیش از 1 ثانیه را به عنوان یک وقفه تعریف می کند. بیش از 10 ثانیه، یک اختلال محسوب می شود. دومی سخاوتمندانه است: برای حدود نیمی از جمعیت ایالات متحده، مدت زمان 3 ثانیه به اندازه کافی باعث یک پرش می شود.اگر یک صفحه در کمتر از 5 ثانیه لود شود، یک نوار پیشرفت نمایش داده نمی شود، زیرا این موضوع باعث می شود زمان بارگذاری طولانی تر به نظر بیاید. در عوض، از تصوری که به معنای پیشرفت نیست استفاده کنید،. اگر از نوارهای پیشرفت در سایتتان استفاده می کنید، در نظر بگیرید که برخی از ترفندهای بصری را برای اینکه بارگیری سریع تر به نظر برسد، استفاده نمایید.6. به دقت در مورد اندازه و محل قرارگیری المان ها فکر کنید.قانون fitts، یک اصل اساسی در تعامل انسان و کامپیوتر(hci)، بیان می کند که:زمان به دست آوردن یک هدف، تابع فاصله با هدف و اندازه هدف است.به عبارت دیگر: اگر چیزی نزدیک تر و یا بزرگتر است، میتوانید مکان نما خود را (یا انگشت) سریعتر روی آن قرار دهید. این بدیهی است که همه انواع پیامدها را برای تعامل و طراحی ui دارد، اما سه تا از مهمترین آنها عبارتند از:دکمه ها و دیگر "هدف های کلیک" (مانند آیکون ها و لینک های متنی) به راحتی دیده می شوند وکلیک می شوند. این امر به ویژه در منوها و دیگر لیست های لینک اهمیت دارد، زیرا فضای کافی برای اینکه افراد چندین بار روی لینک های اشتباه کلیک کنند وجود ندارد.برای فعالیت هایی که معمولاً بیشتر صورت می گیرد دکمه ها را بزرگتر و برجسته تر کنید.جهت یابی محل (و دیگر عناصر تعاملی مشترک، مانند میله های جستجو) در لبه ها یا گوشه های صفحه نمایش. برخلاف چیزی که ممکن است به نظر برسد، اما کار می کند زیرا نیاز به دقت را کم می کند: یک کاربر نگران زدن کلیک بیش از حد هدف نیست.در حالی که شما در مورد مکان و اندازه المان فکر می کنید، همیشه مدل تعامل خود را در ذهن داشته باشید. اگر سایت شما به جای پیمایش عمودی نیاز به پیمایش افقی داشته باشد، باید در نظر بگیرید که کجا و چگونه کاربران را به این نوع تعامل غیر معمول هدایت کنید.7. استانداردها را نادیده نگیریدخلاق باشید، طراحان تمایل دارند که چیزهای جدید را بازتولید کنند، اما این همیشه بهترین ایده نیست.چرا؟ از آنجا که یک نسخه تجدید نظر شده از یک تعامل یا رابط کاربری آشنا، "بار شناختی" را اضافه می کند: این باعث می شود افراد دوباره درباره فرآیندی که قبلا آموخته اند فکر کنند. بدیهی است، شما می توانید هر آنچه که می خواهید را دوباره تولید کنید - اما تنها در صورتی که واقعاً طراحی را بهبود بخشد.این قانون توضیح می دهد که چرا نوار منوی google docs تقریبا همه گزینه های مشابه microsoft word را قبل از vista دارد: نوار منو مایکروسافت ورد قبل از vista.با تغییر تنها یک دکمه سازگار با الگوهای طراحی اندروید، کاربران جدید 23 درصد احتمال بیشتری دارند که از pocket استفاده کنند.تا پاییز 2013، دکمه بایگانی در سمت چپ بالای صفحه نمایش قرار داشت درست جایی که مشخصات طراحی android اعلام کرد دکمه ""up باید باشد. هدف pocket تمرکز افراد روی تجربه خواندن بود، و سخت افزار کنترلی موجود را تکرار نکنند، اما قرار دادن ناسازگاری باعث شد که کاربران جدید بجای بازگشت ساده به لیست مطالعه ای که ازشان انتظار می رود به طور تصادفی نزدیک شوند و مقاله مطالعه شده را آرشیو کنند.8. رابط کاربری خود را برای یادگیری آسان کنید.هنگامی که رابط کاربری ساده باشد، مردم اغلب به یک مقاله توسط روانشناس دانشگاه هاروارد به نام george miller استناد می کنند، "هفت عدد جادویی، به اضافه یا منهای دو: برخی محدودیت ها روی ظرفیت ما برای پردازش اطلاعات". در این مقاله نشان می دهد که افراد تنها می توانند 5 تا 9 مورد را با هر گونه قابلیت اطمینان درحافظه کوتاه مدت خود نگه دارند. miller این موضوع را یک تصادم نامیده است، اما به نظر نمی رسد که کسی این برداشت را از نقل قولش داشته باشد.به این ترتیب، تنها منطقی که چیزها را ساده تر می کند این است که راحت تر در حافظه کوتاه مدت به خاطر بسپاریم. بنابراین، هر زمان که امکان دارد، تعداد مواردی را که فرد نیاز دارد به خاطر بسپارد تا از رابط کاربری شما به صورت موثر و کارآمد استفاده کند، محدود کنید. شما می توانید این روند را با چند بخش کردن اطلاعات، کوچک کردن به قطعات کوچک قابل هضم، تسهیل کنید.این ایده با قانون حفاظت از پیچیدگی tesler مطابقت دارد، که بیان می دارد طراحان رابط کاربر باید رابط کاربری خود را به حداکثر مقدار ممکن ساده تر کنند. این به معنای این است که هر زمانی که ممکن بود، پیچیدگی برنامه را در پشت یک رابط کاربری ساده مخفی کنید. یک نمونه محبوب از یک محصول که این قانون را پیروی می کند، مایکروسافت ورد است.اکثر افراد در word تنها چند کار را انجام می دهند، برای مثال، تایپ-در حالی که دیگران قادر هستند توسط آن کارهای قدرتمندی انجام دهند. اما در سراسر جهان، هر فردی نسخه های مشابه ورد، با همان رابط کاربری را باز می کند.این منجر به یک مفهوم به نام افشای پیشرفته، که در آن ویژگی های پیشرفته در رابط های ثانویه پنهان می شوند. شما اغلب این موضوع را در صفحات خانگی وب سایت ها مشاهده می کنید، جایی که کدهای کوتاه کپی، یک محصول یا ویژگی را معرفی می کنند، سپس به یک صفحه که کاربران می توانند بیشتر بیاموزند، لینک برقرارمی کنند. (بهترین شیوه برای طراحی موبایل است، که در آن ناوبری قوی همیشه یک چالش است.)نکات مثبت: از استفاده از "یادگیری بیشتر" و متون غیر تخصصی در لینک ها و دکمه ها اجتناب کنید. چرا؟ ازآنجا که برای کاربران این مسئله را روشن نمی کنند که درباره چه چیزی "بیشتر یاد بگیرند". اغلب افراد به سادگی یک صفحه و لینک هایش را جستجو می کنند پس 15 بار تکرار این جمله "بیشتر یاد بگیرید" کمکی نمی کند. این موضوع به خصوص برای کاربرانی که خوانندگان صفحه نمایش می باشند، صدق می کند.9. تصمیم گیری را ساده کنیدوب دائماً متذکر می شود: "بنرها" به صورت ناگهانی برای اینکه تبلیغات درکل صفحه نمایش داده شوند، گسترش می یابند. ماژول های پاپ آپ، درخواست ما را برای وبلاگ هایی که شانسی برای داشتن آن ها نداشته اسم را به اشتراک می گذارند. نگرش های مربوط به ویدئو ما را در مسیرمان متوقف می کند، این موضوع در واقع باعث میشود که سردرگم شویم و در نهایت وب سایت را ترک کنیم.گاهی اوقات من در وب خیلی زیاد خونسرد هستم و قانون hicks همه دلایلی که برای ایجاد یک سایت وجود دارد را در اختیار ما قرار می دهد. این ایده ساده به همان اندازه ساده است که نتیجه نهایی آن ساده است: گزینه های بیشتری که کاربر را ارائه می دهد، تصمیم گیری برای آنها سخت تر می شود.این اثرات تقریبا همه چیز ما را تحت تاثیر قرار می دهد: • طرح کلی • منوهای هدایت • صفحات قیمت گذاری • شاخص های وبلاگ• خوراک مطالبلیستی که در بالا ذکر شد باز هم ادامه دارد. اما خلاصه آن این است که: ما طرح های خود را ساده تر، سریع تر و آسان تر برای کاربرانی که تصمیم می گیرند که ما برای آن ها هدفشان را پیاده سازی می کنیم، طراحی می کنیم. این دقیقا همین است که چرا صفحات landing و ایمیل های غیر رسمی فقط باید برای پیشبرد کارشان یک تماس داشته باشند.10. به داده ها گوش کنیددر حالی که این احتمال وجود دارد که بخواهیم طرح های ما صرفا بر اساس شایستگی هنری آنها ارزیابی شود، واقعیت این است که بهینه سازی طراحی شما برای رسیدن به هدف، همان قدر مهم است.در حالی که تحقیق و امتحان و آزمایش کاربر می تواند به طور باور نکردنی در طراحی سایتی که مطلوب شماست شما را راهنمایی نماید ، داده های جمع آوری شده پس از راه اندازی، ارزشمند هستند.بنابراین تحلیل ها را برای سایتتان به صورت منظم و باقاعده تنظیم کنید. تعدادی از ابزارهای تجزیه و تحلیل وجود دارد، اما من google analytics و یا mixpanel، بسته به نوع پروژه را پیشنهاد می دهم.mixpanel روی رویدادها (event) تمرکز می کند، بنابراین اطلاعات را بر اساس اقداماتی که یک بازدید کننده در سایت شما انجام می دهد، جمع آوری می کند، در حالی که google analytics اقدامات بیشتری انجام می دهد، به شما زمان جلسه، منابع ترافیکی و غیره می دهد. در حالی که هر دو ابزار می توانند هر دو فرم داده را ارائه دهند، آنها واقعا در نقاط تمرکزشان، عالی عمل می کنند. بنابراین شما می توانید بهترین انتخاب را متناسب با نیازتان داشته باشید.

با استفاده از ui ،html 5 سایت خود را بهتر کنید

درخواست حذف این مطلب
html5 در 28 اکتبر 2014 منتشر شد. با وجودی که چندین سال از انتشارش گذشته است ، هنوزبسیاری از وبسایت های قدیمی وجود دارند که از پتانسیل کامل html 5 استفاده نمی کنند. اگر شما یکی از صاحبان همان نوع سایت ها هستید در این مقاله به شما خواهیم گفت اگر از html5 استفاده نکنید چه ویژگی هایی را از دست خواهید داد . شبکه جهانی وب چندین دهه است که بوجود آمده است ، اما همیشه کار با رسانه ها (media) سخت بوده است . در ابتدا قرار بود فقط اطلاعات متنی و خیلی کم ازعکس در آن استفاده شود . حالا در سال 2018 ، ما انتظار داریم که انیمیشن در وبسایت ها زیاد باشد چیز هایی از قبیل انیمیشن های css ، video ، audio یا حتی طراحی های بامزه ، ما از وبسایت ها درخواست های زیادی داریم در این مقاله به شما نشان خواهیم داد که چگونه html5 به شما کمک میکند و به این نیاز ها پاسخ میدهدعلاوه بر این html5 لیست طولانی از المان های جدید html را ارائه می دهد . در این مقاله ، می خواهیم درباره بعضی از المان های کلیدی صحبت کنیم و بگوییم چگونه این المان ها کار طراحی وبسایت را آسان کرده اند.input type های جدیدinput type های زیادی وجود دارد . input یک روش ویژه ای برای تعامل با کاربر از طریق ui با یک فرم است. امروزه راه های بسیاری برای تعامل با کاربر وجود دارد . html5 رایج ترین روشهایی که کاربر با یک فرم ارتباط برقرار می کند را معرفی کرده است . روش هایی مثل color picker ، datetime input ، جست و جو و ... .برای مثال برای استفاده از جست و جو جدید از کد ریز استفاده میکنیم.این مهم است که خود مرورگر مقاصد شما را برای یک input بفهمد . این بدان معنی است که یک مرورگر می تواند برای هر input ، به طور متفاوتی باکس های جست و جو را استایل دهی کند و با css به راحتی انتخاب می شود.audio elementیکی از المان های مهم که میخواهیم مورد بحث قرار دهیم audio element می باشد برای استفاده از آن به صورت زیر تعریف میشود: your browser does not support the audio element. برای palcyback ، pause ، کاهش صدا و ... استفاده میشود . در گذشته اگر میخواستید خودتان یک audioplayer را کد نویسی کنید یا حتی اگر میخواستید از کتابخانه های 3rd party برای این کار استفاده کنید این کار ممکن بود برای شما هزینه داشته باشد یا آن چه نباشد که باب میل شماست.video element audio element شبیهvideo element است. audio element به شما امکان playback میدهد به همان شکل video element به شما امکان پخش ویدیو را می دهند. your browser does not support the video tag. این المان به سادگی همان audio element است . شما باز هم میتوانید از مرورگر برای فراهم کردن کار هایی مثل play ، pause ، stop و ... استفاده کنیم و با یک المان روی صدا ها تاثیر بگذارید . قبل از استفاده از این المان ، این کار به راحتی انجانم نمیشد .بعلاوه چنین المانی ، امکان آپدیت المان های ویدیویی html 5 را فراهم میکند ، در نتیجه شما میتوانید از ویژگی های جدید آن بهرمند شوید.استفاده از یک video player سفارشیاستفاده از المان ویدیویی جدید به معنی اینکه دیگر شما نمیتوانید از کتاب خانه های 3rd party استفاده کنید نیست.گاهی اوقات ممکن است ورژن اولیه ی video player ای که مرورگر فراهم میکند مد نظر شما نباشد و همه ی ویژگی هایی را که شما به آن نیاز دارید را پوشش ندهد. استفاده از video player هایی مثل cloudinary, videojs و plyrمی تواند تعاملات جالبی با ویدیو را فراهم کند که شما نمی توانید آن ها را با المان های اولیه ی ویدیویی داشته باشیدنتیجه گیریدر این مقاله راه های مختلفی را که می توانید از ویژگی های html5 استفاده کنید را به شما ارائه دادیم .در گذشته شما مجبور به ساخت کتاب خانه های پیچیده ی javascript برای ساخت محتوای ویدیویی بودید اما امروزه این کار ها بسیار آسان شده است . امیدواریم که این مقاله شما را به استفاده از html5 در وبسایت هایتان تشویق کند.

نحوه استفاده از bootstrap با react

درخواست حذف این مطلب
در این آموزش چندین راه مختلف که می توانیم bootstrap را با اپلیکیشن react خود ادغام کنیم بررسی خواهیم کردیم و همچنین نحوه ی کار با دو کتابخانه ی محبوب react bootstrap به نام react-bootstrap و reactstrap را نیز بررسی خواهیم کرد.در این آموزش با چندین کامپوننت bootstrap نظیر alert ، badge ، dropdown ، navbar ، nav ، form ، button ، card و غیره کار خواهیم کرد. با افزایش محبوبیت اپلیکیشن های تک صفحه ای در طی چند سال اخیر، framework های جاوااسکریپت front-end زیادی نظیر angular، react ، vuejs ، ember و غیره ساخته شده است. در نتیجه استفاده از کتابخانه های dom نظیر jquery دیگر یکی از ملزومات ساخت وب اپلیکیشن ها نیست.از سوی دیگر تعدادی از framework های css نیز برای کمک به پاسخگویی به الزامات ساختن وب اپلیکیشن های responsive ساخته شده است. تقریبا همه ی توسعه دهندگان front-end از bootstrap، foundation یا bulma استفاده کرده اند یا درباره ی آن شنیده اند. هرکدام از این موارد یک framework برای css است که responsive است که هرکدام ویژگی های قوی و امکانات داخلی دارند.درحالی که react، framework پراستفاده جاوااسکریپت برای ساخت وب اپلیکیشن ها شده است، bootstrap نیز محبوب ترین framework برای css است که در میلیون ها وب سایت در اینترنت استفاده شده است. بنابراین یافتن راه های متفاوتی که با آن ها بتوان bootstrap را با اپلیکیشن های react استفاده کرد بسیار ضروری است و این موضوع هدف این آموزش است.هدف این پست، آموزش react یا bootstrap به صورت جزئی نیست و انتظار می رود که شما از قبل تجربه ی کار با react و/یا bootstrap را داشته باشید. اگر در این موارد به کمک نیاز دارید react docs و مستندات bootstrap را بررسی کنید.اضافه کردن bootstrapbootstrap می تواند به اپلیکیشن react شما به چند طریق اضافه شود. در این آموزش به سه روش بسیار معمول این کار خواهیم پرداخت:1.استفاده از bootstrap cdnbootstrap.2 به عنوان وابستگی3.پکیج react bootstrapاستفاده از bootstrap cdnاین مورد ساده ترین روش برای اضافه کردن bootstrap به اپلیکیشن خود است و هیچ نصب یا دانلودی نیاز نیست. به سادگی یک در قسمت از اپلیکیشن خود همانطور که در قطعه کد زیر نشان داده شده است، قرار دهید. اگر شما به استفاده از کامپوننت های جاوااسکریپت که با bootstrap همراه است، می باشید نیاز دارید تگ زیر را در انتهای صفحه ی خود دقیقا قبل از تگ انتهایی قرار دهید تا این کامپوننت ها فعال شوند. همانطور که می توانید ببینید bootstrap 4 برای کامپوننت های جاوااسکریپت به jquery و popper.js نیاز دارد. در قطعه کد بالا ما از نسخه ی کوتاه شده ی jquery استفاده کردیم شما می توانید از نسخه ی کامل نیز استفاده کنید.برای اپلیکیشن react شما این قطعه کد ها همیشه به صفحه ی index از اپلیکیشن شما اضافه می شود. اگر شما از create-react-app برای ساخت اپلیکیشن خود استفاده کرده اید صفحه ی public/index.html شما مشابه قطعه کد زیر خواهد بود: react app you need to enable javascript to run this app. حال شما می توانید از کلاس های داخلی bootstrap و کامپوننت های جاوااسکریپت در کامپوننت های اپلیکیشن react خود استفاده کنید.bootstrap به عنوان یک وابستگیاگر شما درحال استفاده از ابزارهای ساخت یا مجموعه ماژول هایی نظیر webpack هستید این همان گزینه ای است که باید bootstrap را به اپلیکیشن react خود اضافه کنید بنابراین نیاز دارید که bootstrap را به عنوان یک وابستگی برای اپلیکیشن خود نصب کنید. npm install bootstrapاگر شما درحال استفاده از yarn هستید: yarn add bootstrapزمانی که bootstrap را نصب کردید باید آن را در فایل های جاوااسکریپت داخلی اپلیکشن خود اضافه کنید. اگر شما از create-react-app استفاده کرده اید باید bootstrap را به فایل src/index.js اضافه کنید. import 'bootstrap/dist/css/bootstrap.min.css'; import react from 'react'; import reactdom from 'react-dom'; import './index.css'; import app from './app'; import registerserviceworker from './registerserviceworker'; reactdom.render(, document.getelementbyid('root')); registerserviceworker();توجه کنید که ما bootstrap minified css را به عنوان اولین وابستگی وارد کرده ایم. به این ترتیب ما می توانیم استفاده از کلاس های داخلی bootstrap را در کامپوننت های اپلیکیشن react خود شروع کنیم. اما قبل از اینکه بتوانید از کامپوننت های bootstrap جاوااسکریپت در اپلیکیشن خودتان استفاده کنید، نیاز دارید که jquery و popper.js را اگر از قبل نصب نکرده اید، نصب کنید. npm install jquery popper.jsسپس برخی از تغییرات اضافی را در فایل src/index.js برای اضافه کردن وابستگی های جدید همانطور که در ادامه نشان داده شده است، ایجاد خواهید کرد. import 'bootstrap/dist/css/bootstrap.min.css'; import $ from 'jquery'; import popper from 'popper.js'; import 'bootstrap/dist/js/bootstrap.bundle.min'; import react from 'react'; import reactdom from 'react-dom'; import './index.css'; import app from './app'; import registerserviceworker from './registerserviceworker'; reactdom.render(, document.getelementbyid('root')); registerserviceworker();ما اینجا import را برای $ و popper اضافه کرده ایم. همچنین مجموعه فایل کوچک شده ی bootstrap javascript را نیز اضافه کرده ایم. حال شما می توانید از کامپوننت های bootstrap javascript در اپلیکیشن react خود استفاده کنید.پکیج react bootstrapروش سومی که می توانید bootstrapرا به اپلیکیشن react خود اضافه کنید استفاده از پکیجی است که کامپوننت های bootstrap بازسازی شده برای کار انحصاری به عنوان کامپوننت های react ، را دارد، می باشد. تعدادی پکیج در (repository) مخزن npm دردسترس است اما روی دو مورد از محبوب ترین موارد در این آموزش تاکید می کنیم:1. react-bootstrap 2. reactstrap هردو مورد گزینه های بسیار خوبی برای استفاده از bootstrap با اپلیکیشن های react هستند البته شما ملزم به استفاده از هیچکدام از آن ها نیستید. این دو مورد ویژگی های بسیار مشابهی دارند.استفاده از کلاس ها و کامپوننت های داخلی bootstrapشما می توانید از bootstrap مستقیما روی اجزا و کامپوننت های اپلیکیشن react خود به وسیله ی کلاس های داخلی مانند همه ی انواع دیگر کلاس ها، استفاده کنید. اجازه دهید یک کامپوننت ساده ی react برای سوئیچ کردن تم بسازیم تا استفاده از کامپوننت ها و کلاس های bootstrap را شرح دهیم.همانطور که در دمو نشان داده شده است ما از کامپوننت dropdown موجود در bootstrap برای پیاده سازی این کار استفاده کرده ایم ما همچنین از کلاس های دکمه ی داخلی برای تنظیم اندازه و رنگ دکمه ی dropdown استفاده کرده ایم.رنگ ها را برای کامپوننت themeswitcher خودمان می نویسیم. اطمینان حاصل کنید که یک اپلیکیشن react را از قبل تنظیم کرده اید. یک فایل جدید برای کامپوننت بسازید و قطعه کد زیر را به آن اضافه کنید: import react, { component } from 'react'; class themeswitcher extends component { state = { theme: null } resettheme = evt => { evt.preventdefault(); this.setstate({ theme: null }); } choosetheme = (theme, evt) => { evt.preventdefault(); this.setstate({ theme }); } render() { const { theme } = this.state; const themeclass = theme ? theme.tolowercase() : 'secondary'; return ( { theme || 'default' } { theme || 'choose' } theme toggle theme dropdown this.choosetheme('primary', e)}>primary theme this.choosetheme('danger', e)}>danger theme this.choosetheme('success', e)}>success theme default theme ); } } export default themeswitcher;در اینجا ما یک کامپوننت ساده ی تعویض تم را با استفاده از کامپوننت های dropdown و تعدادی از کلاس های داخلی ساخته ایم.در ابتدا وضعیت کامپوننت ها را با ویژگی theme تنظیم می کنیم و مقدار اولیه ی آن را null می گذاریم. سپس در کلاس کامپوننت دو event handler برای کلیک به نام های resettheme() برای reset کردن تم و choosetheme() برای انتخاب تم تعریف می کنیم.در متد render() ما یک منوی کشویی شامل سه تم به نام های primary, danger و success را ارائه می دهیم. هر آیتم از منو به یک event handler کلیک برای یک عمل مناسب متصل شده است. به نحوه ی استفاده از theme.tolowercase() برای گرفتن کلاس رنگ تم هم برای دکمه ی کشویی و هم برای متن دقت کنید. اگر هیچ تمی تنظیم نشده باشد بطور پیش فرض ما secondary را به عنوان تم تنظیم کرده ایم.در این مثال دیدیم که چقدر استفاده از کلاس و کامپوننت های داخلی bootstrap در اپلیکیشن react آسان است. مستندات bootstrap را برای آموزش بیشتر درباره ی کلاس ها و کامپوننت های داخلی بررسی کنید.استفاده از react-bootstrapحال دوباره تعویض کننده ی تم خود را با react-bootstrap می سازیم ما از ابزار خط دستور create-react-app برای ساخت اپلیکیشن خود استفاده خواهیم کرد. اطمینان حاصل کنید که ابزار create-react-app روی دستگاه شما نصب شده است.یک اپلیکیشن react جدید با استفاده از create-react-app مانند زیر بسازید: create-react-app react-bootstrap-appسپس وابستگی ها را مانند زیر نصب کنید: yarn add bootstrap@3 react-bootstrapreact-bootstrap اخیرا bootstrap v3 را هدف قرار داده است اما فعالانه روی ارائه پشتیبانی از bootstrap v4 کار می شود.یک فایل جدید به نام themeswitcher.js در دایرکتوری src در پروژه ی خودتان بسازید و محتوای زیر را در آن قرار دهید. import react, { component } from 'react'; import { splitbutton, menuitem } from 'react-bootstrap'; class themeswitcher extends component { state = { theme: null } choosetheme = (theme, evt) => { evt.preventdefault(); if (theme.tolowercase() === 'reset') { theme = null } this.setstate({ theme }); } render() { const { theme } = this.state; const themeclass = theme ? theme.tolowercase() : 'default'; const parentcontainerstyles = { position: 'absolute', height: '100%', width: '100%', display: 'table' }; const subcontainerstyles = { position: 'relative', height: '100%', width: '100%', display: 'table-cell', verticalalign: 'middle' }; return ( {theme || 'default'} primary theme danger theme success theme default theme ); } } export default themeswitcher;در اینجا تلاش کرده ایم تاجایی که ممکن است از مثال اولیه تقلید کنیم و از react-bootstrap استفاده کنیم. ما دو کامپوننت از پکیج react-bootstrap به نام های splitbutton و menuitem را وارد می کنیم. مستندات react-bootstrap را برای آموزش بیشتر بررسی کنید.ابتدا وضعیت کامپوننت ها را با ویژگی theme تنظیم می کنیم و مقدار اولیه ی آن را null می گذاریم. سپس یک event handler به نام choosetheme() برای انتخاب تم یا restart کردن تم تعریف می کنیم.از آنجایی که ما درحال استفاده از bootstrap 3.3.7 هستیم در متد render() برخی از سبک های کانتینر را برای کمک به دستیابی به نقطه تمرکز افقی و عمودی ساخته ایم.توجه کنید که چگونه اندازه ی دکمه را در کامپوننت splitbutton با استفاده از ویژگی bssize تعریف کرده ایم همچنین توجه کنید که چگونه themeclass را به ویژگی bsstyle برای تغییر پویای رنگ دکمه بر اساس وضعیت تم ارسال کرده ایم.ما نام تم را به ویژگی eventkey از هر کامپوننت ارسال می کنیم و سپس onselect handler را به this.choosetheme() که پیش تر تعریف کرده ایم تنظیم می کنیم. کامپوننت menuitem ، eventkey و خود event را به همانند زیر به onselect handler ارسال می کند: (eventkey: any, event: object) => anyدرنهایت فایل src/index.js را همانند قطعه کد زیر تعریف خواهیم کرد: import 'bootstrap/dist/css/bootstrap.min.css'; import 'bootstrap/dist/css/bootstrap-theme.min.css'; import react from 'react'; import reactdom from 'react-dom'; import './index.css'; import app from './app'; import themeswitcher from './themeswitcher'; import registerserviceworker from './registerserviceworker'; reactdom.render(, document.getelementbyid('root')); registerserviceworker();در اینجا ابتدا فایل کوچک شده ی css که برای bootstrap است را import می کنیم و همچنین کامپوننت themeswitcher خود را نیز import می کنیم و آن را به dom رندر می کنیم.حال اگر اپلیکیشن را با دستور yarn start یا npm start اجرا کنید اپلیکیشن شما باید روی پورت 3000 اجرا شود و باید مشابه دموی زیر باشد:استفاده از reactstrapاین بار می خواهیم تعویض کننده ی تم خود را دوباره با استفاده از reactstrap بسازیم. ما از ابزار خط دستور create-react-app برای ساخت اپلیکیشن خودمان استفاده خواهیم کرد. اطمینان حاصل کنید که ابزار create-react-app روی دستگاه شما نصب شده است.یک اپلیکیشن react جدید با استفاده از create-react-app همانند زیر بسازید: create-react-app reactstrap-appسپس وابستگی ها را همانند زیر نصب کنید: yarn add bootstrap reactstrapیک فایل به نام themeswitcher.js در دایرکتوری src از پروژه ی خودتان بسازید و قطعه کد زیر را در آن قرار دهید. import react, { component } from 'react'; import { button, buttondropdown, dropdowntoggle, dropdownmenu, dropdownitem } from 'reactstrap'; class themeswitcher extends component { state = { theme: null, dropdownopen: false } toggledropdown = () => { this.setstate({ dropdownopen: !this.state.dropdownopen }); } resettheme = evt => { evt.preventdefault(); this.setstate({ theme: null }); } choosetheme = (theme, evt) => { evt.preventdefault(); this.setstate({ theme }); } render() { const { theme, dropdownopen } = this.state; const themeclass = theme ? theme.tolowercase() : 'secondary'; return ( {theme || 'default'} {theme || 'custom'} theme this.choosetheme('primary', e)}>primary theme this.choosetheme('danger', e)}>danger theme this.choosetheme('success', e)}>success theme default theme ); } } export default themeswitcher;در اینجا ما مثال اولیه ی خودمان را دوباره با استفاده از reactstrap ساخته ایم. تعدادی کامپوننت از reactstrap را import می کنیم.در ابتدا وضعیت کامپوننت ها را با دو ویژگی تنظیم می کنیم:1. ویژگی theme که مقدار اولیه ی آن را null قرار داده ایم.2. dropdownopen که مقدار اولیه ی آن را false تنظیم کرده ایم. این ویژگی در کامپوننت buttondropdown از reactstrap برای حفظ حالت متغیر dropdown استفاده می شود.ما همچنین متد toggledropdown() برای تغییر وضعیت کنونی dropdown تعریف کرده ایم. این متد همچنین در کامپوننت buttondropdown نیز استفاده می شود. reactstrap همچنین کامپوننت کنترل نشده ی uncontrolledbuttondropdown را ارائه می دهد که به ویژگی isopen یا به ویژگی toggle handler نیاز ندارد. در اکثر مواقع این مورد می تواند به جای buttondropdown استفاده شود.هر آیتم در منوی dropdown با استفاده از کامپوننت dropdownitem رندر می شود. توجه کنید که چگونه اندازه ی دکمه را در کامپوننت dropdowntoggle با استفاده از ویژگی size مشخص کرده ایم. همچنین توجه کنید که چگونه themeclass را به ویژگی color در هردو کامپوننت button و dropdowntoggle برای تغییر پویای رنگ دکمه بر اساس وضعیت تم ارسال کرده ایم.همچنین onclick handler را برای هر dropdownitem با استفاده ازhandler های choosetheme() و resettheme() که قبلا تعریف کرده ایم و انجام داده ایم تنظیم می کنیم.سرانجام فایل src/index.js را به صورت قطعه کد زیر تعریف می کنیم: import 'bootstrap/dist/css/bootstrap.min.css'; import react from 'react'; import reactdom from 'react-dom'; import './index.css'; import app from './app'; import themeswitcher from './themeswitcher'; import registerserviceworker from './registerserviceworker'; reactdom.render(, document.getelementbyid('root')); registerserviceworker();در اینجا ابتدا فایل کوتاه شده ی css از bootstrap را import می کنیم و کامپوننت themeswitcher خودمان را نیز import می کنیم و آن را به dom رندر می کنیم.حال اگر اپلیکیشن خود را با دستور yarn start یا npm start اجرا کنید اپلیکیشن شما باید روی پورت 3000 اجرا شود و باید مشابه دموی زیر باشد:ساخت یک اپلیکیشن دقیقاجازه دهید این مثال را کمی گسترش دهیم تا یک اپلیکیشن دقیق تر بسازیم. تلاش می کنیم تا جایی که ممکن است از کلاس ها و کامپوننت های bootstrap استفاده کنیم و همچنین از آنجایی که reactstrap از bootstrap 4 پشتیبانی می کند از آن برای ادغام bootstrap با react استفاده خواهیم کرد.ما از ابزار خط دستور create-react-app برای ساخت اپلیکیشن خودمان استفاده خواهیم کرد. اطمینان حاصل کنید که ابزار create-react-app روی دستگاه شما نصب شده باشد. در اینجا تصویری از چیزی که می خواهیم بسازیم قرار دارد.یک اپلیکیشن react جدید با استفاده از create-react-app مانند زیر بسازید: create-react-app sample-appسپس وابستگی ها را مانند زیر نصب کنید: yarn add axios bootstrap reactstrapتوجه کنید که axios را به عنوان یک وابستگی نصب کرده ایم. axios یک تعهد بر مبنای http client برای مرورگر ها و node.js است و به ما این امکان را می دهد که پست ها را از baconipsum json api واکشی کنیم.برای اضافه کردن فایل کوتاه شده ی css از bootstrap کمی تغییر در فایل src/index.js ایجاد کنید که نهایتا باید به صورت قطعه کد زیر باشد: import 'bootstrap/dist/css/bootstrap.min.css'; import react from 'react'; import reactdom from 'react-dom'; import './index.css'; import app from './app'; import registerserviceworker from './registerserviceworker'; reactdom.render(, document.getelementbyid('root')); registerserviceworker();یک دایرکتوری جدید به نام components در دایرکتوری src از پروژه ی خودتان بسازید. در دایرکتوری components که ساختید فایل header.js را با محتوای زیر بسازید: import react from 'react'; import logo from '../logo.svg'; import { container, row, col, form, input, button, navbar, nav, navbarbrand, navlink, navitem, uncontrolleddropdown, dropdowntoggle, dropdownmenu, dropdownitem } from 'reactstrap'; const avatar = 'https://www.gravatar.com/avatar/429e504af19fc3e1cfa5c4326ef3394c?s=240&d=mm&r=pg'; const header = () => ( home events learn learn react documentation tutorials courses search ); export default header;کامپوننتی که در این قطعه کد ساختیم کامپوننت header است که شامل منوی مسیریابی است. سپس یک فایل جدید به نام sidecard.js در دایرکتوری components با محتوای زیر خواهیم ساخت: import react, { fragment } from 'react'; import { button, uncontrolledalert, card, cardimg, cardbody, cardtitle, cardsubtitle, cardtext } from 'reactstrap'; const banner = 'https://i.imgur.com/cakdfmq.jpg'; const sidecard = () => ( account not activated. glad chinda web developer, lagos full-stack web developer learning new hacks one day at a time. web technology enthusiast. hacking stuffs @theflutterwave. view profile ); export default sidecard; سپس یک فایل جدید به نام post.js در دایرکتوری components می سازیم و قطعه کد زیر را به آن اضافه خواهیم کرد: import react, { component, fragment } from 'react'; import axios from 'axios'; import { badge } from 'reactstrap'; class post extends component { state = { post: null } componentdidmount() { axios.get('https://baconipsum.com/api/?type=meat-and-filler¶s=4&format=text') .then(response => this.setstate({ post: response.data })); } render() { return ( { this.state.post && editor's pick new getting started with react {this.state.post} } ); } } export default post;در اینجا ما کامپوننت post را ساخته ایم که یک پست را روی صفحه رندر می کند. ما وضعیت این کامپوننت را با ویژگی post که با null تنظیم شده است مقدار دهی اولیه می کنیم. هنگامی که این کامپوننت شروع به کار می کند از axios برای واکشی یک پست تصادفی از 4 پاراگراف از baconipsum json api استفاده می کنیم و ویژگی post در وضعیت را به روزرسانی می کنیم.سرانجام فایل src/app.js را تغییر دهید تا مشابه قطعه کد زیر شود: import react, { fragment } from 'react'; import axios from 'axios'; import { container, row, col } from 'reactstrap'; import post from './components/post'; import header from './components/header'; import sidecard from './components/sidecard'; const app = () => ( ); export default app;در اینجا به سادگی کامپوننت های header ، sidecard و post را در کامپوننت app قرار داده ایم. توجه کنید که چگونه از تعدادی از کلاس های کاربردی responsive که توسط bootstrap ارائه شده است تا اپلیکیشن مناسب صفحه نمایش با اندازه های مختلف باشد، استفاده کرده ایم.اگر شما اپلیکیشن را با دستور yarn start یا npm start اجرا کنید اپلیکیشن شما باید روی پورت 3000 اجرا شود و دقیقا باید مانند تصویری که پیش تر دیدیم باشد.نتیجهدر این آموزش چندین راه مختلف که می توانیم bootstrap را با اپلیکیشن react خود ادغام کنیم را بررسی کردیم و همچنین نحوه ی کار با دو اپلیکیشن محبوب react bootstrap به نام react-bootstrap و reactstrap را نیز بررسی کردیم.در این آموزش تنها از چند کامپوننت bootstrap نظیر alert ، badge ، dropdown ، navbar ، nav ، form ، button ، card و غیره استفاده کردیم و همچنان کامپوننت های دیگری نظیر tables ،modals ، tooltips ، carousel ، jumbotron ، pagination ، tabs و غیره وجود دارد که می توانید آن ها را تجربه کنید.می توانید مستندات پکیج هایی که در این آموزش استفاده کردیم را بررسی کنید تا راه های بیشتری که می توان استفاده کرد را بیابید. source code تمام دموی اپلیکیشن ها در این آموزش را می توانید درgithub بیابید. به اشتراک بگذارید :

کامپوننت های داینامیک در angular با استفاده از typescript

درخواست حذف این مطلب
کامپوننت ها به عنوان کلید اصلی نرم افزارهای مبتنی بر فریم ورک قدرتمند angular، محسوب می شوند. اگر به نام گذاری فایل های موجود در پوشه ی app توجه داشته باشید، تمامی اسامی با پسوند component. همراه هستند و این امر اهمیت مبحث کامپوننت ها را نشان می دهد. از این رو در این مقاله در مورد کامپوننت های داینامیک و نحوه ایجاد، حذف و set و get کردن مقادیر کامپوننت ها در angular آشنا می شویم. کامپوننت های داینامیک در angular با استفاده از typescriptامروز ما نحوه ایجاد کامپوننت های داینامیک در angular 2/4 ، نحوه set کردن مقادیر کنترل داینامیک و نحوه get کردن مقادیر از کامپوننت تولید شده داینامیک را گام به گام و با شرح هر مرحله به چالش کشیده ایم. کامپوننت های داینامیک آن کامپوننت هایی هستند که در زمان اجرا ایجاد می شوند. منظور از زمان اجرا این است که ما یک برنامه در حال اجرا داریم و زمانی که بخواهیم بعضی از کامپوننت ها را روی هر رویداد (event) مانند (رویداد کلیک) render کنیم، این کامپوننت، کامپوننت داینامیک نامیده می شود. بنابراین، این مقاله چهار چیز را در مورد کامپوننت های داینامیک در زیر شرح می دهد:1. نحوه ایجاد کامپوننت داینامیک2. نحوه حذف کردن کامپوننت داینامیک3. نحوه set کردن مقادیر کنترل ها در کامپوننت داینامیک4. نحوه get کردن مقادیر از کنترل های کامپوننت داینامیک.مانند صفحه نمایشی که در زیر نشان داده شده است صفحه نمایشی ایجاد می کنیم. دو بخش در صفحه نمایش مشاهده می کنید، در بخش اول، ما یک دکمه add new skills داریم و بر روی آن کلیک می نماییم. با کلیک بر روی این دکمه، یک کامپوننت داینامیک جدید که تعدادی کنترل مانند dropdown برای skills، یک textbox برای وارد کردن مقادیرexperiences و یک dropdown برای rating دارد، برای ما ایجاد می شود. به غیر از این موارد، در نهایت ما یک دکمه cross داریم که کامپوننت داینامیک را حذف می کند. در بخش اول یک بار دیتاها با استفاده از کنترل ها آماده خواهند شد و وقتی ما بر روی دکمه save skills کلیک می نماییم مقادیر کنترل ها get می شود و این مقادیر در بخش دوم نمایش داده می شود.بنابراین در این صفحه نمایش، شما ابتدا نحوه ایجاد یک component داینامیک را با کلیک روی دکمه « add new skills»، چگونگی حذف component داینامیک را با کلیک روی دکمه «cross»خواهید دید. و همچنین جدا از این موارد خواهید دید که چطور مقادیر را برای component های داینامیک در angular را set و get کنیم.بنابراین، بیایید یک برنامه angular 5 را با استفاده از cli در visual studio ایجاد کنیم. به اشتراک گذاشتن اطلاعات بین کامپوننت هایی که در یک سطح قرار دارند (sibling) با استفاده از rxjs behaviorsubjectاز آنجا که امیدواریم شما قادر باشید یک پروژه angular 5 cli را در visual studio 2015/2017 یا visual studio code ایجاد کنید، به مرحله بعدی می رویم. بنابراین، برای ایجاد کامپوننت داینامیک، به صورت عملی وارد کار می شویم. پس از ایجاد پروژه، "index.html" را باز کنید و cdn را به مسیر bootstrap اضافه کنید تا بتوانید از css بوت استرپ استفاده کنید. همانطور که می بینید، ما bootstrap.min.css را درون تگ اضافه کردیم. dynamiccomponentdemo اکنون یک کامپوننت جدید که دارای سه کنترل drop-down برای skills، یک textbox برای experiences وdropdown برای rating است، ایجاد می کنیم. بنابراین ابتدا یک پوشه به نام "components" در مسیر برنامه ایجاد کنید و یک کامپوننت با استفاده از دستور زیر تولید کنید.ng g c skillsrating --saveشما تنها یک بار قادر هستید که یک کامپوننت جدید تحت عنوان"skillsratingcomponent" ایجاد کنید. فقط تنها کاری که انجام می دهید این کامپوننت ،"skillsratingcomponent" را در قسمت اعلانات "appmodule" اضافه کنید. جدا از این،ما مجبوریم "formsmodule" یا "reactiveformsmodule" را برای استفاده از کنترل های فرم import کنیم. اگر این کار را نکنید، چندین error برای کنترل های فرمها خواهید یافت.appmodule.tsimport { browsermodule } from '@angular/platform-browser'; import { ngmodule } from '@angular/core'; import { formsmodule, reactiveformsmodule } from '@angular/forms'; import { approutingmodule } from './app-routing.module'; import { appcomponent } from './app.component'; import { skillsratingcomponent } from './components/skills-rating/skills-rating.component'; @ngmodule({ declarations: [ appcomponent, skillsratingcomponent ], imports: [ browsermodule, approutingmodule, formsmodule, reactiveformsmodule ], providers: [], bootstrap: [appcomponent], entrycomponents:[skillsratingcomponent] }) export class appmodule { }اکنون زمان تغییر دادن skillsratingcomponent رسیده است. بنابراین، " skillsratingcomponent " را باز کرده و کد template زیر را اضافه کنید. شما می توانید این موارد که ذکر می شود را در کد زیر مشاهده کنید، ما یکdropdown برای نشان دادن لیست skill های کاربر داریم، یک textbox برای experience کاربر ، یک dropdown دیگر برای نشان دادن rating ارائه شده توسط کاربر و در نهایت، یک دکمه برای حذف اطلاعات skills ، به معنی حذف کامپوننت داینامیک داریم.skills-rating-component.html skills: {{item}} experiences: rating: {{item}} پس از تزئین قالب skillsratingcomponent ، اکنون زمان تغییر دادن کامپوننت آن است. بنابراین skillsratingcomponent.ts را باز کنید و کدهای زیر را اضافه کنید. دراینجا قادر به مشاهده property های زیادی هستید که به معرفی آن ها می پردازیم و یک به یک آن ها را توضیح می دهیم. property های reference از reference کامپوننت های داینامیک تولید شده حفاظت می کند، index تعداد شاخص برای کامپوننتهای داینامیک تولید شده است، selectedskill، yearsofexperiences و selectedrating به ترتیب مقادیر انتخاب شده برای skills ، experience و rating می باشند. جدا از این، ما دو property دیگر مانند skills و ratings داریم، که برای اتصال داده ها در dropdown استفاده می شود.توجه داشته باشید، ما یک روش به نام removeskills ()داریم که دکمه داینامیک انتخاب شده را با کلیک روی دکمه cross حذف می کند.skillsratingcomponent.tsimport { component, oninit, elementref } from '@angular/core'; @component({ selector: 'app-skills-rating', templateurl: './skills-rating.component.html', styleurls: ['./skills-rating.component.css'] }) export class skillsratingcomponent implements oninit { reference: any; index: number; selectedskill: string; yearsofexperiences: string = '0'; selectedrating: string; skills: any = []; ratings: any = []; constructor(private elementref: elementref) { } removeskills() { this.reference.destroy(); } ngoninit() { } }بنابراین، اکنون ما کامپوننتی را که شرح دادیم آماده کرده ایم و قالبش با کلیک بر روی دکمه "add new skills" به صورت داینامیک تولید می شود. بنابراین، به app.component.html بروید و کد زیر را داخل آن قرار دهید. در اینجا همانطور که مشاهده می نمایید، ما دو بخش داریم که قبلا در بالا بحث کردیم، برای اولین بار یک دکمه برای اضافه کردن skill های جدید همراه با یک #dynamiccontianer وجود دارد. این container داینامیک یک container برای اضافه کردن همه کامپوننت های داینامیک تولید شده درون آن با کلیک کردن روی "add new skills" است.قسمت دوم فقط شامل یک تگ span با شناسه «addskills» است که تمام لیست skill های انتخاب شده را از قسمت اول با کلیک کردن روی دکمه save skills نشان می دهد.app.component.html dynamic components in angular add new skills save skills skills rating by user در نهایت، ما باید appcomponent.ts را به جایی که ما داده ها را برای اتصال با کنترل های داینامیکی تولید شده آماده می کنیم، جابه جا کنیم.بنابراین، اول از همه، instance ای از dynamiccontainer با استفاده از viewcontainerref بسازید و از این طریق، تزریق وابستگی را برای کامپوننت factoryresolver ایجاد کنید. کامپوننت factoryresolver برای حل کامپوننت ای است که در زمان اجرا منتقل می شود. هنگامی که کامپوننت حل و فصل خواهد شد، کامپوننت داینامیک را می توان با استفاده از متد createcomponent که کامپوننت های حل شده(resolved) را به عنوان آرگومان می گیرد، در داخل container ایجاد کرد.let comp = this.comfacresolver.resolvecomponentfactory(skillsratingcomponent); let dynamiccomp = this.container.createcomponent(comp);هنگامی که کامپوننت داینامیک تولید می شود، وقت آن است که کنترل های خود را در زمان اجرا متصل کنیم. ابتدا همه مجموعه reference ها را با شیء (object) dynamiccomp تعیین کنید. سپس شما قادر به مشاهده کد زیر هستید، ما هر property را تنظیم و با مقادیرشان مرتبط می سازیم.dynamiccomp.instance.reference = dynamiccomp; dynamiccomp.instance.skills = this.skills; dynamiccomp.instance.ratings = this.ratings; dynamiccomp.instance.index = this.rowid; dynamiccomp.instance.selectedskill = ''; dynamiccomp.instance.yearsofexperiences = '0'; dynamiccomp.instance.selectedrating = this.ratings[0];تا بالا ما دیدیم که چگونه کامپوننت داینامیک را ایجاد ، حذف و مقادیر کامپوننت داینامیک را set کنیم. اما سوالی که مطرح می شود این است که چگونه می توان مقادیر کنترل را از کامپوننت های تولید شده به صورت داینامیک get کرد. با کلیک روی دکمه save skills، ابتدا باید instance ای از container ایجاد کنیم و سپس در داخل آن، ما می توانیم همه view های جاسازی شده (embedded ) را پیدا کنیم که جزء کامپوننت مولد داینامیک نیست. بنابراین، برای حلقه استفاده می کنیم، می توانیم مقادیر را از هر view جاسازی شده بدست آوریم و آن را به span قسمت دوم اضافه کنیم.شما می توانید کل کد appcomponent را به صورت زیر در اختیار داشته باشید.appcomponent.tsimport { component, viewcontainerref, viewchild, componentfactoryresolver } from '@angular/core'; import { skillsratingcomponent } from './components/skills-rating/skills-rating.component'; @component({ selector: 'app-root', templateurl: './app.component.html', styleurls: ['./app.component.css'] }) export class appcomponent { @viewchild('dynamiccontainer', { read: viewcontainerref }) container: viewcontainerref; skills: any; ratings: any; rowid: number; data: string; embeddedviews: number = 0; constructor(private comfacresolver: componentfactoryresolver) { } addnewskills() { let rows = document.getelementbyid("dynamiccontainer"); let rowidindex = rows.innerhtml.indexof("row"); if (rowidindex == -1) { this.rowid = 1; } this.skills = ['csharp', '.net framework', 'asp.net', 'asp.net core', 'angular 1.x', 'angular 2.x', 'web api', 'azure', 'javascript', 'sql']; this.ratings = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; let comp = this.comfacresolver.resolvecomponentfactory(skillsratingcomponent); let dynamiccomp = this.container.createcomponent(comp); dynamiccomp.instance.reference = dynamiccomp; dynamiccomp.instance.skills = this.skills; dynamiccomp.instance.ratings = this.ratings; dynamiccomp.instance.index = this.rowid; dynamiccomp.instance.selectedskill = ''; dynamiccomp.instance.yearsofexperiences = '0'; dynamiccomp.instance.selectedrating = this.ratings[0]; this.rowid += 1; let com = this.container; if (com !== undefined) { this.embeddedviews = com['_embeddedviews'].length; } } saveskills() { let comp = this.container; this.data = ""; (document.getelementbyid("addedskills")).innertext = ""; if (comp !== undefined) { debugger; if (comp['_embeddedviews'].length != 0) { for (let i = 0; i < comp['_embeddedviews'].length; i++) { if (comp['_embeddedviews'][i] != undefined) { debugger; let selectedskill = comp['_embeddedviews'][i].nodes[1].instance.selectedskill == '' ? "none" : comp['_embeddedviews'][i].nodes[1].instance.selectedskill; let yearsofexperiences = comp['_embeddedviews'][i].nodes[1].instance.yearsofexperiences == '' ? "none" : comp['_embeddedviews'][i].nodes[1].instance.yearsofexperiences; let selectedrating = comp['_embeddedviews'][i].nodes[1].instance.selectedrating; this.data = 'user knows ' + selectedskill + ' from ' + yearsofexperiences + ' years , provided rating as ' + selectedrating + '.'; (document.getelementbyid("addedskills")).innerhtml += this.data; (document.getelementbyid("addedskills")).appendchild(document.createelement('br')); } } } } } }هنگامی که هر آنچه در بالا گفته شد را تنظیم کردید و پروژه را اجرا کردید، سپس همان صفحه ای که قبلا در بالا نشان دادیم را پیدا کنید. از اینجا، ما قادر به ایجاد و حذف کامپوننت داینامیک و set یا get کردن مقادیر کامپوننت های داینامیک می باشیم. به اشتراک بگذارید :

7 مورد از بهترین ویرایشگرهای کد html برای توسعه دهندگان وب

درخواست حذف این مطلب
زمانی که تصمیم می گیرید کار ساخت صفحات وب را آغاز کنید، در اولین گام با html و css سروکار خواهید داشت. در نتیجه به یک ویرایشگر خوبی که بتواند کدهای html را ویرایش کند نیاز دارید. ویرایشگرهای html رایگان بسیاری وجود دارند، اما همه آن ها مناسب کار شما نیستند و ممکن است قادر به برطرف کردن نیازهای شما نباشند. ما در این مقاله هفت مورد از بهترین ویرایشگرها را به شما معرفی می کنیم. خوشبختانه پیش بینی این موضوع (منسوخ شدن روش قدیمی توسعه و طراحی)، سبب محبوبیت ویرایشگر کد شده است. ویرایشگر کد جایگزین مناسبی از جهت سرعت و کنترل و همچنین کدنویسی سریع و موثر می باشد (احتمالا از دید شما هم یک امر ضروری است) و آنچه که از هر چیزی مهم تر است دریافت کدهای کامل و صحیح html است. حقیقت این است که یک اشتباه می تواند باعث بروز مشکلات بسیاری شود. انتخاب بهترین ویرایشگر کد html برای توسعه دهندگان وب، باعث می شود محیط کاری ساده شود و بهره وری و سودمندی را بهبود بخشد.یک ویرایشگر کامل html دارای یک چک کننده املا، چک کننده تعداد خطوط، برجسته کردن و پر رنگ نمودن (highlight) خطاها، auto-complete، پیش نمایش صفحه شامل ویرایشگر تصویری و متن است. مطمئنا، این تنها چند مورد از مواردی است که یک ویرایشگر میتواند انجام دهد. از آنجا که ویرایشگرها انواع زیادی دارند (برای مثال متن، شی و wysiwyg)، مهم ترین چیز این است که آن ویرایشگری را بیابید که متناسب با کار شما است.ویرایشگر متن برای طراحان وب یک مسئله بسیار اساسی است. احتمالا شما می توانید ویرایشگرهای زیادی را امتحان کنید ولی در نهایت آن ویرایشگری را انتخاب می نمایید که برای کار شما مناسب تر است. ما برای شروع و ساده تر شدن موضوع به چند مورد اشاره می کنیم.atomاتم دارای مجوز ویرایشگر متنی قابل هک mit است و برای برنامه نویسان ui,ux مناسب می باشد. یکی از ویژگی های خوب این ویرایشگر رایگان بودن آن است، این ویرایشگر با mac os x، ویندوز و لینوکس کار می کند. atom با داشتن 50 پکیج open-source قابل توسعه است. به طور حتم، این ویرایشگر به خاطر داشتن این ویژگی های خوب (اصلاح خودکار هوشمند، جستجو سریع، قابلیت جمع شدن کد و دارا بودن تم بسیار خوب) بهترین است. به همین دلیل است که فقط در طی چند سال، این چنین در قلب عموم جای گرفته است.downloadsublime textsublime text ، ویرایشگر بهبود یافته و مناسبی است که تعداد زیادی گزینه ویرایش دارد. همچنین قابل تنظیم است و با ویندوز، لینوکس و mac osx کار می کند. علاوه بر این، به حداقل رساندن فشردن کلیدهای کیبورد، پرش فوری به خطوط، انتخاب های چندگانه، ap قدرتمند python، ویرایش تقسیم، سوئیچ فوری و cross platform ، چیزهایی است که در این ویرایشگر دیده می شود. در نهایت، بدیهی است که نسخه رایگان دارد اما شما برای استفاده از همه امکانات باید 70 دلار هزینه کنید.download and detailnotepad++ gpl به ویرایشگر کد منبع باز notepad + + که به صورت رایگان است مجوز داده است. این ویرایشگر قدیمی ترین ویرایشگر است ولی با این وجود هنوز در صحنه رقابت است. اگر شما کاربر ms windowsباشید، این ویرایشگر قابل توسعه بهترین مورد برای شما است و بهتر از همه ویرایشگرهای دیگر قادر است فایل های بزرگ را بدون هیچ گونه تغییرات عمده مدیریت کند. علاوه بر این، برای اطمینان از نظر سرعت و حجم، این ویرایشگر در c ++ نوشته شده که از win32 api و stlاستفاده می کند.downloadcoffeecup html editorcoffeecup، یک ویرایشگر همه جانبه و ساده html است که توانایی ویرایش کامل را دارد. اگر نسخه تصویری coffeecup را خریداری نمایید پشتیبانی wysiwyg را دریافت می نمایید، در حالی که نسخه رایگان آن فقط یک ویرایشگر متن است. این ویرایشگر در ویندوز و سیستم عامل مک پشتیبانی می شود. علاوه بر این، طیف گسترده ای از موارد (highlighting ، ابزارهای اعتبارسنجی کد، سازمان دهی پروژه، پیش نمایش سایت و موارد خیلی بیشتر ) را تسریع می بخشد.download free versionlight tablelight table، اصولی، قابل تنظیم و زیبا، ویرایشگر کد html را طراحی کرده است. بهترین ویژگی این ویرایشگر این است که، شما به سادگی قادر هستید کد خود را ارزیابی کنید و نتایج آنلاین را با استفاده از این ویرایشگر منبع باز نمایش دهید. همچنین دارای ویرایش قدرتمند، مدیر پلاگین، است. مهمتر ازهمه، شما به راحتی می توانید ide خود را بنا بر نیازتان تغییر دهید. با ادغام بازی ها و نمودارها این ویرایشگر بهترین انتخاب است. downloadbrackets – open source code editorbrackets ، یک ویرایشگر متن قدرتمند، کم حجم و رایگان می باشد، این ویرایشگر ui عالی ارائه می دهد. و نکته جالب توجه این است که کد این ویرایشگر با جاوا اسکریپت نوشته شده است. بهترین ویژگی آن این است که از psd می توان اطلاعات مربوط به css را به وضوح استخراج کرد. brackets دارای مجوز mit / bsd است و در ویندوز، مک و لینوکس و پیش نمایش زنده پشتیبانی شده است. در نهایت گزارش پیش پردازنده، بهترین ویژگی های این ویرایشگر برای طراحان وب و توسعه دهندگان front-end است.downloadbluefish editorویرایشگر bluefish، به عنوان ویرایشگر html ویژگی های کاملی را دارد که به طور مرتب هم به روزرسانی می شود، این ویرایشگر دارای بررسی خودکار املای کد، auto complete، مدیریت پروژه و ذخیره خودکار است. علاوه بر این، این ویرایشگر با زبان های مختلف مانند html، php، css و ... در لینوکس، macos-x، ویندوز و ... کار می کند. اما برای توسعه دهندگان وب بهتر است به جای اینکه روی وب و یا یک رابط کاربری wysiwyg متمرکز شوند، ابتدا روی انتخاب یک ویرایشگر کد متمرکز شوند.downloadrj textedrj، ویرایشگر رایگان و یک توسعه دهنده وب بسیار قدرتمند php) ، asp، javascript، html و css ) با ویژگی های کامل است. rj textedبا پیش نمایش css / htmlترکیب می شود، از ویژگی های این ویرایشگر، چک کردن املا، پشتیبانی از ایمیل، جستجوی پیشرفته، auto completion و حتی دارا بودن قالب هاست. اگر دنبال یک ویرایشگر چند منظوره رایگان هستید، این ویرایشگر، گزینه مناسبی است.downloadنتیجه گیریبرای اطمینان از دلیل اصلی استفاده از ویرایشگر کد html، ایجاد و سفارشی کردن وب سایت ها و برنامه های کاربردی است. طیف گسترده ای از ویرایشگرهای html برای طراحان وجود دارد، اما بهترین کار تنها استفاده یک مورد از ویرایشگرها است، آن ویرایشگری که برای شما مفید است و نیاز شما را برطرف می نماید. کاربرد ویرایشگرهای مختلف با توجه به نوع سیستم و اهداف مختلف است. بنابراین، بهتر است ویرایشگری انتخاب نمایید که متناسب با کار شما باشد.

چرا بیشتر شغل های غیر فنی نیاز به کدنویسی به عنوان مجموعه ای از مهارت ها دارند؟

درخواست حذف این مطلب
در این زمان مدرن و حتی در آینده برنامه نویسی کامپیوتر یا مهارت های کدزنی پرارزش ترین و مهم ترین مهارت ها هم در شغل های it و هم در موقعیت های غیر فنی در نظر گرفته می شود و برای کمک به شرایط موجود و بهبود فرداها می باشد. با کدزنی کاری که دیروز به راحتی انجام می شود امروزه بسیار راحت انجام می شود و کاری که امروز به راحتی انجام می شود فردا بسیار راحت انجام خواهد شد بنابراین کدزنی همیشه پشت همه ی تکنولوژی ها و آینده ی بی دردسر و راحت تر بوده، هست و خواهد بود. ما در دورانی زندگی می کنیم که تقریبا مدیریت داده های همه چیز نظیر ارتباطات،مراقبت های بهداشتی،بانکداری، مسافرت، حمل و نقل،تعاملات تجاری و بسیاری موارد دیگر دیجیتالی انجام می شود و زندگی و کار به کمک کامپیوتر ها ، تلفن های هوشمند و سایر دستگاه های هوشمند ساده تر و از لحاظ زمانی نیز مقرون به صرفه است، اینترنت اشیاء یک شبکه ی ضروری برای یک زندگی بسیار راحت تر است.اینترنت اشیاء (iot) که محبوبیت آن به سرعت درحال رشد خود، هم در موضوع و هم در استفاده است مفهوم آن اتصال دستگاه ها و به اشتراک گذاری یا تعویض داده ها – در مقایسه با صحبت با یکدیگر- از طریق اتصال به اینترنت می باشد که برقراری ارتباط، مراقبت های بهداشتی، بانکداری و سایر کار ها بسیار آسان تر و بدون دردسر انجام می شود. همه ی این موارد با کدزنی و برنامه نویسی ممکن شده است.کدزنی و جایگاه غیرقابل انکار آناز آنجایی که این نسل هرچه بیشتر روی تکنولولژی تمرکز می کند و داده محورتر می شود، کدزنی یک معیار جدید برای سواد به شمار می رود بنابراین اهمیت چگونگی کدزنی نیز درحال افزایش است. حتی steve jobs بنیانگذار apple می گوید "هرکسی در این کشور باید یاد بگیرد چگونه یک کامپیوتر را برنامه نویسی کند" و سپس اضافه می کند که " زیرا این کار نحوه ی فکر کردن را به ما یاد می دهد" bill gates نیز چیزی گفته که این نگرش را پشتیبانی می کند او می گوید "یادگیری برنامه نویسی ذهن شما را توسعه می دهد و به شما کمک می کند بهتر فکر کنید و راهی برای فکر کردن درباره ی چیز هایی که فکر می کنم در همه ی زمینه ها مفید است را می سازد" و اثبات شده است که امروزه کدزنی و برنامه نویسی درحال تبدیل شده به یک مهارت لازم برای افزایش امنیت کاری و تکامل سریع صنایع مختلف از طریق تکنولوژی می باشد.c.j. windisch مهندس ارشد و بنیانگذار اپلیکیشن مبتنی بر مکان gonnabe عقیده دارد که ارزش کدزنی به یادگیری چگونگی استفاده از اطلاعات و داده ها برای تصمیم گیری است یکبار او می گفت:" همه جا از آنالیز های استاتیک استفاده می کنیم از بازی بیسبال گرفته تا سیاست های تیم انتخاباتی داده محور باراک اوباما. فهم داده در این سطح نیاز به کامپیوتر برای اجرای اعداد است و ماشین حساب جوابگوی این کار نیست. در دنیای داده های حجیم امروزه است که کدزنی معنا پیدا می کند." اساسا کدزنی زبان کامپیوتر است که برای توسعه و پردازش هرگونه داده ای در دستگاه های هوشمند استفاده می شود، هر اپلیکیشن که در تلفن خود می بینیم، هر وبسایتی که مرورگر خود می بینیم و هر نرم افزاری که استفاده می کنیم، همه با این کد ها و کدزنی ساخته و پرداخته می شوند. کدزنی ضروری است زیرا کامپیوتر ها نمی توانند به زبان انسان ها صحبت کنند یا کلمات را بفهمند تنها چیزی که کامپیوتر ها می فهمند زبان ریاضی که به زبان باینری معروف است، می باشد. کد باینری شامل ترکیبات نامحدود و پیچیده ای از صفر(0) و یک (1) است که حروف، اعداد و کاراکتر ها را نشان می دهد اما با این حال زبان گسترده ای ساخته می شود که میان اکثر انسان ها و کامپیوتر ها قرار می گیرد.برای یادگیری این زبان واسط و ساخت ترکیبات پیچیده و مدیریت و فهم آن ها برنامه نویسی کامپیوتر یا زبان های کدزنی ساخته شده است. زبان های کدزنی نظیر جاوااسکریپت، پایتون، c++ و غیره زبان های سطح بالا هستند که دستورات و دستورالعمل ها را به کد های باینری برای کامپیوتر ترجمه می کند تا کامپیوتر متوجه شود و عملیات های مشخص و متنوعی را روی آن پیاده سازی کند. با استفاده از زبان های برنامه نویسی، از طریق نوشتن کد دستورالعمل ها کدزن ها یا برنامه نویس ها به کامپیوتر می گویند چه کاری انجام دهد و به آنها اجازه می دهد وظایف از پیش ساخته شده را انجام دهد. بدون کدزنی ما زندگی آسان و بدون دردسر با کامپیوتر ها و تلفن های هوشمند به گونه ای که الان درحال تجربه ی آن هستیم نخواهیم داشت.مهارت های کدزنی فقط برای موقعیت های فنی نیستفیزیکدان مشهور stephen hawking می گوید" اگر می خواهید از حقایق جهان پرده بردارید یا فقط می خواهید شغلی در قرن 21 داشته باشید پایه ی برنامه نویسی کامپیوتر یک مهارت ضروری برای یادگیری است." در این عصر داده محور از آنجایی که کدزنی درحال تبدیل شدن به یک مهارت ارزشمند است بنابراین افراد باید دانش کدزنی داشته باشند. موسسه ی burning glassdoor technologies گزارشی داده است که می گوید 7 میلیون شغل بین سال های 2014 تا 2016 درحال ارزش دهی مهارت های کدزنی هستند و ملزومات کدزنی یا مهارت های برنامه نویسی کامپیوتر به سرعت درحال رشد است که این موضوع نه تنها برای کارهای فنی بلکه برای کارهای سنتی و غیر فنی نیز نیز صادق است.یافته های کلیدی65% از مهارت های درحال رشد سریع و 62% از مهارت های پردرآمد نظیر یادگیری ماشین، apache hadoop, python و مصور سازی داده ها همه به علوم کامپیوتر مربوط است. در حال حاضر فقط 18% از این موقعیت ها به دنبال شخصی با مدرک علوم کامپیوتر هستند.کدزنی و شغل های برنامه نویسی 12% از از میانگین بازار و 50% از بازار کلی، سریع تر درحال رشد است.نیمی از شغل های پردرآمد چارک اول (بیش از 57000 دلار در سال) مشاغلی هستند که به طور معمول متقاضیان مهارت های کدزنی را می خواهند.شغل ها یا مهارت هایی که نیاز به برنامه نویسی کامپیوتر یا کدزنی دارند نسبت به شغل هایی که برنامه نویسی نیاز ندارند 22000 دلار درسال حقوق بیشتری دارند.طبق گفته های alison derbenwick miller رئیس سابق oracle academy گذراندن دوره های علوم کامپیوتر و یادگیری کدزنی جدای از علاقه ی شغلی تصمیم عاقلانه ای است او می گوید "در آینده حیات مشاغل به سطحی از دانش کامپیوتر نیاز خواهد داشت این نشان می دهد که یادگیری علوم کامپیوتر برای درآمد آینده ضروری است و یک مساله ی عدالتی مهم است." و همچنین مهارت های کدزنی ممکن است که در همه ی مشاغل بطور خاص مورد نیاز نباشد اما جویندگان کار می دانند که چگونه کدزنی بطور معمول باعث پیشرفت نسبت به کسانی که کدزنی نمی کنند می شود. برخی از مهارت های شغلی که به مهارت های کدزنی ارزش میدهند شامل موارد زیر است:تحلیلگرانتحلیل گران تجاری، مالی و تحلیلگران داده از برنامه نویسی کامپیوتر برای تحلیل داده ها و حل مسائل تجاری و مالی در تجارت و امور مالی استفاده می کنند.وظایف کدزنی معمول شامل تخمین مقدار پولی که شرکت دریافت خواهد کرد یا مشخص کردن تعداد آیتم مشخص که باید در قفسه ها قرار بگیرد، می باشد.مهندسانمهندسان عمران، مکانیک و تکنسین ها از برنامه نویسی برای هدایت تحقیقات برای حل مسائل خاص تکنولوژی و طراحی و آزمایش محصولات جدید استفاده می کنند.دانشمندانمحققان پزشکی، شیمی و علوم محیط زیستی از برنامه نویسی برای آنالیز نتایج آزمایش ها و ساخت شبیه سازی از اتفاقات فیزیکی استفاده می کنند.هنرمندان و طراحانطراحان گرافیک،ui و طراحان وب از نرم افزار های مدل سازی سه بعدی یا ابزار های دیجیتال سه بعدی نظیر autocad برای ساخت و طراحی وبسایت ها و محصولات فیزیکی استفاده می کنند. 51% از طراحان بصری حداقل به یکی از مهارت های طراحی وب نیاز دارند.این پایان این لیست نیست تجارت ها و شغل های غیر فنی دیگر که با داده ها کار می کنند به کدزنی اهمیت ویژه ای می دهند. marketing نیز بطور عمده به آنالیز داده های حجیم وابسته است و از برنامه نویسی برای فهم چگونگی عملکرد وبسایت و مدیریت شرکت ها استفاده می کنند. ممکن است مهارت های کدزنی در همه ی مشاغل بطور خاص مورد نیاز نباشد اما جویندگان کار می دانند که چگونه کدزنی بطور معمول باعث پیشرفت نسبت به کسانی که کدزنی نمی کنند می شود.مهارت های کدزنی و زبان های مورد تقاضا:sqljavapythonjavascriptc++c#perlios familyphpruby on railsکدزنی مهارتی مورد نیاز در آیندهآگاهی از اهمیت مهارت های کدزنی به سرعت درحال افزایش است و این موضوع از چشم رئیس جمهور آمریکا باراک اوباما نیز پوشیده نمانده است. در سال 2016 سیاست اوباما طرح "دانش کامپیوتر برای همه" را با بودجه ی 4 میلیارد دلاری برای گسترش آموزش علوم کامپیوتر در تشخیص فرصت های مرتبط با مهارت های کدزنی، راه اندازی کرد. حتی tim cook سئو شرکت apple به کد و مهارت کدزنی ارزش بالایی می دهد.در یک مصاحبه که در ششم ماه آپریل سال 2018 با msnbc به نام "انقلاب: اپل درحال تغییر دنیا است."ضبط و پخش شد cook می گوید:"من میخواستم آمریکا قوی باشد اولین و مهم ترین راه این بود که به کدزنی اهمیت بدهیم این یک زبان است و در همه ی جای زندگی ما استفاده می شود و مشکلات ما را حل می کند." در همان مصاحبه cook همچنین می گوید ما به 4 سال آموزش دانشگاهی برای یادگیری کدزنی نیاز نداریم اما او اضافه کرد که کدزنی برای اضافه کردن خلاقیت به کار ها نیاز است.یادگیری کدزنی ممکن است آسان نباشد اما حتما با برنامه های آنلاین و کمپ های کدزنی که این کار را برای کسانی که می خواهند نحوه ی کدزنی را بیاموزند یا مهارت کدزنی خود را بدون تجربه ی کدزنی قبلی بهبود دهند حتی بدون تحصیلات رسمی آسان تر می کند، ممکن است. همچنین مهم است که بدانید کدزنی فقط به معنی نوشتن کد نیست بلکه به معنی ساخت اشیاء و درآمد های بالا است این لذت بردن از کاری است که انجام می دهید. linus torvalds سازنده ی لینوکس git می گوید:" اکثر برنامه نویسان خوب برنامه نویسی را برای دریافت حقوق یا جایگاه خوب اجتماعی انجام نمی دهند بلکه برای اینکه برنامه نویسی سرگرم کننده است انجام می دهند."در این زمان مدرن و حتی در آینده برنامه نویسی کامپیوتر یا مهارت های کدزنی پرارزش ترین و مهم ترین مهارت ها هم در شغل های it و هم در موقعیت های غیر فنی در نظر گرفته می شود و برای کمک به شرایط موجود و بهبود فرداها می باشد.همانطور که edward teller پدر بمب هیدروژن می گوید" علم های امروزه تکنولوژی های فردا هستند." با کدزنی کاری که دیروز به راحتی انجام می شود امروزه بسیار راحت انجام می شود و کاری که امروز به راحتی انجام می شود فردا بسیار راحت انجام خواهد شد بنابراین کدزنی همیشه پشت همه ی تکنولوژی ها و آینده ی بی دردسر و راحت تر بوده، هست و خواهد بود. به اشتراک بگذارید :

ایجاد صفحات خطا برای کدهای http status در asp.net core 2.0

درخواست حذف این مطلب
در این مقاله قصد داریم در مورد نحوه ایجاد صفحات خطا برای کد وضعیت (status code) خاص http در asp.net core صحبت کنیم. با ما همراه باشید تا این کار را با یک پروژه عملی انجام دهیم. شروع کاریک پروژه خالی ایجاد کرده و startup را برای افزودن میان افزاری (middleware) برای صفحات کد وضعیت آپدیت کنید. public class startup { public void configureservices( iservicecollection services) { services.addmvc(); } public void configure( iapplicationbuilder app, ihostingenvironment env) { app.usestatuscodepageswithreexecute("/errors/index", "?statuscode={0}"); app.usemvcwithdefaultroute(); } } نکته{0} با کد وضعیت http جایگزین می شود که میان افزار اجرایی را راه اندازی می کند.کنترلر errors را برای گرفتن خطاهای کد وضعیت اضافه کنید. public class errorscontroller : controller { public iactionresult index(int statuscode) { var feature = httpcontext.features.get(); viewbag.statuscode = statuscode; viewbag.originalpath = feature?.originalpath; viewbag.originalquerystring = feature?.originalquerystring; return view(); } } یک view برای ویوی index اضافه کرده و جزئیات خطا را نمایش دهید. status code: @viewbag.statuscode originalpath: @viewbag.originalpath originalquerystring: @viewbag.originalquerystring کنترلر home را برای بازگرداندن کدهای وضعیت اضافه کنید. public class homecontroller : controller { public iactionresult index() => view(); public iactionresult throw404(int id) => statuscode(404); public iactionresult throw412(int id) => statuscode(412); public iactionresult throw500(int id) => statuscode(500); } یک ویو برای ویو index اضافه کنید. you've reached home 404 (not foud) 412 (precondition failed) 500 (internal server error) یکی از لینک ها را کلیک و اجرا کنید. ویوی کنترلر errors را دریافت خواهید کرد. توجه داشته باشید، با این حال، url تغییر نمی کند.درخواست انجام شده خطای http status را نیز نشان می دهد.بررسی این موضوعexception مدیریت میان افزار (همان طور که در اینجا بحث شد) exceptionهای مدیریت نشده را در اختیار شما قرار می دهد، اما اگر می خواهید صفحات خطا را برای کد وضعیت http منحصربه فرد نمایش دهید، فریم ورک یک میان افزار دیگر برای این منظور را ارائه می دهد.هنگام پیکربندی میان افزار، شما گزینه ای برای هدایت مجدد (re-direct) یا اجرای مجدد درخواست دارید. راه حل فوق اجرای مجدد را نشان می دهد، جایی که سرور درخواست را بازنویسی می کند. نتیجه به جای مسیر صفحه خطا، برگرداندن url مسیری است که توسط کاربر ایجاد می شود.گزینه دیگر برای پیکربندی هدایت مجدد، هنگام تنظیم میان افزار است. public void configure( iapplicationbuilder app, ihostingenvironment env) { app.usestatuscodepageswithredirects("/errors/index?statuscode={0}"); app.usemvcwithdefaultroute(); } در حال حاضر مرورگر مسیر صفحات خطا را نمایش خواهد داد.و به عنوان یک هدایتگر، ابتدا سرور یک 302 (found) را به مرورگر ارسال خواهد کرد، که درخواست بعدی را برای صفحه خطا ایجاد می کند.سورس کد را می توانید از اینجا (github)دانلود کنید. به اشتراک بگذارید :

10 کتابخانه جالب sass که شما باید بدانید

درخواست حذف این مطلب
sass یکی از محبوب ترین پیش پردازنده های css است. که به شما اجازه می دهد تا منطق برنامه نویسی را به کد خودتان اضافه کنید و آن استفاده کنید. از ویژگی های عالی آن میتوان به کار با متغیرها،mixin (توابعی هستند با امکانات کمتری دارند چیزی بین توابع و library ها)، توابع، وراثت و تو در تویی آن اشاره کرد. با استفاده از صدها کتابخانه و فریمورک و پلاگین هایی که وجود دارند شما میتوانید در هنگام ایجاد وبسایت مورد نظرتان از آنها استفاده کنید و زمان کمتری را از دست دهید.در این مقاله ما قصد داریم تا با شما مجموعه ای از 10 کتابخانه جالب sass را به اشتراک بگذاریم که فکر می کنیم باید بررسی شوند.gridlex یک سیستم ساده css برای ساخت پوسته های مدرن و زیرماژول هاست . استفاده از آن برای کاربران بسیار ساده است ، شما فقط باید عناصر ستون (.col) خود را در یک grid container(.grid) قرار دهید.gridlex به شما طرح های responsive (واکنش گرا) را که براساس media-queries هستند پیشنهاد میدهد وشبکه های تودرتو را مستقیما در یک ستون پشتیبانی می کند.buttonscss button library یک کتابخانه open-source و رایگان با قابلیت تنظیم دقیق می باشد که توسط sass ایجاد شده و به شما یک راه سریع و آسان برای اضافه کردن دکمه های زیبا و رنگارنگ در وب سایت خودتان را پیشنهاد یا ارائه می دهد.البته انواع مختلفی هم از دکمه ها وجود دارند از جمله مسطح، گرد، درخشان، 3dو بسیاری موارد دیگرکه میتوانید به سلیقه خودتان آنها را انتخاب کنیدbourbonبوربون یک کتابخانه ساده و سبک sass است که راه ساده ای برای ایجادstylesheets هایی که برای استفاده مستقل از مرورگر ها میباشند را فراهم میکندکه تقریبا شامل همه چیزی است که شما برای ایجاد یه وب سایت شگفت انگیز نیاز دارید- mixins، توابع و افزونه ها. این کتابخانه بدون وابستگی است و نیاز به تنظیمات ندارد.sassy inputsیک کتابخانه mixin sass برای استایل دهی به input های فرم با استفاده از css3 که روی همه ی مرورگر ها قابل اجراست . این کتابخانه شامل mixins برای text، textarea، search، select، radiobutton، checkbox، و button input هاست و همچنین input های sassy قابل سفارشی سازی هستند.saffronsass mixin یکی از ساده ترین کتابخانه های saffron است. این کتابخانه به شما سریعترین راه برای اضافه کردن انیمیشن های css , و transitions را پیشنهاد میدهد و برای کاربر فضای راحتی را ایجاد میکند که بتواند با آن کار کند و تنها کاری که باید انجام دهید اعلام کردن include ها و تعریف کردن متغیرهایی است که میخواهید از آن ها استفاده کنیدتنوع گوناگونی در انیمیشن ها و transitions ها وجود دارد مثل fade-in ، fade-out، slide in ، slide out، و bounce و خیلی موارد بیشترmini.cssیک فریمورک سبک است و اولین فریم ورک css موبایل است که برای ساخت سایتی ریسپانسیو طراحی شده است و کلا حجم آن 10 kb میباشد.وهمچنین responsive بودن آن و دارا بودن ابزار به روز میتواند یک راه سریع و آسان برای ساخت طرح های زیبا برای تمامی اندازه های صفحه نمایش ارائه کند.angled edgesیک کتابخانه ی sass mixin برای ایجاد لبه های زاویه دار در section ها با استفاده از (encoding)انکدینگ svg است. این کتابخانه یک مثلث svg ایجاد میکند که به عنوان عکس background تنظیم شده است. شما می توانید از پارامترهای آن برای تعیین مکان ، hypotenuse ، رنگ ، عرض و ارتفاع استفاده کنید . تمام مرورگرهای مدرن - chrome، firefox، safari، edge وie 9+ از آن پشتیبانی میکنند.typesettingsبا استفاده از typesetting شما میتوانید اندازه فونت خود را در مقیاس ماژولار با ems ،vertical rhythm و نسبت های responsive براساس اندازه ی متن تنظیم کنید .اندازه ی آن به طور پیش فرض 6px است و اندازه ی عمودی آن با مقیاس پیکسل براساس border تعیین میشود . typesettings تمام اندازه های دقیق ریاضی را برای ems مدیریت می کند و از مقیاس ماژولار برای تنظیم اندازه فونت استفاده می کند.materializecss یک فریم ورک css است که مبتنی بر material design میباشد . قابلیت سفارشی سازی بالایی دارد و کاملا responsive میباشد این فریم ورک گلچین زیادی از component ها را به شما ارائه میدهد مثل: button, card, form, navbar، ( صفحه بندی) pagination ها و کلی موارد دیگر . همچنین از دیگر مزیت های آن میتوان به سازگاریش با chrome، firefox، safari، edgeو ie 11+ اشاره کرد.included mediaکتابخانه sass است که یک راه آسان برای نوشتن media query ها ارائه میدهد . دارای لیستی از breakpoint های پیش فرض برای گوشی ، تبلت و دسکتاپ است و می توانید به شیوه ای که دوست دارید آن را سفارشی کنید . این کتابخانه به شما امکان نوشتن media query ها با em و rem و ایجاد نام مستعار برای عبارت هایی که زیاد استفاده میشوند را میدهدنوشتن sass در bootstrap studioبوت استرپ استودیو، برنامه قدرتمندی برای ساخت وب سایت هاست و یک راه آسان برای نوشتن و ویرایش فایل های sass ارائه می دهد. شما میتوانید برای طراحی های ویژوال از drag and drop استفاده کنید و با css و sass آن را استایل دهی کنیدو نتیجه را بصورت real-time ببینید.

چگونه تابع azure را در یک اپلیکیشن asp.net core mvc فراخوانی کنیم؟

درخواست حذف این مطلب
در این آموزش نحوه ی فراخوانی یک تابع azure از یک اپلیکیشن asp.net core mvc را یاد خواهیم گرفت. بنابراین قدم به قدم از نحوه ی ساختن یک پروژه ی جدید تا به انتها را بررسی خواهیم کرد و کد های مورد نیاز را در اختیار شما قرار خواهیم داد. توجهاین مقاله خلاصه ای از کتاب c# 7 and .net core blueprints نوشته شده توسط dirk strauss و jas rademeyer می باشد. این کتاب یک راهنمای گام به گام است که مفاهیم ضروری net core. و c# را به شما با کمک پروژه های واقعی آموزش می دهد.ما با ساخت یک اپلیکیشن asp.net core mvc که تابع azure را برای اعتبارسنجی آدرس ایمیل وارد شده در صفحه ی login اپلیکیشن فراخوانی می کند، شروع خواهیم کرد:این اپلیکیشن هیچ احراز هویتی ندارد. تمام کاری که این اپلیکشین انجام می دهد اعتبارسنجی آدرس ایمیل وارد شده می باشد.1. در ویژوال استدیو 2017 یک پروژه ی جدید بسازید و از template های پروژه asp.net core web application را انتخاب کنید روی دکمه ی ok برای ساخت پروژه کلیک کنید. این کار در تصویر زیر نشان داده شده است:2. در صفحه ی بعدی اطمینان حاصل کنید که net core. و asp.net core 2.0 از گزینه های drop-down فرم انتخاب شده است. از قسمت نوع ساخت اپلیکیشن web application (model-view-controller) را انتخاب کنید.با هر نوع تاییدیه یا فعال سازی پشتیبانی docker نگران نشوید. برای ساخت پروژه فقط روی دکمه ی ok کلیک کنید.پس از اینکه پروژه ی شما ساخته شد ساختار پروژه را در solution explorer ویژوال استدیو خواهید دید:ساخت فرم loginبرای قسمت بعدی می توانیم یک فرم login ساده بسازیم. برای سرگرمی بیشتر اجازه دهید روند را کمی تند تر کنیم. در اینترنت به دنبال template های رایگان login بگردید:1.من تصمیم گرفتم از سایتی به نام colorlib که 50 فرم login رایگان html5 وcss3 را در یکی از فرم های وبلاگ اخیر خود ارائه داده است، استفاده کنم. url این قسمت از سایت را در ادامه قرار داده ایم:https://colorlib.com/wp/html5-and-css3-login-forms/2.من تصمیم گرفتم از login form 1 که از colorlib در سایت خودشان ارائه شده استفاده کنم. template را برای کامپیوتر خودتان دانلود کنید و فایل zip را extract کنید. در فایل زیپ extract شده خواهید دید که چندین پوشه دارید همه ی پوشه ها را از فایل زیپ extract شده کپی کنید (فایل index.html را رها کنید زیرا از آن استفاده خواهیم کرد):3. سپس به solution در ویژوال استدیو خود بروید. در پوشه ی wwwroot محتوا های موجود را حذف یا move کنید و پوشه های فایل زیپ extract شده را در پوشه ی wwwroot در اپلیکیشن asp.net core mvc خود paste کنید. حال پوشه ی wwwroot شما به صورت زیر خواهد بود:4. به ویژوال استدیو برمی گردیم. پوشه ها را زمانی که گره ی wwwroot را در پروژه ی coremailvalidation گسترش می دهید، خواهید دید.5. من همچنین می خواهم توجه شما را به فایل های index.cshtml و _layout.cshtml جلب کنم. این فایل ها را در ادامه توضیح خواهم داد:6. فایل index.cshtml را باز کنید و همه نشانه گذاری ها را از این فایل (بجز بخش های داخل براکت) پاک کنید. نشانه گذاری های html را از فایل index.html در فایل زیپی که پیش تر extract کردیم paste کنید.همه ی نشانه گذاری ها را از فایل index.html کپی نکنید و فقط نشانه گذاری های داخل تگ ها را کپی کنید.7.حال فایل index.cshtml شما به شکل زیر خواهد بود:کد این قسمت در github دردسترس است.8. سپس فایل layout.cshtml را باز کنید و همه ی لینک ها به پوشه ها و فایل هایی که پیش تر در پوشه ی wwwroot کپی کرده اید را اضافه کنید. از فایل index.html برای رفرنس استفاده کنید. شما توجه خواهید کرد که فایل layout.cshtml_ شامل قطعه کد های زیر است ()renderbody@_ یک placeholder است که مشخص می کند محتوای فایل index.cshtml کجا باید استفاده شود. اگر شما قبلا با asp.net web forms کارکرده اید صفحه ی layout.cshtml_ را به عنوان master page درنظر بگیرید. نشانه گذاری layout.cshtml شما باید به شکل زیر باشد: @viewdata["title"] - coremailvalidation @renderbody() © 2018 - coremailvalidation @rendersection("scripts", required: false)اگر همه چیز به درستی کار کند زمانی که اپلیکیشن asp.net core mvc خود را اجرا کنید صفحه ی زیر را خواهید دید. این فرم login بطور واضح کاملا غیر کاربردی است:اما کاملا responsive است. اگر شما اندازه ی پنجره ی مرورگر خود را کاهش دهید، خواهید دید که مقیاس فرم همانطور که سایز پنجره را کاهش می دهید تغییر می کند و این همان چیزی است که شما می خواهید. اگر شما می خواهید طراحی های responsive ارائه شده توسط bootstrap را بیابید به سایت https://getbootstrap.com/ سر بزنید و در قسمت مستندات به بخش مثال ها بروید:کار بعدی که باید انجام دهیم این است که فرم login را به controller متصل کنیم و تابع azure که برای اعتبارسنجی آدرس ایمیل وارد شده ساخته ایم را فراخوانی کنیم.اجازه دهید گام بعدی را بررسی کنیم.گام نهاییبرای ساده سازی کار، یک مدل برای ارسال به controller خواهیم ساخت:1.در اپلیکیشن خودتان در پوشه ی models یک کلاس جدید به نام loginmodel بسازید و روی دکمه ی add کلیک کنید.2. حال پروژه ی شما به شکل زیر خواهد بود. شما خواهید دید که مدل به پوشه ی models اضافه شده است:3. کار بعدی که باید انجام دهیم این است که مقداری کد به مدل خودمان برای نشان دادن فیلد های فرم login اضافه کنیم. دو property به نام های email و password اضافه کنید: namespace coremailvalidation.models { public class loginmodel { public string email { get; set; } public string password { get; set; } } }4. به view به نام index.cshtml برمی گردیم. مدل را در ابتدای صفحه اعلان کنید. با این کار مدل برای استفاده در view دردسترس می شود. در مشخص کردن فضای نام صحیح که مدل در آن موجود خواهد بود دقت کنید: @model coremailvalidation.models.loginmodel @{ viewdata["title"] = "login page"; }5. قسمت بعدی کد باید در فایل homecontroller.cs نوشته شود. در حال حاضر در این فایل یک اکشن به نام index() داریم: public iactionresult index() { return view(); }6. یک تابع async جدید به نام validateemail اضافه کنید که از url پایه ای و رشته ای از url تابع azure که پیش تر آن را کپی کرده ایم استفاده می کند و با استفاده از یک درخواست http آن را فراخوانی می کند. از آنجایی که این کد کاملا ساده است اینجا وارد جزئیات بیشتر نمی شویم. تمام کاری که ما انجام می دهیم فراخوانی تابع azure با استفاده از url که پیش تر آن را کپی کردیم و خواندن داده های بازگشتی می باشد: private async task validateemail(string emailtovalidate) { string azurebaseurl = "https://core-mail- validation.azurewebsites.net/api/httptriggercsharp1"; string urlquerystringparams = $"? code=/is4oj3t46quirzujtxagfenteivxyyodtbfgasw9duz0snmoqfwoq ==&email={emailtovalidate}"; using (httpclient client = new httpclient()) { using (httpresponsemessage res = await client.getasync( $"{azurebaseurl}{urlquerystringparams}")) { using (httpcontent content = res.content) { string data = await content.readasstringasync(); if (data != null) { return data; } else return ""; } } } }7. یک public async action دیگر به نام validatelogin بسازید. داخل اکشن بررسی کنید که آیا modelstate قبل از ادامه معتبر هست یا نه.8. سپس await روی تابع validateemail انجام می دهیم و اگر داده ی برگشتی شامل کلمه ی false باشد متوجه می شویم که حاصل اعتبارسنجی ایمیل false است و سپس پیغام خطا به tempdata property در controller فرستاده می شود.tempdata property مکانی برای ذخیره سازی داده تا زمان خواندن آن می باشد این property در controller به وسیله ی asp.net core mvc قرار دارد. tempdata property از یک ارائه دهنده ی برپایه ی cookie که بطور پیش فرض در asp.net core 2.0 ارائه شده است برای ذخیره سازی داده استفاده می کند. برای آزمایش کردن داده در tempdata property بدون حذف آن می توانید می توانید از متد keep and peek استفاده کنید.اگر نتیجه ی اعتبارسنجی ایمیل مثبت باشد به این معنی است که آدرس ایمیل معتبر است و می توانیم کار های دیگر را انجام دهیم. در اینجا به سادگی می توانیم بگوییم که کاربر وارد سیستم شده است. در حقیقت ما برخی از انواع احرازهویت را انجام می دهیم و سپس مسیر درست به controller را تعیین می کنیم.حال شما نحوه ی فراخوانی تابع azure از اپلیکیشن asp.net core را می دانید. اگر این آموزش برای شما مفید بوده است و تمایل دارید که بیشتر بیاموزید کتاب c# 7 and .net core blueprints را مطالعه کنید. به اشتراک بگذارید :