کنترل DatePicker شمسی مخصوص Silverlight 4
تاریخ شمسی برای blogger !
دست شما درد نکند و کارتان آفرین دارد.
یکی دو سالی است که از تاریخ فارسی در بلاگر استفاده میکنم. علت هم روشن است چون بازدیدکنندگان ساکن ایران درک روشنی از تاریخ میلادی ندارند. از طرف دیگر مشکل دیگری در اینصورت به وجود »یاید . متاسفانه واقعیت اینست و کراراً مشاهده شده است که ساکنین خارج از کشور تاریخ شمسی را گم میککنند و درک درستی از زمان به تاریخ شمسی ندارند.
راه حل من دستکاری در قالب بلاگر و قرار دادن هر دو در کنار هم بوده است.
نمیدانم! اگر برایتان امکان پذیر باشد که ورژن دیگری را هم تهیه کنید که هر دو را داشته باشد بسیار مطلوب است و جهت به کار گیری کار خوب شما من مجبور به سر و کله زدن با قالب بلاگر نمیشوم.
کمان میکنم موضوعی که گفتم یعنی داشتن هر دو تاریخ شمسی و میلادی در کنار هم یک نیاز واقعی است که تقرباً در اینباره بحثی نشده است ئ وراه حل آسانی هم برای آن نبوده است
بازهم ممنون و موفق باشید
معرفی پروژه فروشگاهی Iris Store
.Skip(page * pageSize).Take(pageSize)
اگر علاقمند هستید از به روز رسانیهای بستههای نیوگت مورد علاقهی خود مطلع شوید، میتوانید از MyGet استفاده کنید. برای این منظور پس از ثبت نام در سایت MyGet، یک فید جدید را ایجاد کنید و بستههای مورد علاقهی خود را به آن اضافه کنید. سپس در منوی سمت چپ صفحهی فید ایجاد شده، گزینهی Package Sources را انتخاب کرده و بر روی دکمهی Edit آن کلیک کنید. در اینجا میتوان انتخاب کرد که به روز رسانیهای انجام شده به شما ایمیل شوند.
WebStorage
- مکانیزم ذخیره سازی:
- چند نسخه از مرورگر
- محدودیت حجمی
- session storage
- local storage
- SessionStorage
- LocalStorage
با اینکه توصیه نامه W3C از پایان کار پیاده سازی این قابلیت خبر میدهد ولی در حال حاضر که این مقاله تدوین شده است هنوز نهایی اعلام نشده است. برای پشتیبانی مرورگرهای قدیمی از webstorage میتوان از فایل جاوااسکریپتی Store.js کمک گرفت.
مفاهیم امنیتی و محافظت از داده ها
محدودیتهای حمایتی و حفاظتی webstorage دقیقا همانند کوکی هاست. به این معنی که وب سایتهای دیگر توانایی اتصال به webstorage سایت دیگری را ندارند. البته این مورد ممکن است برای وب سایت هایی که بر ساب دومین تکیه کردهاند ایجاد مشکل کند. برای حل این مسائل میتوانید از کتابخانههای سورس بازی چون Cross Storage که توسط Zendesk ارائه شده است، استفاده کرد.
همانند هر مکانیزم ذخیره سازی سمت کلاینت، مواردی توصیه میگردد که رعایت آنها از لحاظ امنیتی پر اهمیت است. به عنوان نمونه ذخیرهی اطلاعات شخصی و موارد حساس توصیه نمیگردد؛ چرا که احتمال دسترسی آسان نفوذگران به دادههای محلی و خواندن آنها وجود دارد.
Data Integrity یا یکپارچگی دادهها نیز در نظر گرفته شده است. باید حفاظتی در برابر عدم موفقیت ذخیره سازی دادهها نیز وجود داشته باشد. این عدم موفقیتها میتواند به دلایل زیر رخ دهد:
- اگر کاربر قابلیت webstorage را غیرفعال کرده باشد.
- اگر فضایی برای کاربر باقی نمانده باشد.
- با محدودیت حجمی webstorage مواجه شده است.
- با مواجه شدن با خطاها یک استثنا صادر میشود که میتوانید آن را دریافت و کنترلی را روی برنامه تحت وب داشته باشید. یک نمونه استثنا QuotaExceededError
IndexedDB
یکی از فرایندهای ذخیره سازی دادهها که همان مزایای webstorage را ارائه میدهد indexed Database API است. این قابلیت از HTML 5 اضافه شده است و قسمتی از مشخصات webstorage شناخته نمیشود. برای همین مستنداتی در حوزهی webstorage برای آن پیدا نخواهید کرد ولی قابلیتهایی فراتر از webstorage دارد.
این قابلیت پیچیدگی بیشتری را نسبت به خود webstorage ایجاد میکند، ولی فرصتهای بسیاری را برای ذخیره سازی دادههایی با معماریهای پیچیدهتر و رابطهها را میدهد. با استفاده از IndexedDB دادهها به شکل دیتابیسهای سمت سرور RDMS ذخیره میشوند و این قابلیت را دارید که به سمت آن کوئری هایی مشابه بانکهای اطلاعاتی سمت سرور را ارسال کنید.
در قسمت آتی نحوه کدنویسی آن را فرا خواهیم گرفت.
@page "/counter" <PageTitle>Counter</PageTitle>
@page "/counter" <PageTitle>Counter</PageTitle> <HeadContent> <meta name="description" content="Use this page to count things!" /> <meta name="author" content="VahidN"> <link rel="icon" href="favicon.ico" type="image/x-icon"> <link rel="sitemap" type="application/xml" title="Sitemap" href="@(NavigationManager.BaseUri)sitemap.xml" /> <link rel="alternate" type="application/rss+xml" href="@(NavigationManager.BaseUri)atom.xml"> <link rel="canonical" href="@(NavigationManager.BaseUri)good-content" /> <meta name="robots" content="index, follow" /> </HeadContent>
var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add<App>("#app"); builder.RootComponents.Add<HeadOutlet>("head::after");
بررسی علت CPU Usage بالای برنامه در حال اجرا
- در سرور 32 بیتی شما نمیتونید استفاده مناسبی از سخت افزاری که تهیه کردید بکنید. نیاز است به سرور 64 بیتی نقل مکان کنید. یعنی هزینه کردید اما ... از آن استفاده بهینهای نمیکنید.
- تابع SQL ، برای تبدیل تاریخ میلادی به شمسی وجود دارد (بگردید در انجمنها هست). از همان تابع در کوئریهای خودتون قبل از ارسال به گزارشات استفاده کنید. یعنی دیتا از همان اول تاریخ شمسی داشته باشد. به این صورت نیازی به استفاده از افزونه دیگری نیست.
- IIS یک قسمت دارد به نام Application pool . اولا به ازای هر برنامه بهتر است یک Application pool جدا درست کنید. این حالت دقیقا مثل اجرای هر سایت در یک پروسه جدا است. مثلا IE8 رو دیدید که هر tab آن در یک پروسه جدا اجرا میشود، یا مثلا مرورگر کروم هم به همین صورت است. Application pool در IIS هم دقیقا همین معنا را دارد. عادت متداول، استفاده از یک Application pool به ازای تمام سایتها است که غلط است. یعنی زمانیکه این توانایی هست چرا استفاده نمیکنید؟ ثانیا در همین Application pool میتونید تنظیم کنید که اگر میزان مصرف حافظه برنامه منتسب، مثلا به 600 مگ رسید لطفا خودت به صورت خودکار اون رو recycle کن تا مشکلات کمبود حافظه رخ ندهد.
- از برنامههای dotTrace و Ants memory profiler هم میتونید استفاده کنید. اینها قابلیت دیباگ پروسههای مرتبط با IIS رو هم دارند و دقیقا گزارشات آماری پیشرفتهای میتونند از وضعیت مصرف حافظه قسمتهای مختلف برنامه در اختیار شما قرار بدن: (+) و (+)
نگهداری سرور RavenDB
ایجاد و حذف بانکهای اطلاعاتی جدید
برای این منظور به آدرس http://localhost:8080 مراجعه و از طریق کنسول مدیریتی تحت وب RavenDB بر روی دکمه New database کلیک کنید.
در صفحه باز شده میتوان نام دیتابیس را مشخص کرد و همچنین در صورت نیاز افزونههایی مانند فشرده سازی یا رمزنگاری اطلاعات را نیز فعال نمود.
پس از ایجاد دیتابیس، برای حذف آن، بر روی نام دیتابیس کلیک راست کرده و گزینه Delete را انتخاب کنید
روش دیگر حذف اطلاعات یک بانک اطلاعاتی، مراجعه به سندهای آن و سپس کلیک راست بر روی گروهی از آنها برای حذف میباشد:
و یا سرور RavenDB را خاموش یا stop کنید. سپس به پوشه Database کنار فایل Raven.Server.exe مراجعه کرده، بانک اطلاعاتی خود را یافته و سپس کل پوشه آنرا Delete کنید.
سؤال: چگونه با دیتابیسهای ایجاد شده کار کنیم؟
تاکنون تمام مثالهای برنامه با بانک اطلاعاتی پیش فرض RavenDB کار کردند (چیزی شبیه به master database در اس کیوال سرور) و هیچگاه ابتدا یک دیتابیس جدید و مستقل را برای انجام آزمایشات خود، ایجاد نکردیم. بدیهی است این روش برای محیطهای کاری توصیه نمیشود.
برای نمونه در اینجا به System database این مجموعه وارد شدهایم که تعریف جزئیات بانک اطلاعاتی جدید ایجاد شده را در خود دارد.
جهت استفاده از بانک اطلاعاتی جدید ایجاد شده در کدهای خود، فقط کافی است خاصیت DefaultDatabase یک DocumentStore مقدار دهی شود:
using (var store = new DocumentStore { Url = "http://localhost:8080", DefaultDatabase = "Test2" }.Initialize()) { //... }
تهیه پشتیبان از بانکهای اطلاعاتی و بازیابی آنها
ابتدا نیاز است تمام بستههای مورد نیاز را یکجا از آدرس http://ravendb.net/download تهیه کنید. سپس به پوشه backup آن مراجعه کرده و از فایل اجرایی Raven.Backup.exe آن میتوان جهت تهیه پشتیبان از بانک اطلاعاتی خاصی استفاده نمود. لازم به ذکر است که این برنامه باید با سطح دسترسی ادمین اجرا شود.
Raven.Backup.exe --url==http://localhost:8080 --dest=d:\backup
برای بازیابی و Restore یک بانک اطلاعاتی ابتدا دستور Raven.Server.exe /help را صادر کنید تا کلیه سوئیچهای این برنامه مشخص شوند. یکی از آنها Restore نام دارد که پارامترهای dest و src را دریافت میکند (کجا بازیابی شود و از کجا اطلاعات را بخواند).
همچنین بجای backup و restore، امکان export و import نیز وجود دارند و برای انجام آن از برنامه Raven.Smuggler.exe که کنار Raven.Server.exe قرار دارد، میتوان استفاده کرد.
برای تهیه خروجی (که در حقیقت تهیه یک dump فشرده شده از اسناد JSON موجود است):
Raven.Smuggler.exe out http://localhost:8080/ dump.raven
Raven.Smuggler.exe in http://localhost:8080/ dump.raven