نظرات مطالب
باید همه فایلهای پروژه رو تو قسمت stage وارد کنیم یا فقط فایل هایی که قراره تغییر بدیم؟
نظرات مطالب
رمزنگاری Connection String از طریق خط فرمان
بله. با انواع فایلهای کانفیگ برنامههای دات نت سازگار است.
خیر. همزمانی در اینجا به معنای امکان استفاده همزمان از فایلهای مستقل aspx و cshtml یا vbhtml است.
نظرات مطالب
ASP.NET MVC #11
در مورد Refactoring فایلهای View در قسمت بعدی توضیح دادم.
نظرات مطالب
Blazor 5x - قسمت سوم - مبانی Razor
نکتهای در مورد تگ text
اگر در این حالت برنامه را کامپایل کنیم، با خطای زیر مواجه میشویم:
علت اینجا است که در دستور زبان Razor، واژهی text، یک واژهی کلیدی است و هدف آن، جدا کردن یک قطعهی متنی، از قسمتی از کد #C نوشته شدهی در فایلهای razor است. هدف اصلی آن، تعیین مرزی بین کد #C و یک متن خالص است. به همین جهت است که عنوان میکند، تگ text نمیتواند دارای attributes باشد. برای رفع این مشکل، روش escape کردن آن، قرار دادن این تگ مخصوص SVG، داخل یک تگ text دیگر است:
فرض کنید قصد دارید یک تصویر SVG را که به همراه متن است، نمایش دهید. نمایش متن در این حالت، توسط تگ text انجام میشود:
<text x="50" y="50">Some text</text>
"<text>" and "</text>" tags cannot contain attributes
<text> <!-- Here are your actual Text tags --> <text x="50" y="50">Some text</text> </text>
مطالب
OpenCVSharp #2
کتابخانهی اصلی OpenCV، دارای دو نوع اینترفیس C و ++C است. اینترفیس C آن مرتبط است به نگارشهای 1x آن و اینترفیس ++C آن به همراه نگارشهای 2x آن ارائه شدهاند. کتابخانهی OpenCVSharp هر دو نوع اینترفیس یاد شده را پشتیبانی میکند. در این قسمت نگاهی خواهیم داشت به نحوهی بارگذاری و نمایش تصاویر در OpenCV به کمک متدهای اینترفیس C آن، مانند cvLoadImage، cvShowImage، cvReleaseImage.
بارگذاری و نمایش تصاویر به کمک OpenCVSharp
متدهای اینترفیس C مربوط به OpenCV، در OpenCVSharp با ذکر کلاس Cv آن قابل دسترسی هستند. برای نمونه متدهای C یاد شدهی در ابتدای بحث، چنین معادلی را در OpenCVSharp دارند:
متد cvLoadImage اینترفیس C، به Cv.LoadImage تبدیل شدهاست و مابقی نیز به همین ترتیب.
در اینجا با استفاده از متد LoadImage، تصویری را از مسیر مشخصی، بارگذاری میکنیم. سپس یک پنجرهی OpenCV ایجاد و این تصویر در آن نمایش داده میشود. متد WaitKey منتظر فشرده شدن یک کلید بر روی پنجرهی OpenCV میشود. پس از آن این پنجره تخریب و همچنین منابع native این تصویر آزاد میشوند.
متد LoadImage، پارامتر دومی را نیز میپذیرد:
برای مثال در اینجا میتوان به کمک مقدار LoadMode.GrayScale، تصویر را به صورت سیاه و سفید بارگذاری کرد.
Enum تعریف شدهی در اینجا قابلیت or یا جمع منطقی را نیز دارد. برای مثال میتوان مقدار LoadMode.AnyColor | LoadMode.AnyDepth را نیز مشخص کرد؛ جهت بارگذاری تصویر اصلی با مشخصات کامل آن که حالت پیش فرض است.
کلاسهای پشت صحنهی اینترفیس C در OpenCVSharp
علت وجود کلاس Cv در OpenCVSharp، سهولت برگرداندن مثالهای C کتابخانهی OpenCV به نمونههای دات نتی است. اما اگر قصد داشته باشید از کلاسهای پشت صحنهی این اینترفیس در OpenCVSharp استفاده کنید، میتوان کدهای فوق را به نحو ذیل نیز بازنویسی کرد:
خروجی متد LoadImage از نوع کلاس IplImage است. در اینجا میتوان همین کلاس را وهله سازی کرد و مورد استفاده قرار داد. به علاوه اینبار این کلاس تهیه شده، اینترفیس IDisposable را نیز پیاده سازی میکند. بنابراین میتوان با استفاده از عبارت using کار آزاد سازی منابع آنرا خودکار کرد.
همچنین پنجرهی OpenCV نیز در اینجا با کلاس CvWindow پیاده سازی میشود که این کلاس نیز اینترفیس IDisposable را پیاده سازی میکند.
یک نکتهی تکمیلی
اگر متد LoadImage کتابخانهی OpenCV قادر به بارگذاری تصویر شما نبود، متد دیگری به نام IplImage.FromFile نیز پیش بینی شدهاست. این متد از امکانات System.Drawing.Bitmap دات نت برای بارگذاری تصویر و تبدیل آن به فرمت OpenCV استفاده میکند.
کدهای کامل این مثال را از اینجا میتوانید دریافت کنید.
بارگذاری و نمایش تصاویر به کمک OpenCVSharp
متدهای اینترفیس C مربوط به OpenCV، در OpenCVSharp با ذکر کلاس Cv آن قابل دسترسی هستند. برای نمونه متدهای C یاد شدهی در ابتدای بحث، چنین معادلی را در OpenCVSharp دارند:
using OpenCvSharp; namespace OpenCVSharpSample02 { class Program { static void Main(string[] args) { var img = Cv.LoadImage(@"..\..\images\ocv02.jpg"); Cv.NamedWindow("window"); Cv.ShowImage("window", img); Cv.WaitKey(); Cv.DestroyWindow("window"); Cv.ReleaseImage(img); } } }
در اینجا با استفاده از متد LoadImage، تصویری را از مسیر مشخصی، بارگذاری میکنیم. سپس یک پنجرهی OpenCV ایجاد و این تصویر در آن نمایش داده میشود. متد WaitKey منتظر فشرده شدن یک کلید بر روی پنجرهی OpenCV میشود. پس از آن این پنجره تخریب و همچنین منابع native این تصویر آزاد میشوند.
متد LoadImage، پارامتر دومی را نیز میپذیرد:
var img = Cv.LoadImage(@"..\..\images\ocv02.jpg", LoadMode.GrayScale);
Enum تعریف شدهی در اینجا قابلیت or یا جمع منطقی را نیز دارد. برای مثال میتوان مقدار LoadMode.AnyColor | LoadMode.AnyDepth را نیز مشخص کرد؛ جهت بارگذاری تصویر اصلی با مشخصات کامل آن که حالت پیش فرض است.
کلاسهای پشت صحنهی اینترفیس C در OpenCVSharp
علت وجود کلاس Cv در OpenCVSharp، سهولت برگرداندن مثالهای C کتابخانهی OpenCV به نمونههای دات نتی است. اما اگر قصد داشته باشید از کلاسهای پشت صحنهی این اینترفیس در OpenCVSharp استفاده کنید، میتوان کدهای فوق را به نحو ذیل نیز بازنویسی کرد:
using (var img = new IplImage(@"..\..\images\ocv02.jpg", LoadMode.Unchanged)) { using (var window = new CvWindow("window")) { window.Image = img; Cv.WaitKey(); } }
همچنین پنجرهی OpenCV نیز در اینجا با کلاس CvWindow پیاده سازی میشود که این کلاس نیز اینترفیس IDisposable را پیاده سازی میکند.
یک نکتهی تکمیلی
اگر متد LoadImage کتابخانهی OpenCV قادر به بارگذاری تصویر شما نبود، متد دیگری به نام IplImage.FromFile نیز پیش بینی شدهاست. این متد از امکانات System.Drawing.Bitmap دات نت برای بارگذاری تصویر و تبدیل آن به فرمت OpenCV استفاده میکند.
کدهای کامل این مثال را از اینجا میتوانید دریافت کنید.
SQL Server express edition نگارش مجانی و ساده شدهی اس کیوال سرور است. این نگارش مجانی فاقد SQL Server agent برای زمان بندی انجام امور تکراری، برای مثال تهیه بک آپهای خودکار است. این مورد در کل ایرادی محسوب نمیشود زیرا میتوان این عملیات را با استفاده از سیستم استاندارد scheduled tasks ویندوز نیز پیاده سازی کرد.
برنامه خط فرمان سورس بازی به نام ExpressMaint موجود است که میتواند از دیتابیسهای اس کیوال سرور اکسپرس (و غیر اکسپرس) بک آپ تهیه کند. فقط کافی است این برنامه را به عنوان یک scheduled task ویندوز معرفی کنیم تا در زمانهای تعیین شده در مکانهایی مشخص، بک آپ تهیه کند. همچنین این برنامه فایلهای بک آپ تهیه شده را نیز تعیین اعتبار میکند.
با پارامترهای خط فرمان آن در اینجا میتوانید آشنا شوید. خلاصه کاربردی آن را به صورت چند دستور در ادامه مرور خواهیم کرد.
الف) یک فایل bat را با محتوای زیر درست کنید :
C:\backup\expressmaint.exe -S (local)\sqlexpress -D ALL_USER -T DB -R C:\backup -RU WEEKS -RV 2 -B C:\backup -BU DAYS -BV 2 -V -C
ب) برای اجرای زمان بندی شدهی این فایل bat تهیه شده، دستورات زیر را در خط فرمان اجرا کنید (فرض بر این است که فایل bat تهیه شده در مسیر مشخص شده C:\backup\backup.bat قرار دارد) :
AT 23:30 /EVERY:m,t,w,th,f,s,su C:\backup\backup.bat
AT 11:30 /EVERY:m,t,w,th,f,s,su C:\backup\backup.bat
روشی که در اینجا ذکر شد منحصر به نگارش express نیست و با کلیه نگارشهای SQL Server سازگار است.
در ادامهی طراحی مبتنی بر مینیمالیسم C# 10.0، پس از پیشفرض شدن «top level programs» و همچنین «کاهش تعداد بار تعاریف usingها»، تغییر سوم صورت گرفتهی در قالبهای پروژههای مبتنی بر دات نت 6، ساده سازی تعاریف فضاهای نام است. برای مثال یک کنترلر، به این صورت تعریف شدهاست:
که به آن «File-Scoped Namespaces» هم گفته میشود.
بررسی مفهوم «File-Scoped Namespaces»
یکی از اهداف مهم C# 10.0، کاهش نویز موجود در فایلهای cs. است. اگر قرار است صدها بار در فایلهای مختلف برنامه، using System نوشته شود، چرا یکبار آنرا به صورت عمومی تعریف نکنیم و یا اگر در 99 درصد موارد، توسعه دهندهها به ازای یک فایل، تنها یک فضای نام را تعریف میکنند، چرا باید یک فضای اضافی خالی، برای تعریف آن اختصاص داده شود و تمام فایلها به همراه یک «tab فاصلهی» اضافی مختص به این فضای نام باشند؟
تعریف فعلی فضاهای نام در #C به صورت زیر است:
در این حالت هر شیءای که داخل {} این فضای نام قرار گیرد، متعلق به آن است.
در C# 10.0، میتوان این تعریف را ساده کرد؛ از آنجائیکه به ندرت چند فضای نام در یک تک فایل تعریف میشوند، میتوان تعریف فضای نام را در یک سطر، در ابتدای فایل ذکر کرد، تا به صورت خودکار به کل فایل و اشیاء موجود در آن اعمال شود:
در این حالت، روش استفادهی از یک چنین اشیایی هیچ تغییری نخواهد کرد؛ فقط یک tab space و فاصله از کنار صفحه، صرفهجویی میشود!
محدویتهای «File-Scoped Namespaces»
- بدیهی است در این حالت دیگر نمیتوان چندین فضای نام را همانند قبل در یک فایل cs. تعریف کرد:
و البته این موردی است که جزو best practices توسعهی برنامههای #C به هیچ عنوان توصیه نمیشود.
- همچنین امکان ترکیب روش قبلی تعریف فضاهای نام، با روش جدید، در یک فایل وجود ندارد.
- به علاوه امکان تعریف فضاهای نام تو در تو که با روش قدیمی وجود دارد:
در این حالت جدید پشتیبانی نمیشود.
namespace mvc.Controllers; public class HomeController : Controller { }
بررسی مفهوم «File-Scoped Namespaces»
یکی از اهداف مهم C# 10.0، کاهش نویز موجود در فایلهای cs. است. اگر قرار است صدها بار در فایلهای مختلف برنامه، using System نوشته شود، چرا یکبار آنرا به صورت عمومی تعریف نکنیم و یا اگر در 99 درصد موارد، توسعه دهندهها به ازای یک فایل، تنها یک فضای نام را تعریف میکنند، چرا باید یک فضای اضافی خالی، برای تعریف آن اختصاص داده شود و تمام فایلها به همراه یک «tab فاصلهی» اضافی مختص به این فضای نام باشند؟
تعریف فعلی فضاهای نام در #C به صورت زیر است:
namespace MyNamespace { public class MyClass { public void MyMethod() { //...Method implementation } } }
در C# 10.0، میتوان این تعریف را ساده کرد؛ از آنجائیکه به ندرت چند فضای نام در یک تک فایل تعریف میشوند، میتوان تعریف فضای نام را در یک سطر، در ابتدای فایل ذکر کرد، تا به صورت خودکار به کل فایل و اشیاء موجود در آن اعمال شود:
namespace MyNamespace; public class MyClass { public void MyMethod() { //...Method implementation } }
محدویتهای «File-Scoped Namespaces»
- بدیهی است در این حالت دیگر نمیتوان چندین فضای نام را همانند قبل در یک فایل cs. تعریف کرد:
namespace Name1 { public class Class1 { } } namespace Name1.Name2 { public class Class2 { } }
- همچنین امکان ترکیب روش قبلی تعریف فضاهای نام، با روش جدید، در یک فایل وجود ندارد.
- به علاوه امکان تعریف فضاهای نام تو در تو که با روش قدیمی وجود دارد:
namespace Name1 { public class Class1 { } namespace Name1.Name2 { public class Class2 { } } }
SQL Server Corruption Recovery - When All Else Fails
تکنیکهایی برای برگرداندن اطلاعات از فایلهای SQL Server که خسارت دیده اند و خراب شده اند و از بخت بد، فایل Backup یا موجود نیست و یا روشهای معمول برگرداندن اطلاعات درست کار نمیکنند.
در این تمرین بانک اطلاعاتی نمونه AdventureWorksLT2008R2 بکار گرفته شده است.
در این تکنیک از کلاس RawDatabase که در پروژه منبع باز OrcaMDF که یک پارسر (Parser) تحت زبان #C برای خواندن فایلهای mdf. بانک اطلاعاتی SQL Server بدون Attach کردن یا اجرای SQL Server میباشد استفاده شده است.
حتی اگر تمام امیدتان را برای برگرداندن اطلاعات از دست داده اید ، هنوز هم گزینه های وجود دارد . ابزار OrcaMDF یا راه حلهای دیگر ممکن است به دلیل یک فاجعه به صورت یک ابزار ارزشمند درآمده باشد. البته این یک جایگزین خوب برای برگرداندن اطلاعات نیست.
تکنیکهایی برای برگرداندن اطلاعات از فایلهای SQL Server که خسارت دیده اند و خراب شده اند و از بخت بد، فایل Backup یا موجود نیست و یا روشهای معمول برگرداندن اطلاعات درست کار نمیکنند.
در این تمرین بانک اطلاعاتی نمونه AdventureWorksLT2008R2 بکار گرفته شده است.
در این تکنیک از کلاس RawDatabase که در پروژه منبع باز OrcaMDF که یک پارسر (Parser) تحت زبان #C برای خواندن فایلهای mdf. بانک اطلاعاتی SQL Server بدون Attach کردن یا اجرای SQL Server میباشد استفاده شده است.
حتی اگر تمام امیدتان را برای برگرداندن اطلاعات از دست داده اید ، هنوز هم گزینه های وجود دارد . ابزار OrcaMDF یا راه حلهای دیگر ممکن است به دلیل یک فاجعه به صورت یک ابزار ارزشمند درآمده باشد. البته این یک جایگزین خوب برای برگرداندن اطلاعات نیست.