PGlite is a WASM (Webassembly) based TypeScript/JavaScript client library which helps to run PostgreSQL locally in Browser or in NodeJS / Bun. It does not include any dependencies. It is very light weight and it's size is 3 MB Gzipped. It supports many Postgres extensions like pgvector, live queries, bloom, btree, earthdistance, fuzzymatch and lot morebun.
این پنل هم مشابه پنلهای دیگر فایرباگ دارای یک بخش با عنوان Options Menu هست که با راست کلیک کردن بروی عناون یا کلیک بروی مثلث کنار عنوان پنل قابل دسترسی است. تنظیماتی که در اینجا قابل تعیین است عبارتند از:
- Enabled/Disabled : برای فعال/غیرفعال کردن پنل است. فعال بودن این قسمت ممکن است موجب کاهش سرعت بارگزاری صفحات شود.
- Track Throw/Catch : در صورت فعال بودن این گزینه، در صورت رویدادن خطا در بلاک try/catch ، دیباگر در آن نقطه از برنامه متوقف شده و کنترل برنامه به شما داده میشود. (البته بنده موفق بررسی کامل این قابلیت نشدم. ظاهرا ورژنهای آخری باگ دارند. مثل غیرفعال شدن کامل همین پنل، "Debugger not activated"! اگر کسی موفقیتی در کار با این مورد داشت، سپاسگذار میشوم اطلاع بدهد.)
- Show Break Notifications : در صورت فعال بودن این گزینه، هنگام توقف کدی در صفحه، اطلاعاتی در مورد علت توقف آن در بالای پنل ارائه خواهد شد.
Panel Toolbar
نواری است که ابزارهای پنل بروی آن قرار دارند و به ترتیب عبارنتد از:
- Break On Next : این دکمه که مشابه آن در اکثر پنلها وجود دارد، هنگام اجرای یک دستور JavaScript آن را متوقف کرده و شما میتوانید به بررسی آن بپردازید.
- Script Type Menu : با انتخاب یکی از چهار گزینه موجود میتوانید نتیجه اسکریپتهای اضافه شده به صفحه که در قسمت Script Location Menu نمایش داده شده اند را فیلتر کنید. (متاسفانه این گزینه هم مشابه گزینه Track Throw/Catch برای بنده، ورژن 1.11.4 نتیجه ای نداشته است.)
- Script Location Menu : در این قسمت اسکریپت هایی که در صفحه وجود دارند نمایش داده میشوند. مشابه پنل HTML میتوانید هنگام بازبودن این لیست، با تایپ کردن نتایج را فیلتر کنید.
همچنین با راست کلیک کردن بروی این قسمت میتوانید آیتم یا فایل انتخاب شده را در ادیتور مورد نظر باز کنید، در پنل DOM بررسی کنید، فایل را در یک تب جدید باز کنید، آدرس فایل را در حافظه موقت کپی کنید. - Execution Control Buttons : این دکمهها زمانی که دیباگر به یک Break Point برسد یا به دلیل فعال بودن دکمههای Break On ... متوقف شود، فعال میشوند و با کمک آنها میتوانید عملیات خطایابی را ادامه دهید.
در جدول زیر این دکمهها و توضیحات تکمیلی هریک را مشاهده میکنید:نوع دکمه Shortcut توضیحات اجرای مجدد Shift + F18 Stack فعلی را مجدد اجرا میکند.
(Stack: لیستی از توابع به ترتیبی که با فراخوانی آنها تابع جاری فراخونی شده است. در مقاله بعدی توضیحات بیشتری ارائه خواهد شد.)ادامه F8 اجرای برنامه را (تا Break Point بعدی) ادامه میدهد. وارد شدن F11 در صورت رسیدن به یک تابع، با زدن این دکمه دیباگر وارد بندهی آن تابع میشود. رد شدن F10 اجرای برنامه را در سطح (Scope) فعلی ادامه میدهد.
مشابه قبلی وارد تابع نمیشود.خارج شدن Shift + F11 کنترل به تابعی که تابع جاری را فراخوانی کرده است بازمیگردد.
روشی سودمند زمانی که هنگام خطایابی وارد کدهای jQuery یا مثل آن میشوید :)
Context Menu
تنها قابلیت جدیدی که در این منو وجود دارد، Run To This Line است. هنگامی که پنل در حالت دیباگ است، با راست کلیک کردن بروی خط مورد نظر و انتخاب گزینهی Run to This Line میتوانید خطوط میانی را رد کرده و به خط مورد نظر بروید. البته خطوطی که رد میشوند ، اجرا میشوند.
این کار معادل این است که درخط مورد نظر یک Break Point اضافه کنید و دکمهی F8 را بزنید.
Breakpoints
توسط Break Pointها میتوانید خطوطی از برنامه را برای خطایابی مشخص کنید. زمانی که دیباگر به نقطهی مورد نظر برسد متوقف شده و میتوانید به بررسی برنامه بپردازید. میتوانید با بردن موس بروی متغییرها مقدار آن هارا بررسی کنید یا با کمک قسمتهای Watch و Stack در پنل جانبی اطلاعات بیشتری در مورد اجرای برنامه در نقطهی جاری بدست آورید.(در مورد پنلهای جانبی در قسمت بعدی توضیح خواهم داد.) همچنین با کمک دکمه هایی که در جدول فوق توضیح داده شده اند روند اجرای برنامه را خط به خط ادامه دهید.
برای ایجاد یک Break Point، بروی شمارهی خط مورد نظر کلیک کنید. نقطه ای قرمز رنگ نمایش داده خواهد شد. البته دقت کنید که همهی خطوط برنامه اجرا نمیشوند و نمیتوانید در آن خطوط از این امکان بهره ببرید. شمارهی خطوط فعال با رنگ سبز مشخص شده اند.
امکان مفید دیگری که همراه با این قابلیت ارائه شده است (که در محیطهای دیگر هم وجود دارد)، عبارت شرطی است. به این صورت که ضمن قرار دادن Break Point در یک نقطه از برنامه، میتوانید یک شرط هم برای توقف برنامه تعیین کنید.
فرض کنید یک حلقه دارید که 300 بار تکرار میشود و مثلا در اجرای 250ام آن مشکلی وجود دارد. در این حالت میتوانید از این قابلیت استفاده کنید و شرط توقف را i == 250 قرار بدهید.
برای تعیین یک شرط برای یک Break Point، بروی خط مورد نظر راست کلیک کنید و شرط را در قسمت مشخص شده وارد کنید.
امکان مفید دیگری که وجود دارد، Break Point خودکار است. اگر از مقالات قبلی دکمهی Break On All Errors در پنل Console و Break On Mutate در پنل HTML را بخاطر داشته باشید میدانید که در هر یک هنگام اجرای یک رخداد مورد نظر، دیباگر در خطی که موجب آن رخداد شده است متوقف شده و میتوانید کنترل برنامه را بدست بگیرید. در این حالت نیازی به ایجاد Break Point نیست و FireBug بصورت خودکار این کار را انجام میدهد.
Search
این بخش در همه پنلها وجود دارد با این تفاوت که در پنل Script و CSS دو گزینهی Multiple Files و Use Regular Expression وجود دارد که به ترتیب امکان جستجو در فایلهای js و css اضافه شده به صفحه هستند. قابلیت دیگری هم که فقط در پنل Script وجود دارد، پرش به یک خط در برنامه است به این صورت که با وارد کردن # و یک عدد به عنوان شمارهی خط، همان خط نمایش داده میشود.
در قسمت بعدی پنل جانبی که شامل سه بخش Watch، Stack و Breakpoints است را بررسی خواهیم کرد.
CAPTCHAfa
reCAPTCHA ایدهای است که با نمایش کلمات واقعی و اسکن شده از کتابهای قدیمی، بخشی از مشکلات را حل کرده و از کاربران اینترنت برای شناسایی کلماتی که رایانه توانایی خواندن آنها را ندارد استفاده میکند. (شکل زیر)
با وارد کردن درست هر کلمه، بخشی از یک کتاب، روزنامه، و یا مجلهی قدیمی در رایانه شناسایی و به فرمت دیجیتال ذخیره میشود. به این شکل شما در دیجیتالی کردن متون کاغذی سهیم هستید.
پروژهی reCAPTCHA توسط گوگل حمایت میشود و در این آدرس قرار دارد.
به تازگی تیمی از دانشکده فنی دانشگاه تهران به همراه انستیتو تکنولوژی ایلینویز شیکاگو، پروژه ای بر همین اساس اما برای متون فارسی با عنوان CAPTCHAfa تولید کرده اند (شکل زیر) که در این آدرس در دسترس است. امیدوارم این پروژه به گونه ای تغییر کنه که برای دیجیتالی کردن متنهای پارسی استفاده بشه. در حال حاضر، این پروژه از کلماتی از پیش تعریف شده استفاده میکنه.
متاسفانه این پروژه در حال حاضر فقط توسط برنامههای PHP قابل استفاده است. از این رو بر آن شدم تا اون رو برای برنامههای ASP.NET (هم Web Forms و هم MVC) آماده کنم. برای استفاده از CAPTCHAfa نیاز به یک کلید خصوصی و یک کلید عمومی دارید که از این آدرس قابل دریافت است.
کدهای پروژهی Class Library به شرح زیر است.
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= // Captchafa demo for ASP.NET applications // by: Behrouz Rad // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= namespace Captcha { using System; using System.Collections.Generic; using System.IO; using System.Net; using System.Text; using System.Web; public class Captchafa { private static readonly string PRIVATE_KEY = "your private key"; private static readonly string PUBLIC_KEY = "your public key"; private static readonly string CAPTCHAFA_API_SERVER = "http://www.captchafa.com/api"; private static readonly string CAPTCHAFA_VERIFY_SERVER = "http://www.captchafa.com/api/verify/"; private IDictionary<string, string> CaptchafaData { get { HttpContext httpContext = HttpContext.Current; string remoteIp = httpContext.Request.ServerVariables["REMOTE_ADDR"]; string challenge = httpContext.Request.Form["captchafa_challenge_field"]; string response = httpContext.Request.Form["captchafa_response_field"]; IDictionary<string, string> data = new Dictionary<string, string>() { {"privatekey" , PRIVATE_KEY }, {"remoteip" , remoteIp }, {"challenge" , challenge }, {"response" , response } }; return data; } } public static string CaptchafaGetHtml() { return string.Format("<script type=\"text/javascript\" src=\"{0}/?challenge&k={1}\"></script>", CAPTCHAFA_API_SERVER, PUBLIC_KEY); } public bool IsAnswerCorrect() { string dataToSend = this.CaptchafaPrepareDataToSend(this.CaptchafaData); string result = this.CaptchafaPostResponse(dataToSend); return result.StartsWith("true"); } private string CaptchafaPrepareDataToSend(IDictionary<string, string> data) { string result = string.Empty; StringBuilder sb = new StringBuilder(); foreach (var item in data) { sb.AppendFormat("{0}={1}&", item.Key, HttpUtility.UrlEncode(item.Value.Replace(@"\", string.Empty))); } result = sb.ToString(); sb = null; result = result.Substring(0, result.LastIndexOf("&")); return result; } private string CaptchafaPostResponse(string data) { StreamReader reader = null; Stream dataStream = null; WebResponse response = null; string responseFromServer = string.Empty; try { WebRequest request = WebRequest.Create(CAPTCHAFA_VERIFY_SERVER); request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; byte[] byteData = Encoding.UTF8.GetBytes(data); request.ContentLength = byteData.Length; dataStream = request.GetRequestStream(); dataStream.Write(byteData, 0, byteData.Length); dataStream.Close(); response = request.GetResponse(); dataStream = response.GetResponseStream(); reader = new StreamReader(dataStream); responseFromServer = reader.ReadToEnd(); } finally { if (reader != null) { reader.Close(); } if (dataStream != null) { dataStream.Close(); } if (response != null) { response.Close(); } } return responseFromServer; } } }
ابتدا ارجاعی به فایل Captchafa.dll ایجاد کنید و سپس در روال Page_Load، کد زیر را قرار دهید. این کار برای تزریق اسکریپ CAPTCHAfa به صفحه استفاده میشود.
if (!IsPostBack) { litCaptcha.Text = Captchafa.CaptchafaGetHtml(); }
litCaptcha، یک کنترل Literal است که اسکریپت تولید شده، به عنوان متن آن معرفی میشود.
بررسی صحت مقدار وارد شده توسط کاربر (مثلاً در روال Click یک دکمه) به صورت زیر است.
Captchafa captchaFa = new Captchafa(); bool isAnswerCorrect = captchaFa.IsAnswerCorrect(); if (isAnswerCorrect) { // پاسخ صحیح است } else { // پاسخ صحیح نیست }
استفاده در پروژههای ASP.NET MVC
ابتدا ارجاعی به فایل Captchafa.dll ایجاد کنید. در ASP.NET MVC بهتره تا فرایند کار رو در یک HTML helper کپسوله کنیم.
public static class CaptchaHelper { public static MvcHtmlString Captchafa(this HtmlHelper htmlHelper) { return MvcHtmlString.Create(Captcha.Captchafa.CaptchafaGetHtml()); } }
بررسی صحت مقدار وارد شده توسط کاربر (پس از ارسال فرم به Server) به صورت زیر است.
[HttpPost] [ActionName("Index")] public ViewResult CaptchaCheck() { Captchafa captchaFa = new Captchafa(); bool isAnswerCorrect = captchaFa.IsAnswerCorrect(); if (isAnswerCorrect) { ViewBag.IsAnswerCorrect = true; } else { ViewBag.IsAnswerCorrect = false; } return View(); }
@using CaptchafaDemoMvc.Helpers; @{ ViewBag.Title = "Index"; } <form action="/" method="post"> @Html.Captchafa(); <input type="submit" id="btnCaptchafa" name="btnCaptchafa" value="آزمایش" /> @{ bool isAnswerExists = ViewBag.IsAnswerCorrect != null; } @if (isAnswerExists) { if ((bool)ViewBag.IsAnswerCorrect == true) { <span id="lblResult">پاسخ صحیح است</span> } else { <span id="lblResult">پاسخ صحیح نیست</span> } } </form>
دموی پروژه رو در این آدرس قرار دادم. پروژهی نمونه نیز از این آدرس قابل دریافت است.
پ.ن: به زودی برخی بهبودها رو بر روی این پروژه انجام میدم.
مروری بر Claim
Relying party application
هر برنامه سمت client که از Claim پشتیبانی کند
مزایای Claim
- جدا سازی برنامه از جزییات شناسایی
- انعطاف پذیری در احراز هویت
- Single sign-on
- عدم نیاز به VPN
- متحد کردن مجموعه با دیگر شرکت ها
- متحد کردن مجموعه با سرویسهای غیر از AD
عناصر Claim
Claim شامل عناصر زیر میباشد :
- Token
- Claim
- Provider/Issuer
- Sharepoint STS
- ADFS
- ACS
- OID
- ,و غیره
آموزش JavaScript Front-End Web App
Material Design برای bootstrap
This Bootstrap theme is an easy way to use the new Material Design
guidelines by Google in your Bootstrap 3 based application.
Just include the theme right after the Bootstrap CSS and include the
javascript at the end of your document, everything will be converted to
Material Design (paper) style
معرفی Kendo UI
Kendo UI یک فریم ورک جاوا اسکریپتی ساخت برنامههای مدرن و تعاملی وب است و برای رسیدن به این مقصود، از JavaScript، CSS 3، HTML 5 و jQuery کمک میگیرد.
امکانات فراهم شده توسط Kendo UI
1) انواع و اقسام ویجتها: کنترلهای وب تهیه شده برفراز jQuery
ویجتهای آن در سه گروه کلی قرار میگیرند:
- گروه وب، مانند گرید، tree-view و غیره.
- گروه DataViz که جهت نمایش بصری اطلاعات و ترسیم انواع و اقسام نمودارها کاربرد دارد.
- گروه موبایل که با استفاده از فناوری adaptive rendering، در سیستم عاملهای مختلف موبایل، مانند اندروید و آی او اس، ظاهری بومی و هماهنگ با آنها را ارائه میدهد.
2) منبع داده سمت کاربر (Client side data source)
منبع داده سمت کاربر Kendo UI، از انواع و اقسام منابع داده محلی مانند آرایههای جاوا اسکریپتی تا منابع داده راه دور، مانند JSON، XML و JSONP، جهت نمایش اطلاعات و data binding پشتیبانی میکند. این منبع داده، مواردی مانند صفحه بندی، مرتب سازی اطلاعات و گروه بندی آنها را نیز فراهم میکند. به علاوه با عملیات ثبت، ویرایش و حذف اطلاعات نیز هماهنگی کاملی را دارد.
3) به همراه یک فریم ورک MVVM توکار است
این فریم ورک MVVM مواردی مانند two way data binding و همچنین declarative binding را نیز پشتیبانی میکند.
4) امکان تعویض قالب
5) پویا نمایی، کشیدن و رها کردن
6) فریم ورک اعتبارسنجی
چرا Kendo UI؟
- مهمترین مزیت کار با Kendo UI، فراهم آوردن تمام نیازهای توسعهی یک برنامهی مدرن وب، تنها در یک بسته است. به این ترتیب دیگر نیازی نیست تا گرید را از یکجا، tree-view را از جایی دیگر و کتابخانههای رسم نمودار را از منبعی ناهمگون با سایر عناصر برنامه دریافت و استفاده کنید؛ در اینجا تمام اینها در قالب یک بستهی آماده برای شما فراهم شدهاست و همچنین با یکدیگر سازگاری کاملی دارند.
- تمام ویجتهای آن برای نمایش سریع با کارآیی بالا طراحی شدهاند.
- پشتیبانی خوب آن. این فریم ورک محصول شرکتی است که به صورت تخصصی کار تهیه کامپوننتهای وب و دسکتاپ را انجام میدهد.
مرورگرهای پشتیبانی شده
یکی دیگر از مزایای مهم کار با Kendo UI پشتیبانی گستردهی آن از اکثر مرورگرهای موجود است. این فریم ورک با مرورگرهای زیر سازگار است:
- IE 7 به بعد
- فایرفاکس 10 به بعد
- تمام نگارشهای کروم
- اپرا 10 به بعد
- سفاری 4 به بعد
مجوز استفاده از Kendo UI
Kendo UI با سه مجوز ذیل ارائه میشود:
- 30 روزه آزمایشی رایگان
- تجاری
- سورس باز با مجوز Apache
پیشتر نسخهی تجاری آن تحت مجوز GPL نیز در دسترس بود. اما اخیرا مجوز GPL آن حذف شده و به Apache تغییر یافته است. اما باید در نظر داشت که نسخهی سورس باز آن شامل کنترلهای مهمی مانند «گرید» نیست و این موارد تنها در نسخهی تجاری آن لحاظ شدهاند.
مثالهای Kendo UI
پس از دریافت بستهی کامل آن، پوشههایی مانند js، styles و امثال آن قابل مشاهده هستند؛ به همراه پوشهی examples آن که حداقل 86 پوشهی دیگر در آن جهت ارائه مثالهایی از نحوهی کاربرد المانهای مختلف آن تدارک دیده شدهاند.
نحوهی افزودن Kendo UI به صفحه
از آنجائیکه Kendo UI یک فریم ورک جاوا اسکریپتی است، همانند سایر برنامههای وب، افزودن تعاریف فایلهای js، css و تصاویر مرتبط با آن، برای شروع به کار کفایت میکند. برای این منظور ابتدا پوشههای js و styles بستهی دریافتی آنرا به برنامهی خود اضافه کنید (این پوشهها در فایل پیوست انتهای بحث موجود هستند).
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> <!--KendoUI: Web--> <link href="styles/kendo.common.min.css" rel="stylesheet" type="text/css" /> <link href="styles/kendo.default.min.css" rel="stylesheet" type="text/css" /> <script src="js/jquery.min.js" type="text/javascript"></script> <script src="js/kendo.web.min.js" type="text/javascript"></script> <!--KendoUI: DataViz--> <link href="styles/kendo.dataviz.min.css" rel="stylesheet" type="text/css" /> <script src="js/kendo.dataviz.min.js" type="text/javascript"></script> <!--KendoUI: Mobile--> <link href="styles/kendo.mobile.all.min.css" rel="stylesheet" type="text/css" /> <script src="js/kendo.mobile.min.js" type="text/javascript"></script> <script type="text/javascript"> $(function() { $("#pickDate").kendoDatePicker(); }); </script> </head> <body> <span> Pick a date: <input id="pickDate" type="text"/> </span> </body> </html>
دریافت سورس کامل این قسمت که حاوی فایلهای اصلی kendoui.professional.2014.2.1008 نیز میباشد:
KendoUI01.7z