قرار دادن google recaptcha v2 در وب سایت ها

درخواست حذف این مطلب
در این مقاله قصد داریم ادغام google recaptcha v2 را با برنامه های asp.net و همچنین نحوه سفارشی سازی ویجت recaptcha را بررسی کنیم. قبل از شروع ایجاد برنامه توضیحاتی در مورد google recaptcha و عملکرد آن می دهیم. recaptcha چیست؟google recaptcha یک سرویس رایگان است که از وب سایت شما در برابر اسپم و سوءاستفاده محافظت می کند. recaptcha از یک موتور تحلیل خطر پیشرفته و captchaهای انطباقی استفاده می کند تا از وب سایت شما در برابر فعالیت های نرم افزارهای خودکار جهت سوءاستفاده محافظت کند. این کار در حالی انجام می شود که کاربران معتبر سایت شما به راحتی از آن عبور می کنند.هر بار که captchaها وارد عمل می شوند، تلاش انسان برای ارائه متن دیجیتالی، قرار دادن تصاویر و غیره به ورودش کمک می کند.پیش نیازهادر اینجا ما یک وب سایت ساده asp.net برای قرار دادن google recaptcha در آن ایجاد خواهیم کرد. بنابراین پیش نیازهای ما موارد زیر است.باید یک اکانت گوگل داشته باشیم که بتوانیم در آن سایت هایمان را برای recaptcha ثبت کنیم.ویژوال استودیو (اختیاری)در اینجا، ما از ویژوال استودیو 2015 برای ایجاد برنامه asp.net استفاده می کنیم، اما اجباری نیست. اگر می خواهیم recaptcha به خوبی در سمت سرور اعتبارسنجی شود، می توانیم از آخرین نسخه یا نسخه قدیمی تر استفاده کنیم.ثبت سایت برای recaptchasitekey کلیدهای و secretkey مربوط به recaptcha api ضروری هستند.بنابراین، ابتدا باید سایت/دامنه خود را با google recapthca v2 api ثبت کنیم تا sitekey و secretkey را دریافت کنیم. حالا قصد داریم دامنه های خود (localhost, programcafe.in) را ثبت کنیم و از این کلیدها برای بکارگیری recaptcha استفاده کنیم. برای ثبت دامنه اینجا را کلیک کنید.همان طور که در تصویر فوق می بینید سه نوع recaptcha وجود دارد:recaptcha v2invisible recaptcharecaptcha androidما نوع recaptcha v2 را بررسی کرده و دو دامنه localhost و programcafe.in را تایپ می کنیم. حالا بعد از پذیرش شرایط و ضوابط روی دکمه " register" کلیک می کنیم.نکته: می توانیم چندین دامنه را با localhost ذکر کنیم. بعد از کلیک روی register صفحه زیر باز خواهد شد که شامل sitekey و secretkey مربوط به recaptcha است.در این صفحه گزینه ای برای تنظیمات پیشرفته جهت میزان امنیت داریم. می توانیم طبق نیاز آن را سفارشی کنیم.حالا تمام موارد لازم برای ادغام recaptcha در سایت ها را داریم.در این مقاله، ما قصد داریم یک وب سایت خالی با نام recaptcha ایجاد کرده و پس از آن یک صفحه جدید به نام default.aspx اضافه کنیم.رندرینگ خودکار recaptchaرندرینگ خودکار ویجت این روش ساده ترین راه برای ارائه recaptcha در یک صفحه وب است. در قطعه کد بالا، عنصر div ای را می بینیم که دارای دو ویژگی class و data-sitekey است و هر دوی این ویژگی ها اجباری هستند.g-recaptcha برای ساخت ویجت رندر recaptcha اجباری است، ما نمی توانیم نام کلاس خودمان را استفاده کنیم.data-sitekey کلیدی است که توسط google recaptcha برای دامنه هایی که در زمان ثبت recaptcha v2 ذکر شد، ارائه می شود.بیایید این صفحه را اجرا کنیم تا ببینیم recaptcha چگونه اجرا می شود.به غیر از این دو ویژگی اجباری، گوگل برخی ویژگی های اضافی را برای سفارشی کردن ویجت recaptcha مطابق با انتخاب/نیاز ما فراهم می کند.در زیر لیستی از برخی ویژگی های اختیاری وجود دارد که می تواند برای سفارشی سازی ویجت recaptcha استفاده شود.data-themeمی توانیم از تم تاریک و روشن استفاده کنیم. تم پیش فرض روشن است.مثل: data-typeنوع اجرای recaptcha ممکن است تصویری یا صوتی باشد، اما data-type پیش فرض تصویری است. data-sizeاین مورد می تواند سایز recaptcha را فشرده (compact) یا نرمال (normal) سازد، اما سایز پیش فرض آن نرمال است. data-tabindexمی توانیم tabindex را برای دسترسی راحت تر تنظیم کنیم.پارامترهای google recaptcha apiدر زیر پارامترهایی برای google recaptcha api وجود دارند که اختیاری می باشند.calback: تابع callback شما را وقتی تمام وابستگی ها بارگذاری می شوند، اجرا می کند.render: مشخص می کند که آیا ویجت را به صورت صریح (explicit) ارائه دهد.hl- برای تغییر زبان recaptcha استفاده می شود. در صورت عدم مشخص کردن آن، زبان کاربر را تشخیص می دهد.ادغام recaptcha با وب سایترندر recaptcha به صورت صریح (explicit)مرحله 1یک وب سایت asp.net خالی و یک صفحه جدید default.aspx ایجاد کنید و قطعه کد زیر را داخل تگ body قرار دهید.default.aspx submit در قطعه کد html بالا، یک تگ div می گیریم که ویجت recaptha را رندر خواهد کرد و یک label برای نمایش پیغام اعتبارسنجی recaptcha وقتی روی دکمه کلیک می شود وجود دارد.مرحله 2اسکریپت recaptcha api را در صفحه قرار دهید. در این مقاله، ما این اسکریپت را در پایین body گذاشته ایم. در این مقاله، می خواهیم ویجت را صریحا رندر کنیم، بنابراین باید پارامترهای onload و render را به اسکریپت recaptcha api اضافه کنیم.در اینجا مقدار پارامتر onload، renderrecaptcha است که یک تابع جاوااسکریپت است که ویجت recaptcha را رندر می کند و مقدار render، explicit است که رندر ویجت توسط فراخوانی تابع renderrecaptcha به صورت صریح (explicit) است. مرحله 3حالا اسکریپت زیر را برای رندر recaptcha و توابع callback آن اضافه می کنیم. var your_site_key = ''; var renderrecaptcha = function () { grecaptcha.render('recaptchcontainer', { 'sitekey': your_site_key, 'callback': recaptchacallback, theme: 'light', //light or dark type: 'image',// image or audio size: 'normal'//normal or compact }); }; var recaptchacallback = function (response) { if (response !== '') { jquery('#lblmessage').css('color', 'green').html('success'); } }; jquery('button[type="button"]').click(function(e) { var message = 'please checck the checkbox'; if (typeof (grecaptcha) != 'undefined') { var response = grecaptcha.getresponse(); (response.length === 0) ? (message = 'captcha verification failed') : (message = 'success!'); } jquery('#lblmessage').html(message); jquery('#lblmessage').css('color', (message.tolowercase() == 'success!') ? "green" : "red"); }); مرحله 4اجازه دهید صفحه را برای تست عملکرد recaptcha اجرا کنیم.اعتبارسنجی سمت سرور مرحله 4برای اعتبارسنجی سمت سرور، باید recaptcha siteverify api را همراه با پارامترهای secretkey و response (پاسخ recaptcha بعد از ارسال) فراخوانی کنیم.api url همانند زیر است.https://www.google.com/recaptcha/api/siteverify?secret=&response= public bool isrecaptchvalid() { var result = false; var captcharesponse = request.form["g-recaptcha-response"]; var secretkey = configurationmanager.appsettings["secretkey"]; var apiurl = "https://www.google.com/recaptcha/api/siteverify?secret={0}&response={1}"; var requesturi = string.format(apiurl, secretkey, captcharesponse); var request = (httpwebrequest)webrequest.create(requesturi); using(webresponse response = request.getresponse()) { using (streamreader stream = new streamreader(response.getresponsestream())) { jobject jresponse = jobject.parse(stream.readtoend()); var issuccess = jresponse.value("success"); result = (issuccess) ? true : false; } } return result; } حالا این متد را روی دکمه ای که ورودی recaptcha را اعتبارسنجی می کند فراخوانی می کنیم. protected void btntry_click(object sender, eventargs e) { lblmessage.innerhtml = (isrecaptchvalid()) ? "captcha verification success" : "captcha verification failed"; } مرحله 4حالا برنامه را برای تست اعتبارسنجی سمت سرور اجرا می کنیم.در شیء json بالا، "success: true" نشان می دهد که اعتبارسنجی recaptcha موفقیت آمیز است. به اشتراک بگذارید :

نحوه نصب net core. در ubuntu

درخواست حذف این مطلب
در این مقاله قصد داریم تا نحوه نصب net core. بر روی لینوکس را بیان کنیم. ابتدا ویژوال استودیو را نصب کرده و با یک مثال مراحل کار را به صورت مرحله به مرحله با هم سپری می کنیم. پس اگر شما نیز قصد دارید تا از net core. بر روی لینوکس استفاده کنید تا انتها با ما همراه باشید. به عنوان یک برنامه ویرایشگر، ویژوال استودیو را نصب کنید. (اگر از قبل هر نوع برنامه ویرایشگری را نصب دارید، به مرحله 5 بروید).net core. را روی لینوکس نصب کنید.یک برنامه ساده "hello world" را ایجاد کرده و اجرا کنید.net core 2.x. روی توزیع ها/نسخه های لینوکس bit-64 (x86_64 or amd64) زیر پشتیبانی می شود:red hat enterprise linux 7-centos 7-oracle linux 7-fedora 25, fedora 26-debian 8.7- یا نسخه های بالاترubuntu 17.04- ، ubuntu 16.04، ubuntu 14.04linux mint 18-، linux mint 17opensuse 42.2- یا نسخه های بالاترsuse enterprise linux (sles) 12 sp2- یا نسخه های بالاترمرحله 1ویژوال استودیو با فرمت deb را از اینجا دانلود کنید، همان طور که در تصویر زیر نشان داده شده است.مرحله 2با کلیک بر روی آیکون نشان داده شده و تایپ terminal، ترمینال را باز کنید.مرحله 3به پوشه download بروید و ویژوال استودیو را با استفاده از این دستورات نصب کنید. cd downloads sudo dpkg -i filename.deb cd downloads sudo dpkg - i filename . deb مرحله 4با تایپ code در نوار جستجو بررسی کنید و ببینید آیا ویژال استودیو نصب شده است یا نه. در اینجا می بینید که ویژوال استودیو نصب شده است.مرحله 5برای نصب curl. ترمینال را باز کرده و دستور زیر را تایپ کنید. sudo apt install curlمرحله 6microsoft product key را ثبت کنید. دو دستور زیر را اجرا کنید. curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg sudo mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpgمرحله 7ورژن مناسب host package feed را تنظیم کنید. بر اساس سیستم عامل خود، دستور مربوطه را اجرا کنید. سیستم عامل ما ubuntu 16.04 است، بنابراین از گزینه سوم استفاده می کنیم. دستوراتی که در زیر می بینید مربوط به سیستم عامل های مورد ششم تا هفتم هستند. ubuntu 17.10 sudo sh - c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-artful-prod artful main" > /etc/apt/sources.list.d/dotnetdev.list' sudo apt - get update ubuntu 17.04 sudo sh - c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-zesty-prod zesty main" > /etc/apt/sources.list.d/dotnetdev.list' sudo apt - get update ubuntu 16.04 / linux mint 18 sudo sh - c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-xenial-prod xenial main" > /etc/apt/sources.list.d/dotnetdev.list' sudo apt - get update ubuntu 14.04 / linux mint 17 sudo sh - c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-trusty-prod trusty main" > /etc/apt/sources.list.d/dotnetdev.list' sudo apt - get updateمرحله 8net core. را نصب کنید. sudo apt-get install dotnet-sdk-2.1.4مرحله 9نسخه نصب شده net core. را بررسی کنید. dotnet --versionمرحله 10یک برنامه کنسول ساده را با استفاده از دستور cli زیر ایجاد کنید. dotnet new console -o hellowordapمرحله 11بیایید این برنامه کنسول را اجرا کنیم. cd helloworldapp dotnet runمرحله 12پوشه را در ویژوال استودیو باز کنید، program.cs را می توانید ببینید. به اشتراک بگذارید :

ایجاد اولین پروژه net core. در لینوکس

درخواست حذف این مطلب
net core. یک نسخه چند پلت فرمی و opensource روی net framework. است که رسما توسط مایکروسافت پشتیانی و مدیریت می شود. این مقاله یک مرور کلی از نحوه اجرای net core web project. درubuntu ارائه می دهد، با معماری اصلی آن آغاز کرده و با پیکربندی kestrel برای ایجاد یک برنامه وب خاتمه می یابد. net core framework. پیش از این، ابزارهای scaffolding را برای راه اندازی خودکار برنامه شما فراهم می کرد، اما این بار توسعه را از ابتدا از یک برنامه کنسول پایه آغاز می کنیم.نصب net core. روی لینوکسnet core. را در ubuntu نصب می کنیم، مراحل را از وب سایت رسمی مایکروسافت دنبال می کنیم، اما شما می توانید دستورالعمل های نصب را برای توزیع های رایج پیدا کنید. برای ide می توانید از هر ویرایشگر متنی استفاده کنید، اما ما قصد داریم از برنامه ویژوال استودیو استفاده کنیم، که به نظر ما بهترین یکپارچگی را ارائه می دهد.ساخت اولین پروژه “hello world” در c # .net coreاز فرمان کنسول این دستورات را اجرا کنید:dotnet new console (برای ایجاد یک پروژه کنسول در net core.)dotnet restore (برای بازگرداندن پکیج ها و وابستگی های پروژه)dotnet run (برای اجرای کد).پیکربندی kestrelkestrel یک وب سرور چند پلت فرمی است که برای میزبانی net core برنامه های وب. استفاده می شود.برای افزودن kestrel به پروژه باید وابستگی های آن را به فایل csproj. اضافه کنیم، همانند دستور زیر: ما “watcher” را اضافه خواهیم کرد تا تغییرات منعکس شده را بدون نیاز به توقف و اجرای مجدد پروژه مشاهده کنیم. وابستگی های زیر را اضافه می کنیم:

معیارهای انتخاب قالب سایت مناسب

درخواست حذف این مطلب
انتخاب قالب سایت مناسب باید طبق یک سری اصول باشد. معیارهایی که برای انتخاب قالب سایت مناسب در نظر گرفته می شود بسیار مهم و ضروری است. آیا می دانید انتخاب قالب سایت مناسب باید بر چه اساسی باشد؟ قطعا وقتی می خواهید یک قالب سایت مناسب انتخاب کنید باید بدانید که کدام وجه قابل قبول تر است. در نظر داشته باشید که عموما انتخاب قالب سایت مناسب باید بر اساس معیارهای مشخصی باشد یعنی باید در ابتدای امر مشخص شود که چرا یک سری قالب ها دارای طرفداران بیشتری است و یک سری گزینه های مناسبی محسوب نمی شوند. در این مقاله قصد داریم به طور کلی بررسی کنیم که انتخاب قالب سایت مناسب باید چطور صورت پذیرد با ما همراه باشید.اصول سادگی در انتخاب قالب سایت مناسبسادگی یکی از مهم ترین اصولی است که در انتخاب قالب سایت مناسب دیده می شود. دقت در خصوص سادگی سایت سبب می شود که میلیون ها بازدید کننده به سادگی جذب سایت شوند و این موضوع سبب رونق کسب و کار می شود.بارها دیده می شود که افراد فکر می کنند استفاده از قالب های وردپرسی با رنگ بندی های متنوع و یا طرح های پیچیده گزینه های مناسبی هستند در صورتی که چنین طرح بندی هایی برای قالب وب سایت آنقدرها هم قابل قبول نخواهد بود. این رویکرد نادرست است و اصل سادگی را در خصوص سایت رعایت نکرده است.رنگ بندی نامناسب ، طراحی های شلوع، وجود تبلیغات فراوان، و همینطور زرق و برق غیر اصولی در خصوص قالب وب سایت اصلا نمی تواند گزینه جالبی باشد. در انتخاب قالب سایت مناسب باید سهولت استفاده، وزن سبک و همینطور کاربر پسند بودن باید رعایت شود.قابلیت رسپانسیو در انتخاب قالب سایت مناسبمی دانیم که استفاده از تلفن همراه این روزها بسیار باب شده است و افراد برای گشت و گذار در اینترنت ترجیح می دهند که از تلفن همراه استفاده کنند، به این ترتیب در انتخاب قالب سایت مناسب باید قطعا به این موضوع توجه شود که آیا قالب می تواند در موتورهای جستجو مختلف همخوانی داشته باشد یا نه. در واقع باید سایت مورد نظر در تلفن های همراه مختلف به خوبی نمایش داده شود.برای رسپانسیو بودن سایت باید یک سری ابزار مورد استفاده قرار بگیرد به این ترتیب می توانید به طور دقیق بررسی کنید که قالب انتخابی دارای چنین خاصیتی است.سازگاری با مرورگر در انتخاب قالب سایت مناسبموضوع مرورگر موضوع مهمی است که بارها مورد بررسی قرار می گیرد. در واقع باید انتخاب قالب مناسب به صورتی باشد که در مرورگرهای مختلف قابل قبول باشد. در واقع اگر صاحب سایت هستید و انتظار دارید که افراد مختلفی از سایت شما بازدید کنند باید این خاصیت را در سایت خود قرار دهید که افراد بتوانند با مرورگرهای مختلف از سایت شما بازدید کنند.اگر قالب سایت به صورتی طراحی شده است که با مرورگر خاصی قابل دسترسی نیست شما به طور خودکار بخشی از فروش خود را از دست خواهید داد. در نظر داشته باشید که همیشه برای انتخاب قالب سایت مناسب باید مشخص کنید که به چه میزان مراجعه کننده نیاز دارید.مشاهده امتیاز قالباز دیگر گزینه هایی که برای انتخاب قالب سایت مناسب بسیار مهم است امتیازبندی آن است. در واقع باید ببینید که کدام دسته از قالب ها از دید سایر کاربران دارای بازخورد بهتری است به این ترتیب انتخاب چهارچوب مناسب برای شما بسیار قابل قبول تر خواهد بود . در نظر داشته باشید که همیشه برای قالب ها بخشی به عنوان امتیاز بندی در نظر گرفته می شود که می تواند معیار انتخاب قالب سایت مناسب باشد در واقع شما می توانید نظرات ثبت شده و همینطور امتیاز قالب را به طور دقیق بررسی کنید، از طرفی می توانید دید مناسبی به قالب ها و قابلیت های آنها داشته باشید و همینطور کیفیت هر قالب را مورد بررسی قرار دهید. همیشه برای انتخاب قالب سایت مناسب رتبه بندی ها را مشاهده کنید و هر بخش را به طور دقیق تجزیه و تحلیل کنید. اینطور که مشخص شده است قابلیتی که دارای حداکثر تعداد رتبه های مثبت است می تواند بهترین گزینه محسوب شود.ویژگی های امنیتی در انتخاب قالب سایت مناسبدر نظر داشته باشید که ار دیگر مسائل بسیار مهم برای انتخاب قالب سایت مناسب امنیت است. مسلم است که یک سری از قالب های رایگان و آماده از امنیت قابل قبولی برخوردار نیستند این موضوع سبب می شود که انتخاب قالب سایت مناسب ،مهم به شمار بیاید.بهتر است که انتخاب قالب وب سایت مناسب به صورتی باشد که بتواند به طور منظم به روز رسانی شود، در واقع قالب هایی که دارای خاصیت ایستا هستند هرگز نمی توانند گزینه های جالبی به شمار بیایند. اینطور که مشخص شده است همیشه کیفیت در این لاین حرف اول را می زند و بهتر است که انتخاب قالب وب سایت مناسب طبق کیفیت و کاربرد بررسی شود.به طور کلی در انتخاب قالب سایت مناسب باید بررسی شود که امنیت در وضعیت متوسط قرار بگیرد به این معنی که حتما نیازی به صد در صد بودن امنیت نیست اما از حد وسط هرگز نباید کمتر شود.بهتر است که قالب سایت به صورتی باشد که قابلیت تغییر داشته باشد به این صورت به روز رسانی آسانتر می شود . در مجموع رعایت یک سری نکات گفته شده در انتخاب قالب سایت مناسب بسیار مهم است.

12تصور نادرست در مورد برنامه نویسان

درخواست حذف این مطلب
اما همان طور که ممکن است، افرادی که خارج از این حرفه هستند، هنوز تصورات غلط فراوانی نسبت به کار برنامه نویسان دارند. به منظور رفع برخی از افسانه ها در مورد برنامه نویسان و کار آن ها، ما تصمیم گرفتیم تا لیستی از 12 واقعیت در رابطه با تصوراتی که در مورد برنامه نویسان وجو دارد تهیه کنیم.1. شما باید همیشه مشغول کدنویسی باشیداین مورد احتمالا بزرگ ترین تصور اشتباه بین افراد است. به دلیل ظهور یک سری مباحث تعصبی، برنامه نویسی شهرت بدی گرفته است، حتی برخی مردم از ترس اینکه به آن ها برچسب کدنویس ناخوش احوال بخورد که هیچ تفریح و سرگرمی دیگری ندارند، از برنامه نویسی وحشت دارند. حقیقت این است که همانند سایر حرفه ها، افراد مختلفی در این حرفه وجود دارند. حتی می توانید این گونه استدلال کنید که برنامه نویسان متنوع تر هستند، فقط به این دلیل که تعداد آن ها روز به روز در حال رشد است، بنابراین غیرممکن است که یک نظر کلی در رابطه با آن ها بدهیم و آنان را در یک دسته طبقه بندی کنیم.2. شما باید یک ریاضی دان با استعداد باشیددر حالی که این مسأله 100% درست نیست، هنوز نمی توانیم این ادعا را ادعایی کاملا غلط بدانیم. ارتباط بین ریاضیات و برنامه نویسی در حقیقت به این صورت است که در هر دو شما نیاز دارید تا به راه حل منطقی فکر کنید. به این ترتیب، شما باید از ریاضی استفاده کنید، اما به این معنی نیست که از جبر و مباحث پیشرفته استفاده کنید. توسعه دهندگان وب باید مجموعه ای از مهارت ها را داشته باشند، اما هدف از برنامه نویسی نوشتن کد است، نه حل مسائل ریاضی.اگر مجبور شدید تا از معادلات پیچیده در بخشی از کد خود استفاده کنید، نباید ناامید شوید، زیرا کمک های بسیاری برای برنامه نویسی در قالب کتابخانه ها وجود دارد که می توانید به جای اینکه آن بخش از کد را از ابتدا بنویسید، از این کتابخانه ها استفاده کنید. خوب نبودن در ریاضیات به این معنا نیست که برنامه نویس خیلی بدی خواهید شد، درست مثل اینکه ریاضیات خوب به این معنا نیست که شما یک برنامه نویس عالی خواهید بود.3. شما باید آی کیو mensa-caliber داشته باشیدیادگیری کد می تواند مانند یادگیری نواختن گیتار باشد. در این زمینه همه چیز به استعداد مربوط نمی شود، چیزی که مهم تر است این است که چقدر سخت کار کنید تا بر روی آن مهارت تسلط پیدا کنید. این موضوع هیچ ارتباطی به آی کیو شما ندارد. برنامه نویسی نیاز به خلاقیت دارد تا بتوانید مسائل را حل کنید، که این موضوع با iq آمیخته می شود.زبان های برنامه نویسی همان طور که از نامشان پیداست، یک زبان هستند. به این معنی که اگر شما توانسته اید زبان مادری خود یا هر زبان دیگری را بیاموزید، می توانید نحوه کدنویسی را نیز یاد بگیرید. زبان هایی مثل جاوا، c، c++ یا پایتون توسط موجودات فضایی ایجاد نشده اند. آن ها توسط افراد عادی ایجاد شده اند.4. بهترین زبان برنامه نویسی یکی استبرخلاف بسیاری از حوزه های زندگی، وقتی وارد دنیای برنامه نویسی می شوید، یک زبان بهتر از همه وجود ندارد. این موضوع به این دلیل است که هر زبان برنامه نویسی برای یک هدف خاصی ایجاد شده است. نگران نباشید، اگر یک زبان برنامه نویسی به شما کمک می کند تا آنچه را که قصد انجامش را دارید انجام دهید، در آن مورد خاص برای شما بهترین است. مثلا اگر علاقه مند به زبان برنامه نویسی سطح پایین و کدنویسی os هستید، زبان اسمبلی بهترین انتخاب است. اگر برنامه تولید می کنید می توانید از جاوا، c++ یا c# استفاده کنید. باید ببینید که از بین این سه مورد کدام یک برای مورد خاص شما بهتر است و بهتر می تواند مسأله ای که با آن روبرو هستید را حل کند.5. برنامه نویسی فقط در دانشگاه می تواند یاد گرفته شوداین موضوع ممکن است در گذشته درست بوده باشد، چرا که تنها تعداد کمی آموزشگاه خارج از دانشگاه وجود داشت که برنامه نویسی را آموزش می دادند. امروزه، چه شما در این کار مبتدی باشید یا یک توسعه دهنده حرفه ای، می توانید تقریبا هر چیزی را که نیاز دارید پیدا کنید. البته دوره های دانشگاهی سودمند هستند، زیرا اساتیدی دارید که می توانند شما را در هر مرحله راهنمایی کنند و درس ها به گونه ای طراحی شده است که به شما می آموزد چگونه ابتدا فکر کنید و بعد هر آنچه که آموخته اید را پیاده کنید.اما اگر به دانشگاه رفته باشید و مدرک دیگری گرفته باشید، به این معنا نیست که دیگر نمی توانید برنامه نویس شوید. فقط کافی است که خودتان بخواهید، منابع آنلاین زیادی وجود دارد و همین طور دوره های آموزشی فراوانی که می توانید از طریق آن ها برنامه نویسی را بیاموزید.6. برنامه نویسی شغلی برای خانم ها نیستما در اینجا به استدلال های فمینیستی می رسیم، اما هیچ ادعایی مبنی بر اینکه خانم ها نمی توانند نسبت به آقایان برنامه نویس های خوبی شوند وجود ندارد. مثلا اولین برنامه نویس در جهان یک زن بود. مریسا مایر، مدیر عامل یاهو، یکی از اولین برنامه نویسانی بود که توسط گوگل استخدام شد، یا گریس هایپر که نه تنها به عنوان نخستین بانوی نرم افزار و مادر برنامه نویس رایانه ای شناخته شده است ، بلکه با اصطلاح "باگ" شناخته می شود و همان طور که می دانید این موضوع امروزه بسیار مهم است.7. شما برای کدنویسی خیلی جوان هستیدشما می توانید خیلی جوان باشید و کدنویسی را شروع کنید. در حقیقت مزایای بسیاری وجود دارد که با یادگیری کدنویسی زودهنگام مرتبط هستند، مثل توسعه مهارت های تحلیلی. با این حال، الگوی یادگیری کودکان با بزرگسالان متفاوت است. بچه ها تمایل به فکر بیشتر در شرایط بصری دارند، که باید در هنگام انتخاب اولین زبان برنامه نویسی خود درنظر گرفته شود. ابتکاراتی برای معرفی برنامه نویسی در مدارس ابتدایی وجود دارد، اما هیچ مورد رسمی ای موجود نیست.8. شما برای کدنویسی خیلی پیر هستیددر حقیقت افرادی که امروزه توسعه دهنده هستند، باید در طول زندگی خود در حال یادگیری باشند تا بتوانند به خوبی ادامه دهند، زیرا فناوری اطلاعات و برنامه نویسی زمینه های پویایی هستند. این بدان معناست که آن ها باید تا روز بازنشستگی خود، زمانی که در سن شصت سالگی هستند، در حال یادگیری باشند. اگر آن ها می توانند پس شما هم می توانید. اگر شما به این کار علاقه مند هستید، سن چیزی جز یک عدد نیست.9. هزاران خط کد بسیار زیاد استاگر در برنامه نویسی مشغول به کار هستید، یا تازه شروع به کار کرده اید، اگر به سورس کدی نگاه کنید که 10000 خط یا بیشتر باشد ترسناک به نظر می رسد، یا واقعا غیرممکن است. اما خوشبختانه، این مورد وجود ندارد. اگر نگاهی دقیق تر به این کد داشته باشید، خواهید دید که برخی از بخش ها یکسان هستند و برنامه نویس از آن کد در بخش های مختلف استفاده کرده است. بنابراین 10000 خط کد مختلف نیست.هم برنامه های بدیهی و ساده و هم چالش برانگیزترین برنامه ها با ترکیب قطعه کدهای مشابهی که از همان ابتدا یاد می گیرید، مثل حلقه ها، توابع و متدها انجام می شوند. وقتی شما آن ها را کشف کرده و یاد می گیرید، نوشتن هزاران خط کد به ساده ترین کار در جهان تبدیل می شود.10. سال ها زمان نیاز دارید تا برنامه نویسی را یاد بگیریدیادگیری زبان برنامه نویسی نیاز به تلاش و زمان زیادی دارد و فرآیند یادگیری هرگز واقعا انجام نمی شود، اما برای اینکه قادر به درک و استفاده از دستورات و عملکردهای یک زیان معین باشید، نیاز به یک عمر ندارید، زیرا تمام دستورات به طور عمده در زبان انگلیسی هستند. کاری که باید انجام دهید این است که سینتکس را یاد بگیرید، که شبیه یادگیری تمام قوانین گرامر زبان خارجی است.یادگیری دستورات و توابع، به ویژه اگر برنامه نویسی با استفاده از یک زبان اسمبلی سطح پایین باشد زمان زیادی صرف می کند، اما باز هم غیرممکن نیست. هنگامی که بر سینتکس تسلط یابید، به صورت دقیق عمل می کنید. نه اینکه یادگیری شما خاتمه پیدا کند، اما مجهز خواهید شد تا کد خود را بنویسید و برنامه های خود را در زمان مناسب توسعه دهید.بنابراین وقتی پای زمان بندی به میان می آید، به ماه ها کار کردن سخت نیاز دارید، اما نه سال ها. سال ها طول می کشد تا مهارت های برنامه نویسی خود را کامل کنید، اما این کار تقریبا در هر فعالیتی صورت می گیرد.11. سال ها طول می کشد تا بتوانید یک زندگی برنامه نویسی داشته باشیدهمان طور که قبلا اشاره کردیم، سال ها طول نمی کشد تا آن را یاد بگیرید و قبل از اینکه بتوانید درآمدزایی خود را با مهارت های برنامه نویسی خود شروع کنید سال ها طول نخواهد کشید. البته نباید انتظار داشته باشید که پس از یادگیری c++ در یک سال بتوانید در مایکروسافت مشغول به کار شوید، اما شغل های دیگری وجود دارند که برای سطح مهارت شما خوب و مناسب هستند. از آنجایی که بعضی مکان ها نیاز به تجربیاتی دارند که شما ندارید، شما در ابتدا نمی توانید در این مکان ها کار کنید زیرا تجربه کافی را ندارید. کارآموزی ممکن است برای شروع ایده خوبی باشد.مطمئنا در این شرایط نباید از دید مالی به این موضوع نگاه کنید، اما تجربه خوبی کسب خواهید کرد. به علاوه همیشه فرصتی وجود دارد که بتوانید به صورت تمام وقت استخدام شوید. همچنین همیشه می توانید برای فریلنسر شدن تلاش کنید و مشتریان خود را بیابید. اما اطمینان حاصل کنید که ارتباط خوبی را با مشتریان تان برقرار می کنید. بعضی ها ترجیح می دهند که راحت در خانه خود کار کنند و از ساعاتی که می خواهند لذت ببرند، به همین دلیل تعداد زیادی از برنامه نویسان این مسیر را برای زندگی خود انتخاب می کنند.12. ساعت های طولانی نیاز استبرنامه نویسی نیاز به تلاش زیادی دارد و حتی ساعت های طولانی را نیز در بر می گیرد، اما از یک الگویی دور نیست. حتی برنامه نویسانی هستند که مدت زیادی کار می کنند، پاداش خوبی برای این تلاش های شان دارند و شما از آن ها شکایتی نمی شنوید. البته شما همیشه می توانید تبدیل به یک فریلنسر شوید و ساعت کاری و نرخ خود را تنظیم کنید.اگر تمام این افسانه ها درست بود، تعداد کمی از مردم برنامه نویس می شدند. این کار قطعا حرفه ای مربوط به آینده است و شما می توانید صرف نظر از سن، جنسیت، درجه آی کیو بخشی از آن آینده شوید. همه این ها بستگی به کار سخت، تعهد و تمایل به یادگیری دارد و چیزی است که هیچ ارتباطی با هیچ یک از مقوله های ذکر شده ندارد.

معرفی بهترین زبان برنامه نویسی برای اندروید

درخواست حذف این مطلب
به نظر شما بهترین زبان برنامه نویسی برای اندروید کدام است؟ آیا تا به حال از خود پرسیده اید که چطور می توان بهترین زبان برنامه نویسی برای اندروید را طبق شرایط دشوار انتخاب کرد؟ قطعا در بین زبان های مختلف برنامه نویسی گزینه ای که برای اندروید مناسب باشد یک سری ویژگی های خاص دارد که می تواند مورد تایید قرار بگیرد. امروز قصد داریم روش های انتخاب بهترین زبان برنامه نویسی برای اندروید را بررسی کنیم و عواملی که در این انتخاب تاثیر می گذارند را توضیح دهیمبهترین زبان برنامه نویسی برای اندروید بر اساس محبوبیتشما با یک جستجو ساده در اینترنت می توانید به سادگی متوجه شوید که یک زبان java دارای رتبه بسیار بالا برای برنامه های اندروید محسوب می شود، این زبان در تمامی مراحل خود توانسته به رتبه خوبی دست یابد و همچنان در بین افراد ،دارای محبوبیت و همینطور قدرت بسیار بالایی است. طبق بررسی های موجود، java بهترین زبان برنامه نویسی برای اندروید است که هم قدرت بالایی داشته و هم بسیار محبوب به شمار می رود به این ترتیب انتخاب این گزینه می تواند صحیح باشد.بهترین زبان برنامه نویسی برای اندروید از نظر کاراییمی دانیم که بیسیک در مقابل java قرار گرفته است و به نوعی رقابت بین این گزینه وجود دارد. دقت کنید که اگر می خواهید کتاب های الکترونیکی بنویسید بهترین گزینه زبان بیسیک است و قطعا این گزینه می تواند شرایطی بسیار عالی فراهم سازد.اما برای نوشتن برنامه پیچیده تر گزینه بعدی پیش روی java است که قطعا در زمان کمی که دارید بهترین گزینه java خواهد بود. شما با زبان java یک تیرچند نشان خواهید زد به سادگی می توانید مسیر برنامه نویسی را برای خود آسانتر کنید.برای زبان برنامه نویسی java اغلب سورس و کدها آماده است و منابع آماده برای آن بسیار زیاد وجود دارد و به این ترتیب برنامه نویس زیاد درگیر کدنویسی نخواهد شد.اما شاید یادگیری زبان java کمی دشوار باشد و این موضوع سبب شود که افراد در ابتدای راه به چالش کشیده شوند.معرفی بهترین زبان برنامه نویسی برای اندروید از دید گوگلقطعا وقتی می خواهید نرم افزار و یا برنامه ای بنویسید باید از گوگل نظر بخواهید، گوکل نقش اساسی در رتبه گیری سایت و نرم افزار شما دارد.شرکت گوگل دارای امتیاز پلتفرم اندروید است و عموما به برنامه نویسانی که قصد دارند در این مسیر فعالیت کنند زبان java را معرفی می کند. البته زبان بیسیک نیز اگر طبق اصول دقیق دنبال شود از سوی گوگل رتبه مناسبی دریافت می کند.بهترین زبان برنامه نویسی برای اندروید از نظر هزینهقطعا وقتی می خواهید یک زبان برنامه نویسی را انتخاب کنید، هزینه برای شما اهمیت ویژه ای خواهد داشت. در نظرداشته باشید که جنگ هزینه بین بیسیک و java همیشه دیده می شود و بارها در این خصوص اطلاعات مختلفی فراهم شده است.اگر تا به اینجای کار برای انتخاب بهترین زبان برنامه نویسی برای اندروید دچار شک هستید این مطلب قطعا نظر شما را جلب خواهد کرد.برنامه نویسی با java از نظر هزینه بسیار ارزانتر است، حال چرا چنین ادعایی داریم و چرا عده ای این ادعا را رد می کنند.دقت کنید که کتابخانه های بیسیک اغلب پولی هستند و قطعا اگر بخواهید برنامه های مختلفی را بنویسید نیاز به پرداخت هزینه دارید، این در صورتی است که کتابخانه های java در اینترنت به صورت رایگان قرار دارد و بهترین گزینه برای افرادی است که قصد دارند با هزینه ای کم بهترین زبان برنامه نویسی برای اندروید را انتخاب کنند.موضوع دیگر در خصوص خرید کتابخانه های بیسیک است حتی اگر بخواهید این کتابخانه ها را خریداری کنید با توجه به تحریم های موجود قطعا دچار مشکل خواهید شد و این موضوع می تواند به نسبت مشکل ساز به نظر برسد. بنابراین اگر هزینه را برای انتخاب بهترین زبان برنامه نویسی برای اندروید لحاظ می کنید به java شک نکنید.بهترین زبان برنامه نویسی برای اندروید از نظر شغلآخرین اخباری که در سایت های آگهی دهنده استخدامی دیده می شود هنوز هم بیشترین سهم استخدام برای برنامه نویسان java است. به این ترتیب به سادگی می توانید در زمانی کم استخدام شوید. پس از یادگیری java در فاصله زمانی کم می توانید برنامه ای برای ویندوز بسازید به این ترتیب قطعا گزینه ای که این روزها پیش روی شما قرار دارد java است و بهتر است که همین حالا بهترین زبان برنامه نویسی برای اندروید را انتخاب کنید.در جمع بندی این مقاله مشخص شد که بهترین زبان برنامه نویسی برای اندروید از هر نظر java است و در آخرین بررسی های موجود نیز این امر مورد تایید قرار گرفته است به این ترتیب دیگر هیچ گونه شکی در این زمینه وجود نخواهد داشت و به سادگی می توانید شروع به یادگیری کنید.در صورتی که فکر می کنید یادگیری زبان برنامه نویسی java برای شما دشوار است می توانید در ابتدا از کتابخانه های آماده آن استفاده کنید و سپس با دوباره نویسی برنامه های رایگان و حاضر تمرین و تسلط خود در این زمینه را افزایش دهید. نظر داشته باشید که بیسیک شاید ساده تر باشد اما انتخاب همیشگی محسوب نمی شود.

استفاده از csp header در asp.net core 2.0

درخواست حذف این مطلب
جلوگیری از حملات به برنامه بسیار مهم است و باید برای آن راهکاری را تدبیر کرد. در این مقاله ما قصد داریم تا نحوه استفاده از csp header (content-security-policy) را در asp.net core برای جلوگیری از حملات xss بررسی کنیم. یک پروژه خالی ایجاد کرده و startup آن را با قرار دادن سرویس و میان افزار برای mvc آپدیت کنید. public void configureservices( iservicecollection services) { services.addmvc(); } public void configure( iapplicationbuilder app, ihostingenvironment env) { app.usedeveloperexceptionpage(); app.use(async (context, next) => { context.response.headers.add( "content-security-policy", "script-src 'self'; " + "style-src 'self'; " + "img-src 'self'"); await next(); }); app.usestaticfiles(); app.usemvcwithdefaultroute(); } } یک صفحه layout_ اضافه کرده و اسکریپت ها، استایل ها و تصاویر را از دامنه محلی (wwwroot) و دامنه راه دور در آن قرار دهید. @viewbag.title @renderbody() آن را اجرا کرده و خطاها را مشاهده کنید. هنگام بارگذاری صفحه، مرورگر بارگیری بخش هایی که از منابع دور است را رد می کند.csp یک سطح امنیتی اضافی است که می تواند به جلوگیری از حملات تزریق کد یا xss کمک کند. در این حملات اسکریپت های مخرب بر روی مرورگر کاربر اجرا می شوند، زیرا مرورگر نمی داند که آیا منبع اسکریپت قابل اعتماد است یا نه.csp به توسعه دهندگان اجازه می دهد تا منابعی (دامنه ها) که قابل اعتماد هستند را مشخص کنند و بتوانند اسکریپت های قابل اجرا را ارائه دهند. این لیست سفید دامنه ها با استفاده از content-security-type http header انجام می شود، مثل:content-security-policy: [policy]در اینجا [policy] از دستورالعمل هایی ساخته شده است که نوع محدودیت ها و دامنه ها را برای لیست سفید توصیف می کند. رشته ای است که مجموعه ای از دستورالعمل ها و منابعی که توسط سمیکالون جدا شده اند را تعریف می کند.]دستورالعمل[>منبعمنبع...;منبعمنبع...; allow("'self'"); public cspdirectivebuilder allownone() => allow("none"); public cspdirectivebuilder allowany() => allow("*"); public cspdirectivebuilder allow(string source) { this.sources.add(source); return this; } } حالا می توانیم یک میان افزار ایجاد کنیم. public sealed class cspmiddleware { private const string header = "content-security-policy"; private readonly requestdelegate next; private readonly cspoptions options; public cspmiddleware( requestdelegate next, cspoptions options) { this.next = next; this.options = options; } public async task invoke(httpcontext context) { context.response.headers.add(header, getheadervalue()); await this.next(context); } private string getheadervalue() { var value = ""; value += getdirective("default-src", this.options.defaults); value += getdirective("script-src", this.options.scripts); value += getdirective("style-src", this.options.styles); value += getdirective("img-src", this.options.images); value += getdirective("font-src", this.options.fonts); value += getdirective("media-src", this.options.media); return value; } private string getdirective(string directive, list sources) => sources.count > 0 ? $"{directive} {string.join(" ", sources)}; " : ""; } و یک extension method را برای آن تنظیم کنیم. public static class cspmiddlewareextensions { public static iapplicationbuilder usecsp( this iapplicationbuilder app, action builder) { var newbuilder = new cspoptionsbuilder(); builder(newbuilder); var options = newbuilder.build(); return app.usemiddleware(options); } } حالا می توانیم میان افزار را در کلاس startup تنظیم کنیم. app.usecsp(builder => { builder.defaults .allowself(); builder.scripts .allowself() .allow("https://ajax.aspnetcdn.com"); builder.styles .allowself() .allow("https://ajax.aspnetcdn.com"); builder.fonts .allowself() .allow("https://ajax.aspnetcdn.com"); builder.images .allowself() .allow("https://media-www-asp.azureedge.net/"); }); آن را اجرا کرده و ترافیک شبکه را مشاهده کنید. مرورگر به منابع محلی و از راه دور اجازه دسترسی می دهد.سورس کد را می توانید از اینجا دانلود کنید. به اشتراک بگذارید :

انتشار اپلیکیشن asp.net core 2.0 در azure با سرویس های sql

درخواست حذف این مطلب
انتشار یا توسعه ی یک اپلیکیشن کمی دشوار است و اگر ما راه دقیق توسعه ی اپلیکیشن را ندانیم با مسائل زیادی روبرو خواهیم شد بنابراین در این مقاله به نحوه ی توسعه یا انتشار یک اپلیکیشن asp.net core 2.0 در azure خواهیم پرداخت. این مقاله نحوه ی توسعه یا انتشار یک اپلیکیشن asp.net core 2.0 در azure را نشان می دهد. همانطور که همه ی ما می دانیم زمانی که ما اپلیکیشن را می سازیم باید جایی آن را توسعه دهیم که می تواند iis ، cloud یا هرجای دیگری باشد. انتشار یا توسعه ی یک اپلیکیشن کمی دشوار است و اگر ما راه دقیق توسعه ی اپلیکیشن را ندانیم با مسائل زیادی روبرو خواهیم شد.بنابراین تمام گام های انتشار یک asp.net core 2.0 در azure را نشان خواهیم داد. ما از قبل یک اپلیکیشن با استفاده از razor page را ساخته ایم و اینجا از همان اپلیکیشن برای توسعه استفاده می کنیم.بنابراین اجازه دهید به بخش پیاده سازی عملی برویم. ما یک پروژه ی آماده برای توسعه داریم. برای انتشار یک اپلیکیشن asp.net core 2 از solution explorer روی پروژه راست کلیک کنید و روی گزینه ی “publish” کلیک کنید.این مقاله درباره ی استفاده از sql server و جداول برای عملیات crud است.زمانی که ما گزینه ی “publish” را انتخاب کردیم پنجره ی دیگری باز خواهد شد که در آن ما گزینه های دردسترس دیگری برای انتشار یک اپلیکیشن در azure یا هاست دیگری نظیر iis، پوشه و غیره داریم. این جا ما باید “microsoft azure app service” را با گزینه ی “create new” انتخاب کنیم و سپس بدون انجام هیچ کار دیگری فقط روی گزینه ی “publish” کلیک کنیم.پنجره ی بعدی گزینه های مختلفی برای تنظیم یک محیط هاست و سرویس های آن دارد. زیر قسمت “hosting” می توانیم نام اپلیکیشن خود را تعریف کنیم “app name”. این نام برای دسترسی به اپلیکیشن از مرورگر استفاده می شود، حال طرح اشتراکی خود را تعریف کردیم طبق آن می توانیم اپلیکیشن و گروه منابع آن را sql server منتشر کنیم.توجهآیا ما باید microsoft subscription plan را با azure credits برای توسعه داشته باشیم؟توجهاگر پایگاه داده را به عنوان بخشی از اپلیکیشن داشته باشیم به service part برای ساخت sql server و پایگاه داده می رویم.همانطور که ما اپلیکیشنی که عملیات crud را انجام می دهد منتشر می کنیم نیاز داریم که تنظیمات پایگاه داده ی sql را نیز انجام دهیم بنابراین مستقیما به گزینه ی services در زیر hosting برای ساخت سرویس های مرتبط sql نظیر sql server، sql database ، connection string و غیره می رویم.همانطور که در تصویر زیر می توانیم ببینیم در گزینه ی services در قسمت resource type ما “sql database” با علامت به علاوه[+] را داریم. برای ساخت sql service جدید روی علامت به علاوه[+] کلیک کنید.زمانی که روی علامت به علاوه کلیک می کنیم یک پنجره ی جدید باز می شود که مسئول تنظیم sql server و پایگاه داده است. بنابراین ابتدا یک sql server جدید در azure تنظیم می کنیم. برای ساخت sql server جدید در azure روی دکمه ی new همانطور که در تصویر زیر نشان داده شده است کلیک می کنیم.از پنجره ی “configure sql server” باید نام sql server ، نام کاربری و رمز را برای دسترسی به آن از sql server management studio یا استفاده از آن با connection string ، تعریف کنیم.پس از تنظیم یک sql server جدید روی ok کلیک کنید. با این کار به صفحه ی “configure sql database” که می توانیم از طریق آن پایگاه داده ی sql را تنظیم کنیم، برمی گردیم. بنابراین اینجا می توانیم نام پایگاه داده ی خود و همچنین نام connection string را تعریف کنیم زمانی که تمام این کار ها را انجام دادیم روی ok کلیک می کنیم.توجهپیش از این نام پایگاه داده و connection string به صورت پیش فرض انتخاب می شود ولی ما این جا این موارد را تغییر دادیم.بنابراین تا به حال سه مورد را پیکربندی کرده ایم اول طرحی که تحت آن اپلیکیشن ما در azure منتشر می شود مورد دوم sql server است که ما پایگاه داده ی sql خود و جداول را در آن پیکربندی کرده ایم و مورد آخر همانطور که تصویر زیر نشان می دهد پایگاه داده ی sql با همان sql server است.حال زمان توسعه ی اپلیکیشن با پیکربندی بالا است بنابراین فقط روی دکمه ی “create” کلیک کنید. با این کار همانطور که تصویر زیر نشان می دهد توسعه ی اپلیکیشن در azure شروع می شود.اینجا می توانیم “azure successfully configured” را ببنیم و visual studio انتشار اپلیکیشن در azure را شروع می کند.این کار چند دقیقه و یا چند ثانیه برای هر اتصال شبکه و سرعت توسعه ی اپلیکیشن روی azure طول می کشد و به ما پیام هایی به شرح زیر در محل زیر نشان می دهد که می گوید اپلیکیشن با موفقیت توسعه یافته است.همانطور که همه ی ما می دانیم این اپلیکیشن از پایگاه داده ی sql و جداول آن برای انجام عملیات crud استفاده می کند. ما از قبل یک پایگاه داده ساخته ایم. ما از قبل در زمان پیکربندی sql service یک پایگاه داده ساخته ایم اما جداول در حال ساخت هستند. برای ساخت جداول مورد نیاز sql در پایگاه داده ی “testdb” نیاز به دسترسی به sql server و پایگاه داده ی آن و اجرای اسکریپت های جداول به صورت دستی داریم.حال باید “microsoft sql server management studio” را از سیستم خودمان باز کنیم و گواهی نامه های خودمان را ، همانطور که از قبل sql server را پیکربندی کردیم، ارسال کنیم. مطمئن باشید که زمان وارد کردن نام سرور نام sql server باید به فرمت زیر باشد.servername.database.secure.windows.net,1433ما یک خطای جدید داریم که به معنی این است که به دلیل قانون firewall ، با این آدرس ip قادر به دسترسی به sql server تعریف شده نیستیم.برای حل این خطا باید این آدرس ip را به قوانین firewall اضافه کنیم بنابراین microsoft azure portal را باز کنید و sql server را که قبلا پیکربندی کرده ایم را انتخاب کنید.همانطور که تصویر زیر نشان می دهد زیر sql server گزینه ی “firewall/virtual networks” را داریم. اینجا در عکس می توانیم ببینیم که درحال حاضر هیچ آدرس ip تعریف نشده است. شما باید روی “add client ip” برای اضافه کردن آدرس ip کلاینت در قوانین firewall کلیک کنید و سپس برای ذخیره سازی آن کلیک کنید.پس از اضافه کردن “client ip address” آن را در قوانین firewall خواهیم داشت حال می توانیم به این سرور از طریق sql server management studio دسترسی داشته باشیم.اگر یک بار دیگر برای ورود به sql server management studio تلاش کنیم قادر به ورود خواهیم بود. حال پایگاه داده ی “testdb” را که با این انتشار، پیکربندی کرده ایم را انتخاب کنید و راست کلیک کنید و یک پنجره ی کوئری جدید باز کنید. اینجا باید اسکریپت های sql مانند ساخت یک جدول جدید، وارد کردن رکورد های جدید و غیره را اجرا کنیم.بنابراین نهایتا همه چیز را پیکربندی کرده ایم که شامل پایگاه داده نیز می شود. حال زمان دسترسی به اپلیکیشن توسعه یافته ما می باشد اگر با url زیر به اپلیکیشن خود دسترسی پیدا کنیم ( این فقط برای مورد من است و برای شما می تواند با نام خود شما تعریف شده باشد) اپلیکیشن را مانند زیر خواهیم دید.https://razorpagesexample.azurewebsites.net/product به اشتراک بگذارید :

معرفی بهترین زبان برنامه نویسی برای ساخت نرم افزار

درخواست حذف این مطلب
بهترین زبان برنامه نویسی برای ساخت نرم افزار از نظر کارایی و درآمدزایی تعیین می شود. بهترین زبان برنامه نویسی برای ساخت نرم افزار باید انعطاف پذیر باشد. انتخاب اینکه بهترین زبان برنامه نویسی برای ساخت نرم افزار کدام است کار ساده ای نیست. در واقع باید به زبان های برنامه نویسی از دریچه های مختلف نگاه کرد و بررسی کرد که بهترین از چه نظر اهمیت بیشتری دارد. امروز سعی دارید با یک سری سیستم های مقایسه ای مشخص کنیم که بهترین زبان برنامه نویسی برای ساخت نرم افزار کدام است و بهتر بودن برچه اساسی تعیین می شود. به این ترتیب می توانید به سادگی در هر شرایط انتخاب مناسبی داشته باشیدبهترین زبان برنامه نویسی برای ساخت نرم افزار از نظر تقاضای بازاربه طور کلی وقتی فردی می خواهند پا به دنیای برنامه نویسی بگذارد قطعا انتخاب زبان برنامه نویسی که از هر نظر با تقاضای بازار مناسب باشد، می تواند مناسب به نظر برسد. در نظر داشته باشید که اهمیت و کاربرد زبان برنامه نویسی با توجه به نوع برنامه تعیین می شودو قطعا زبان هایی که برای نرم افزارهای مختلف انتخاب می شود باهم متفاوت است. یکی از گزینه هایی که بسیار تقاضای بازار محسوب می شود، زبان جاوا است. جاوا قدرتمند است و هرگز نمی توان از قدرت او غافل شد اما حال اینکه چرا چنین زبان دشواری اینقدر تقاضای بازار است جای بحث دارد. در واقع این روزها گوشی های اسمارت فون سن و سال نمی شناسد و از گزینه های بسیار مشهور محسوب می شود و قطعا برای اینکه هر برنامه ای را در این محیط راه بیندازید نیاز به برنامه نویسی جاوا بوده و به نوعی برنامه نویسان را به سمت خود کشانده است.اگر با خود می گویید که چرا باید جاوا یاد بگیریم پاسخ مشخص است، در واقع دستگاه های خودپرداز و همینطور بانک ها و یا کنسول های بازی همگی از گزینه هایی هستند که با این زبان قدرتمند راه اندازی شده اند. در این زبان تنها یکبار نیاز به کامپایل دارید و قطعا شعار مشهور این زبان به گوش شما خورده است که یکبار بنویس همیشه استفاده کن! انتخاب بهترین زبان برنامه نویسی برای ساخت نرم افزار آسان است.بهترین زبان برنامه نویسی برای ساخت نرم افزار از نظر کاربردقطعا از روزی که برنامه نویسی وارد تکنولوژی شد با زبان های خانواده c روبرو شدیم، هنوز هم شاید زبان برنامه نویسی c بتواند انتخاب کاربردی برای ساخت انواع نرم افزارها به شمار بیاید این موضوع در چندین حیث قابل بررسی است. در ابتدا اینکه بسیاری از افراد این زبان را بلد هستند و قطعا هر مشکلی در این زبان به سادگی برطرف می شود. گسترده بودن زبان c زیاد است و برای بسط دادن نرم افزارهای مختلف می تواند انتخاب مناسبی باشد، قطعا هم می دانید که یادگیری زبان c بسیار ساده تر از جاوا و یا زبان های دیگر است.از دیگر ویژگی های این زبان می توان به قابل حمل بودن آن اشاره کرد در واقع شما می توانید در بین کدهای این زبان هر نوع سورس کد دیگری را وارد کنید، این زبان برنامه نویسی رایگان است و باب طبع بسیاری از برنامه نویسان قرار می گیرد.بهترین زبان برنامه نویسی برای ساخت نرم افزار از نظر پویاییاگر برای ساخت نرم افزارهای خود دنبال پویایی هستید قطعا باید به سراغ php بروید، این زبان برای ساخت وب سایت های داینامیک بهترین انتخاب محسوب می شود و هرگز فردی از استفاده این زبان ناراضی نخواهد بود. در بررسی های اخیر متوجه شدیم که بیش از 250 میلیون وب سایت به این زبان نوشته شده اند و 2 میلیون سرور نیز بر پایه این زبان فعالیت می کنند.یکی از ویژگی های بسیار عالی php متن باز بودن و رایگان بودن است.یادگیری این زبان به نسبت ساده است و البته شاید کمی حجیم به نظر برسد. از طرف دیگر هاستی که مورد خریداری واقع می شود دارای قیمت بسیار مناسبی است . اگر دقت کنید سایت های تویتر، ویکیپدیا، اپل و همینطور فیسبوک به این زبان نوشته شده اند. بهترین زبان برنامه نویسی برای ساخت نرم افزار تا به این جا در سه دسته قرار گرفت، افرادی که به دنبال نرم افزارهای پویا هستند باید به سمت php بروند، افرادی که می خواهند در سریعترین زمان ممکن بهترین زبان برنامه نویسی برای ساخت نرم افزار را انتخاب کنند ، قطعا باید از c استفاده کنند و افرادی که برنامه های طولانی مدت دارند بهترین زبان برنامه نویسی برای ساخت نرم افزار را جاوا می دانند.بهترین زبان برنامه نویسی برای ساخت نرم افزار از نظر ارتباط بخشیبهرحال کاربر باید بتواند با فضای نرم افزار شما ارتباط درستی بگیرد، در واقع نرم افزار باید از سوی مرورگر بر روی سیستم کاربر به درستی اجرا شود در این مسیر می توانید از جاوا اسکریپ کمک بگیرد، البته این زبان هرگز نمی تواند به تنهایی بهترین زبان برنامه نویسی برای ساخت نرم افزار محسوب شود و تنها جنبه تکمیلی خواهد داشت. سبک های مختلف این زبان سبب می شود تا ساخت رابط های کاربری ساده تر شود و همینطور بتوانید اشیا و انیمیشن ها را بهتر بارگذاری کنید.بهترین زبان برنامه نویسی برای ساخت نرم افزار از نظر درآمدزاییبهرحال درآمدزایی گزینه ای بسیار مهم در زندگی محسوب می شود و شرکت های بزرگ ، زبان پایتون را انتخاب مناسبی می دانند. شاید چند منظوره بودن پایتون سبب شود که بهترین زبان برنامه نویسی برای ساخت نرم افزار باشد.

شروع کار با mongodb در asp.net core

درخواست حذف این مطلب
در این مقاله می خواهیم درباره ی روند ساخت یک اپلیکیشن ساده در asp.net core که با پایگاه داده ی mongodb در ارتباط است بحث کنیم. این اپلیکیشن عملیات crud در یک پایگاه داده ی mongo را انجام می دهد و سپس جزئیات را در یک جدول نمایش می دهد. معرفیدر این مقاله می خواهیم درباره ی روند ساخت یک اپلیکیشن ساده در asp.net core که با پایگاه داده ی mongodb در ارتباط است بحث کنیم.شرحاین اپلیکیشن عملیات crud در یک پایگاه داده ی mongo را انجام می دهد و سپس جزئیات را در یک جدول نمایش می دهد.ابزار های third-party استفاده شدهrobo 3t – یک ابزار third-party است که یک ابزار مدیریتی mongodb سبک را ارائه می دهد.پیاده سازی تنظیمات اولیه ی mongodbاگر شما mongodb exe را نصب نکرده اید آن را از mongodb download center دانلود کنید.پس از نصب پایگاه داده برای دسترسی به mongodb باید پروسه ی mongodb را شروع کنیم.برای شروع mongodb در command prompt ، mongod.exe را اجرا کنید. اطمینان حاصل کنید که command prompt را از پوشه ی installation در mongodb اجرا می کنید.به صورت پیش فرض مسیر نصب روی c:\program files\mongodb\server\3.6\bin\ تنظیم شده است علاوه بر این ما یک دایرکتوری داده برای ذخیره سازی همه ی داده ها در mongodb نیاز داریم. کاربر می تواند مسیر فایل های داده را با استفاده از گزینه ی dbpath- به mongod.exe تنظیم کند.شما می توانید استفاده از robo 3t را پس از شروع پروسه ی mongodb آغاز کنید.ما برای این دمو یک collection به نام customers با سه ستون ساخته ایم.از آنجایی که پایگاه داده آماده است ساخت اپلیکیشن را شروع می کنیم. مقاله را برای ساخت یک اپلیکیشن نمونه دنبال کنید.در ادامه یک نمای نمونه اپلیکیشنی که می خواهیم بسازیم وجود دارد.یک پروژه ی جدید در visual studio بسازید.template را asp.net core mvc web application انتخاب کنید.برای تعامل با mongodb از طریق کد c# نیاز داریم که net mongodb driver. ، که یک تعامل ناهمگام با mongodb را ارائه می دهد، نصب کنیم. دستورات nuget زیر را برای اضافه کردن driver به پروژه استفاده کرده ایم. install-package microsoft.entityframeworkcore.tools -version 2.0.1 install-package mongodb.driver -version 2.5.0کلاس modelاجازه دهید یک کلاس موجودیت به نام “customer” بسازیم که با شمای جدول customers در پایگاه داده متناسب باشد. public class customer { [bsonid] public objectid id { get; set; } [bsonelement] public int customerid { get; set; } [bsonelement] public string customername { get; set; } [bsonelement] public string address { get; set; } } کلاس شامل خصوصیت id از نوع objectid می باشد این خصوصیت برای تطبیق یک آیتم در collection های mongodb استفاده می شود. ما همچنین یک ویژگی دیگر به نام bsonelement داریم که برای نشان دادن یک عنصر در collection های mongodb به کار گرفته می شود.متد های controllerدر controller ما کدهایی برای خواندن ، ویرایش، ساخت و حذف رکوردها از mongodb اضافه خواهیم کرد.کدها را برای بازیابی جزئیات پایگاه داده به یک متد معمول منتقل کرده ایم. public class homecontroller : controller { private imongodatabase mongodatabase; //generic method to get the mongodb database details public imongodatabase getmongodatabase() { var mongoclient = new mongoclient("mongodb://localhost:27017"); return mongoclient.getdatabase("customerdb"); } [httpget] public iactionresult index() { //get the database connection mongodatabase = getmongodatabase(); //fetch the details from customerdb and pass into view var result = mongodatabase.getcollection("customers").find(filterdefinition.empty).tolist(); return view(result); } [httpget] public iactionresult create() { return view(); } [httppost] public iactionresult create(customer customer) { try { //get the database connection mongodatabase = getmongodatabase(); mongodatabase.getcollection("customers").insertone(customer); } catch (exception ex) { throw; } return redirecttoaction("index"); } [httpget] public iactionresult details(int? id) { if (id == null) { return notfound(); } //get the database connection mongodatabase = getmongodatabase(); //fetch the details from customerdb and pass into view customer customer = mongodatabase.getcollection("customers").find(k => k.customerid == id).firstordefault(); if (customer == null) { return notfound(); } return view(customer); } [httpget] public iactionresult delete(int? id) { if (id == null) { return notfound(); } //get the database connection mongodatabase = getmongodatabase(); //fetch the details from customerdb and pass into view customer customer = mongodatabase.getcollection("customers").find(k => k.customerid == id).firstordefault(); if (customer == null) { return notfound(); } return view(customer); } [httppost] public iactionresult delete(customer customer) { try { //get the database connection mongodatabase = getmongodatabase(); //delete the customer record var result = mongodatabase.getcollection("customers").deleteone(k => k.customerid == customer.customerid); if (result.isacknowledged == false) { return badrequest("unable to delete customer " + customer.customerid); } } catch (exception ex) { throw; } return redirecttoaction("index"); } [httpget] public iactionresult edit(int? id) { if (id == null) { return notfound(); } //get the database connection mongodatabase = getmongodatabase(); //fetch the details from customerdb based on id and pass into view var customer = mongodatabase.getcollection("customers").find(k => k.customerid == id).firstordefault(); if (customer == null) { return notfound(); } return view(customer); } [httppost] public iactionresult edit(customer customer) { try { //get the database connection mongodatabase = getmongodatabase(); //build the where condition var filter = builders.filter.eq("customerid", customer.customerid); //build the update statement var updatestatement = builders.update.set("customerid", customer.customerid); updatestatement = updatestatement.set("customername", customer.customername); updatestatement = updatestatement.set("address", customer.address); //fetch the details from customerdb based on id and pass into view var result = mongodatabase.getcollection("customers").updateone(filter, updatestatement); if (result.isacknowledged == false) { return badrequest("unable to update customer " + customer.customername); } } catch (exception ex) { throw; } return redirecttoaction("index"); } public iactionresult about() { viewdata["message"] = "your application description page."; return view(); } public iactionresult contact() { viewdata["message"] = "your contact page."; return view(); } public iactionresult error() { return view(new errorviewmodel { requestid = activity.current?.id ?? httpcontext.traceidentifier }); } } کد برای view های mvcاز آنجایی که این مقاله چیزی بیش از یک دمو از mongodb است ما از گزینه ی scaffolding که در mvc برای ساخت view دردسترس است استفاده کرده ایم. شما می توانید این مورد را براساس نیاز های خود تغییر دهید.index view @model ienumerable @{ viewdata["title"] = "index"; } index create new @html.displaynamefor(model => model.customerid) @html.displaynamefor(model => model.customername) @html.displaynamefor(model => model.address) actions @foreach (var item in model) { @html.displayfor(modelitem => item.customerid) @html.displayfor(modelitem => item.customername) @html.displayfor(modelitem => item.address) @html.actionlink("edit", "edit", new { id = item.customerid }) | @html.actionlink("details", "details", new { id = item.customerid }) | @html.actionlink("delete", "delete", new { id = item.customerid }) } view ساخت @model aspnetcoremvcmongodbdemo.models.customer @{ viewdata["title"] = "create"; } create customer details back to list @section scripts { @{await html.renderpartialasync("_validationscriptspartial");} } view حذف @model aspnetcoremvcmongodbdemo.models.customer @{ layout = "_layout"; } delete customer are you sure to delete back to list view جزئیات @model aspnetcoremvcmongodbdemo.models.customer @{ viewdata["title"] = "details"; } customer details @html.displaynamefor(model => model.customerid) @html.displayfor(model => model.customerid) @html.displaynamefor(model => model.customername) @html.displayfor(model => model.customername) @html.displaynamefor(model => model.address) @html.displayfor(model => model.address) back to list view ویرایش @model aspnetcoremvcmongodbdemo.models.customer @{ layout = "_layout"; } @{ viewdata["title"] = "details"; } edit customer details back to list نتیجهدر این مقاله نگاهی به روند ساخت یک اپلیکیشن ساده در mvc core با استفاده از mongodb به عنوان پایگاه داده کردیم.شما می توانید source code برای asp.netcoremvcmongodbdemo را از github دانلود کنید. به اشتراک بگذارید :

مهندسی نرم افزار با برنامه نویسی فرق دارد

درخواست حذف این مطلب
به نظر ما مهندس نرم افزار کسی است که به دنبال نوشتن کیفیت نرم افزار در حرفه خود است. فردی که علم و آمار را به این حرفه اعمال می کند و به نظر نمی رسد شغلی باشد که فقط برای کسب درآمد است.دانستن شیوه های برنامه نویسی شما را مهندس نرم افزار نمی کند.هر کسی می تواند برنامه نویسی را به آسانی یاد بگیرد. هر کسی می تواند برنامه ساده ای را ایجاد کند که در سیستمش کار می کند اما تضمینی وجود ندارد که همان برنامه ها برای دیگران کار کند.مقایسه ساده ای که در این رابطه می توان انجام داد این است که هرکسی می تواند زیر دوش آواز بخواند و خود را سرگرم کند، اما در مهمانی نمی تواند با صدای بلند شروع به آواز خواندن کند.تحلیل بیشتری می خواهید؟ حتما:ما ریاضی و نوشتن را در مدرسه یاد می گیریم، اما این عوامل از ما ریاضی دان یا نویسنده نمی سازد.بسیاری از ما به راحتی می توانیم آشپزی را یاد بگیریم، اما آیا می توانیم به عنوان یک آشپز برای تعداد زیادی از مردم غذا درست کنیم.شما از خدمتکار همسایه خود دعوت نمی کنید که بیاید و برایتان یک خانه بسازد.پیام اصلی که می خواهیم در این مقاله به اشتراک بگذاریم این است که برنامه های ساده بسیار متفاوت از برنامه های مهندسی هستند.کار برنامه نویسی، در ساده ترین تعریف، دادن دستورالعمل های کامپیوتری با دادن یک سری ورودی و دریافت و تولید خروجی برای انجام کاری است.کار مهندسی نرم افزار، در مورد طراحی، نوشتن، تست و نگهداری برنامه های کامپیوتری با هدف حل مسائل برای بسیاری از کاربران است. این کار در مورد ایجاد راه حل های قدرتمند و ایمن است که با تست زمان مواجه خواهد شد و برای برخی مسائل ناشناخته پیرامون به طور قابل توجهی کار خواهد کرد.مهندسان نرم افزار همه چیز را در مورد مسائلی که حل می کنند، راه حل هایی که ارائه می دهند، محدودیت های این راه حل ها، مفاهیم پنهان آن ها و پیامدهای امنیتی آن ها درک می کنند.اگر کسی این مسائل را درک نکرد، نباید اجازه داده شود تا راه حلی را برای آن ارائه دهد.راه حل فکریمهندسان نرم افزار فکر نمی کنند که حرفه آن ها فقط نوشتن برنامه است. آن ها به رفع نیازها و حل مسائل فکر می کنند. این مهم است چرا که هر مسأله ای نیاز به نوشتن برنامه ندارد. برخی مسائل را می توان با برنامه های موجود یا با کنار هم گذاشتن برنامه های متعدد حل کرد. با انجام اقدامات اولیه، از برخی مشکلات می توان به طور کامل جلوگیری کرد. برنامه های خوب طراحی شده اغلب شامل برنامه ریزی برای جلوگیری از مشکلات آتی هستند."خردمندان مشکلات را حل می کنند، نابغه ها از آن ها جلوگیری می کنند." ‘آلبرت انیشتین’مسائل پیچیده معمولا نیاز به نوشتن برنامه های متعدد دارند. برخی مسائل نیاز به برنامه هایی دارند که به صورت موازی اجرا می شوند در حالی که برخی دیگر نیاز به برنامه هایی دارند که به صورت ترتیبی اجرا می شوند. برخی مسائل را می توان با آموزش دادن کاربران حل کرد.قبل از نوشتن برنامه، مهندس نرم افزار سؤالاتی را مطرح می کند:مسائلی که من سعی می کنم آن ها را حل کنم چه هستند؟به جز نوشتن کد چه کاری می توان برای حل آن ها انجام داد؟چه کاری می توانم انجام دهم تا این مسائل را به راحتی با کد حل کنم؟کیفیت کدبرنامه های بزرگ تمیز و قابل خواندن هستند، می توانند به راحتی توسعه یابند، با برنامه های دیگر به خوبی کار می کنند، و نگهداری از آن ها کابوس نیست. کیفیت کد چیز قابل مذاکره ای نیست، وقتی در کدنویسی عجله دارید، استفاده از کلیدهای میانبر نامرتب هرگز قابل قبول نیستند.یکی از مهم ترین جنبه های مهندسی نرم افزار، طراحی هر چیزی برای توسعه است. تغییر نرم افزار واقعیت زندگی است. کاربران ویژگی های بیشتر و راه های ساده تر برای استفاده از نرم افزار را تقاضا خواهند کرد.یک قطعه نرم افزاری معمولا به تنهایی مفید نیست. ویژگی های سودمند نرم افزار زمانی شروع می شود که چندین قطعه از نرم افزار با یکدیگر ارتباط برقرار می کنند، داده ها را مبادله می کنند، و روی وظایف مربوط به ارائه داده ها و رابط های کاربران با هم کار می کنند.برنامه ها باید در ذهن طراحی شوند. چه پیام هایی را قبول می کنند؟ چه رویدادهایی تحت نظارت هستند؟ چه پیام هایی منتشر می شوند؟ چگونه می توانیم ارتباطات را تأیید کرده و به آن ها مجوز دهیم؟یکی دیگر از جنبه های مهم برنامه های بزرگ، وضوح و تمیزی کد است. سوال ساده ای که وجود دارد این است که آیا این کد برای شخص دیگری قابل خواندن است؟ یا بهتر بگوییم، آیا من به عنوان نویسنده این کد، چند هفته بعد آن را درک خواهم کرد؟"در علوم کامپیوتر تنها دو چیز سخت وجود دارد: نامعتبرسازی کش و نامگذاری چیزها." ‘فیل کارلتون’موضوع قابلیت خواندن کد بسیار بیشتر از آن چیزی است که فکرش را می کنید. متأسفانه معیارهای خوبی برای وضوح کد وجود ندارد. حفظ عملکردها و الگوهای نرم افزاری خوب می تواند کمک کند اما اغلب کافی نیست. مهندسان نرم افزار خوب کد تمیز با تجربه و شهود ایجاد می کنند."من زمانی برای نوشتن یک نامه کوتاه نداشتم، بنابراین به جای آن یک متن طولانی نوشتم." ‘مارک تواین’اشتباهاتی در برنامه ممکن است رخ دهد. برطرف کردن آسان این خطاها یکی از ویژگی های کلیدی نرم افزار خوب است. خطاهایی که در برنامه ها رخ می دهند باید پیام واضحی داشته باشند و در مکان های مناسب باید وارد عمل شوند. وقتی یک خطای جدید گزارش می شود، فردی که نیاز به اصلاح آن دارد باید بتواند آن خطا را برطرف کند. آن ها باید بتوانند خطاها را در سیستم کشف کرده و اطلاعاتی در مورد نحوه اجرا در هر لحظه از زمان را بخوانند. آن ها باید بتوانند به راحتی خطاهای مربوط به هر بخش از سیستم را بررسی کنند.محیط و تستهنگامی که مهندسان نرم افزار برنامه ها را می نویسند، آن ها مطمئن هستند که برنامه هایشان در محیط های مختلف، بر روی دستگاه های مختلف و در مناطق گوناگون کار می کند. این نرم افزار نیازمند کار بر روی اندازه های مختلف صفحه نمایش است. همچنین نیاز به مدیریت بر روی استفاده از حافظه محدود و قدرت پردازش دارد.مثلا وقتی نرم افزاری برای مرورگر وب ایجاد می شود، باید روی تمام مرورگرهای بزرگ مختلف کار کند. هنگام ایجاد نرم افزار دسکتاپ، در اکثر موارد باید برای کاربران مک و ویندوز کار کند. هنگام ایجاد برنامه هایی که به داده ها بستگی دارند، نرم افزار باید در مواردی که اتصال برای بازیابی داده کند است یا برای مدتی کلا خاموش شده است، کار کند.برای نوشتن یک بخش نرم افزاری، مهندسان نرم افزار سعی می کنند به هر سناریوی ممکنی فکر کنند و این سناریوها را تست می کنند. این کار را با آنچه که مسیر خوشبختی نامیده می شود آغاز می کنند، جایی که هیچ اتفاق غیرمنتظره ای رخ نمی دهد اما مسأله مهمی که هست این است که آن ها هر مسأله ای که احتمال رخ دادن آن وجود دارد مستند کرده و تستی را برای آن برنامه ریزی می کنند. برخی مهندسان نرم افزار با کدنویسی شروع می کنند، که آن را وضعیت تست می نامند، و این سناریوها را شبیه سازی می کنند. سپس کد مناسبی که تمام این وضعیت تست را گذرانده است را می نویسند.مهندسان نرم افزار نیازهای نرم افزاری را که معمولا مبهم و ناقص هستند درک می کنند. مهارت منحصربه فرد یک مهندس نرم افزار بااستعداد نحوه نوشتن راه حل نیست بلکه شناسایی آنچه باید در راه حل باشد است.هزینه و کاراییمهندسان نرم افزار در بسیاری موارد می توانند مسائل را سریع حل کنند. اگر فکر می کنید که استخدام برنامه نویسان باتجربه به معنی هزینه های بیشتر است، دوباره فکر کنید. تجربه بیشتر برنامه نویسی که شما استخدام می کنید، باعث می شود سریع تر بتواند راه حل های قدرتمند، دقیق، قابل اطمینان و قابل نگهداری را ارائه دهد. این بدان معناست که هزینه ها به طور کلی در طول زمان پایین تر می آید.همچنین باید هزینه های اجرای برنامه را در نظر بگیرید. هر برنامه از منابع کامپیوتری استفاده خواهد کرد و این کار به صورت رایگان انجام نمی شود. مهندسان نرم افزار برنامه های کارآمدی را می نویسند که بیش از حد لزوم از منابع کامپیوتری استفاده نمی کنند. مثلا داده هایی که اغلب استفاده می شود، استراتژیی است که در اینجا کاربرد دارد. اما این تنها یکی از شاید هزاران ابزار و تغییراتی است که می تواند برنامه را سریع تر و کارآمدتر کند.یک برنامه نویس مبتدی ممکن است یک راه حل ارزان قیمتی را به شما بدهد، اما راه اندازی این راه حل ممکن است هزینه های شما و مشتریان تان را بسیار بیشتر کند، مگر اینکه یک برنامه نویس باتجربه داشته باشید که راه حل مؤثری را در اولین وهله ایجاد کند.قابلیت استفادهبرنامه های خوب با در نظر گرفتن تجربه های کاربری (ux) در نظر گرفته می شوند. تعامل انسان و کامپیوتر یک موضوع بزرگ با یافته ها و مطالعات تحقیقاتی بی شماری است. بیشتر این یافته ها پذیرفته شده اند. اجازه دهید چند مثال بیاوریم تا آن را بهتر درک کنید:1. هنگام طراحی فرم های ورودی که انتظار می رود کاربران داده ها را وارد کنند، مثل آدرس ایمیل شان، یک برنامه گیرنده خوب از حروف کوچک و بزرگ چشم پوشی می کند. همچنین فضای اضافی اطراف آن را از بین می برد. وقتی کلید capslock کاربر روشن است، کاربر به سختی کار نمی کند، ایمیل در فرمت حروف کوچک خود منحصربه فرد است. چنانچه برنامه آدرس های جدید ایمیل را بپذیرد، اعتبارسنجی صورت گرفته و پیغام واضحی به کاربر نشان داده می شود که ممکن است از آدرس اشتباهی استفاده کرده باشد. این موارد شامل مشکلات اساسی اعتبارسنجی، مثل عدم داشتن علامت @ است. اما همچنین باید شامل مشکلات اعتبارسنجی نه چندان جدی مثل استفاده از “gmail.com” هم باشد.2. هنگام هدایت کاربر برای انجام کاری، یک برنامه خوب مکان اصلی خود را حفظ می کند و هنگامی که کار انجام می شود، کاربر را به آن مکان هدایت می کند. یک برنامه خوب همچنین می تواند هر گونه اطلاعات و تعاملاتی که قبلا تعریف شده اند را نگه دارد که باید با مراحل آتی که کاربر انجام آن را درخواست کرده است، مرتبط شود. مثلا شما به عنوان مهمان در حال جستجوی expedio هستید. پس تصمیم می گیرید یک حساب کاربری ایجاد کنید، تمام جستجوی قبلی شما در حساب کاربری جدید ذخیره می شود و می توانید از دستگاه های کاملا متفاوت به آن ها دسترسی داشته باشید.3.یک برنامه خوب با درنظر گرفتن سناریوهای کاربر طراحی شده است. خودتان را جای کاربرتان بگذارید. فقط ویژگی ها را اضافه نکنید! مثلا پروازی را رزرو کرده ایم که شامل شماره پرواز است. پس از تأییدیه به وب سایت مورد نظر رفته ایم تا #ff را به پرواز اضافه کنیم و ده دقیقه طول می کشد تا بتوانیم آن را پیدا کنیم. مسیر مشخصی وجود نداشت. بنابراین ما مجبور شدیم تمام لینک هایی که به این ویژگی مربوط می شد را بررسی کنیم. ما از صفحه ای که در این ویژگی وجود داشت بازدید کردیم اما اولین بار نتوانستیم آن را ببینیم، زیرا عمیقا در فرم بزرگی که وجود داشت گم شده بود. ما مجبور بودیم اطلاعات سفر را تغییر دهیم. تقریبا 20 ورودی قبلی از فرم را اسکرول کردیم، نوع #ff ای که می خواستیم اضافه کنیم و همچنین شماره تلفن مورد نیاز را برای ارسال کل فرم وارد کردیم. این نمونه ای از یک برنامه است که از نقطه نظر کاربر با فکر طراحی نشده است.قابلیت اطمینان، امنیت و ایمنیاین موارد احتمالا مهم ترین نکات هستند که حرفه ای های نرم افزاری را از تازه کاران جدا می کند. آن ها می دانند که مسئول نوشتن راه حل های ایمن و مطمئن هستند. یک قطعه نرم افزاری باید نسبت به ورودی بد، وضعیت بد و تعاملات بد بهبودپذیر باشد. انجام این کار بسیار سخت است و این مسأله دلیل اصلی این است که داستان هایی راجع به مرگ افراد، به دلیل اشتباهات نرم افزاری می شنویم.کاربرانی هستند که می خواهند از نرم افزار با ورودی بد یا اشتباه استفاده کنند. بعضی ها عمدا سعی می کنند نرم افزار را دچار مشکل سازند تا بتوانند منابع را هک کنند.مسأله امنیتی فقط در مورد ورودی های بد نیست، بلکه گاهی اوقات ورودی های معمولی را نیز شامل می شود. اگر کاربران رمز عبور خود را فراموش کنند می توانند چند بار آن را امتحان کنند. آیا بعد از تعداد دفعات مجاز اکانت آن ها قفل می شود؟ اگر شخص دیگری در تلاش باشد تا اکانت آن ها را قفل کند چطور؟ آیا اجازه می دهید کاربران تان رمز عبور خود را بر روی یک اتصال رمزنگاری نشده ارسال کنند؟ اگر تلاشی برای ورود به یک حساب کاربری از یک مکان غیرمعمول صورت بگیرد چطور؟برای محافظت از کاربران خود در مقابل اسکریپت های متقابل سایت و درخواست های تقلبی و حملات فیشینگ ساده چه کاری انجام می دهید؟ آیا اگر یک حمله ddos روی سرورهای خود داشته باشید، یک استراتژی پشتیبان دارید؟ این سؤالات فقط تعداد کمی از بی شمار نگرانی است که باید برنامه ریزی شود.برنامه های ایمن اطلاعات حساس را مثل متن ساده ذخیره نمی کنند، بلکه آن ها را به صورت داده های رمزنگاری شده یک طرفه توسط الگوریتم های بسیار سخت ذخیره می کنند.این یک استراتژی پشتیبان برای برنامه و داده ها است. هکرها در صورت هک به داده های رمزنگاری شده دسترسی پیدا می کنند که عمدتا برای آن ها بی فایده است.یک نرم افزار به سمت حالت های بدی خواهد رفت و باید اصلاح شود. مشکلات غیرمنتظره برای بهترین نرم افزارها رخ خواهد داد. اگر از آن آگاه نباشید و برای آن برنامه ریزی نکنید، پس شما یک حرفه ای در نرم افزار نیستید. شما فقط برنامه های ناامن را می نویسید.نقص های نرم افزاری نامرئی هستند. توانایی فکری ما و پیش بینی و پیش گیری از این نقص ها محدود هستند. به همین دلیل مهندسان نرم افزار ارزش ابزارهای خوب را درک می کنند که می تواند به آن ها کمک کند نرم افزار امن و مطمئنی را بنویسند.در بر گرفتن ابزارشکی نیست که ما نیاز به ابزارهای بیشتر و بهتری داریم. ابزارها تفاوت بزرگی را ایجاد می کنند و اغلب باید از آن ها قدردانی کرد. تصور کنید اگر هنوز مجبور بودیم از فایل های ftp استفاده کنیم! تصور کنید دیباگ کردن شبکه و مشکلات عملکردی بدون devtools انجام می شد! نوشتن جاوااسکریپت بدون eslint و prettier را تصور کنید!اگر شما توسعه دهنده جاوااسکریپت هستید و بنا به دلایلی مجبور هستید تنها یک پلاگین را برای برنامه ویرایشگر خود انتخاب کنید، باید eslint را انتخاب کنید.هر ابزاری که در هنگام نوشتن کد، حلقه بازخورد را کوتاه می کند، باید مورد استقبال قرار گیرد. درک و بهبود ابزار یکی از راه های مؤثر در آینده ای روشن است.وقتی ابزار جدیدی پیدا می کنیم، تأسف می خوریم که چرا پیش از این از آن استفاده نکرده ایم. ابزار بهتر به شما کمک خواهد کرد که برنامه نویس بهتری باشید. آن ها را پیدا کنید، از آن ها استفاده کنید، از آن ها قدردانی کنید و اگر می توانید آ ن ها را بهبود بخشید.انتخاب زبان مهم است. نوع ایمنی مهم است. مورد بهتری که برای جاوااسکریپت رخ داده است، تایپ اسکریپت (و flow) است. تحلیل استاتیک کد مسأله ای بزرگ تر از آن چیزی است که شما فکر می کنید. اگر این کار را انجام ندهید اساسا خودتان را برای آینده ای ناشناخته آسیب پذیر ساخته اید. بدون سیستم static typing کد نزنید. اگر زبان انتخابی شما static typing ندارد، یا زبان تان را عوض کنید یا یک transpiler برای آن پیدا کنید. امروزه transpilerها به اندازه کافی هوشمند شده اند که فقط با خواندن دستورات در کد کار می کنند.تکامل مهندسی نرم افزارهیچ کس نمی تواند مهندسی نرم افزار را در دو ماه، شش ماه یا حتی یک سال یاد بگیرد. شما مهندسی نرم افزار را در آموزشگاه یاد نمی گیرید. خود ما در طی بیش از 20 سال گذشته آن را آموخته ایم و هنوز در حال یادگیری هستیم.مهندسی نرم افزار برای هر کس نیست، اما هر کسی باید یاد بگیرد که چگونه مشکلات کامپیوتری خود را حل کند. اگر می توانید نوشتن یک برنامه ساده را یاد بگیرید باید این کار را انجام دهید. اگر می توانید استفاده از خدمات نرم افزاری عمومی را یاد بگیرید باید این کار را انجام دهید. اگر بتوانید استفاده از نرم افزارهای open-source را یاد بگیرید، قدرت بزرگی را به دست خواهید آورد.مشکلات هر روز ایجاد می شوند و باید مهندس نرم افزار برای حل آن ها باشد. آینده این حرفه این است که کاربران معمولی کامپیوتر را، بدون نیاز به مطالعه پنج ساله، قادر به استفاده از رایانه کند. کاربران را قادر سازد تا با ابزارهای ساده مشکلات کامپیوتری خود را حل کنند. بنابراین مهندسان نرم افزار برای ایجاد برنامه های بهتر، حل مشکلات شناخته شده بزرگ تر و ارائه بهترین راه کار برای جلوگیری از این مشکلات پیش می روند.

معرفی کامل بزرگترین برنامه نویسان جهان

درخواست حذف این مطلب
بزرگترین برنامه نویسان جهان هر یک در زمینه های مشخص فعالیت کرده اند. دانستن زندگینامه بزرگترین برنامه نویسان جهان بسیار جالب و شگفت انگیز است. بزرگترین برنامه نویسان جهان کدامند؟ قطعا شناسایی بزرگترین برنامه نویسان جهان و دانستن سبک زندگی آنها به شما کمک می کند تا بتوانید آینده ای خارق العاده برای خود رقم بزنید. در نظر داشته باشید در حوزه های مختلف کامپیوتر و همینطور سیستم های ارتباطی افراد نخبه ای وجود دارند. بهترین برنامه نویسان جهان را مورد بررسی قرار می دهیم. با ما همراه باشید.لینوس توروالدز از بزرگترین برنامه نویسان جهانلینوس خالق لینوکس است! این فرد توانست سیستم عاملی رایگان را در یکی از اتاق های خوابگاه دانشجویی خود خلق کند. اگر دقت کنید امروزه لینوکس بهترین گزینه برای دیتاسنترها و همینطور سوپر کامپیوترها محسوب می شود.لینوس دارای زبان بسیار تند و تیزی است و این فرد بسیار آشنا بوده و افراد زیادی آن را می شناسند.در بررسی های اخیر و در مصاحبه ای از لینوس پرسیده شده که آیا روش جدیدی که برای لینوکس در نظر گرفته اید سبب نمی شود که کاربران لینوکس برای همیشه از دست بروند و او بسیار ساده پاسخ دارد : " برایم مهم نیست!" لینوس بسیار آینده نگر است و هرگز به مسایل موجود کفایت نمی کند. زندگی بزرگترین برنامه نویسان جهان به شما انگیزه و امید بیشتری می دهند.سرتیم برنرزلی از مشهورترین برنامه نویسان جهانیکی از دیگر از بزرگترین برنامه نویسان جهان سرتیم نام دارد. او تنها غول حال حاضر است که توانسته نشان شوالیه را از دست ملکه الیزابت دریافت کند.سرتیم توانست پروتکل انتقال ابر متن (http) را خلق کند. اگر دقت کرده باشید که وب جهان گستر که همان www شناخته شده است از این پروتکل استفاده می کند. سرتیم پدر اینترنت ایران است. این فرد امروز رهبر اتحاد اینترنت ارزان نام گرفته است. او سعی می کند که اینترنت پرسرعت را بسیار ارزان در اختیار عموم افراد قرار دهد.دانلد کنوت از بزرگترین برنامه نویسان جهان در تحلیل الگوریتمقطعا شنیده اید که کنوت توانسته است لقب پدر تحلیل الگوریتم را برای خود فراهم سازد. کنوت از دانشمندانی است که از طریق تحقیق و همینطور مطالعات بسیار وسیعی که داشته است یک سری الگوریتم های بسیار عجیب خلق کند. هر چیزی که در دنیای اینترنت می بینید به لطف این فرد صورت گرفته است.او هم اکنون 77 سال دارد و هنوز هم در حال نوشتن کتابی به اسم " هنر برنامه نویسی کامپیوتر" است. این کتاب بسیار جالب و خواندنی است.کنوت از اساتید افتخاری در دانشگاه استنفورد محسوب می شود. بزرگترین برنامه نویسان جهان را بشناسید.برندان ایچ بزرگترین برنامه نویسان جهان در توسعه اپایچ مخترع جاوا اسکریپت است. این زبان برنامه نویسی یک استاندارد برای توسعه اپ های تحت وب محسوب می شود.اگر دقت کرده باشید در اخبارهای اخیر اینطور به نظر می رسد که ایچ تبدیل به مرجع بحث و جدال های فراوان شده است و البته او مدیرعامل موزیلا است. او در حال جمع آوری کمک های مالی برای nom است. بزرگترین برنامه نویسان جهان هر یک دارای روش خاصی در زندگی خود هستند.سلیمان هایگز از بزرگترین برنامه نویسان جهان در زمینه داکرهایگز بنیان گذار داکر است، این تکنولوژی بسیار جذاب است که سبب می شود توسعه دهندگان و همینطور برنامه نویسان به آن عشق بورزند. در واقع این ابزار به افراد اجازه می دهد که کدهایشان را تنها یکبار بنویسند و هر بخش که علاقمند هستند از آن اجرا بگیرند.داکر در ابتدا یک پروژه جنبی در شرکتی به نام دات کلود محسوب می شود اما امروزه به عنوان یک سرمایه یک میلیارد دلاری ارزش گذاری شده است.در نظر داشته باشید که این فرد در زمان بسیار سریع توانست این ابزار را تولید کند. بزرگترین برنامه نویسان جهان در هر دهه حرف جدیدی برای زدن دارند.از دیگر برنامه نویسان جهانمارک زاکربرگ توانست در خوابگاه اتاق خواب خود فیسبوک را خلق کند. این محیط دارای شعار مخصوص " سریع حرکت کن و همه چیز را بشکن " است.فلسفه و جهان بینی این فرد توانست ارتباطات جهانی را گسترش دهد.هانسن از معروف ترین برنامه نویسان جهان محسوب می شود که خالق روبی است. این فریم ورک توانست جایزه هکر سال را برای این فرد رقم بزند.هانسن عاشق اتومبیل سواری است و او در مسابقات اتومبیل سواری فرانسه نیز شرکت می کندریچارد از دیگر گزینه های بسیار مشهور در زمینه برنامه نویسی است. او از دهه 80 میلادی برای مبارزه با نرم افزارهای آزاد جنگ می کند. او تا الان توانسته چندین پروژه موفق را در زمینه های مختلف به نام خود ثبت کند. بیشتر شهرت او در زمینه قانون کپی رایت است.برام هوکن در سال 2001 توانست بیت تورنت را اختراع کند. پروتکل به صورتی است که سبب می شود کاربران سریعتر بتوانند فایلهای بسیار حجیم را دانلود کنند. در نظر داشته باشید که در واقع با این تکنولوژی می توان هر فایل را به بخش های کوچکتری قطعه بندی کرد به صورتی که هر بخش به صورت همزمان دانلود شود.بیت تورنت به صورت خاصی محبوب شده است و آینده ای بسیار عالی دارد. این فرد در گروه موسیقی بسیار نقش داشته است. این سرعت سبب شده است که سرعت دانلود آنقدر افزایش یابد که فرمتی برای دانلود غیر قانونی فیلم ها در نظر گرفته شود.جمیز گاسلینگ از بزرگترین برنامه نویسان جهان محسوب می شود و او مخترع جاوا است. این فرد توانسته شرکت اوراکل را خریداری کند.بیارنه تروپ از دسته دانشمندان دانمارکی محسوب می شود و او در زمینه c++ فعالیت می کند. او توانسته یک سری امکانات دید و بسیار مدرن را به این فضا اضافه کند. عمیق به زندگی بزرگترین برنامه نویسان جهان توجه کنید.

15 کتابخانه جالب javascript و css برای مه 2018

درخواست حذف این مطلب
هدف ما در برنامه نویسان این است که شما را با آخرین و جالب ترین روندها و شیوه ها در توسعه وب به روز نگه داریم. به همین دلیل هر ماه با مجموعه ای از دست آوردها از بهترین منابع در خدمت شما هستیم. text maskاین یک کتابخانه جاوااسکریپت برای ایجاد انواع مختلف ماسک ها در فیلدهای ورودی است. کم حجم بوده (کمتر از 4kb) و هیچ وابستگیی ندارد و می تواند با افزونه ها گسترش یابد. اضافه کردن ماسک متن می تواند به کاربران کمک کند فرمت مورد نیاز برای پر کردن ایمیل ها، شماره تلفن، کارت های اعتباری و سایر داده ها را اعمال کنند.toast ui calendarیک تقویم جالب و آسان که شیوه مؤثری را برای مدیریت وظایف زمان بندی شده ارائه می دهد. انواع نمایش های مختلف (روزانه، هفتگی، ماهانه) را پشتیبانی می کند و به شما اجازه می دهد پیام های popup را برای کارهای آتی خود ایجاد کنید. همچنین از کشیدن و تغییر اندازه دادن برای تنظیم برنامه های زمانی آسان تر و تغییر روز شروع هفته پشتیبانی می کند و می تواند توسط تم ها سفارشی شود.length.jsیک کتابخانه جاوااسکریپت است که می توانید برای تبدیل واحدهای طول از آن استفاده کنید. در node.js و در مرورگرها کار می کند و روی unpkg cdn به صورت نسخه های فشرده و غیرفشرده در دسترس است. به شما اجازه می دهد یک واحد را به واحدهای دیگر تبدیل کرده یا انواع مختلف واحدهای دیگر را اضافه کنید، از متر، فوت، اینچ، یارد، مایل و بسیاری واحدهای دیگر پشتیبانی می کند.day.jsکتابخانه سریع، کم حجم و غیرقابل تغییر برای تحلیل، اعتبارسنجی و قالب بندی تاریخ است. برای استفاده api آسان است و روی تمام مرورگرها به خوبی کار می کند و جایگزین خوبی برای moment.js است. می توانید تاریخ ها را در قالب های مختلف ایجاد، مقایسه، کم و زیاد کنید و فرمت های تاریخ را تغییر دهید.mustard uimustard یک فریم ورک css کم حجم و open-source است. این فریم ورک از همه کامپوننت ها و فریم ورک های front-end مورد نیاز مثل گرید css flexbox، میله های پیشرفت، دکمه ها، فرم ها و بسیاری موارد دیگر پشتیبانی می کند. در حال حاضر در نسخه بتا است، بنابراین در آینده بهبود خواهد یافت.next.jsیک فریم ورک کم حجم برای ساخت برنامه های استاتیک و رندرینگ سرور با جاوااسکریپت و react می باشد. این فریم ورک تقسیم خودکار کد را برای بارگذاری سریع تر صفحات، مسیریابی راحت تر سمت کلاینت و پشتیبانی از css داخلی را ارائه می دهد. next.js موبایل پسند بوده و می تواند با پلاگین ها سفارشی شود.permitpermit یک کتابخانه احراز هویت برای ایجاد apiهای node.js است. این کتابخانه شیوه ای آسان برای افزودن احراز هویت برای هر apiی node.js را ارائه می دهد و می تواند با هر فریم ورک محبوب دیگری مثل express, koa, hapi مورد استفاده قرار گیرد. علاوه براین، permit یک رابط ساده دارد که نوشتن منطق احراز هویت را آسان می سازد.فریم ورک serverlessابزاری برای ساخت و استفاده از معماری serverless برای هر ارائه دهنده (provider) می باشد. به شما این امکان را می دهد توابع، رویدادها و منابع مورد نیاز دیگر خود را از طریق مدیران منابع provider با اطمینان بسازید. این فریم ورک از node.js، پایتون، جاوا، php و زبان های دیگر پشتیبانی می کند. به طور کامل قابل گسترش است و می توانید از برخی پلاگین های ساخته شده استفاده کنید یا یک نمونه برای خود ایجاد کنید.pico.jsیک کتابخانه open-source جاوااسکریپت برای تشخیص چهره است. بسیار کم حجم است (فقط 2kb) و قابلیت تشخیص زمان واقعی fps + 200 را دارد. می توانید نسخه نمایشی که وب کم رایانه یا تلفن تان از آن استفاده می کند را بررسی کنید.vuepressیک تولیدکننده سایت استاتیک ساده و قدرتمند vue است. htmlهای استاتیک پیش از رندر شدن را برای هر صفحه تولید می کند و به عنوان برنامه تک صفحه ای اجرا می شود. vuepress با یک تم پیش فرض همراه است که شامل لایه های ریسپانسیو، navbar و اسلایدر سفارشی، صفحه اصلی اختیاری و غیره می باشد.preactpreact با apiای مدرن و عملکردی عالی یک جایگزین کوچک برای react است. یکی از سریع ترین کتابخانه های dom مجازی است و شامل ویژگی های عملکردی مانند دسته بندی آپدیت های قابل تنظیم، رندرینگ اختیاری async و چرخه dom می باشد. قابلیت گسترش آن بالاست و اضافه کردن نام مستعار preact-compat به شما اجازه می دهد از کامپوننت های مختلف react در برنامه خود استفاده کنید.جلوه های ذرات (particle) برای دکمه هاکتابخانه کوچکی است که می تواند برای ایجاد جلوه های particle استفاده شود. این افکت ها روی دکمه ها بسیار عالی به نظر می رسند و آن ها را در بخش های کوچک یکپارچه/جدا از هم می سازد. افکت های انیمیشن anim.js قدرتمند هستند و می توانید مدت زمان، سرعت، نوع ، استایل و بسیاری موارد دیگر را تغییر دهید.load assetیک کتابخانه ساده مبنی بر promise، برای بارگیری یک یا چند asset به صورت موازی می باشد. از تصاویر (png, jpg, svg)، صوت (mp3, ogg)، ویدئو (mp4)، json، متن و انواع فایل های دیگر پشتیبانی می کند. می توان آن را با سینتکس های async/await مورد استفاده قرار داد و روی تمام مرورگرها از جمله ie11 به بالا کار می کند.css loaderکتابخانه ساده css برای ایجاد جلوه های جالب بارگذاری است. انواع مختلفی دارد که می توانید آن ها را انتخاب کنید. علاوه بر این، استفاده از آن ها واقعا آسان است. فقط نیاز به یک عنصر ساده div و چند کلاس دارید.sailssails فریم ورکی است که شیوه آسانی را برای ساخت برنامه های سفارشی node.js ارائه می دهد. از معماری mvc از فریم ورک هایی مانند ryby on rails پیروی می کند. به شما اجازه می دهد rest apiها را به صورت اتوماتیک تولید کنید و ادغام ساده ای از websocket داشته باشید. sails می تواند با هر پایگاه داده ای کار کند و با تمام فریم ورک های front-end سازگار است.

مقایسه و عملکرد dapper ، entity framework و ado.net

درخواست حذف این مطلب
ما در گروه خود پروژه ای داریم که کارایی آن بسیار مهم است. این پروژه کوئری های ما را در داده های پایگاه داده sql درگیر می کند، داده ها را به اشیای strongly-typed تبدیل کرده و سپس این اشیاء را به یک سیستم تماس از طریق لایه سرویس بازمی گرداند. درنهایت این سرویس ستون مرکزی در معماری سرویس گرای سازمان (soa) ما خواهد شد و به همین دلیل باید سریع باشد. ما معمولا می خواهیم از entity framework برای orm خود استفاده کنیم، اما با کمی جستجو در سؤالات stackexchange و توضیحات وبلاگ ها معلوم می شود که چگونه ef واقعا برای سیستم های با کارایی بالا چندان رضایت بخش نیست. این شکاف با مراحلی که "micro-orms" نامیده می شوند مثل dapper.net پر می شود که عملکرد مربوط به قابلیت نگهداری را به عهده می گیرد.چون عملکرد در این برنامه بسیار مهم است، ما می خواهیم مطمئن شویم کدام یک از این ormها بهترین شرایط را برای ما فراهم می کنند. بنابراین ما روی یک پروژه نمونه بر روی githubکار کردیم که هر یک از این سه روش دسترسی به داده را می گیرد تا آن ها را با استفاده از داده ها و کوئری های مشابه (با برخی ملاحظات، همان طور که در زیر مشاهده می کنید) امتحان کند. این مقاله به بخش های زیر تقسیم می شود:1. متدولوژی2. تنظیم تست3. نتایج4. تحلیل5. نتیجه گیریمتدولوژیاین تست از یک ساختار پایگاه داده ای استفاده می کند که به صورت زیر است:به عبارت دیگر، ورزش (sport) تعدادی تیم (team) دارد و یک تیم تعدادی بازیکن (player) دارد.ما نیاز به تعدادی داده برای تست داریم. پروژه نمونه یک بخش کامل اختصاص داده شده به تولید این داده ها را دارد، فقط کافی است بگویید با چه شیوه ای می توانید تعدادی ورزش، تعدادی تیم برای هر ورزش، و تعدادی بازیکن برای هر تیم در هر تست را انتخاب کنید.آنچه که اکنون ما نیاز داشتیم مجموعه ای از کوئری ها بود که باید در هر orm ایجاد کرده و آن را تست می کردیم. ما سه کوئری مختلف را انتخاب کردیم:بازیکن توسط idبازیکن های هر تیمتیم های هر ورزش (ازجمله بازیکنان)برای هر کوئری، تست را برای همه داده های پایگاه داده اجرا خواهیم کرد (مثلا برای بازیکن توسط id، هر بازیکن را با id خودش انتخاب می کنیم) و به طور میانگین کل زمانی که برای اجرای کوئری صرف می شود (ازجمله تنظیم dbcontext یا sqlconnection) را برای هر اجرا در نظر می گیریم. سپس چندین اجرا از این مورد را برای داده های مشابه انجام می دهیم تا بتوانیم میانگین اجرای آن ها را محاسبه کرده و به طور واضح نشان دهیم که کدام orm سریع تر است.تنظیم تستبه عنوان مثال، در اینجا کدی برای کلاس های تست entity framework، ado.net و dapper.net وجود دارد: public class entityframework : itestsignature { public long getplayerbyid(int id) { stopwatch watch = new stopwatch(); watch.start(); using (sportcontext context = new sportcontext()) { var player = context.players.where(x => x.id == id).first(); } watch.stop(); return watch.elapsedmilliseconds; } public long getplayersforteam(int teamid) { stopwatch watch = new stopwatch(); watch.start(); using (sportcontext context = new sportcontext()) { var players = context.players.where(x => x.teamid == teamid).tolist(); } watch.stop(); return watch.elapsedmilliseconds; } public long getteamsforsport(int sportid) { stopwatch watch = new stopwatch(); watch.start(); using (sportcontext context = new sportcontext()) { var players = context.teams.include(x=>x.players).where(x => x.sportid == sportid).tolist(); } watch.stop(); return watch.elapsedmilliseconds; } } public class adonet : itestsignature { public long getplayerbyid(int id) { stopwatch watch = new stopwatch(); watch.start(); using(sqlconnection conn = new sqlconnection(constants.connectionstring)) { conn.open(); using(sqldataadapter adapter = new sqldataadapter("select id, firstname, lastname, dateofbirth, teamid from player where id = @id", conn)) { adapter.selectcommand.parameters.add(new sqlparameter("@id", id)); datatable table = new datatable(); adapter.fill(table); } } watch.stop(); return watch.elapsedmilliseconds; } public long getplayersforteam(int teamid) { stopwatch watch = new stopwatch(); watch.start(); using(sqlconnection conn = new sqlconnection(constants.connectionstring)) { conn.open(); using(sqldataadapter adapter = new sqldataadapter("select id, firstname, lastname, dateofbirth, teamid from player where teamid = @id", conn)) { adapter.selectcommand.parameters.add(new sqlparameter("@id", teamid)); datatable table = new datatable(); adapter.fill(table); } } watch.stop(); return watch.elapsedmilliseconds; } public long getteamsforsport(int sportid) { stopwatch watch = new stopwatch(); watch.start(); using(sqlconnection conn = new sqlconnection(constants.connectionstring)) { conn.open(); using(sqldataadapter adapter = new sqldataadapter("select p.id, p.firstname, p.lastname, p.dateofbirth, p.teamid, t.id as teamid, t.name, t.sportid from player p inner join team t on p.teamid = t.id where t.sportid = @id", conn)) { adapter.selectcommand.parameters.add(new sqlparameter("@id", sportid)); datatable table = new datatable(); adapter.fill(table); } } watch.stop(); return watch.elapsedmilliseconds; } } public class dapper : itestsignature { public long getplayerbyid(int id) { stopwatch watch = new stopwatch(); watch.start(); using (sqlconnection conn = new sqlconnection(constants.connectionstring)) { conn.open(); var player = conn.query("select id, firstname, lastname, dateofbirth, teamid from player where id = @id", new{ id = id}); } watch.stop(); return watch.elapsedmilliseconds; } public long getplayersforteam(int teamid) { stopwatch watch = new stopwatch(); watch.start(); using (sqlconnection conn = new sqlconnection(constants.connectionstring)) { conn.open(); var players = conn.query("select id, firstname, lastname, dateofbirth, teamid from player where teamid = @id", new { id = teamid }); } watch.stop(); return watch.elapsedmilliseconds; } public long getteamsforsport(int sportid) { stopwatch watch = new stopwatch(); watch.start(); using (sqlconnection conn = new sqlconnection(constants.connectionstring)) { conn.open(); var players = conn.query("select p.id, p.firstname, p.lastname, p.dateofbirth, p.teamid, t.id as teamid, t.name, t.sportid from team t " + "inner join player p on t.id = p.teamid where t.sportid = @id", (player, team) => { return player; }, spliton: "teamid", param: new { id = sportid }); } watch.stop(); return watch.elapsedmilliseconds; } }توجه داشته باشید که در مورد dapper.net و ado.net، یک سطر را برای هر بازیکن در کوئری getteamsforsport انتخاب خواهیم کرد. این یک مقایسه دقیق در برابر کوئری ef نیست، اما برای هدفی که ما داریم به خوبی کار می کند.نتایجنتایج زیر برای 10 تکرار هستند، هر کدام شامل 8 ورزش، 30 تیم در هر ورزش و 100 بازیکن برای هر تیم می باشد.نتایج entity frameworkنتایج ado.netنتایج dapper.netتحلیل (analysis)همانطور که در داده هایی که در بالا ذکر شده است می بینید، entity framework به طور قابل توجهی کندتر از ado.net یا dapper.net می باشد، که به ترتیب 10-3 برابر کندتر است.بیایید مسأله را بازتر کنیم: به کوئری "teams per sport" توجه کنید؛ در این کوئری entity framework هم تیم ها در یک ورزش معین و هم بازیکن های مربوط به هر تیم (از طریق ()include) را انتخاب کرد، در حالی که کوئری های ado.net و dapper.net فقط داده های پیوست شده (joined data) را انتخاب کردند. در یک مطالعه آماری دقیق تر، نتایج بهتری را به دست خواهید آورد.چیزی که جالب تر است این است که dapper.net برای کوئری های پیچیده تر، به طور متوسط سریع تر از ado.net بود. ما معتقدیم که این موضوع مربوط به این واقعیت است که در مورد تست ado.net ما از sqldataadapter استفاده می کنیم، اگرچه نمی توانیم این موضوع را ثابت کنیم.حتی اگر کوئری "تیم های هر ورزش" را هم در نظر نگیریم، هنوز ef حداقل 3 مرتبه کندتر از dapper.net و ado.net است. داده ها نشان می دهند که حداقل از لحاظ سرعت و با این کوئری ها، entity framework آهسته ترین گزینه و dapper.net سریع ترین گزینه خواهد بود. به همین دلیل نتیجه نهایی ما ممکن است شما را شگفت زده کند.نتیجه گیریما قصد داریم از dapper.net روی پروژه خود استفاده کنیم، در این انتخاب شکی نیست، با این حال نمی خواهیم توسعه را با آن آغاز کنیم، و تنها orm مورد استفاده ما نیست. هدف این است که این پروژه را با استفاده از entity framework توسعه دهیم، و بعدا با استفاده از dapper.net در سناریوی خاصی که سیستم نیاز به افزایش عملکرد دارد پروژه را بهینه سازی کنیم. بله، ما با آهسته ترین گزینه شروع می کنیم. چرا این کار را می کنیم؟زیرا اشکال بزرگ استفاده از dapper.net این است که شما در کد خود کوئری های عادی sql را دارید. اگر هر کسی هر اشتباه تایپی را انجام دهد، ما تا زمانی که تست های مربوط به کد را اجرا نکنیم از هیچ مشکلی باخبر نمی شویم. به علاوه اعضای تیم ما با ef بیشتر از dapper.net آشنا هستند، بنابراین زمان توسعه سریع تر خواهد بود.به طور خلاصه، dapper.net بدون شک سریع تر از ef و کمی سریع تر از ado.net است، اما اکثرا ما توسعه را با ef انجام داده و در صورت نیاز آن را با dapper.net بهینه سازی می کنیم. ما فکر می کنیم این روش توازنی بین سهولت توسعه و عملکرد ایجاد می کند (و امیدوارم به ما اجازه دهید از هر دو روش استفاده کرده و آن را به درستی انجام دهیم). به اشتراک بگذارید :

چگونه گوگل به عوامل رتبه بندی سئو کمک می کند؟ (اعتماد و اعتبار گوگل)

درخواست حذف این مطلب
اعتبار گوگل چیست؟اعتبار گوگل یک روش تئوری برای گوگل است که تعیین می کند آیا شما سایت قابل اعتمادی هستید؟ ممکن است تعجب کنید و با خود بگویید، چگونه می توانم متوجه شوم که گوگل به من اعتماد دارد یا نه؟ همان طور که هیچ راهی برای پاسخ قطعی وجود ندارد، راه هایی برای به دست آوردن نتایج خوب وجود دارد.اجازه دهید تا آن ها را به شما نشان دهیم:تعدادی ابزار برای تعیین اعتبار یا اعتماد سایت شما وجود دارند که شماره شما را ایجاد می کنند. استفاده از ویژگی های اصلی سه تا از آن ها رایگان است، که شامل شماره قابل اعتمادی هستند.open site explorerahrefmajesticحالا شما شماره خود را دارید، یعنی چه؟ یعنی اگر امتیاز شما 40 باشد و رقیب شما امتیاز 20 را داشته باشد، شما به طور خودکار رتبه بالاتری نسبت به آن ها نخواهید داشت. این امر به شما اطلاع می دهد که در صنعت خود، در مقابل دیگران ایستادگی کنید.آن ها چگونه متوجه می شوند؟در چند سال گذشته، شاهد تغییرات الگوریتم هایی ازجمله پاندا و پنگوئن بوده ایم. آن ها مراقب سایت هایی هستند که عوامل قابل اعتماد پایین دارند و رتبه بندی موتورهای جستجو برای آن ها پایین تر است.گوگل پاندا به صفحات سایت شما نگاه می کند تا ببیند دارای محتوای کم، کپی از منابع دیگر یا غلط املایی و گرامر نادرست است. اگر تعداد زیادی از این نوع صفحات را داشته باشید، گوگل تعیین می کند که سایت شما یک منبع قابل اعتماد نیست و رتبه پایین تری به شما می دهد.گوگل پنگوئن عملکرد مشابهی دارد. به جای بررسی داخلی سایت شما، به منابع خارجی یتان، مانند موقعیت بک لینک های شما نگاه می کند. گوگل به جایی که بک لینک های شما از آنجا می آید و نحوه لینک شدن آن ها نگاه می کند. اگر بک لینک ها از منابع غیرقابل اعتماد آمده باشند، یک بار دیگر رتبه پایینی می گیرید.چه چیزی تعیین کننده اعتبار است؟همان طور که محتوای سایت شما می تواند روی اعتبار تأثیر بگذارد، بیشتر از آن منابع خارجی اثرگذارند. موقعیت بک لینک های شما واقعا هدایت کننده اعتبار است.برای مثال:فرض کنید یک سایت دارید و همه می توانند بک لینک های آن را ببیند. این سایت 1000 لینک دارد و بیشتر آن ها از سایت های خارجی، نظرات وبلاگ ها و دایرکتوری های تصادفی هستند. آیا شما از این سایت بازدید می کنید؟در مورد سایتی که 100 تا بک لینک دارد، اما این بک لینک ها از huffington post، cnn و cnet است چطور؟ آیا از این سایت بازدید می کنید؟به احتمال زیاد شما سایتی را باز می کنید که 100 تا بک لینک از سایت های معروف و معتبر دارد. این شیوه نگاه گوگل به سایت شماست و تعیین کننده میزان اعتماد او به شماست. اگر منابع خارجی سایت های کم ترافیک باشند، گوگل به شما اعتبار نمی دهد. اما اگر طیف خوبی از سایت های مورد اعتماد داشته باشید، گوگل اعتماد به شما را آغاز خواهد کرد.معرفی مدل اعتمادگوگل در تلاش است تا سیستم هایی با لینک های بد و بی ارزش بازاریابان کلاه سیاه و خاکستری را پاک کند. گوگل به طور مداوم الگوریتم های خود را آپدیت می کند و ممکن است به زودی سیستم جدیدی برای تعیین اعتبار سایت ها بسازد. در واقع بررسی پست های سایت در موتور جستجو در حال ظهور است و رتبه بندی آن ها مطابق با میزان صداقت و درستی آن ها به کاربران ارائه می شود.در حال حاضر گوگل اعتبار و شهرت سایت ها را بر اساس تعداد لینک های وارد شده مرتبط، منبع این لینک ها، همچنین محبوبیت سایت در رسانه های اجتماعی تعیین می کند.ممکن است تیمی از محققان گوگل در حال تغییر دادن مدل باشند. سیستم هایی که آن ها در حال توسعه آن هستند، حقایق نادرست در یک صفحه را با استفاده از دانش پیچیده مستقل گوگل محاسبه می کنند.چگونه می توانیم اعتبار گوگل خود را افزایش دهیم؟اولین کار برای افزایش اعتبار گوگل این است که بررسی کنید ببینید آیا ممکن است توسط آپدیت های پاندا و پنگوئن مجازات شده باشید. اگر مجازات شده اید، قطعا باید از همین جا شروع کنید. محتوا را بررسی کنید و تمام صفحاتی که ممکن است تحت تأثیر قرار گرفته باشند را اصلاح کنید. سپس لینک های هر بک لینکی که ممکن است از منابع غیرقابل اعتماد آمده باشند را حذف کنید.اگر مجازات نشده اید، حالا نوبت بک لینک ها و بازی دسته جمعی است. لزومی ندارد تعداد بک لینک ها را افزایش دهید اما بک لینک ها را از صفحات معتبر گوگل بگیرید. شیوه های بسیاری از ساختار لینک وجود دارد که هنوز هم برای افزایش اعتبار شما مؤثر است.هنگام انجام این کار، شروع به تعامل با کاربران خود در حساب های رسانه های اجتماعی خود کنید، داشتن کاربران plus، tweet یا هر چیز دیگری به افزایش این عوامل کمک می کند و سایت شما را قدرتمندتر می کند.می توانید از ابزارهای مورد بحث در بالا استفاده کنید، منابع بسیار خوبی را پیدا می کنید که می دانید مورد اعتماد گوگل هستند. اما به طور کامل به آن اعتماد نکنید. اگر لینکی از سایتی نزدیک به سایت خودتان به دست آوردید و نمره بالایی نداشت، نگران نباشید. اگر فکر می کنید سایت سودمندی است، احتمالا همین طور است.چه چیزی به سایت شما آسیب خواهد رساند؟عوامل بسیار زیادی وجود دارد که گوگل در رتبه بندی سایت بررسی خواهد کرد. اما عواملی وجود دارند که بد هستند و باید سعی کنید از آن ها دوری کنید.در اینجا تکنیک هایی برای مراقبت از سایت وجود دارند:افزایش غیرطبیعی بک لینک ها: این مسأله وقتی اتفاق می افتد که سایت شما 10000 لینک در یک روز دریافت می کند، یک ماه بعد 2 لینک، و هفته بعد 5000 لینک. این لینک ها یک کلمه کلیدی دقیق را به یک صفحه خاص لینک می کنند. این امر یک پرچم قرمز در گوگل است که می گوید شما در حال انجام اقدامات برای ساخت لینک های غیراخلاقی هستید.خرید لینک ها: لینک ها را از سایت های دیگر نخرید. چرا که این کار، روش سختی برای گوگل است تا تصمیم بگیرد چه چیزی هست و چه چیزی نیست. اگر آن ها این مسأله را بفهمند، اتفاقات بدی خواهد افتاد.مزرعه های لینک (link farm): سایت هایی وجود دارد که برای اهداف خاصی ایجاد شده اند. همه آن ها در نهایت به یک وب سایت لینک می شوند، وب سایت شما. این روش تکنیک بزرگی بود که اکثرا قبل از آمدن پنگوئن از آن استفاده می کردند.نظرات پست ها: یکی از روش های بزرگ قبل از پنگوئن لینک های نظرات بود. این مسأله زمانی اتفاق می افتد که شما می نویسید "مقاله خوب" و در نام نویسنده لینک خودتان را می گذارید. اگر در یک وبلاگ نظر بگذارید و این کار را انجام دهید، خوب است، شما قصد مجازات شدن ندارید. این کار زمانی بد است که 1000 تا از این نوع لینک ها به یک صفحه مرتبط می شوند.محتوای کم یا تکراری: همان طور که در آپدیت پاندا اشاره شد، صفحاتی که محتوای کمی دارند یا از یک منبع دیگر کپی می شوند از نظر گوگل امتیاز منفی است. این شیوه باعث از بین رفتن بک لینک ها هم می شود. همچنین گوگل به گرامر نادرست و غلط های املایی رتبه پایین تری را می دهد.آپدیت های آتیما نمی دانیم که گوگل برای آپدیت بعدی الگوریتم های خود چه برنامه ای دارد. یکی از مواردی که می توانیم مطمئن باشیم این است که افزایش اعتماد و اعتبار گوگل به سایت تان، ارزشمند خواهد ماند. همان طور که این کار شما را از مجازات های آتی حفظ خواهد کرد.اساسا سه چیز باعث افزایش اعتبار شما می شود. محتوای قدرتمندی را بدون هیچ گونه غلط املایی و گرامری بنویسید. بک لینک هایی را از منابع معتبر دریافت کنید و اشتراک گذاری های اجتماعی خود را همراه با تعامل با کاربران افزایش دهید.همه این کارها را انجام دهید، جای نگرانی نیست.

توسعه برنامه های وب با asp.net core 2.0 و react ( بخش دوم)

درخواست حذف این مطلب
دراین مقاله، بخش دوم این مجموعه در مورد توسعه وب برنامه مبتنی بر asp.net core 2.0 و react است. در مقاله قبلی، شما یک برنامه web api امن ایجاد کردید که لیستی از کتاب ها را با asp.net core 2.0 ارائه می داد. در این مقاله یک برنامه کلاینت تک صفحه ای (spa) براساس react برای تحلیل این api ایجاد خواهید کرد. می توانید به کد نهایی کلاینت react در githubدسترسی داشته باشید.ایجاد برنامه reactبرنامه کلاینتی که می خواهید ایجاد کنید یک برنامه وب بر مبنای react است که از api ای که در بخش یک ساختید استفاده خواهید کرد. web api لیستی از کتاب ها را برمی گرداند، اما از آنجایی که توکن مجوز دسترسی برای دریافت داده ها لازم است، شما با مسائل مربوط به احراز هویت و مجوز دسترسی مواجه خواهید شد.باید با بوت استرپ کردن پایه برنامه react شروع کنید. چند مورد برای ایجاد برنامه react وجود دارد، مثل شروع از ابتدا؛ که با استفاده از یکی از چندین قالب های boilerplateای موجود در وب، یا با استفاده از ابزار create-react-app می توانید این کار را انجام دهید.استفاده از ابزار create-react-app مزایای زیادی دارد:1. برنامه react را فقط در چند دقیقه راه اندازی می کند.2. برای استفاده از محیط توسعه آماده است که نیازی به پیکربندی پیچیده ندارد.3. کاملا مستندسازی شده است.4. این ابزار توسط خود تیم react توسعه یافته است و تضمین می کند بهترین روش برای کار با react در آن اعمال شده است.اما این ابزار create-react-app چیست؟ این ابزار واسط خط فرمان (cli) است که به شما اجازه می دهد یک spa مبنی بر react را بدون نیاز به پیکربندی transpilerها، بررسی کننده های سینتکس، bundlerهای ماژول، اجراکننده های وظایف و سایر وظایف/ابزارهای مورد نیاز توسط توسعه جدید جاوااسریپت ایجاد کنید. این ابزار بر پایه node.js است و می تواند با نوشتن دستور زیر روی دستگاه شما نصب شود: npm install -g create-react-appنکته: اگر node.js و npm را روی دستگاه توسعه خود نصب ندارید، به صفحه دانلود node.js بروید و دستورالعمل ها را دنبال کنید.بعد از اینکه create-react-app را نصب کردید، می توانید با نوشتن دستور زیر در console window برنامه react خود را بسازید: create-react-app react-auth0این دستور فولدری به نام react-auth0 در پوشه جاری ایجاد می کند، همچنین در این پوشه تمام موارد مورد نیاز برای یک spa کوچک مبنی بر react (که می تواند کار کند) را قرار خواهد داد. فرآیند ایجاد ممکن است چند دقیقه طول بکشد زیرا باید تعدادی از پکیج های npm که برای پروژه مورد نیاز است را دانلود کند.بعد از اتمام راه اندازی برنامه، می توانید آن را با دستورات زیر اجرا کنید: # move into the new directory cd react-auth0 # start the development server npm startپس از چند ثانیه، مرورگر پیش فرض شما باز خواهد شد و صفحه زیر را مشاهده خواهید کرد:این بدان معناست که برنامه در حال کار است و آماده است تا شروع کنید.ایجاد برنامه auth0از آنجایی که نیاز به دسترسی به web api امن با auth0 دارید، اولین کاری که باید انجام دهید این است که برنامه auth0 را ایجاد و پیکربندی کنید. در بخش قبلی، از curl به عنوان برنامه machine to machine استفاده کردید. علاوه بر این، از همان نوع برنامه برای تست یکپارچه سازی استفاده کردید.حالا شما یک کلاینت react spa ایجاد می کنید. به این ترتیب، کلاینت شما به وسیله تعامل کاربر هدایت می شود. بنابراین باید به صفحه برنامه ها و داشبورد auth0 بروید و دکمه create application را بزنید.بعد از کلیک روی دکمه، داشبورد به شما فرمی می دهد که باید نام برنامه خود را تایپ کرده و نوع آن را انتخاب کنید. در این آموزش، می توانید نام برنامه را react auth0 گذاشته و نوع آن را هم single page web applications انتخاب کنید.پس از آن می توانید روی دکمه create کلیک کنید. با کلیک روی آن داشبوری ایجاد خواهد شد که شما را به تبی به نام quick start درون برنامه جدیدتان هدایت می کند. از آنجا که قصد دارید نحوه ادغام برنامه react با asp.net core 2.0 api را در این آموزش یاد بگیرید، نیازی نیست که دستورالعمل ها را دنبال کنید. در حال حاضر آنچه که باید انجام دهید این است که در تب settings فیلد urlهای بازگشتی مجاز را با http://localhost:3000 تنظیم کنید.ادغام برنامه react با auth0حالا که یک برنامه auth0 ایجاد کرده اید، آماده اید تا برنامه react خود را با auth0 ادغام کنید.در اولین مرحله، باید پکیج auth0.js npm را نصب کنید. می توانید این کار را با تایپ کردن دستور زیر در پوشه روت پروژه خود انجام دهید: npm install --save auth0-jsکاربران شما از طریق صفحه ورود هاست auth0 احراز هویت می شوند. این روش ساده ترین و امن ترین راه برای امنیت برنامه شماست. به طور خلاصه، این سرویس کاربران را به صفحه ورود هاست توسط auth0 هدایت می کند که در آن فرآیند احراز هویت اتفاق می افتد. پس از آن، کاربران با استفاده از توکن هایی که می توانند برای استخراج اطلاعات حساس از asp.net core 2.0 api شما استفاده کنند، دوباره به برنامه شما هدایت می شوند.بعد از نصب پکیج auth0-js، باید فایلی به نام auth0config.js در پوشه src برنامه react خود ایجاد کنید. محتوای زیر را به این فایل اضافه کنید: export const auth_config = { domain: 'your_auth0_domain', clientid: 'your_client_id', redirecturi: 'http://localhost:3000', audience: 'https://onlinebookstore.mycompany.com' };همان طور که می بینید، شما شیء ای را که شامل خواص پیکربندی برنامه auth0 در این فایل است را تعریف کرده اید. توجه داشته باشید که باید your_auth0_domain و your_client_id را با مقادیر مربوط به برنامه auth0 خود جایگزین کنید. بنابراین به صفحه برنامه ها در مدیریت داشبورد auth0 رجوع کنید، برنامه ای که در بخش قبل ایجاد کرده اید را انتخاب کنید، تب settings را انتخاب کنید، و از مقادیر client id و domain برای جایگزینی این متغیرها استفاده کنید.این فایل همچنین شامل دو ویژگی دیگر نیز هست:1. redirecturi: این ویژگی حاوی urlای است که کاربران شما را پس از فرآیند احراز هویت به آن هدایت می کند. در حال حاضر، شما صفحه اصلی برنامه react خود را تنظیم کرده اید. با این حال، به زودی آن را تغییر خواهید داد.2. audience: این ویژگی شامل تعیین کننده (identifier) منحصربه فرد auth0 api است که در اول این مقاله ایجاد کردید.ایجاد سرویس احراز هویتحالا باید ماژول جاوااسکریپت دیگری ایجاد کنید. این ماژول را در یک فایل جدید به نام authservice.js در پوشه src با کد زیر تعریف خواهید کرد: import auth0 from 'auth0-js'; import { auth_config } from './auth0config'; export default class authservice { auth0 = new auth0.webauth({ domain: auth_config.domain, clientid: auth_config.clientid, redirecturi: auth_config.redirecturi, audience: auth_config.audience, responsetype: 'token id_token', scope: 'openid' }); login() { this.auth0.authorize(); } }همان طور که می بینید، فضای نام auth0 از پکیج auth0-js و شیء auth_config از ماژول تعریف شده در بخش قبلی وارد شده اند. سپس از سازنده ()auth0.webauth برای ایجاد نمونه ای از کلاینت auth0 استفاده می کنید. برای ایجاد این نمونه، ویژگی های برنامه auth0 خود را به این سازنده ارائه می دهید. علاوه بر این ویژگی ها، مقادیری برای ویژگی responsetype (که نوع پاسخی که از سرور مجوز دسترسی می خواهید را تعریف می کند) و برای scope (که تعریف می کند شما منتظرید سرور sub claim بازگشتی را به برنامه یتان ارسال کند) ارائه می دهید.در نهایت، متد ()login را تعریف می کنید که ()auth0.authorize را بسته بندی (wrap) می کند.با این کار، حالا آماده اید تا از کلاس authservice در برنامه خود استفاده کنید. بنابراین فایل app.js را باز کرده و کد خود را با کد زیر عوض کنید: import react, { component } from 'react'; import logo from './logo.svg'; import './app.css'; import authservice from './authservice'; class app extends component { constructor() { super(); this.authservice = new authservice(); } render() { this.authservice.login(); return ( welcome to react to get started, edit src/app.js and save to reload. ); } } export default app;در این نسخه جدید، شما کلاس authservice را وارد کردید، یک سازنده به کامپوننت app اضافه کردید، و نمونه ای از authservice ساختید. پس از آن تعریف کردید که برنامه شما هنگام رندر کردن (مثلا فراخوانی متد ()login در متد ()render کامپوننت) فرآیند احراز هویت را راه اندازی کند.حالا وقتی برنامه را اجرا کنید، دیگر صفحه اصلی create-react-app را مشاهده نخواهید کرد، در عوض صفحه ورود هاست auth0 را می بینید که همانند تصویر زیر است:ایجاد کاربران برای برنامه reactممکن است تعجب کنید: چطور می توانید کاربران مجاز را به برنامه خود اضافه کنید؟ با auth0 دو گزینه دارید. مورد اول که رایج ترین گزینه است، این است که اجازه دهید بازدیدکنندگان خودشان توسط ارائه فرم ثبت نام که auth0 نشان می دهد یا با انتخاب یکی از ارائه دهندگان تشخیص هویت چندگانه که به راحتی می توانید در برنامه auth0 خود تنظیم کنید، ثبت نام کنند.گزینه دوم این است که کاربران از طریق داشبورد auth0 به صورت دستی ثبت نام کنند. می توانید این کار را با رفتن به صفحه users در مدیریت داشبورد auth0 انجام دهید. در آنجا باید روی دکمه create user در گوشه سمت راست بالا کلیک کنید. این کار باعث می شود داشبورد فرمی را نشان دهد که اعتبار کاربری جدید را ارائه دهید.مدیریت sessionها در برنامه reactتا اینجا شما فقط برنامه ای را دارید که وقتی کاربران به صفحه اصلی دسترسی پیدا می کنند، به صفحه ورود هاست auth0 هدایت می شوند.حتی اگر کاربران قبلا احراز هویت شده باشند، صفحه اصلی شما آن ها را دوباره به صفحه ورود هاست auth0 هدایت می کند. این عمل رخ می دهد زیرا برنامه شما یک درخواست بدون شرط برای احراز هویت کاربر دارد. برای رفع این حلقه بی نهایت، نیاز به شیوه ای برای ردیابی کاربرانی که احراز هویت شده اند و نشده اند، دارید. به عبارت دیگر، باید session کاربران را روی برنامه react خود کنترل کنید.برای انجام این کار، باید چند متد در کلاس authservice اضافه کنید: export default class authservice { // ... handleauthentication(history) { this.auth0.parsehash((err, authresult) => { if (authresult && authresult.accesstoken && authresult.idtoken) { this.setsession(authresult); history.push("/"); } else if (err) { console.log(err); } }); } setsession(authresult) { let expiresat = json.stringify((authresult.expiresin * 1000) + new date().gettime()); localstorage.setitem('access_token', authresult.accesstoken); localstorage.setitem('id_token', authresult.idtoken); localstorage.setitem('expires_at', expiresat); } isauthenticated() { let expiresat = json.parse(localstorage.getitem('expires_at')); return new date().gettime() < expiresat; } }متد اول، به نام ()handleauthentication، نتیجه احراز هویت از صفحه ورود auth0 را با استفاده از متد auth0.parsehash() ارائه شده توسط کتابخانه auth0-js تحلیل می کند. اگر نتیجه معتبری دریافت شود، یک session جدید ایجاد می شود و کاربر به صفحه اصلی برنامه شما هدایت می شود. متد ()handleauthentication از پارامتر history برای هدایت کاربران شما استفاده می کند. علاو بر این متد ()handleauthentication متد ()setsession را فراخوانی می کند تا یک session جدید ایجاد کند. در واقع این متدی است که اطلاعات در مورد کاربر جاری را ذخیره می کند تا برنامه react شما بتواند بررسی کند که آیا این session یک session فعال است یا نه.همان طور که می بینید، ()setsession اطلاعات session را در localstorage مرورگر ذخیره می کند. این بدان معناست که اطلاعات کاربر حتی اگر مرورگر را ببندد حفظ می شود. اگر رفتار متفاوتی را می خواهید، می توانید این اطلاعات را در sessionstorage ذخیره کنید، به طوری که مرورگر اطلاعات مربوط به session را هنگام بسته شدن پاک می کند.آخرین متد، به نام ()isauthenticated، بررسی می کند آیا اطلاعات session ذخیره شده در localstorage هنوز معتبر است.افزودن مسیریابی (routing) به برنامه reactقبل از استفاده از متدهای جدید، باید پشتیبانی routing را به برنامه خود اضافه کنید. این کار به شما اجازه می دهد تا مسیر ایجاد session را از نقطه واقعی دسترسی برنامه جدا کنید. به عبارت دیگر، شما باید url دیگری را تعیین کنید که سرویس احراز هویت (auth0) کاربران شما را به آنجا هدایت کند.برای انجام این کار، باید url بازگشتی دیگری را در پیکربندی برنامه auth0 خود ارائه دهید. بنابراین، به صفحه applications در مدیریت داشبورد auth0 بروید، برنامه خود را مجددا انتخاب کنید و مقادیر را در فیلد urlهای بازگشتی مجاز به http://localhost:3000/startsession تغییر دهید.با استفاده از این تنظیمات شما به auth0 می گویید که url ارائه شده مکان معتبری برای هدایت کاربران پس از فرآیند احراز هویت است. این کار یک اقدام امنیتی برای هدایت مجدد غیرمجاز است.همچنین باید urlبازگشتی جدیدی را در فایل auth0config.js تعیین کنید: export const auth_config = { domain: 'your_auth0_domain', clientid: 'your_client_id', redirecturi: 'http://localhost:3000/startsession', audience: 'https://onlinebookstore.mycompany.com' }این تنظیمات برنامه شما را برای اطلاع رسانی auth0 پیکربندی می کند که کاربر پس از فرآیند احراز هویت باید به این url هدایت شود.سپس می توانید پشتیبانی routing را به برنامه react خود با نصب react-router اضافه کنید. برای انجام این کار، دستور زیر را در پوشه روت پروژه بنویسید: npm install --save react-router-domحالا می توانید routing را برای برنامه react خود پیکربندی کنید.اولین کاری که باید انجام دهید این است که کد index.js را همانند دستور زیر تغییر دهید: import react from 'react'; import reactdom from 'react-dom'; import './index.css'; import app from './app'; import registerserviceworker from './registerserviceworker'; import {browserrouter} from 'react-router-dom'; reactdom.render( , document.getelementbyid('root')); registerserviceworker();در اینجا، کامپوننت browserrouter را از ماژول react-router-dom وارد کرده و کامپوننت app را در آن قرار دهید. این امر به کامپوننت app قابلیت routing را می دهد.تکمیل ویژگی مدیریت sessionبا تمام آماده سازی های قبلی، می توانید کد کامپوننت app را با دستور زیر جایگزین کنید: import react, { component } from 'react'; import './app.css'; import authservice from './authservice'; import {switch, route} from 'react-router-dom'; import home from './home' class app extends component { constructor() { super(); this.authservice = new authservice(); } renderhome() { let resultcomponent = ; if (!this.authservice.isauthenticated()) { this.authservice.login(); resultcomponent = redirecting to the authentication service... } return resultcomponent; } startsession(history) { this.authservice.handleauthentication(history); return starting session...; } render() { return ( my bookstore this.renderhome()}/> this.startsession(history)}/> ); } } export default app;تغییرات اصلی در این فایل مربوط به تعریف دو مسیر با استفاده از کامپوننت های switch و route ارائه شده توسط ماژول react-router-dom هستند. بنابراین شما مسیر صفحه اصلی (که منطبق با مسیر روت است) و مسیر ایجاد session (که منطبق با مسیر startsession/ است) را دارید. هر دو مسیر با توابع رندر map شده اند.مسیر ایجاد session با تابعی مپ شده است که متد فراخوانی شده ()startsession را به عنوان پارامتر به history مرورگر ارسال می کند. متد ()startsession متد ()handleauthentication از کلاس authservice را فراخوانی می کند. این متد یک عنصر در حال انتظار react را بازمی گرداند که در حالی که فرآیند آسکرون (asynchronous) در حال اجراست نشان داده می شود.مسیر صفحه اصلی با تابعی مپ شده است که متد ()renderhome را فراخوانی می کند. متد ()renderhome کامپوننت home را در صورت احراز هویت کاربر باز می گرداند. در غیر این صورت متد ()login را فراخوانی کرده و یک عنصر در حال انتظار react را باز می گرداند.حالا کاربران شما احراز هویت شده و به محتوای کامپوننت home هدایت می شوند.اتصال برنامه و web api امنبرای تکمیل فرآیند احراز هویت، باید کامپوننت home react را ایجاد کنید. شما از این کامپوننت برای اتصال کلاینت خود به web api ارائه لیست کتاب ها استفاده می کنید. بنابراین فایلی به نام home.jsx در پوشه /src/. با کد زیر ایجاد کنید: import react from 'react'; import './home.css' class home extends react.component { constructor() { super(); this.state = {booklist: []}; } componentdidmount() { fetch("/api/books", {headers: new headers({ "accept": "application/json" })}) .then(response => response.json()) .then(books => this.setstate({booklist: books})) .catch(error => console.log(error)) } render() { let booklist = this.state.booklist.map((book) => {book.author} - {book.title}); return {booklist} ; } } export default home;در سازنده، وضعیت اولیه کامپوننت را تعریف می کنید. این وضعیت در متد ()render استفاده خواهد شد تا داده های موجود در ویژگی booklist خود را به عنوان لیست نامرتب html نشان دهد. این قبیل اطلاعات با فراخوانی api/books/ از طریق ()fetch پس از نصب کامپوننت روی dom (componentdidmount) پس گرفته می شوند.همچنین به ایمپورت stylesheetی home.css توجه کنید. ایمپورت کردن فایل css به ماژول جاوااسکریپت ممکن است کمی عجیب به نظر برسد، زیرا با کد جاواسکریپت زیاد مواجه می شوید. با این حال به لطف محیط توسعه ارائه شده توسط create-react-app، می توانید از سینتکس مشابهی حتی برای فایل های css استفاده کنید. به شما اجازه می دهد تا از این روند درون کامپوننت react خود، کلاس ها و دیگر قوانین تعریف شده در فایل css استفاده کنید. همچنین به شما اجازه می دهد استایل های خاص کامپوننت را به تعریف کامپوننت خودش محصور کنید.برای تعریف این قوانین css، فایل home.css را در پوشه /src/. با دستور زیر ایجاد کنید: ul { list-style-type: none; text-align: left; margin-left: 20%; } ul h3 { display: inline; }اگر حالا سعی کنید برنامه را اجرا کنید، متوجه خواهید شد که کامپوننت home هنوز کار نمی کند. با توجه به سیاست اعمال شده توسط مرورگرها، برنامه react نمی تواند یک درخواست http را به یک سرور در یک دامنه دیگر بدون پیکربندی مناسب ارسال کند.در صورتی که دستورالعمل های بخش یک این مجموعه را دنبال کرده باشید، باید برنامه react خود را برای فراخوانی برنامه web api فعال کنید. در حقیقت هر دو برنامه وب هستند ولی روی پورت های متفاوت اجرا می شوند: برنامه react روی پورت 3000 اجرا می شود در حالی که web api روی پورت 63939 اجرا می شود.در محیط توسعه، می توانید ارتباط بین دو برنامه را فقط با افزودن مقدار proxy در فایل package.json file فعال کنید، همان طور که در زیر نشان داده شده است: { "name": "react-auth0", "version": "0.1.0", "private": true, "proxy": "http://localhost:63939", ... }در محیط تولید، باید رویکرد متفاوتی را اتخاذ کنید، مثل قرار دادن دو برنامه تحت همان دامنه، با فعال کردن cors، یا با افزودن یک پروکسی معکوس.حتی با این تغییر، هنوز قادر به دریافت اطلاعات از web api نیستید، زیرا محفوظ شده است و ما نیاز به ارائه توکن دسترسی داریم. بنابراین کلاس authservice را با افزودن متدی که توکن دسترسی مربوط به session جاری را بازمی گرداند، افزایش می دهید: export default class authservice { ... getaccesstoken() { const accesstoken = localstorage.getitem('access_token'); if (!accesstoken) { throw new error('no access token found'); } return accesstoken; } }حالا شما از متد جدید برای دریافت توکن دسترسی استفاده خواهید کرد و آن را به web api به عنوان هدر مجوز ارسال کنید، همان طور که در کد زیر نشان داده شده است: componentdidmount() { const accesstoken = this.props.auth.getaccesstoken(); fetch("/api/books", {headers: new headers({ "accept": "application/json", "authorization": `bearer ${accesstoken}` })}) .then(response => response.json()) .then(books => this.setstate({booklist: books})) .catch(error => console.log(error)) }درنهایت، حالا می توانید لیست کتاب ها را به دست آورده و آن ها را نمایش دهید:مدیریت خروج (logout)درنهایت شما دکمه خروج را اضافه خواهید کرد تا به کاربر اجازه دهید با زدن آن از برنامه خارج شود. برای انجام این کار، متد logout() را به کلاس authservice اضافه کنید، همانند دستور زیر: export default class authservice { // ... logout() { localstorage.removeitem('access_token'); localstorage.removeitem('id_token'); localstorage.removeitem('expires_at'); window.location.href = '/'; } }این متد به راحتی اطلاعات session را از localstorage حذف کرده و کاربر را به صفحه روت هدایت می کند.این متد را در کامپوننت app مانند کد زیر استفاده کنید: class app extends component { // ... createlogoutbutton() { let button = null; if (this.authservice.isauthenticated()) { button = this.authservice.logout()}>logout; } return button; } render() { let logoutbutton = this.createlogoutbutton(); return ( {logoutbutton} my bookstore this.renderhome()}/> this.startsession(history)}/> ); } }در اینجا، وقتی کاربر احراز هویت می شود، یک عنصر reactی logoutbutton اضافه می شود تا کامپوننت app را علامت گذاری کند. وقتی دکمه کلیک می شود متد logout() را فراخوانی کرده، به کاربر اجازه می دهد اطلاعات session را حذف کند. در پایان، کاربر نامعتبر شما به url روت برنامه هدایت خواهد شد.خلاصهدر بخش دوم این مجموعه، شما کلاینتی مبتنی بر react برای برنامه web api پیاده شده در بخش یک را ایجاد کردید. نحوه پیکربندی کلاینت در داشبورد auth0 و نحوه ادغام کد آن با کتابخانه auth0-js را بررسی کردید. سپس کلاینت react را به web api متصل کردید و درنهایت لیست کتاب های بازگشتی توسط سرور را نمایش دادید. در صورت نیاز، می توانید کد نهایی را از githubدانلود کنید. به اشتراک بگذارید :

تفاوت بین hashing و encrypting چیست؟

درخواست حذف این مطلب
hashing و encrypting دو کلمه هستند که اغلب به صورت اشتباه به جای هم استفاده می شوند. آیا شما تفاوت بین این دو و شرایطی که باید از آن ها استفاده کنید را می دانید؟ در این مقاله تفاوت های مهم بین هش کردن (hashing) و رمزگذاری (encrypting) و جایگاه مناسب استفاده از آن ها را بررسی می کنیم. hashing چیست؟hash یک رشته یا اعداد تولید شده از رشته ای متنی است. رشته یا عدد حاصل شده طول ثابتی دارد و با تغییرات کوچک در ورودی بسیار گسترده است. الگوریتم های hashing بسیار خوبی طراحی شده اند، به طوری که برگرداندن hash به رشته متنی اصلی غیرممکن است.الگوریتم های محبوبmd5: md5 شناخته شده ترین تابع hashing است. این الگوریتم یک مقدار هش 16 بایتی تولید می کند که معمولا به عنوان یک عدد 32 رقمی هگزادسیمال بیان می شود. اخیرا چند مورد آسیب پذیر در md5 کشف شده است و جداولی منتشر شده اند که به اشخاص اجازه می دهند تا هش های md5 را بدون saltهای خوبی تولید کنند.sha: سه الگوریتم sha مختلف وجود دارد؛ sha-0، sha-1 و sha-2. sha-0 به ندرت مورد استفاده قرار می گیرد، زیرا حاوی خطایی است که با sha-1 اصلاح شده است. sha-1 رایج ترین الگوریتم sha است و یک مقدار هش 20 بایتی تولید می کند.sha-2 :شامل مجموعه ای از 6 الگوریتم hashing است و قدرتمندترین نوع sha است. sha-256 یا بالاتر برای مواردی که امنیت بسیار حیاتی است توصیه می شوند. sha-256 یک مقدار هش 32 بایتی توید می کند.مواقعی که باید از hashing استفاده کرد.hashing یک راه ایده آل برای ذخیره کلمات عبور است زیرا هش ها ذاتا طبیعت یک طرفه دارند. وقتی کلمات عبور در فرمت هش ذخیره می شوند، دسترسی به داد های خام برای معکوس کردن آن بسیار دشوار می شود (فرض بر این است که از الگوریتم قدرتمند hashing و salt مناسبی برای تولید آن استفاده شده است).هنگام ذخیره رمز عبور آن را با salt هش کنید، و سپس در تلاش بعدی برای ورود به سیستم، رمز عبوری که کاربر وارد می کند را هش کرده و آن را با هش ذخیره شده مقایسه کنید. اگر هر دو با هم مطابقت داشته باشند، برنامه مطمئن می شود که کاربر وارد شده رمز عبور را صحیح وارد کرده است.hashing برای استفاده در هر موردی که می خواهید مقداری را با یک مقدار ذخیره شده مقایسه کنید عالی است اما نمی توانید موارد نمایشی ساده خود را به دلایل امنیتی ذخیره کنید. مورد دیگری که می توان از hashing استفاده کرد برای بررسی چند رقم آخر کارت اعتباری است که با ورودی کاربر مطابق باشد یا برای مقایسه هش یک فایل با هش ذخیره شده آن در پایگاه داده تا برنامه مطمئن شود که آن ها یکسان هستند.encryption چیست؟encryption یا رمزگذاری، داده ها را به مجموعه ای از کاراکترهای غیرقابل خواندن تبدیل می کند که دارای طول ثابت نیستند. تفاوت اصلی بین encryption و hashing این است که اگر شما کلید درست را داشته باشید، رشته های رمزگشایی شده را می توان به فرم رمزگشایی اولیه تبدیل کرد.دو نوع اصلی رمزگذاری وجود دارد؛ رمزگذاری کلید متقارن و رمزگذاری کلید عمومی. در رمزگذاری کلید متقارن، کلید رمزگذاری و رمزگشایی دقیقا یکسان است. این همان چیزی است که وقتی اکثر مردم در مورد رمزگذاری فکر می کنند، به ذهن آ ن ها خطور می کند.رمزگذاری کلید عمومی با مقایسه دو کلید متفاوت صورت می گیرد، یکی برای رمزگذاری رشته (کلید عمومی) و یکی برای رمزگشایی آن (کلید خصوصی) استفاده می شود. کلید عمومی برای هر کسی که از رمزگذاری پیام ها استفاده می کند در دسترس است، با این حال تنها گیرنده ای که از قبل مشخص شده است می تواند به کلید خصوصی دسترسی داشته باشد، و بنابراین فقط او توانایی رمزگشایی پیام ها را دارد.الگوریتم های محبوبaes: وقتی پای رمزگذاری کلید متقارن به میان می آید، aes "استاندارد طلایی" است و استفاده از آن برای اکثر موارد، با کلیدی به اندازه 256 بیت، توصیه می شود.pgp: pgp محبوب ترین الگوریتم رمزگذاری کلید عمومی است.موارد استفاده از encryptionرمزگذاری فقط وقتی که رمزگشایی نتیجه پیام ضروری است مورد استفاده قرار می گیرد. مثلا وقتی شما می خواهید پیام امنی را برای شخص دیگری در آن سوی دنیا بفرستید، شما به جای hashing نیاز به رمزگذاری دارید، چرا که اگر گیرنده نتواند پیام را رمزگشایی کند، آن پیام به هیچ دردی نمی خورد.اگر مقادیر خام برای برنامه یا کار شما نیاز به شناخت نداشته باشند، بنابراین همیشه باید hashing استفاده شود، زیرا امن تر است.اگر از موردی استفاده می کنید که به این نتیجه رسیده اید که رمزگذاری ضروری است، بنابراین باید بین رمزگذاری کلید عمومی و متقارن یکی را انتخاب کنید. رمزگذاری متقارن عملکرد بهبودیافته ای را ارائه می دهد و استفاده از آن ساده تر است، با این حال کلید باید توسط داده های رمزگذاری و رمزگشایی سیستم/نرم افزار/شخص شناخته شده باشد.اگر با کسی در آن سوی دنیا ارتباط برقرار کردید، لازم است قبل از اشتراک گذاری پیام های ایمن، راه امنی را برای ارسال کلید آن ها پیدا کنید. اگر قبلا شیوه امنی را برای ارسال کلید رمزگذاری داشتید، بنابراین پیام های ایمن خود را، به جای اینکه در وهله اول از رمزگذاری متقارن استفاده کنید، از طریق آن کانال ارسال کنید.بسیاری از مردم برای رهایی از سختی های مربوط به اشتراک کلید، ابتدا کلید خود را به وسیله کلید عمومی برای شخص مورد نظر ارسال می کنند، سپس برای ادامه ارتباط از روش رمزنگاری متقارن استفاده می کنند. به اشتراک بگذارید :

نحوه docker کردن برنامه asp.net core

درخواست حذف این مطلب
دلایل زیادی وجود دارد که ممکن است شما بخواهید برنامه asp.net core را داکر کنید. اما در نهایت این کار باعث راحتی شما می شود. این کار برای جداسازی اجزا عالی است، مخصوصا اگر در حال ساخت یک میکروسرویس یا برنامه ریزی برای اعمال برنامه خود روی فضای ابری هستید. بنابراین اگر می خواهید کارتان راحت تر شود، این آموزش را جهت یادگیری نحوه داکر کردن برنامه asp.net core دنبال کنید. شروع کار: داکر کردن برنامه asp.net core1. یک برنامه asp.net core web application جدید در ویژوال استودیو 2017 ایجاد کرده و ok را کلیک کنید:2. در صفحه بعد، (web application (model-view-controller یا هر نوعی که می خواهید را انتخاب کنید، در حالی که مطمئن شوید asp.net core 2.0 از منوی کشویی انتخاب شده است. سپس چک باکس enable docker support را تیک بزنید. فعال کردن این گزینه لیست کشویی os را فعال می کند. در اینجا windows را انتخاب کرده و روی دکمه ok کلیک کنید:اگر پیام زیر را مشاهده کردید، باید محفظه (container) یا همان کانتینر را به windows تغییر دهید، این پیام احتمالا به این دلیل است که شما کانتینر پیش فرض را روی docker as linux تنظیم کرده اید:اگر در taskbar روی آیکون docker راست کلیک کنید، می بینید که گزینه ای برای فعال سازی کانتینر windows وجود دارد. می توانید با کلیک بر روی گزینه switch to windows containers آن را تغییر دهید:با توجه به سرعت خط شما و تنظیمات سخت افزاری کامپیوترتان، تغییر به windows containers ممکن است چند دقیقه زمان صرف کند تا کامل شود. با این وجود شما روی این گزینه کلیک نمی کنید، ویژوال استودیو هنگام انتخاب پلت فرم os به عنوان ویندوز، از شما می خواهد که آن را به windows containers تغییر دهید. دلیلی وجود دارد که ما windows containers را به عنوان سیستم عامل انتخاب نمی کنیم. این دلیل را در مقاله های بعدی، هنگام کار با docker hub و ایجاد خودکار آن، روشن می کنیم.بعد از اینکه برنامه asp.net core خود را ساختید، در solution explorer پروژه خود موارد زیر را مشاهده خواهید کرد:پشتیبانی داکر که با ویژوال استودیو اضافه شده است نه تنها در قالب dockerfile است، بلکه در قالب اطلاعات پیکربندی داکر نیز قرار دارد. این اطلاعات در فایل سراسری docker-compose.yml در سطح سولوشن هستند:3. بر روی dockerfile در سولوشن کلیک کنید، می بینید که چندان پیچیده به نظر نمی رسد. به یاد داشتته باشید که dockerfile فایلی است که image شما را ایجاد می کند. image یک قالب فقط خواندنی است که نحوه ایجاد یک کانتینر داکر را مشخص می کند. بنابراین، dockerfile شامل مراحل مورد نیاز برای تولید image و اجرای آن است. دستورالعمل ها در dockerfile لایه ها را در image ایجاد می کنند. این بدان معناست که اگر هر چیزی در dockerfile تغییر کند، هنگامی که image بازسازی (rebuilt) می شود، تنها لایه هایی که تغییر کرده اند بازسازی خواهند شد. dockerfile به شرح زیر است: from microsoft/aspnetcore:2.0-nanoserver-1709 as base workdir /app expose 80 from microsoft/aspnetcore-build:2.0-nanoserver-1709 as build workdir /src copy *.sln ./ copy dockerapp/dockerapp.csproj dockerapp/ run dotnet restore copy . . workdir /src/dockerapp run dotnet build -c release -o /app from build as publish run dotnet publish -c release -o /app from base as final workdir /app copy --from=publish /app . entrypoint ["dotnet", "dockerapp.dll"]وقتی نگاهی به منوی ویژوال استودیو 2017 می اندازید، متوجه می شوید که دکمه run به docker تغییر کرده است:4. روی دکمه docker برای دیباگ کردن برنامه asp.net core کلیک کنید، متوجه خواهید شد که چنیدن pop up در پنجره خروجی وجود دارند. از موارد خاص آن آدرس ip است که در انتها نشان داده می شود. (برای ما http://172.24.12.112 است، ممکن است برای شما متفاوت باشد):وقتی مرورگر راه اندازی می شود، می بینید که برنامه asp.net core در آدرس ip لیست شده در پینجره خروجی قبلی است. حالا برنامه asp.net core در داخل یک windows docker اجرا می شود:این فوق العاده است و واقعا شروع کار با آن آسان می باشد. اما برای داکر کردن یک برنامه asp.net coreای که از قبل وجود دارد باید چه کار کرد؟نحوه افزودن پشتیبانی docker به برنامه net core. موجودتصور کنید یک برنامه asp.net core بدون پشتیبانی داکر دارید. برای افزودن پشتیبانی داکر به این برنامه موجود، به سادگی آن را از منوی محتوا اضافه کنید:برای افزودن پشتیبانی داکر به یک برنامه asp.net coreای که از قبل موجود است، باید مراحل زیر را انجام دهید:1. روی پروژه در solution explorer کلیک راست کنید.2. روی آیتم add کلیک کنید.3. از منوی باز شده روی docker support کلیک کنید:4. حالا ویژوال استودیو 2017 از شما می پرسد که سیستم عامل هدف چه خواهد بود؟ ما قصد داریم تا ویندوز را انتخاب کنیم:5. بعد از کلیک روی دکمه ok، ویژوال استودیو 2017 شروع به اضافه کردن پشتیبانی داکر به پروژه شما می کند:در حقیقت بسیار ساده است که برنامه های asp.net coreای ایجاد کنید که پشتیبانی داکر را داشته باشند، و حتی آسان تر از آن پشتیبانی داکر را به برنامه های asp.net core موجود اضافه کنید.در نهایت اگر به هر مشکلی، مثل مشکلات دسترسی به فایل، برخورد کردید، مطمئن شوید که نرم افزار آنتی ویروس از اسکن کردن dockerfile شما خودداری کند. همچنین مطمئن شوید که ویژوال استودیو را در حالت administrator اجرا کرده باشید. به اشتراک بگذارید :

10 نکته ساده برای بهبود تست کاربر

درخواست حذف این مطلب
1.هرچه زودتر تست کردن را شروع کنید.هرچه زودتر تست کنید ایجاد تغییرات، آسان تر خواهد بود بنابراین تست کردن تاثیر بیشتری روی کیفیت نهایی محصول خواهد داشت.نکات :منتظر یک محصول کاملا شکل گرفته نباشید تا زمانی که می دانید کاربر چه چیز هایی نیاز دارد می توانید مدل ها و نمونه های اولیه ی نیمه کاره را تست کنید. زمانی که می دانید چهقسمت از وظایف کاربری باید تست شوند اعتبارسنجی طراحی خود را شروع کنید.در کنارش می توانید از تست قابلیت استفاده ( guerilla usability ) را شامل آن کنید. زمانی که یک نمونه اولیه دارید افرادی را پیدا کنید که حداقل مشابه کاربران مورد نظر شما باشند و تست کردن را شروع کنید.2. اهداف خود از آزمایش را مشخص کنید.دقت داشته باشید که اهداف خود را مشخص کنید. مطمئن باشید که سوالاتی می پرسید که به پاسخ آن ها نیاز دارید پیش از شروع تست کاربران نیاز است که از خودتان بپرسید:چه چیزی قرار است از این تست بدست آورم؟و سپس بعد از اینکه متوجه شدید چه چیزی نیاز دارید که بدانید، می توانید پرسش نامه یا نظرسنجی خود را از موضوعی که درنظر دارید را تهیه کنید.3. سوالات باز (بدون قید وبند) بپرسید.سوالات بسته پاسخ های محدودی دارند. برخی از آن ها ممکن است دو حالت داشته باشند(بله و خیر) و برخی نهایتا چند انتخاب دارند. سوالات باز به شما اجازه می دهد که مواردی را کشف کنید که حتی تا به حال به آن ها فکر نکرده اید و همچنین به شما اجازه می دهد که نظرات مشتریان خود را بدانید.4. طراحی را به عنوان یک فرایند پویا تلقی کنید.بسیاری از طراحان فرایند طراحی را به عنوان یک فرایند خطی درنظر می گیرند که با جستجوی کاربر شروع می شود و دارای یک مرحله ی نمونه ی اولیه است و با تست کردن تمام می شود اما این فرایند باید به صورت یک فرایند پویا درنظر گرفته شود.بازخورد های کاربران در مرکز فرایند طراحی ux است.تست کردن به اندازه ی کد زدن ، طراحی یا جمع آوری ملزومات در چرخه ی طراحی محصولات و توسعه جای خود را دارد. این مهم است که در هر مرحله از این فرایند اگر منابع در دسترس هستند تست کاربران را داشته باشیم.5. با کاربران واقعی تست کنیدطراحی خود را بر پایه تست ها با کاربران واقعی اعتبارسنجی کنید. اطمینان حاصل کنید که تست خود را روی کاربرانی انجام می دهید که از دوستان و یا از اعضای خانواده ی شما نیستند. شما نیاز به کاربران مستقل و بی طرف دارید.نکته: وقتی که می خواهید تست ux انجام دهید گاهی مهم است که با ایده ی یکی از کاربران در بدترین حالت سناریو آغاز کنید( برای مثال کسی که هیچ اطلاعی از محصولات شما ندارد وقتی وارد سایت می شوند موجب سردرگمی آنها می شود و غیره) با مشاهده ی این شخص که محصولات شما را استفاده می کند به راحتی می توانید قسمت هایی از اپلیکیشن که به اندازه ی کافی واضح و روشن نیستند را شناسایی کنید.6. کاربران روی وظایف تمرکز کنند.زمانی که می خواهیم وظایفی را برای کاربران تعیین کنیم بهتر است که از آن ها نظراتشان را درباره ی محصول بپرسید و یا از آن ها بخواهید به هر محصول امتیاز بدهند. اما بهتر است که برای کاربران وظایفی را بنویسید بنابراین درلحظه می توانید واکنش آنها در نقاط متقابل را دریافت کنید.اگر یک نسخه ی دوباره طراحی شده از صفحه ی اصلی وب سایت را تست کنید:بد: نظر شما درباره وب سایت ما چیست؟ نمره ای که می دهید از 10 چند است؟ قابلیت های وب سرویس ازنظر شما چگونه است؟بهتر: در کجای صفحه که برای اولین بار وارد شدید کلیک کردید؟7. پیگیری رفتار هااین مهم است که بین گوش کردن به کاربران و مشاهده ی کاربران تفاوت قائل شوید درحالی که هردو روش اطلاعات سودمندی در اختیار طراحان ux میگذارد. اشتباهی که بسیاری از طراحان ux می کنند این است که به شدت روی گوش کردن تمرکز می کنند درحالی که مشاهده ی کاربران اطلاعات بیشتری را در زمان کمتری می دهد.8. همه ی افراد تیم را در فرایند شرکت دهید.این مهم است که همه ی تیم تولیدی را در تست کردن شرکت دهید داشتن شانس مشاهده ی کاربران به همه ی تیم کمک می کند تا مشکلات را متوجه شوند و نظرات کاربران را متوجه شوند.نکاتاین که همه ی افراد تیم در جلسات تست کردن شرکت کنند غیرممکن است بنابراین می توانید یک فیلم از جلسات تست کردن ضبط کنید و در اختیار همکارانتان بگذارید.هرکسی که در تست کردن شرکت می کند حتما باید مواردی که می آموزد را ثبت و یادداشت برداری کند در انتهای جلسات باید همه ی یادداشت هارا خلاصه برداری کنید.9. به کیفیت فکر کنید نه کمیتبسیاری از شرکت ها محصولات خود را اصلا تست نمی کنند و یا فقط بعد از انتشار آن هارا تست می کنند زیرا می ترسند که این کار هزینه بردار باشد و یا زمان زیادی را از آن ها بگیرد اما حقیقت آن است که تست کردن نیاز ندارد که زمان بر و یا هزینه بردار باشد. تحقیق nngroup نشان می دهد که:تست کردن تنها با 5 کاربر 85% مشکلات را آشکار می کند.بنابراین یک گروه از کاربران را جمع کنید و تست کردن را همانطور که یک به یک با نمونه اولیه کار می کنند انجام دهید.10. سعی نکنید همه ی مشکلات را یکباره حل کنیدانجام این کار غیرممکن است به جای آن بزرگترین مشکل را ابتدا حل کنید ( مهم ترین مشکل) و دوباره تست کردن را انجام دهید. بهترین حالت تست کردن این است که شما یک مشکل را به بهترین حالت حل کرده باشید. محصول را آماده کنید، بازخورد ها را جمع آوری کنید و نحوه ی استفاده از آن را مشاهده کنید و این کار را بر همین اساس تکرار کنید.نتیجهتست کردن چیزی نیست که بتوانید آن را نادیده بگیرید و نادیده گرفتن آن باعث شکست ایده ی شما می شود بنابراین زود تست کنید ، اغلب تست کنید.

معرفی بهترین زبان برنامه نویسی برای هوش مصنوعی

درخواست حذف این مطلب
بهترین زبان برنامه نویسی برای هوش مصنوعی بدون شک پایتون است. بهترین زبان برنامه نویسی برای هوش مصنوعی باید بتواند با تمامی موضوعات هوش همخوانی داشته باشد. آیا فکر می کنید برای برنامه نویسی در حوزه هوش مصنوعی باید مسیرهای طولانی و دشواری را پشت سر گذاشت؟ به نظر شما بهترین زبان برنامه نویسی برای هوش مصنوعی کدام است؟ امروزه پیشرفت علم و تکنولوژی در زمینه هوش مصنوعی بسیار قابل لمس است و قطعا برای توسعه کاربردی آن باید زبان برنامه نویسی انتخاب شود که جوابگوی سیستم قدرتمند هوش مصنوعی باشد. برای انتخاب بهترین زبان برنامه نویسی برای هوش مصنوعی در ابتدا باید به بررسی الگوریتم های هر زبان پرداخت. سپس نیاز به بررسی توانایی هر یک از زبان های برنامه نویسی بوده و در نهایت میزان هوشمندی زبان مورد بررسی قرار می گیرد.بهترین زبان برنامه نویسی برای هوش مصنوعی از نظر هوشمندیپایتون بدون شک بهترین زبان برنامه نویسی برای هوش مصنوعی محسوب می شود. این زبان آنقدر انعطاف پذیر و تمیز و منظم است که برنامه نویس هرگز به سراغ گزینه دیگری نخواهد رفت. زبان برنامه نویسی پایتون باعث صرفه جویی زمانی در برنامه نویسی می شود و برنامه نویس هرگز بر سر مسائل ریز و جزئی زمان اضافی صرف نمی کند. در واقع با این زبان برنامه نویسی تنها به پروژه خود دقیق می شود و می تواند بهترین نتایج را حاصل کندهوش مصنوعی پیچیده است و زبان برنامه نویسی سخت و حجیم برای این گزینه اصلا نمی تواند نتیجه بخش به نظر برسد.بهترین زبان برنامه نویسی برای هوش مصنوعی از نظر کتابخانه هااگر بخواهیم بهترین زبان برنامه نویسی برای هوش مصنوعی را از نظر تعداد کتابخانه و پسوند مورد بررسی قرار دهیم باز هم پایتون رتبه اول را دارد.برای نوشتن یک برنامه کاربردی در زمینه هوش مصنوعی نیاز به کتابخانه های بسیاری است و امکان دارد در میان مسیر شرایط پروژه تغییر کند به این ترتیب پایتون بهترین انتخاب خواهد بود که به سادگی با شرایط همخوانی پیدا می کند.البته زبان c نیز می تواند از نظر کتابخانه گزینه مناسبی در زمینه هوش مصنوعی قرار بگیرد اما برای پروژه های بزرگ، مناسب به نظر نمی رسد. در نظر داشته باشید که پسوندسازی های پایتون به مراتب بسیار قوی تر از c است و بهترین زبان برنامه نویسی برای هوش مصنوعی در سال 2018 محسوب می شود.بهترین زبان برنامه نویسی برای هوش مصنوعی از نظر پردازش دادهعده ای عقیده دارند که داده هایی که در هوش مصنوعی جریان دارد اغلب در وضعیت بسیار پویا هستند پس باید به دنبال زبان برنامه نویسی پویا و سریع بود، البته این ادعا تا حدی صحیح است به هرحال در هوش مصنوعی حرکت به سمت شبیه سازی های مشابه انسان است. درنظر داشته باشید پایتون از نظر پردازش داده نیز گزینه ای بسیار کارآمد محسوب می شود. در واقع اگر نمودارهای توطئه را در نظر بگیرید پایتون بهترین جوابگو برای این فضا خواهد بود. در واقع برنامه نویس می تواند به سادگی و رایگان کدهای مختلف و آماده را دانلود کرده و در پروژه ها به کار ببرد، به این ترتیب بهترین زبان برنامه نویسی برای هوش مصنوعی پایتون اعلام می شود و البته این انتخاب در شرایط مقایسه ای بوده و به صورت کلی است و شاید در بعضی شرایط بتواند گزینه های دیگری را مناسبتر دانست.بهترین زبان برنامه نویسی برای هوش مصنوعی از نظر راهکاربه موضوعات شبکه های بیزی و یا شبکه های عصبی در هوش مصنوعی دقت کنید، الگوریتم های بکار رفته در این مسیر پیچیده است و قطعا باید زبانی انتخاب شود که بتواند برای تمامی موضوعات هوش مصنوعی راه حلی فراهم سازد.در نظر داشته باشید که پایتون به زبان بسیار ساده ای نوشته می شود و امکان مطابقت سازی هر نوع الگوریتم در این مسیر وجود دارد. به این ترتیب انتخاب مطمئن برای حل مسائل پیچیده هوش مصنوعی می تواند پایتون باشد. بهترین زبان برنامه نویسی برای هوش مصنوعی که بتواند در تمامی شرایط بهینه ترین نتیجه ممکن را عرضه کند، پایتون است.بهترین زبان برنامه نویسی برای هوش مصنوعی از نظر تکنولوژیدر زبان پایتون یک سری کتابخانه های محاسبات علمی وجود دارد که به سادگی می تواند مسائل پیچیده هوش مصنوعی را حل کند این گزینه در هیچ یک از زبان های برنامه نویسی دیگر دیده نمی شود.در پایتون بخشی به اسم scype وجود دارد که در واقع بسط دهی با رایانه پیشرفته است. در نظر داشته باشید که این زبان حتی برای یادگیری ماشین نیز مناسب است و می تواند بهترین گزینه محسوب شود.تا به اینجای کار تمامی تاکید بر روی زبان پایتون بود اما از دید یک سری برنامه نویسان جاوا نیز گزینه ای مناسب برای هوش مصنوعی محسوب می شود. اما جاوا دارای کدهای طولانی است و میزان پیچیدگی این زبان زیاد است. و قطعا گزینه ای آسانتر و مناسبتر در این زمینه پایتون خواهد بود. تنها تبصره ای که در این مسیر وجود دارد این است که زبان پایتون گزینه سریعی برای پروژه های فوری محسوب نمی شود و گاه تاخیر اجرای بالای این زبان سبب می شود که افراد بخواهند گزینه دیگری را جایگزین کنند. البته اغلب پروژه های هوش مصنوعی از گزینه های سرعتی محسوب نمی شود و پایتون و کتابخانه ی گسترده آن می تواند بهترین زبان برنامه نویسی برای هوش مصنوعی محسوب شود.

بالا بردن رتبه وب سایت از طریق بک لینک اصولی

درخواست حذف این مطلب
بالا بردن رتبه وب سایت از طریق بک لینک باید طبق اصول و قاعده ای مشخص پیش برود. بک لینک سازی در بالا بردن رتبه وب سایت نقش اساسی و مهمی دارد. در سئو یکی از روش هایی که باعث بالا بردن رتبه وب سایت می شود استفاده از ابزار هایی است که موتور جستجو را به نوعی راضی نگاه دارد و به این ترتیب صحبت بک لینک سازی به میان می آید. حال سوال اینجاست که برای افزایش و جذب بازدیدکننده ، لینک سازی باید به چه صورتی انجام شود. امروز قصد داریم نحوه صحیح بالا بردن رتبه وب سایت از طریق بک لینک را توضیح دهیم. اصول اولیه بالا بردن رتبه وب سایتاگر دقت کرده باشید به طور کلی بک لینک سازی به عملیاتی گفته می شود که یک لینک از سایت شما در سایت و یا سایت های دیگر عنوان صحیحی می گیرد.اگر اصول بالا بردن رتبه وب سایت با لینک سازی به درستی انجام نشود قطعا می تواند بسیار مشکل ساز به نظر برسد. بالا بردن رتبه وب سایت از طریق بک لینک باید طوری پیش برود که از دید عموم افراد سازگار و مفید به نظر برسد.نکات مهم قبل از شروع عملیات بالا بردن رتبه وب سایتاولین و مهم ترین گزینه ای که باید قبل از لینک دهی رعایت کنید این است که آیا سایت طبق اصول صحیح سئو طراحی شده است یا نه. در واقع این اصل سئو است که نشان می دهد شما به مشکل برخواهید خورد یا نه. بهتر است که وب سایت حتما زیر نظر متخصیص طراحی شود، هزاران نوع کد نویسی وجود دارد که بعضی بسیار منظم و بعضی دیگر غیر اصولی و نامنظم است، قطعا قطعه کدهای نامنظم از گزینه های بسیار مشکل ساز برای سئو محسوب می شود. وقتی فرآیند ساخت وب سایت توسط متخصصین صورت گیرد به سادگی می توان مشخص کرد که کدام بخش مشکل ساز است و آن را در زمانی صحیح برطرف ساخت.بالا بردن رتبه وب سایت با بک لینک در ابتدا باید محتوا محور باشد یعنی بک لینک ها باید به صورتی باشند که از محتوای کافی برخوردار باشند ، میزان محتوا بسیار مهم است و باید مورد بررسی قرار بگیرد.اصول بالا بردن رتبه وب سایت از طریق بک لینکموضوع دیگری که برای بالا بردن رتبه وب سایت دیده می شود در خصوص فعالیت هایی است که باید به صورت دوره ای در سایت انجام شود. در واقع سایت باید دارای مقالات جدید و مفید در زمینه شغلی مختلفی باشد، تا به اینجای کار مشخص شد که عملیاتی که قبل از بک لینکسازی نیاز است کدام مورد بوده و چقدر مهم است. گزینه دیگری که برای بک لینک سازی و بالا بردن رتبه وب سایت دیده می شود انتخاب بهترین مکان های ایجاد لینک است. به طور کلی بهترین گزینه در این مسیر فروم ها و تالارهای گفتمان هستند. بهتر است که محتواهای لینک دهی شده با ذکر منبع منتشر شود به این ترتیب مسیر بالا بردن رتبه وب سایت هموارتر می شود. در نظر داشته باشید که امضا انجمن بهتر است به صورت لینک مشخص باشد و همینطور در بخش پروفایل آدرس سایت دقیقا درج شود.زمان صحیح بلک لینک برای بالا بردن رتبه وب سایتموضوع مهم دیگری که در این مسیر دیده می شود، زمان انجام بک لینک سازی است. بهتر است که بک لینک ها به طور طبیعی و روزانه انجام شود و البته تعداد لینک دهی ها در وضعیت طبیعی پیش برود. به این معنی که یک روز 100 بک لینک ایجاد نکنید در صورتی که روز دیگر تنها 10 بک لینک زده اید. بهتر است که در ابتدا میانگین بک لینک های مورد نیاز برای سایت را بررسی کنید و سعی کنید به صورتی لینک دهی کنید تا میانگین لینک شما در زمان های مختلف همخوانی داشته باشد.دقت کنید که بهتر است در ساعات اداری بک لینک انجام بگیرد به این ترتیب بالا بردن رتبه وب سایت آسانتر می شود ، زیرا جذب مخاطب در این ساعات بیشتر است. البته خارج از ساعات اداری نیز باید یک سری لینک دهی ها انجام شود. بالا بردن رتبه وب سایت زمان بر است و به این صورت نیست که تنها با یک روز لینک دهی بتوانید از عهده آن بر آیید.به طور کلی و طبق قانونی که وجود دارد در ابتدا برای عملیات بالا بردن رتبه وب سایت از طریق لینک سازی با حجم بالا در روز آغاز می شود و پس از گذشت زمان در صورتی که جذب کاربر به میزان مورد نظر رسید، می توانید میزان تعادل بک لینک ها را کاهش دهید.تاثیر کیفیت بک لینک بر بالا بردن رتبه وب سایتیک سری نکات وجود دارد که برای بالا بردن رتبه وب سایت از طریق بک لینک باید رعایت شود. در ابتدا باید بررسی کنید که لینک های ایجاد شده در سایت هایی قرار بگیرد که مرتبط و یا حداقل همخوانی قابل قبولی با سایت شما داشته باشند.بهتر است که تاکیدی بر کلمه کلیدی خاصی نداشته باشید و هر سری لینک با کلمه ای متفاوت لینک شود.از قرار دادن یک سری لینک ها که در تمامی صفحات سایت های دیگر قرار می گیرد و به طور مستقیم سایت شما را نشانه می گیرد، دوری کنید این گزینه کاربران را فراری می دهد.در استفاده از کلمات کلیدی منطقی باشید، افراط در این زمینه مشکل ساز است و به سایت شما آسیب می زند. از خرید لینک برای بالا بردن رتبه وب سایت جدا خودداری کنید.

تئوری رنگ ها در طراحی قالب سایت

درخواست حذف این مطلب
رعایت تئوری رنگ ها در طراحی قالب سایت بسیار مهم است. استفاده از ترکیب صحیح عناصر رنگ برای طراحی قالب سایت می تواند بسیار تاثیرگذار باشد. قطعا تئوری رنگ ها در طراحی قالب سایت بسیار مهم و ضروری است. در واقع عناصر رنگ هر یک دارای مشخصه خاصی هستند که باید به هر یک پرداخت. در طراحی قالب سایت باید رنگ های اصلی و رنگ های ثانویه به درستی مشخص شوند. از طرفی یک سری رنگ های سومین نیز وجود دارد که قصد داریم به بررسی آن بپردازیم. ترکیب و چیدمان رنگ ها در طراحی قالب وب سایت نقش اساسی ایفا می کند.رنگ های اصلی و ثانویه در طراحی قالب سایتبه طور کلی در اصول طراحی قالب سایت یک سری رنگ ها لقب رنگ های سنتی را به خود اختصاص می دهند. در چرخه رنگ های سنتی رنگ های اصلی قرمز، زرد و آبی هستند. در واقع این مثلث عضو ثابت در تئوری رنگ های طراحی قالب سایت محسوب می شود. اگر دقت کرده باشید در فلسفه تئوری رنگ از سه رنگ به عنوان مثلث متساوی الاضلاع محسوب می شود.رنگ های ثانویه به ترکیب دو رنگ از رنگ های اصلی گفته می شود که در مثلث یاد شده مجاور هم هستند. به طور کلی در یک شکل بندی مشخص می تواند رنگ های نارنجی، سبز و ارغوانی را از دسته رنگ های ثانویه محسوب کرد. البته این ترتیب می تواند تغییر کند و بستگی به مثلث اولیه تشکیل شده با رنگ های اصلی دارد.اصول تئوری رنگ های سومین در طراحی قالب سایترنگ های سومین در طراحی قالب سایت از ترکیب 6 رنگ درجه سه به وجود می آید. در این گزینه دیده می شود که قرمز روشن به نوعی ترکیبی از قرمز و نارنجی است.از طرف دیگر زرد طلایی از زرد و نارنجی بوده و ...به طور کلی برای طراحی قالب سایت از طریق رنگ بندی های سومین رنگ های درجه سه از ترکیب یک رنگ اصلی با رنگ ثانویه ای است که مجاور آن قرار دارد.برای ترکیب بندی صحیح طراحی قالب سایت باید از نمونه طرح های کلاسیک استفاده شود. به طور کلی این طرح ها شامل 6 بخش است که هر یک دارای ویژگی های خاص خود است. برای اینکه بتوان هر یک از طرح ها را آغاز کرد باید ابتدا از یک رنگ شروع کنید. در واقع یک رنگ اصلی باید با هدف سایت همخوانی داشته باشد. این رنگ نباید نامتعارف و بی معنی به نظر برسد.اولین طرح برای طراحی قالب سایت که مشهور به نوع تک رنگ است به این صورت است که رنگ اصلی به همراه تعدادی رنگ های زمینه تک رنگ می باشند که می توانند با سایه و یا بدون آن اعمال شوند. در این زمینه می توان از رنگ محو استفاده کرد. به این گزینه طرح بی رنگ می گویند که عموما در سه رنگ سفید، سیاه و یا خاکستری است. این گزینه از دسته های تک رنگ محسوب می شوند.طراحی قالب سایت با رنگ قیاسیطرح رنگ قیاسی به دسته ای گفته می شود که رنگ ها در محدوده ای دور می زنند که شامل رنگ بندی های مجاور هم هستند.این موضوع را با یک مثال بررسی می کنیم. فرض کنید که کیک دارید و محتوای داخلی آن چند رنگ است و حال کیک را برش می زنید چه می بینید؟ طرح قیاسی دقیقا همان برش نسبتا بزرگی از کیک محسوب می شود.به طور کلی در طرح بندی های قیاسی قدرت رنگ ها بسیار مدنظر است مثلا قرمز بلوطی جایگاه ویژه ای در این مسیر دارد.طرح رنگ مکمل از دیگر گزینه های پیش روی برای طراحی قالب سایت استاندارد محسوب می شود. همانطور که از اسم این رنگ ها پیداست رنگ های مکمل در چرخه رنگ ها ، دقیق روبروی هم هستند. به عنوان مثال قرمز و سبز و یا زرد و بنفش و همینطور نارنجی و آبی و بسیاری از رنگ های دیگر.در استفاده از رنگ های مکمل باید بسیاری از موارد به درستی رعایت شود به این معنی که عموما این رنگ ها وجه مشترک بسیار کمی دارند که شاید در نگاه اول تناقض رنگ ها به شمار برود و کمی نگران کننده به نظر برسد.به طور کلی در این مسیر هر رنگ سبب می شود که رنگ دیگر بسیار پر حرارت بنظر برسد.طراحی قالب سایت با رنگ های مکمل مجزاگزینه دیگری در زمینه اصول طراحی قالب سایت دیده می شود که مشهور به طرح های مکمل مجزا است که اغلب سه تایی و یا چهارتایی پیش می رود. در این مسیر در واقع نسخه های ساده ای از طرح رنگ مکمل دنبال می شود. برای طراحی قالب سایت با مکمل مجزا باید یک طرح رنگ ساده مکمل گزینه دیگر باشد. و در داقع مجاور بودن رنگ های اصلی بسیار مهم است. برای داشتن مکمل های سه گانه، باید دو رنگ دیگر در کنار رنگ اصلی را یک درجه روشن کنیم و البته میزان روشنی باید یکسان در فضای سایت پخش شود.طراحی قالب سایت تک رنگ با برجستگی بیشتراین گزینه به این صورت دنبال می شود که از ترکیب سایه ها به صورت ساده استفاده نشده و از زیر سایه های خالص استفاده می شود و عموما نیز زیر سایه ها به رنگ های خاکستری، سفید و سیاه هستند. این گزینه تضاد و برجستگی بسیار جالبی در سایت ایجاد می کند که قطعا از دید افراد جالب به نظر خواهد آمد.

12 دستور ترمینال که هر توسعه دهنده وب باید آن ها را بداند

درخواست حذف این مطلب
در این مقاله ما برای کمک به استفاده بیشتر شما از ترمینال مجموعه ای از دستورات یونیکس را آماده کرده ایم. بعضی از آنها درونی یا built in هستند و برخی دیگر نیز ابزارهای جداگانه رایگانی هستند که تست زمانی شده اند و می توانند در کمتر از یک دقیقه نصب شوند. curlcurl یک دستور یا همان خط فرمان (command line) برای ایجاد درخواست ها از طریق ftp ، http(s) و ده ها پروتکل دیگر می باشد که شاید شما اسم آن ها را هم نشنیده باشید .curl می تواند فایل ها را دانلود کند،هدرهای پاسخ را بررسی کند و به داده های راه دور(remote data) آزادانه دسترسی پیدا کند.درتوسعه وب،curl معمولا برای تست اتصالات(testing conncetions) و کار با restful api ها استفاده می شوددستورات curl میتواند بسیار پیچیده تر از این باشد . تعداد بسیار زیادی گزینه برای کنترل کردن هدرها ، کوکی ها ، احراز هویت و ... وجود دارد.می توانید برای کسب اطلاعات بیشتر به کتاب عالی و رایگان everything curl مراجعه کنید. treetree یک خط فرمان (command line) کوچک است که یک نمای تصویری از فایل ها را در یک دایرکتوری نشان میدهدبصورت بازگشتی کارمیکند ، و به صورت پی در پی با رفتن به سطح های تو در تو و رسم یک فرمت درختی از تمام محتویات کارش را انجام میدهد.با استفاده از این دستور شما می توانید به سرعت به فایل ها نگاهی بیندازید و فایل هایی را که به دنبال آن ها میگردید را به سرعت پیدا کنید.همچنین گزینه ای برای فیلتر کردن نتایج با استفاده ازالگوی ساده یregex وجود دارد: tmuxطبق توضیحات (ویکی) آن ، tmux یک ترمینال چند منظوره است (چند منظوره بودن یعنی چند تا ترمینال رو میگیرد و از بین ترمینال های موجود ترمینال مورد نیاز را نمایش میدهد) ، که به زبان ساده تر ابزاری است برای اتصال چندین ترمینال به یک session terminal.این دستور به شما امکان سوییچ کردن بین برنامه ها در یک ترمینال، افزودن تقسیم صفحه نمایش و قراردادن چندین ترمینال به همان session و سینک(sync) و همگام سازی تمامی آن ها را می دهد. tmux وقتی که بر روی یک سرور از راه دور (remote server) کار میکنید بسیار مفید است، به دلیل این که به شما امکان ایجاد تب های جدید را بدون نیاز به لاگین دوباره را می دهد. disk usage – duدستور du گزارش های مربوط به فضای استفاده شده ی فایل ها و دایرکتوری ها را ایجاد می کند . استفاده از آن بسیار آسان می باشد و میتواند بصورت بازگشتی ، با رفتن درون هر زیر دایرکتوری (subdirectory) اندازه ی هر فایل را برگرداند.یک مورد استفاده متداول برای du زمانی است که حافظه ی یکی از درایو های شما پر شده است و شما علت آن را نمیدانید. با استفاده از این دستور شما می توانید به سرعت متوجه بشوید که هر فولدر چه مقدار حافظه ای را اشغال کرده است و بدین ترتیب بزرگترین فضای ذخیره شده در حافظه را پیدا کنید.همچنین یک دستور مشابه به du به نام df وجود دارد که این دستور اطلاعات گوناگونی درباره ی فضای دردسترس دیسک میدهد (df=disk free) دستور df معکوس دستور du می باشد. gitدر حال حاضر git محبوب ترین نسخه سیستم کنترل می باشد.که یکی از ابزارهای مدرن تعریف شده وب سایت است و ما نمی توانیم آن را از لیستمان حذف کنیم.بسیاری از اپلیکیشن ها و ابزار های شخص ثالث (third-party) در دسترس هستند اما بیشتر مردم دسترسی مستقیم از git به ترمینال را ترجیح میدهند.git cli واقعا قدرتمند است و حتی میتواند تاریخچه پیچیده ترین پروژه ها را مدیریت کند. tartar ابزار پیش فرض یونیکس برای کار با آرشیو فایل است.به شما این امکان را می دهد که به سرعت چندین فایل رو درون یک پکیج دسته بندی و قرار دهید ، که ذخیره سازی و جابجایی آن ها را در بعدها را آسان تر می کندهمچنین می تواند با استفاده از آپشن x– آرشیو های موجود .tar را اکسترکت کند.توجه داشته باشید که بیشتر فرمت های دیگر مانند .zip و .rar توسط tar باز نمی شوند و به دیگر سرویس های فرمان مثل unzip نیاز داردبسیاری از سیستم های مدرن یونیکس یک نسخه گسترده تر از gnu tar) tar) اجرا می کنند که قادر است فشرده سازی حجم فایل را انجام دهد:# create compressed gzip archive. tar -czf file.tar.gz inputfile1 inputfile2 # extract .gz archive. tar -xzf file.tar.gzاگر سیستم عاملتان نسخه tar را ندارد ، برای کاهش حجم آرشیو فایل میتوانید از compress ، zcat، gzip استفاده کنید . md5sumیونیکس چندین دستور و فرمان hash ازجمله sha1sum، md5sum و غیره را ساخته است این ابزار خط فرمان ،برنامه های کاربردی مختلفی در برنامه نویسی دارند، اما مهمتر از همه این است که می توانند برای بررسی یکپارچگی و صحت فایل ها استفاده شوند.برای مثال، اگر شما یک فایل .iso را از یک منبع غیر قابل اعتماد و ناامن دانلود کرده اید، ممکن است که آن فایل حاوی اسکریپت هایمضرباشد.برای اطمینان حاصل کردن از این که فایل .iso امن هست، می توانید یک 5md یا هش دیگری از آن تولید کنید.پس از آن می توانید رشته تولید شده را با آنچه که از نویسنده اصلی ارائه شده مقایسه کنید.(برای مثال ubuntuhashes) htophtop یک جایگزین قدرتمند تری نسبت به taskmanger ساخته شده است.htop یک رابط پیشرفته با گزینه های فراوانی برای نظارت و ارزیابی و کنترل کردن فرایندهای سیستم فراهم میکند.اگرچه آن در ترمینال اجرا می شود ،اما htop دارای پشتیبانی بسیار خوبی برای کنترل های موس است. که باعث آسانی در هدایت کردن منو ها ،فرایندهای انتخاب،سازمان دهی task ها،فیلتر کردن و مرتب سازی می شود lnلینکها در یونیکس شبیه به shortcutها درویندوز هستند، که به شما این امکان را می دهندکه به فایل های خاص دسترسی سریع داشته باشید .لینک ها از طریق دستور ln ایجاد می شوند ومیتوانند دارای دو نوع سخت (hard) یا سمبولیک (symbolic) باشند هر نوع دارای ویژگی های مختلفی می باشند و برای موارد مختلف مورد استفاده قرار می گیرند.در اینجا یک مثال از یکی از روش های بیشمار استفاده از لینک را می بینید. ما یک دایرکتوری بر روی دسکتاپ با نامscript داریم که شامل اسکریپت منظم سازماندهی شده bash می باشد که معمولا از آن استفاده می کنیم. هر بار که می خواهیم یکی از اسکریپت ها را فراخوانی کنیم، باید این کار را انجام دهیم:بدیهی است اینکه هربار ما مجبور باشیم مسیر مطلق رو بنویسیم کارخیلی راحتی نیست .در عوض می توانیم یک symlink از پوشه اسکریپت ها را به مسیر/usr/local/bin ایجاد کنیم که باعث اجرای اسکریپت ها از تمام پوشه ها می شود.ما اکنون می توانیم باsymlink ایجاد شده اسکریپتمان را به سادگی با نوشتن نام آن در هر ترمینال باز فراخوانی کنیم. sshاز طریق دستور ssh ، کاربران میتوانند به سرعت به یک remote host متصل شوند ، و به یونیکس شل خود(unix shell) وارد شوند ، این مورد باعث ارسال مستقیم و راحت دستورها به سرور از ترمینال دستگاه محلی شما می شود برای برقراری ارتباط که کار ساده ای می باشد شما باید ip آدرس درست یا url را مشخص کنید . وقتی که برای اولین بار به یک سرور جدید متصل می شوید نوعی احراز هویت وجود خواهد داشت .ssh username@remote_hostاگر شما میخواهید به سرعت دستورات خود را بروی سرور بدون نیاز به لاگین کردن اجرا کنید،می توانید به سادگی آن دستور را بعد از url اضافه کنید.آن دستور روی سرور اجرا می شود و نتیجه آن از سرور برمیگردد.ssh username@remote_host ls /var/www some-website.com some-other-website.comشما با ssh کارهای زیادی مثل ایجاد پروکسی و تونل ها ،امن کردن اتصال از طریق کلیدهای خصوصی(private keys)،انتقال فایل ها وبسیاری دیگر... را نیز می توانید انجام بدهید.grepgrep ابزار استاندارد یونیکس برای پیداکردن رشته ها در داخل متن است . یک ورودی را به شکل یک فایل یا دایرکت استریم (direct stream) میگیرد ،محتوای آن را از طریق یک عبارت منظم (regular expression) اجرا کرده و تمام خط هایی را که با محتوای ما یکسان بوده اند را بر میگرداند .این دستورهنگام کار با فایل های بزرگ که باید فیلتر شوند مفید است ما از grep با ترکیبش با دستورات date استفاده میکنیم برای جست و جو در یک log file بزرگ تا یک فایل جدید که حاوی خطاهای امروز است را تولید کنیمیکی دیگر از دستورات عالی برای کار با رشته ها sed می باشد. قدرتمندتر و پیچیده تر ازgrep می باشد و می تواند تقریبا هر کار مرتبط با رشته شامل افزودن، حذف یا جایگزینی رشته ها را انجام دهد. aliasبسیاری از دستورات یونیکس ، از جمله همین دستوراتی که در همین مقاله راجع به آن صحبت کردیم ،بعد از اضافه کردن تمامی آپشن ها (منظور از آپشن یعنی همان" -" که به بعضی از دستورات اضافه می شوند می باشد) به دستورات آن ها بسیار طولانی می شوند،برای این که حفظ کردن آن ها آسان تر شوند شما میتوانید با استفاده از دستورalias ساخته شده درون bashنام های مستعار کوتاه ایجاد کنید.نام مستعار فقط تا وقتی که ترمینال را باز نگه دارید در دسترس خواهد بود.برای دائمی کردن آن شما باید فرمان alias را (alias command) به فایل .bashrc اضافه کنید.

بررسی بهترین زبان برنامه نویسی برای شبکه

درخواست حذف این مطلب
بهترین زبان برنامه نویسی برای شبکه از نظر سادگی و چندمنظوره بودن پایتون است. در انتخاب بهترین زبان برنامه نویسی برای شبکه باید نوع پروژه مشخص شود. می دانیم که زبان های برنامه نویسی مختلفی موجود است که شاید هر کدام بتواند ما را به هدف خود برساند اما واقعا گزینه مناسب کدام است؟ برای انتخاب بهترین زبان برنامه نویسی برای شبکه باید به چه اصولی دقت کرد؟ امروز قصد دارید در خصوص روش های بهترین زبان برنامه نویسی برای شبکه بر طبق بررسی های اخیر صحبت کنیم. به این ترتیب شرایطی فراهم می شود که برای انتخاب بسیار آسان و مطمئن خواهد بود.بهترین زبان برنامه نویسی برای شبکه از نظر محبوبیتباید اعتراف کرد که برنامه نویسی برای شبکه آسان نیست و قطعا اگر زبان انتخاب شده نیز دشوار باشد این مسیر را بسیار پیچیده می کند.بر اساس رتبه بندی های موجود در بین انواع زبان های برنامه نویسی محبوب در دنیا ، پایتون همچون الماس می درخشد. این زبان آنقدر ساده است که در واقع برای کودکان طراحی شده است. هر کسی که با این زبان کار کرده اعتراف کرده است که بسیار منظم و زیبا است.زبان برنامه نویسی پایتون آنقدر مناسب است که بسیاری از شرکت های بزرگ دنیا از آن استفاده می کنند. شرکت گوگل، یاهو و همینطور شرکت اینتل و سیسکو از گزینه هایی هستند که با این زبان فعالیت می کنند.بهترین زبان برنامه نویسی برای شبکه با خاصیت چند منظورهقطعا این روزها طراحی سایت، نرم افزار و شبکه در یک راستا قرار دارد، بهتر است که افراد به سراغ زبان برنامه نویسی بروند که بتوانند تمامی این گزینه ها را به نحو احسنت پوشش دهند. در واقع چند منظوره بودن زبان پایتون سبب شده است که این روزها از بهترین زبان برنامه نویسی برای شبکه محسوب شود.پایتون ظاهری ساده و منظم دارد، به این معنی که اگر به ساختار این زبان نگاهی بیندازید به سادگی می توانید متوجه منظور برنامه نویس شوید، دیگر خبری از متن های پیچیده نیست و گویی یک مقاله به زبان انگلیسی را مطالعه می کنید. این ویژگی بزرگترین وجه تمایز این زبان با سایر زبان ها محسوب می شود. در واقع شما در این راستا به هیچ عنوان با جزییات برنامه نویسی روبرو نیستید و می توانید در سریع ترین زمان ممکن به نتیجه برسید. می دانیم که در شبکه احتمال وقوع هر اتفاق در لحظه وجود دارد و پایتون می تواند بهترین گزینه در این بین محسوب شود.بهترین زبان برنامه نویسی برای شبکه از نظر سادگیقطعا وقتی می خواهید بهترین زبان برنامه نویسی برای شبکه را انتخاب کنید در ابتدا بررسی می کنید که زبان یادگرفته شده چقدر دشوار است و یا یادگیری آن چقدر زمان می برد. باید اعتراف کرد که شیب منحنی یادگیری پایتون بسیار ملایم است و به سادگی می توان این زبان را یاد گرفت. رایگان بودن اطلاعات این زبان و همینطور کتابخانه های آن سبب می شود تا بتوانید به سادگی از پس مسایل پیچیده شبکه برآیید.پایتون از دسته زبان های سطح بالا محسوب می شود و به نوعی برنامه نویس را درگیر خود نخواهد کرد. در نظر داشته باشید که با این زبان هرگز درگیر مشکلات مدیریت حافظه نخواهید شد.بهترین زبان برنامه نویسی برای شبکه از نظر قابل حمل بودنپایتون از دسته زبان های متن باز است و به نوعی طبق آمار رسمی اعلام شده این زبان 21 پلتفرم شامل ویندوز و لینوکس را پشتیبانی می کند. شما می توانید از سورس های آماده استفاده کنید و به سادگی آنها را با تغییرات کوچکی در وضعیت اجرا قرار دهید.شی گرا بودن این زبان بر خلاف زبان های دیگر بسیار آسان و ساده است. شما می توانید این روش ها را برای اجرای برنامه های شی گرا مورد استفاده قرار دهید.توسعه پذیری از مشکلاتی است که پایتون با آن درگیر است. سرعت پایین پایتون برای اجرای کدهای مختلف شاید از دسته ضعف های آن محسوب شود. البته شما می توانید قطعه کدهای دیگر را در میان کدهای پایتون قرار دهید تا سرعت بیشتری برای شما فراهم سازد.بهترین زبان برنامه نویسی برای شبکه از نظر جای پذیریجای پذیری از دسته گزینه هایی است که این زبان آن را مورد تایید قرار می دهد. در واقع خاصیت اسکریپ نویسی پایتون سبب می شود که از بهترین زبان برنامه نویسی برای شبکه محسوب شود.پایتون دارای کتابخانه های کاملی است و از کتابخانه های آن بسیار غنی و پر محتوا است. پایتون یک زبان همه کاره است. در این زبان طیف وسیعی از موضوعات جای می گیرد.با پایتون برنامه های کاربردی ناسا نوشته شده است، ابزارهای بسیار گسترده برای شرکت های گوگل و یوتیوب به این زبان نوشته شده است.تا به این جای کار متوجه شدیم که بهترین زبان برنامه نویسی برای شبکه پایتون است. در واقع بهترین زبان برنامه نویسی برای شبکه طبق اصل سادگی و کاربردی بودن در سال 2018 این زبان اعلام شده است. در صورتی که می خواهید در مسیر شبکه کدنویسی کنید در ابتدا بررسی کنید که کدهای شما چقدر در مسیر کاربرد قرار دارد. در واقع افراد باید این گزینه را در نظر داشته باشند که کدهای کاربردی اغلب باید قابل تغییر باشند زیرا هر روز در حال پیشرفت علم هستیم بنابراین بهترین برنامه نویسی برای شبکه باید طبق اصول و قواعد خاص مربوط به پروژه انتخاب شود و زبان قطعا در پروژه هایی که سرعت مهم است پایتون نمی تواند جایگاه قابل قبولی داشته باشد. در این مسیر قطعا افراد باید بتوانند گزینه های مناسبی را مورد بررسی قرار دهند.

توسعه برنامه های وب با asp.net core 2.0 و react (بخش اول)

درخواست حذف این مطلب
در این مقاله، شما یک برنامه وب مبتنی بر asp.net core 2.0 و react خواهید ساخت. برای ایجاد ویژگی مدیریت هویت (identity)، این برنامه را با auth0 ادغام می کنید. در بخش اول این مجموعه، قصد استفاده از asp.net core 2.0 برای توسعه apiهای برنامه خود را دارید. کد نهایی را می توانید در github بیابید.راه اندازی برنامه asp.net coreبرنامه ای که می خواهید پیاده سازی کنید، به کاربران اجازه می دهد در فهرست کتاب های آنلاین بگردند. به دنبال رویکرد توسعه api-first، با ایجاد asp.net core 2.0 web api شروع به ساخت برنامه خود خواهید کرد. برای انجام این کار شما دو گزینه دارید: اول اینکه می توانید برنامه خود را با ویژوال استودیو ایجاد کنید، دوم اینکه می توانید برنامه را از خط فرمان ایجاد کنید.ایجاد پروژه با ویژوال استودیواگر از ویژوال استودیو استفاده می کنید، می توانید پروژه را با قالب asp.net core web app بسازید، همان طور که در تصویر زیر نشان داده شده است:بعد از اینکه قالب پروژه asp.net core web app را انتخاب کردید، باید نوع برنامه asp.net ای که می خواهید بسازید را مشخص کنید. در اینجا، نوع برنامه را web api انتخاب کنید، همان طور که در تصویر زیر است:اطمینان حاصل کنید که نوعی از احراز هویت را انتخاب نکرده اید، زیرا می خواهید برنامه را با auth0 ادغام کنید.ایجاد برنامه از خط فرماناگر ترجیح می دهید از خط فرمان استفاده کنید، می توانید برنامه خود را با نوشتن دستور زیر بسازید: dotnet new webapi -n api-auth0این دستور یک پوشه asp.net web api ایجاد می کند، که پروژه شما با نام api-auth0 درون پوشه جاری است.چه از ویژوال استودیو استفاده کنید چه خط فرمان، در هر حال نتیجه یکی است. یعنی بعد از انجام این مراحل یک برنامه asp.net core 2 web api دریافت خواهید کرد.ایجاد کنترلر books در asp.net core 2.0حالا که پروژه را ایجاد کردید، می توانید آن را برای ارائه قابلیت های دلخواه بازسازی کنید. اولین کاری که انجام می دهید این است که فایل valuescontroller.cs درون پوشه controllers را حذف کنید. شما در این برنامه به این کنترلر نیاز ندارید.بعد از حذف آن، می توانید فایل bookscontroller.cs را در همان پوشه، همانند کد زیر، بسازید: using microsoft.aspnetcore.authorization; using microsoft.aspnetcore.mvc; using system.collections.generic; namespace apiauth0.controllers { [route("api/[controller]")] public class bookscontroller : controller { [httpget] public ienumerable get() { var currentuser = httpcontext.user; var resultbooklist = new book[] { new book { author = "ray bradbury", title = "fahrenheit 451", agerestriction = false }, new book { author = "gabriel garcía márquez", title = "one hundred years of solitude", agerestriction = false }, new book { author = "george orwell", title = "1984", agerestriction = false }, new book { author = "anais nin", title = "delta of venus", agerestriction = true } }; return resultbooklist; } public class book { public string author { get; set; } public string title { get; set; } public bool agerestriction { get; set; } } } }در اینجا، شما یک web api برای بازگشت لیست کتاب ها تعریف کرده اید. برای سادگی، لیست کتاب ها را در یک آرایه ذخیره می کنید. با این حال، در موارد واقعی، باید در یک پایگاه داده پایدار ذخیره شود. url مربوط به api، api/books/ خواهد بود و هر http کلاینتی می تواند لیست کتاب ها را توسط یک درخواست http get ساده دریافت کند. # run the application in the background dotnet run & # issue a get request curl -d - http://localhost:5000/api/booksالبته شما نمی خواهید هر کلاینتی بدون فرآیند احراز هویت بتواند به کتاب فروشی شما دسترسی پیدا کند. شما می خواهید فقط کلاینت های مجاز بتوانند لیست کتاب های مدیریت شده توسط برنامه شما را دریافت کنند. این جایی است که auth0 به شما کمک می کند: مجموعه ای از راه حل های شناسایی را فراهم می کند که امنیت درون برنامه را برقرار می سازد.ادغام asp.net core 2.0 با auth0در اولین قدم، نیاز به یک اکانت auth0 دارید. اگر هنوز عضو نیستید، می توانید از اینجا به صورت رایگان ثبت نام کنید.در طول ثبت نام، باید نام دامنه خود، منطقه سرویس هاست و یک سری جزئیات در مورد شرکت و خودتان را ارائه دهید. نام دامنه بسیار مهم است، زیرا بخش ریشه (روت) api endpointها که توسط auth0 به کلاینت های مجاز شما نمایش داده می شوند را مشخص می کند. وقتی نام دامنه را ارائه می دهید، دیگر نمی توانید آن را تغییر دهید. با این حال، می توانید دامنه های بسیاری که نیاز دارید را ایجاد کنید. وقتی مرحله ثبت نام تکمیل می شود، می توانید به داشبورد auth0 دسترسی داشته باشید.ایجاد auth0 apiهمان طور که یک backend api ایجاد کردید که کاربران را قادر می سازد در کتاب فروشی آنلاین گشت و گذار کنند، باید یک auth0 api برای نمایش backend خود ایجاد کنید. برای انجام این کار، به بخش apiهای داشبورد auth0 بروید و روی دکمه create api کلیک کنید. پس از آن سه سؤال از شما پرسیده می شود:1. نام (name) api شما، می توانید آن را روی online bookstore تنظیم کنید.2. شناسه ای (identifier) برای api شما، می توانید آن را با https://onlinebookstore.mycompany.com تنظیم کنید.3. و تنظیمات الگوریتم (signing algorithm)، در این فیلد می توانید rs256 را انتخاب کنید.وقتی این فرم را کامل کردید، می توانید روی دکمه create کلیک کنید.ایجاد برنامه auth0هدف شما این است که سطح دسترسی api را توسط مجوز (authorizing) فقط برای کلاینت های معتبر کنترل کنید. برای انجام این کار، همچنین باید پیکربندی application روی auth0 را داشته باشید. معمولا، نیاز به ایجاد یک برنامه جدید برای نمایش برنامه front-end خود دارید. نوع برنامه front-end به شما کمک می کند تا برای انتخاب نوع برنامه auth0 تصمیم بگیرید. با این حال، چون در بخش اول هنوز front-end را ایجاد نکرده اید، می توانید از برنامه ای که به طور خودکار برای auth0 api شما ایجاد شده بود استفاده کنید.اگر online bookstore را به عنوان نام api خود انتخاب کرده اید، بنابراین در بخش application داشبورد auth0 برنامه ای به نام online bookstore (برنامه تست) مشاهده خواهید کرد. روی این برنامه کلیک کنید و به تب settings بروید. در این تب، سه ویژگیی که نیاز دارید را مشاهده خواهید کرد:1. دامنه auth0 خود (domain)2. کلید شناسه کلاینت (client id)3. کلید رمزی کلاینت (client secret)شما به زودی از این سه مقدار استفاده خواهید کرد.پیکربندی auth0 روی برنامه های asp.net coreبعد از ایجاد auth0 api، باید برنامه خود را تغییر دهید تا مدیریت شناسایی را به auth0 بدهید. در اولین قدم، باید بخش auth0 را در فایل پیکربندی appsettings.json اضافه کنید، همان طور که در زیر نشان داده شده است: { "logging": { "includescopes": false, "debug": { "loglevel": { "default": "warning" } }, "console": { "loglevel": { "default": "warning" } } }, "auth0": { "authority": "", "audience": "" } }باید و را با مقادیری که در قسمت های قبلی تعریف کرده اید جایگزین کنید. مثلا اگر دامنه را https://dotnet2-react.auth0.com تعریف کرده باشید، همان چیزی است که باید در قسمت استفاده کنید. در قسمت نیز مقداری که برای identifier در auth0 api تعریف کردید (مثلا https://onlinebookstore.mycompany.com) را استفاده خواهید کرد.سپس باید متد configureservices() در فایل startup.cs را تغییر دهید، که همانند زیر است: using microsoft.aspnetcore.authentication.jwtbearer; // ... other using statements // ... namespace definition // ... class definition // ... etc public void configureservices(iservicecollection services) { services.addauthentication(options => { options.defaultauthenticatescheme = jwtbearerdefaults.authenticationscheme; options.defaultchallengescheme = jwtbearerdefaults.authenticationscheme; }).addjwtbearer(options => { options.authority = configuration["auth0:authority"]; options.audience = configuration["auth0:audience"]; }); services.addmvc(); } // ... etcهمان طور که می بینید، با تعیین ساختار حامل jwt و ارائه مقادیر authority و audience گرفته شده از فایل پیکربندی appsetting.json، سرویس احراز هویت را اضافه کردید.بعد از آن، باید یک فراخوانی از app.useauthentication() در بدنه متد configure() اضافه کنید، همانند دستور زیر: public void configure(iapplicationbuilder app, ihostingenvironment env) { if (env.isdevelopment()) { app.usedeveloperexceptionpage(); } app.useauthentication(); app.usemvc(); }پس از فعال کردن پشتیبانی از احراز هویت، می توانید دسترسی عمومی به api خود را توسط افزودن اتربیوت authorize به endpoint در فایل bookscontroller.cs مسدود کنید: [httpget, authorize] public ienumerable get() { var currentuser = httpcontext.user; var resultbooklist = new book[] { new book { author = "ray bradbury", title = "fahrenheit 451", agerestriction = false }, new book { author = "gabriel garcía márquez", title = "one hundred years of solitude", agerestriction = false }, new book { author = "george orwell", title = "1984", agerestriction = false }, new book { author = "anais nin", title = "delta of venus", agerestriction = true } }; return resultbooklist; }حالا اگر سعی کنید به endpoint مربوط به api/books/ دسترسی پیدا کنید، کد وضعیت 401 http را دریافت خواهید کرد (به این معنی که شما مجوز دسترسی را ندارید). می توانید با استفاده از هر http کلاینتی، مانند مرورگر، curl یا postman آن را بررسی کنید. # run the application in the background dotnet run & # issue a get request curl -d - http://localhost:5000/api/booksآخرین دستور پاسخی همانند زیر را تولید می کند: # http/1.1 401 unauthorized # date: wed, 24 jan 2018 16:28:09 gmt # server: kestrel # content-length: 0 # www-authenticate: bearer دریافت توکن (رمز) دسترسیحالا که endpointها را با auth0 امن کردید، به شما یاد خواهیم داد که چگونه دستگاهی که می تواند لیست کتاب ها را دوباره دریافت کند اعتبارسنجی کنید. می توانید از هر http کلاینتی استفاده کنید، اما در این بخش، استفاده از curl را مشاهده خواهید کرد.در مرحله اول یک توکن مجوز را از auth0 دریافت می کنید. می توانید این کار را با ارسال یک درخواست post به oauth/token/ دامنه auth0 خود انجام دهید، مانند دستور زیر: auth0_client_id= auth0_client_secret= auth0_audience= auth0_domain= curl -x post -h 'content-type: application/json' -d '{ "client_id": "'$auth0_client_id'", "client_secret": "'$auth0_client_secret'", "audience": "'$auth0_audience'", "grant_type":"client_credentials" }' https://$auth0_domain/oauth/tokenتوجه داشته باشید که باید ، ، و را در دستورات بالا با مقادیر مربوط به auth0 api و برنامه ای که قبلا ایجاد کردید، جایگزین کنید.پاسخ به این درخواست چیزی شبیه به دستور زیر می شود: { "access_token": "eyj0exaio...pjmnfpa", "expires_in": 86400, "token_type": "bearer" }حالا می توانید از access_tokenای که از auth0 دریافت کردید تا لیست کتاب ها را درخواست کنید، استفاده کنید، مانند دستور زیر: access_token=eyj0exaio...pjmnfpa curl -h 'authorization: bearer '$access_token -d - http://localhost:5000/api/booksاین درخواست پاسخ زیر را تولید می کند: # http/1.1 200 ok # date: wed, 24 jan 2018 17:35:26 gmt # content-type: application/json; charset=utf-8 # server: kestrel # transfer-encoding: chunked # [{"author":"ray bradbury","title":"fahrenheit 451","agerestriction":false},{"author":"gabriel garcía márquez","title":"one hundred years of solitude","agerestriction":false},{"author":"george orwell","title":"1984","agerestriction":false},{"author":"anais nin","title":"delta of venus","agerestriction":true}] ایجاد ادغام تست ها به عنوان دستگاه برای برنامه های دستگاه (machine application)تست انجام شده با curl در بخش قبلی فقط باید بررسی کند که داده های پیکربندی auth0 و api اجرا شده برنامه ما به خوبی با هم کار می کنند. در حقیقت نوع برنامه ای که auth0 به صورت خودکار ایجاد می کند دستگاهی برای machine application بود. این نوع برنامه ها برای سرور در برابر سرور یا تعامل بدون نظارت تعیین شده اند. هرگز نباید client secret را در سمت کلاینت ذخیره کنید، زیرا امنیت برنامه را به خطر می اندازد.پیاده سازی تست یکپارچه سازی ممکن است موردی باشد که می توانید از client secret استفاده کنید، زیرا این اطلاعات به کلاینت نمایش داده نخواهند شد اما در محیط توسعه باقی می مانند.اکنون زمان آن رسیده است که تست پکپارچه سازی را بنویسید که درخواست را برای گرفتن لیست کتاب ها بدون استفاده از فایل های دسترسی توکن تأیید کند. [fact] public async task unauthorizedaccess() { var response = await _client.getasync("/api/books"); assert.equal(httpstatuscode.unauthorized, response.statuscode); }این آزمون ساده بررسی می کند که چنین درخواستی یک کد وضعیت unauthorized http401 را دریافت کند. بعد از آن می توانید بررسی کنید که داده پیکربندی که در فایل appsetting.json گذاشته اید، به شما اجازه می دهد یک توکن دسترسی معتبر دریافت کنید: [fact] public async task testgettoken() { var auth0client = new httpclient(); var bodystring = $@"{{""client_id"":""{_configuration["auth0:clientid"]}"", ""client_secret"":""{_configuration["auth0:clientsecret"]}"", ""audience"":""{_configuration["auth0:audience"]}"", ""grant_type"":""client_credentials""}}"; var response = await auth0client.postasync($"{_configuration["auth0:authority"]}oauth/token", new stringcontent(bodystring, encoding.utf8, "application/json")); assert.equal(httpstatuscode.ok, response.statuscode); var responsestring = await response.content.readasstringasync(); var responsejson = jobject.parse(responsestring); assert.notnull((string)responsejson["access_token"]); assert.equal("bearer", (string)responsejson["token_type"]); }در اینجا، همان کد درخواستی که با curl ساختید تکرار می شود. شرط assert بررسی می کند که توکن هایی که خالی نیستند و توکن های از نوع bearer دریافت شوند.آخرین تست تضمین می کند که درخواست با یک توکن دسترسی معتبر لیستی از کتاب های بازگشت داده شده توسط api را دریافت کند: [fact] public async task getbooks() { var token = await gettoken(); var requestmessage = new httprequestmessage(httpmethod.get, "/api/books"); requestmessage.headers.authorization = new authenticationheadervalue("bearer", token); var booksresponse = await _client.sendasync(requestmessage); assert.equal(httpstatuscode.ok, booksresponse.statuscode); var bookresponsestring = await booksresponse.content.readasstringasync(); var bookresponsejson = jarray.parse(bookresponsestring); assert.equal(4, bookresponsejson.count); }این کد از یک متد به نام gettoken() استفاده می کند که یک توکن معتبر را از endpoint احراز هویت auth0 درخواست می کند: public async task gettoken() { var auth0client = new httpclient(); string token = ""; var bodystring = $@"{{""client_id"":""{_configuration["auth0:clientid"]}"", ""client_secret"":""{_configuration["auth0:clientsecret"]}"", ""audience"":""{_configuration["auth0:audience"]}"", ""grant_type"":""client_credentials""}}"; var response = await auth0client.postasync($"{_configuration["auth0:authority"]}oauth/token", new stringcontent(bodystring, encoding.utf8, "application/json")); if (response.issuccessstatuscode) { var responsestring = await response.content.readasstringasync(); var responsejson = jobject.parse(responsestring); token = (string)responsejson["access_token"]; } return token; }این تست اعتبارسنجی برنامه asp.net core 2.0 شما را با auth0 تکمیل می کند. در صورت نیاز می توانید کد سورس کامل برنامه را از githubدانلود کنید.خلاصهدر این مقاله یک برنامه asp.net core 2 web api را ساختید و با auth0 ادغام کردید تا api را فقط به کلاینت های معتبر نمایش دهید. این اولین گام در مجموعه مقالات است که نشان می دهد چگونه یک برنامه مدرن کامل بسازید. این برنامه بر پایه asp.net core api است که شما فقط آن را در یک برنامه react single page ایجاد کردید. در مقاله بعدی این برنامه single page را می سازید تا به کاربران اجازه دهید در کتاب فروشی گشت و گذار کنند. با ما همراه باشید. به اشتراک بگذارید :