« ... حالا بعد از اعمال روش ارائه شده در این مطلب (ذخیرهسازی token و refresh token در دیتابیس) چطور میتوانیم کاربرانی که از توکن قبلی استفاده میکنند را مجبور به Sign out کنیم؟ ...»همان قسمت «تهیه یک اعتبارسنج توکن سفارشی» مطلب جاری هست که از نتیجهی «پیاده سازی Logout» استفاده میکند. یا حتی میتوانید در قسمت logout یک SerialNumber را هم تغییر دهید که به صورت یک Claim سفارشی در توکن قبلی وجود داشته باشد. عدم انطباق این مقادیر را در این اعتبارسنج سفارشی بررسی کنید.
معرفی Zen Coding یا Emmet Syntax
معرفی Zen Coding یا Emmet Syntax
برای من همیشه نوشتن کدهای HTML با دشواری و مرارتهای زیادی همراه بوده. نوشتن ساختارهای تو در تو، قرار دادن id و class مناسب و باز و بسته کردن تگها و قرار دادن قرزندها در داخل تگها حقیقتا کار هایی خسته کننده، تکراری و حوصله سر بر هستند.
روش Zen Coding یا Emmet Syntax برای حل همین مسئله به وجود آمده و سرعت توسعه کدهای HTML را بسیار بیشتر خواهد کرد. پس از استفاده از این روش، به هیچ وجه قادر نخواهید بود که به روش سنتیِ گذشته کدهای HTML بزنید.
1. مثلا با استفاده از دستور div#control.panel.panel-success و فشردن کلید tab، یک div با شناسه panel و کلاسهای panel و panel-success ساخته خواهد شد.
2. با استفاده از Zen Codding به راحتی میتوانیم المنتهای داخلی هم در یک خط تعریف کنیم. مثلا ul>li*5 موجب خواهد شد یک ul همراه با پنج المنت li در درون اش تعریف شود.
سعی کنید حتما از روش Zen Coding استفاده کنید، چرا که سرعت توسعه شما را به شدت بالا خواهد برد.
Zen Coding پس از نصب افزونه Web Essentials در ویژوال استودیو افزوده خواهد شد. همچنین Visual Studio Code به طور پیش فرض از این روش پشتیبانی میکند.
معرفی Xamarin و مزیتهای استفاده از آن
Url Routing در ASP.Net WebForms
- بهینه سازی فایلهای js و css در برنامههای ASP.NET با استفاده از Combres - قسمت اول
- فشرده سازی فایلهای CSS و JavaScript بصورت خودکار توسط MS Ajax Minifier
- Adding Bundling and Minification to Web Forms
- Building a basic Web Forms application using Visual Studio 2013
- Bundling and Minification in ASP.Net 4.5
- همه مردان استیو جابز | www.caffecinema.com
- تقویم فارسی جاوا اسکریپت | amib.ir
- چک لیست شکست در RUP | hamidreza.info
- سیر تکاملی Delegate ها - قسمت چهارم، Func and Action | www.persiadevelopers.com
- مجله کامپیوتر - دانلود کتاب آموزش نرم افزار Microsoft Word 2007 | pcmagblog.blogfa.com
- مدرسه هوشمند ایرانی - مقایسه مدارس ژاپن با مدارس ایران | smartschool-ir.blogfa.com
- Dark Pastel Visual Studio Theme | www.servicestack.net
- مدلی دیگر از refactoring یک عبارت if | blog.drorhelper.com
- بررسی ابزار Advanced Group Policy Management (قسمت سوم) | (رضا علیخانی) | www.iransec.ir
- برطرف کردن مشکل افزونه Regionerate در Visual Studio | محمد صاحب | www.dotnetdev.info
- برنامه نویسی تجاری و چندلایه در دات نت | ebook.veyq.ir
- تغییر روش | (Afshar Mohebbi) | blog.afsharm.com
- چرا از استیو جابزها خوششان نمیاید؟ | علی مختاری | www.mywindows.ir
- Paint.NET v3.5.10 منتشر شد | blog.getpaint.net
- SQL-CE Toolbox 2.4 منتشر شد | sqlcetoolbox.codeplex.com
- Mozilla Firefox 7.0 Final – مرورگر فایرفاکس | کـاوه | www.barnameha.com
- اشتباهات رایج برنامه نویسی در شیرپوینت – قسمت اول | ramin | pspcommunity.org
- فایرفاکس ۷ با کروم ۱۴ شاخ به شاخ شدند! | علی مختاری | www.mywindows.ir
- Namespace Global و VB | blogs.msdn.com
- Quick Launch در نگارش بعدی ویژوال استودیو | blogs.msdn.com
- اطلاعاتی بیشتر در مورد پروژه Masive | wekeroad.com
- اولین به روز رسانی RAD Studio XE2 | vcldeveloper.com
- کتابخانههای قابل انتقال در دات نت 4 و نیم | channel9.msdn.com
- نگارش جدید Ajax Control Toolkit منتشر شد | stephenwalther.com
- نگارش جدیدی از TPL Dataflow منتشر شد | blogs.msdn.com
در ورژنهای قبلی ویژوال استودیو، در زمان بارگذاری پروژه، احتیاجی به اجرای نرم افزارهای تحریم گذر نبود؛ همانند ورژن 15.6. ولی در این ورژن که من نصب کردم بدلیل نصب خودکار کتابخانههای متریال دیزاین، باید از این گونه نرم افزارها نیز استفاده کرد.
درقسمت بعدی گزینه BlankApp را انتخاب و در قسمت Minimum Android Version که با انتخاب آن میتوانیم ورژن گوشیهای اندروید برای استفاده از این اپلیکیشن را انتخاب نماییم. به عنوان مثال با انتخاب اندروید 4.4 برنامه ما صرفا برای گوشیهای اندورید 4.4 به بالا جواب میدهد. بعد از تایید، پروژه باز شده که با این solution روبرو میشویم.
- قسمت Properties را اگر بازکنیم، با دو گزینه روبرو میشویم که یکی فایل android manifest هست و اگر روی properties آن کلیک و ویژگیهایی را انتخاب کنیم، بطور خودکار بر روی manifest تاثیر میگذارند. در قسمتهای بعد در این رابطه جداگانه بحث خواهیم کرد.
- در قسمت Asset که به معنای منابع اندروید میباشد، به عنوان مثال صفحات Razor، فونت و یا صفحات HTML و یا عکس و یا ... را میتوانیم قرار دهیم.
- در قسمت Resource که پوشههای آن layout ،mipmap ،values و resource.designer میباشند، در پوشه layout میتوانیم صفحات استاندارد اندروید را شروع به طراحی کنیم. درقسمت mipmap عکسها و یا فایلهای xml ایی را که قرار است استفاده کنیم، در پروژه قرار میدهیم. در قسمت value که بیشتر برای انتخاب و تغییر تم یا استفاده از Resourceها (همانند Asp.mvc که استفاده میکردیم) است که البته با ساختاری متفاوت در اندروید از آنها استفاده میکنیم، قرار میگیرند.
- در قسمت Resource.Designer که در مطالب بعد با آن آشنا خواهید شد، تمامی آیتمهای انتخابی از جمله Layout ها و عکسها و... با ذخیره کردن در این قسمت دخیره میشوند که بعد با رفرنس دادن از طریق resource پروژه میتوانیم از عکسها و لیآوتها در کد نویسی استفاده کنیم.
- در انتها جهت معرفی به mainactivity میرسیم که یک صفحه است شامل المنتها و اجزای مختلف و کاربر میتواند با آن ارتباط برقرار کند.
[Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true)] public class MainActivity : AppCompatActivity { protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); // Set our view from the "main" layout resource SetContentView(Resource.Layout.activity_main); } }
- در گزینه بعدی Mainluncher را میبینیم که تعیین کنندهی نقطه شروع اکتیویتی ما در بین اکتیویتیهای دیگر میباشد.
بدیهی است درایورهای مربوطه به گوشی اندروید را باید تهیه کرد که در سایت مربوط به سازنده و یا در سایتهای دیگر میتوانید دانلود کنید. اولین برنامه را مینویسیم که هدف از آن، اجرای 10 دکمه بصورت داینامیک هست و اینکه با کلیک بر روی هر کدام از دکمهها، رنگ آن آبی شود.
protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); LinearLayout ln; Button btn; // Set our view from the "main" layout resource SetContentView(Resource.Layout.activity_main); for (int i = 0; i < 5; i++) { btn = new Button(this); btn.Text = i.ToString(); ln= FindViewById<LinearLayout>(Resource.Id.linearLayout1); btn.Click += Btn_Click; ln.AddView(btn); } } private void Btn_Click(object sender, System.EventArgs e) { Button btntest = sender as Button; btntest.SetBackgroundColor(Android.Graphics.Color.Blue); } }
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:minWidth="25px" android:minHeight="25px"> <LinearLayout android:orientation="vertical" android:minWidth="25px" android:minHeight="25px" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/linearLayout1" /> </RelativeLayout>