DotNetZoom
3.06K subscribers
342 photos
18 videos
36 files
606 links
DotNetZoom
💎 Everything about .NET

ارتباط با مدیر و تبلیغات آگهی استخدام:
@mjebrahimi

لینک گروه ASPNET Core:
https://t.me/+ufG25x7lVFgyYTNk
Download Telegram
Forwarded from کدهک
بررسی نقش کلمه کلیدی await در برنامه نویسی Async در دات نت و ASP NET Core

https://youtu.be/4sscBQdVrfI
بهبود SEO سایت های AspNet Core توسط کتابخانه SeoTags به کمک قابلیت Structred Data و JSON-LD

قابلیت Structured Data یکی از مباحث پیشرفته SEO هست که با تعریف ساختار صفحه به موتور های جستجو کمک میکنه محتوای صفحه شما رو بهتر متوجه بشن و نمایش بدن. نمونه نمایش نتایج در صفحه سرچ گوگل این موضوع رو میتونین از این لینک مشاهده کنین. همانطور که میبینین بعضی موارد به صورت rich result نمایش داده میشوند.
گوگل داکیومنت کاملی در مورد پیاده سازی Structured Data داره که از این لینک میتونین مشاهده کنین.

پیاده سازی این قابلیت توسط یکی از سه روش زیر انجام میشه
1- روش JSON-LD
2- روش Microdata
3- روش RDFa

روش اول یعنی JSON-LD روش پیشنهادی گوگل هست و در اون محتوای صفحه به صورت json در قالب استاندارد Schema.org درون یک تگ script از نوع application/ld+json تعریف میشه. که در این لینک میتونین نمونه پیاده سازیش رو برای یک product مشاهده کنین.
در روش های Microdata و RDFa هم محتوای صفحه در قالب attribute هایی بر روی تگ های html نشانه گذاری میشن.
داکیومنت گوگل یک قسمت از نحوه پیاده سازی این مورد برای مثال های پرکاربرد از جمله Article و Product و Book و ... نیز ارائه کرده.

حالا کتابخانه SeoTags از JSON-LD هم پشتیبانی میکنه و علاوه بر تولید تمام تگ های SEO برای سایت شما، محتوای JSON-LD رو هم خروجی میده.
داکیومنت استفاده از این کتابخانه برای تولید تگ های meta و link و... در اینجا مشاهده کنید.
و نمونه استفاده از قابلیت JSON-LD رو هم در اینجا و اینجا مشاهده کنید.

https://mjebrahimi.github.io/SeoTags/
__________________
@DotNetZoom
Forwarded from DotNetZoom (محمد جواد ابراهیمی)
تامین امنیت دیتا های حساس و مهم در EF Core

در این پست به معرفی 2 راهکار (یک کتابخانه و دیگری یک مقاله) جهت تامین امنیت اطلاعات حساس و مهم در EF Core می‌پردازیم

🔸راهکار اول: توسط کتابخانه EntityFrameworkCore.DataEncryption میتونین اطلاعاتتون رو توی دیتابیس رمزنگاری کنین. این کار به سادگی قرار دادن یک اتریبیوت [Encrypted] بر پروپرتی های entity ها تون انجام میشه. در این روش اطلاعات شما موقع insert/update به صورت خودکار Encrypt شده و به صورت رشته توی دیتابیس ذخیره میشن و موقع واکشی هم به صورت خودکار Decrypt میشن لذا برای اعمال بعضی از دستورات شرطی ممکنه دچار مشکل بشین (به خاطر تفاوت مقدار encrypt شده که البته طبیعی هم هست و راه گریزی نیست)
مثلا برای مقایسه برابری (متد Equals یا دستور ==) مشکلی نداره ولی برای دستور Contains یا ... به مشکل میخورین

🔰ریپازیتوری گیتهاب پروژه + اطلاعات بیشتر
https://github.com/Eastrall/EntityFrameworkCore.DataEncryption

🔹راهکار دوم: فرض کنین شخصی که به دیتابیس دسترسی داره، به صورت دستی و مستقیم (نه از طریق اپلیکیشن ما)، مقداری رو تغییر میده بدون اینکه دسترسی لازم به لحاظ بیزینسی رو داشته باشه.
چطور میتونیم متوجه این قضیه بشیم؟ چطوری از صحت اطلاعات خودمون مطمئن بشیم؟ چطوری میتونیم اصالت اون ها رو تضمین کنیم؟
جواب این سوال رو میتونین توی مقاله زیر که توسط وحید نصیری نوشته شده و از روشی خلاقانه استفاده میکنه پیدا کنین

🔰 تشخیص اصالت ردیف‌های یک بانک اطلاعاتی در EF Core
https://www.dotnettips.info/post/3100

نکته: هر دو راهکار بالا database-agnostic هستند یعنی فرقی نمیکنه شما از کدوم دیتابیس پشت EF Core استفاده میکنین؛ با هر دیتابیسی کار میکنه
_______________
@DotNetZoom
Forwarded from DotNetZoom (Ali Abdolmaleki)
❇️ نکاتی در مورد کار با PDF در دات نت و برترین کتابخانه های آن

کتابخونه های کار با pdf به 2 دسته کلی تقسیم میشن

🔸دسته اول کتابخونه هایی هستند که باهاشون میشه فایل های PDF رو خوند، محتواشو Extract کرد، Edit کرد و یا فایل جدید ساخت
از معروف ترین این کتابخونه ها میشه به ترتیب به موارد زیر اشاره کرد
✔️iTextSharp
✔️
iTextSharp.LGPLv2.Core
✔️itext7
✔️PdfSharpCore
معروف ترین شون iTextSharp هست که فقط NET Framework Full. رو پشتیبانی میکنه اما وحید نصیری یه نسخه port شده ازش رو برای NET Core. رو براش درست کرده به نام iTextSharp.LGPLv2.Core
همچنین کتابخونه itext7 که توسط سازنده iTextSharp توسعه داده شده و به عنوان نسخه بعدی iTextSharp و با پشتیبانی از NET Core. اون رو توسعه داده و توصیه میکنه از itext7 استفاده کنین.

🔹دسته دوم کتابخونه هایی هستند که میتونن محتوای یه صفحه html (شامل المان ها و css ها و ...) رو به صورت PDF رندر کنن و خروجی PDF ازشون بگیرن
از جمله معروف ترین این کتابخونه ها میشه به ترتیب به موارد زیر اشاره کرد
✔️DinkToPdf
✔️itext7.pdfhtml
✔️Rotativa.AspNetCore
✔️Wkhtmltopdf.NetCore
طرز کار همشونم به این صورته که اینا معمولا wrapper ایی بر روی کتابخانه wkhtmltopdf هستند که کارش Render کردن خروجی html به pdf هست و پشت صحنه هم از موتور Qt WebKit استفاده میکنن که یک Browser Engine سورس باز هست

🔸اکثر مواقع نیاز برنامه نویسا همین دسته دوم هست. معمولا میخوان از گزارشاتشون خروجی pdf بگیرن که دسته دوم گزینه راحت تری هست چرا که اینجا ما دیگه با یه صفحه html+css سرو کار داریم و خیلی راحت میتونیم هر فرم و جدولی رو که بخوایم طراحی کنیم و وقتی از خروجی html ایی اون مطمئن شدیم اون رو به pdf تبدیل کنیم
دسته اول معمولا کاربرد خاص تری دارند. مثلا اگه بخواین فایل pdf تون رو بخونین، محتواش رو پردازش یا ویرایش کنین یا مثلا ساخت صفحاتتون رو خیلی سفارشی سازی کنین باید از کتابخونه های دسته اول استفاده کنین
یه سری کتابخونه قدرتمند دیگه هم هستند مثل Aspose و Syncfusion ولی چون اونا پولی هستند و نسخه رایگانشون محدودیت داره تو لیست نیاوردمشون
_______________
@DotNetZoom
Forwarded from DotNetZoom (محمد جواد ابراهیمی)
برترین افزونه های رایگان Visual Studio که هر کسی باید داشته باشه

🔰بهترین افزونه های Code Analyzer سی شارپ
این افزونه ها کد های شما رو آنالیز میکنن و اشتباهات رایج هنگام کدنویسی سی شارپب رو به همراه اصلاحات لازم رو بهتون پیشنهاد میده
از جمله موارد مهمی که توسط این کد آنالیزر ها میشه تشخیص داد:
✔️ کد هایی که Naming Convention و Coding Style استاندارد رو رعایت نکردن
✔️ کد های کثیف و Code Smell ها
✔️ کد هایی که به لحاظ ساختاری bug دارند یا مستعد bug هستند
✔️ کد هایی که به لحاظ آسیب پذیری دارند یا منسوخ شدند
✔️ پیشنهاداتی برای تمیز تر کردن کدتون و استفاده از ویژگی های جدید سی شارپ
✔️ پیشنهاداتی که باعث بهبود Performance میشه
🔸SonarLint - Nuget
🔹Roslynator - Nuget
🔸CodeCracker - Nuget
🔹CodeMaid
🔸Sharpen

🔰بهترین افزونه های Code Analyzer مخصوص Async/Await
این دو کد آنالیزر اشتباهات رایج هنگام کدنویسی async رو به همراه اصلاحات لازم بهتون پیشنهاد میدن
🔸AsyncFixer - Nuget
🔹AsyncMethodNameFixer - Nuget

🔰نمایش بهتر خطا ها و هشدار ها
یه افزونه باحال و کاربردی که خطا ها و هشدار های هر فایل رو داخل Solution Explorer کنار اون فایل نشون میده
🔸ErrorVisualizer

🔰فرمت خودکار کد ها به هنگام Save
افزونه محبوب من که کد ها رو موقع ذخیره، به صورت اتوماتیک Format میکنه (معادل میانبر Ctrl+K+D) در نتیجه همیشه کد هاتون فرمت شده و تمیز باقی میمونه بدون اینکه دغدغه اش رو داشته باشین یا یادتون بره
🔹FormatDocumentOnSave

🔰هایلایت متون پنجره Output
یه افزون کاربردی که متون پنجره Output رو highlight میکنه. خیلی وقتا جزئیات و اطلاعاتی از خطا ها داخل پنجره Output نمایش داده میشه که خوندنش خیلی بهتون کمک میکنه
🔸OutputEnhancer

🔰نکته:
بعضی از Code Analyzer ها پکیج Nuget هم دارند کنارشون که این امکان رو میده که بتونید ازش هرجا که NET CLI. هست استفاده کنین. مثلا توی VSCode و مهم تر از اون برای CI/CD، به این صورت که میتونین جز pipeline CD/DI تنظیمش کنین که اگر کدی خطا های Naming Convention یا Coding Style داشت متوجه بشین یا حتی اجازه ندین Pull Request اش Merge بشه
________________
@DotNetZoom
Forwarded from کدهک
برنامه نویسی برداری در دات نت و آشنایی با SIMD

https://youtu.be/s9AKgcw6Gf0
Forwarded from DotNetZoom (Ali)
داشبورد مدیریت تسک ها برای Quartz .NET

کتابخانه Hangfire (مشابه Quartz) که قدرتمند ترین ابزار برای تسک های زمان بندی شده هست دارای داشبوردی برای مدیریت و نظارت بر تسک ها هست ولی کتابخانه Quartz .NET فاقد چنین داشبوردی هست

🔰اگر از Quartz برای تسک های زمان بندی شده خودتون استفاده میکنین میتونین از 2 کتابخونه کمکی زیر برای بهره مندی از یک داشبورد مدیریتی نظارتی استفاده کنین

🔸کتابخانه Quartzmin
https://github.com/jlucansky/Quartzmin

🔹کتابخانه CrystalQuartz
https://github.com/guryanovev/CrystalQuartz
___________________
@DotNetZoom
Forwarded from DotNetZoom (محمد جواد ابراهیمی)
❇️ اهمیت Side-effect Free و Idemponency در کدنویسی

برنامه نویسی Functional Programming (به اختصار FP) در تعریف، یک Paradigm (پارادایم) برنامه نویسی هست که در اون برنامه ها به کمک ترکیب توابع ساخته میشن. (چه تعریف گنگ و غیر ملموسی!)
از اونجایی که "پارادایم" کلمه غیر ملموسی هست و اگر اولین بارتون باشه که اون رو میشنوین احتمال زیاد مفهومش رو متوجه نمیشین اینطور تعریفش میکنم: پارادایم برنامه نویسی یعنی یک روش یا رویکرد برنامه نویسی.
این رویکرد مفاهیم مختلفی رو داخل خودش داره که اینجا نمیخوام واردشون بشم. چیزی که اینجا میخوام روش تاکید کنیم 3 مفهوم زیر هست:
1- Side-effect Free
2- Idempotent
3- Pure Functions

🔸مفهوم Side-effect Free
این مفهوم به این اشاره میکنه که یه تابع (متد) نباید "تاثیر جانبی" روی بقیه قسمت های برنامه داشته باشه. خب این یعنی چی؟ کی ما تاثیر جانبی رو بقیه میذاریم؟
وقتی متد ما یک shared state تغییر رو بده. shared state به معنی متغیر/مقدار ایی هست که بین چندین تابع یا قسمت مختلف برنامه مشترک هست.
پس در واقع وقتی یک تابع، متغیری یا مقداری را که بین چندین تابع یا قسمت های مختلف برنامه مشترک هست رو "تغییر" بده یعنی side-effect اتفاق افتاده

در کنار این مفهوم، مفهوم دیگری نیز وجود داره به نام Avoiding Shared State که تاکید میکنه از ایجاد و استفاده از shared state ها خودداری کنیم.
وجود shared state خواسته یا ناخواسته باعث بروز side-effect میشه. پس خودداری از اون باعث میشه به side-effect نیز برنخوریم یا کمتر بر بخوریم

🔹مفهوم Idempotent
این مفهوم به این امر اشاره میکنه که زمانی توابع ما Idempotent هستند که اگر اونها رو هرچند بار هم با مقادیر ورودی ثابت و مشابه فراخوانی کنیم همیشه نتیجه یا خروجی یکسان و ثابتی داشته باشه
مثلا تابعی که یک مقدار Random رو برمیگردونه Idempotent نیست چرا که هربار نتیجه اش متفاوته؛ همینطور تابعی که DateTime.Now رو برمیگردونه.

مثال کاربردیش توی دنیای واقعی، متدی میشه که وظیفه حذف یک رکورد رو داره. به این صورت که (مثلا از EF استفاده میکنه و) ابتدا رکورد رو با id مورد نظر واکشی میکنه سپس اون رو به متد Remove میده و SaveChanges فراخوانی میشه
خب بار اولی که این متد رو با id برابر با 100 فراخوانی کنیم اون سطح حذف میشه ولی بار دومی که اون رو "با همین id" فراخوانی میکنیم به exception بر میخوره چرا که دیگه اون رکورد وجود نداره که بخواد حذفش کنه (موقع find، مقدار اون رکورد null هست و متد Remove با ورودی null خطا میده)
ولی همین متد رو اگر به این صورت پیاده سازی کنیم که قبل از حذف کردن، چک کنه که اگر این رکورد وجود نداره کاری انجام نده، متد ما Idempotent میشه چرا که هر چندبار فراخوانی اون، یک نتیجه رو داره و اون هم اطمینان از حذف اون رکورد هست

▪️مفهوم Idempotent بودن توی معماری Event-Driven و الگوی Pub/Sub هم اهمیت بسیار بالایی داره. از اونجایی که یک Event یا Message ممکنه به هر دلیلی "بیش از یکبار" توسط Subscriber ها پردازش بشه. باید اطمینان داشته باشیم که نتیجه یکسانی داره و عملکرد سیستم رو تحت تاثیر نمیگذاره (مثلا فرض کنید برای یک سفارش، دو تا فاکتور برای مشتری ثبت بشه!)

▪️نمیخوام خیلی وارد روش های Idempotency بشم فقط اینکه معمولا 2 روش وجود داره:
1- طوری پیاده سازی کنیم که چند دفعه اجرا شدنش توی عملکردش تاثیری نداشته باشه
2- یک flag ایی رو به ازای هر Message داشته باشیم که وقتی اون Message پردازش میشه اون رو true کنیم و دفعات بعدی با چک کردن این flag و متوجه شدن از اینکه قبلا پردازش شده، دیگه پردازشش نکنیم (در این حالت ممکنه استفاده از تکنیک های synchronization مانند locking لازم باشه)

🔸مفهوم Pure Functions
این مفهوم تعریف خیلی ساده ای داره، تابعی Pure Function (خالص) هست که هم Side-effect Free باشه هم Idempotent. در غیر این صورت میشه Impure Function (تابع ناخالص)

🔰جمع بندی
مفاهیم Functional Programming الزاما نیاز به استفاده از زبان های FP (مثل FSharp یا Scala یا Haskell) ندارن. خیلی از اون مفاهیم به راحتی داخل زبان های دیگه و رویکرد Object Oriented Programming نیز قابل استفاده و بسیار مفید هستند و باعث Maintainability و Reliability میشن (نگهداری بهتر کد ها و قابل اعتماد تر بودنشون)
توصیه میکنم که اون مفاهیم رو یاد بگیرید و بسته به نیازتون توی کدنویسی های OOP تون هم ازش استفاده کنید


🔰دوستان یه مقدارش جا نشد. (مخصوصا قسمت مزایاشون)
متن کامل رو توی مقاله زیر بخونین
https://vrgl.ir/GMNeu
______________
@DotNetZoom
❇️ در گوگل چگونه کار میکنند؟
گپ‌وگفت میان احسان آراسته از علی بابا و کیانوش مختاریان از گوگل

آکادمی علی‌بابا، در سری برنامه‌‌های علی‌باباتاک پلاس، به بیان چالش‌ها و تجربیات دنیای کار می‌پردازه.

این برنامه از این سری برنامه‌ها، یک گپ‌وگفت است میان احسان آراسته، راهبر ارشد فنی علی‌بابا و کیانوش مختاریان، مهندس ارشد نرم‌افزار و مدیر-رهبر فنی شرکت گوگل.
در این گپ‌وگفت قرار است درباره چالش‌های تولید نرم‌افزار در گوگل بشنویم و گریزی هم به مباحثی مثل کار تیمی، منابع انسانی، مواجهه با شکست و خلاقیت بزنیم.

🔸زمان: شنبه ۶ شهریور، ساعت ۱۹:۰۰ تا ۲۰:۳۰
🔸ثبت نام رایگان از طریق لینک زیر:
https://evnd.co/u3DT3
____________________
@DotNetZoom
Forwarded from کدهک
مقایسه Eager Loading با Lazy Loading در EF Core 5.0

https://youtu.be/pWiXfx7b4-M
معرفی ویژگی Records در C# 9.0: کار با داده‌های تغییر ناپذیر

🔸 کار کردن با داده‌های تغییر ناپذیر بسیار قدرتمند است، اغلب منجر به باگ‌های کمتری می‌شود، و شما را مجبور می‌کند تا اشیا را تبدیل به اشیای جدید کنید به جای اینکه اشیای موجود را اصلاح کنید. توسعه دهندگان #F به این عادت کرده‌اند، زیرا #F همه چیز را به طور پیش‌فرض به عنوان تغییرناپذیر در نظر می‌گیرد. حالا شما انواع تغییر ناپذیر را در C# ۹.۰ نیز دارید، یا به اصطلاح انواع record نامیده می‌شود. Records کار با داده‌های تغییر ناپذیر در #C را برای شما آسان‌تر می‌کند.

❇️ از طریق لینک زیر می‌توانید ترجمه مقاله‌ای از Thomas Claudius Huber که به بررسی این ویژگی و جزییات بیشتر پرداخته مطالعه کنید:

#سپهر_اسلامی
https://vrgl.ir/1zp5a
_____________
@DotNetZoom
Forwarded from DotNetZoom (Ali Abdolmaleki)
لاگ کردن جزئیات Request ها به کمک Serilog و ActionFilter

بعضی وقتا پیش میاد لازم دارید اطلاعات هر درخواست ورودی Action هامون رو به همراه جزئیات کاملشون رو جهت عیب یابی یا بررسی های آتی ثبت و Log کنیم
در اینجا یک نمونه پروژه آماده کردم که این کار رو به راحتی قرار دادن یک اتریبیوت [LogRequest] بر روی اکشن های مورد نظر انجام میده یا میتونین روی Controller یا به صورت Global ثبت اش کنین تا همه اکشن ها رو Log کنه

🔸طرز کارش به این صورته که در درون ActionFilter مذکور (LogRequest)، جزئیات لازم رو قبل و بعد از اجرا شدن Action مورد نظر Log میکنه (بنا بر نیازتون میتونین هر دیتای دلخواه دیگه ای رو هم از request و response بهش اضافه کنین)
و نهایتا برای ذخیره سازی لاگ ها هم از Serilog و از SqlServer به عنوان Sinks استفاده میکنه (در صورت دلخواه میتونین تو هر Storage/Sink دیگه ای ذخیره کنین)

🔹مسلما لاگ کردن همه درخواست ها میتونه سربار داشته باشه و شخصا پیشنهاد نیمکنم همیشه و همه جا ازش استفاده کنین ولی نکته ای که در مورد Sink های Serilog وجود داره اینه که اکثرا از Async و PeriodicBatching استفاده میکنن به این صورت که در بازه های زمانی Log ها رو به صورت Bulk ایی Insert میکنن (اونم به صورت Async که Thread ایی رو بلاک نکنن) در نتیجه از نظر پرفرمنسی در حالت بهینه ای کار میکنن

🔰از جمله جزئیاتی که در هر درخواست Log میکنه:

1- آدرس URL درخواستی به همراه مقادیر QueryString
2- مقادیر Header های Request و Response
3- مقادیر ارسالی از سمت کاربر (آرگومان های Action)
4- وضعیت ModelState به همراه Error Message ها در صورت وجود
5- مقادیر Routing بسته به Route مچ شده
6- مقادیر شی User.Identity از جمله Claim ها، Name و IsAuthenticated
7- مقدار IP Address کاربر
8- مقدار Url Referrer (آدرس هدایت کننده قبلی به این صفحه)
9- مدت زمان پردازش درخواست جاری (Elapsed Time) و زمان ثبت درخواست
10- جزئیات Exception در صورت وقوع خطا
11- وضعیت Http Status Code درخواست
12- و...

https://github.com/dotnetzoom/RequestLogger-AspNetCore
____________________
@DotNetZoom
Forwarded from DotNetZoom (Ali Abdolmaleki)
❇️ معرفی 20 کتاب برتر برای برنامه نویسان (فارغ از نوع تکنولوژی)

اگه اهل کتابخوندن هستین لیست زیر برترین و محبوبترین کتابهای برنامه نویسی هست که برای هر برنامه نویس فارغ از استک و نوع تکنولوژیش مفید هست

1- Clean Architecture
2- Clean Code
3- The Clean Coder
4- The Pragmatic Programmer
5- Patterns of Enterprise Application Architecture
6- Head First Design Patterns
7- Design Patterns: Elements of Reusable Object-Oriented Software
8- Working Effectively with Legacy Code
9- Refactoring: Improving the Design of Existing Code
10- Domain-Driven Design: Tackling Complexity in the Heart of Software
11- Patterns, Principles, and Practices of Domain-Driven Design
12- Domain-Driven Design Distilled
13- Implementing Domain-Driven Design
14- Test Driven Development
15- Growing Object-Oriented Software, Guided by Tests
16- Working Effectively with Unit Tests
17- The Art of Unit Testing
18- BDD in Action
19- Soft Skills
20- Code Complete

🔰من لینک آمازون کتاب ها رو قرار دادم و بهتره که حامی قانون کپی رایت باشیم هرچند اونایی که میخوان رایگان دانلود کنن به هرحال راهشو بلدن
____________________
@DotNetZoom
ساخت چت روم با Blazor Web Assembly و SignalR قسمت اول: ساخت سرور

در این مقاله دو قسمتی قصد داریم که با قابلیت Real Time Communication در SignalR و Blazor Web Assembly یک چت روم اپلیکیشن بسازیم
ابتدا به سراغ ساخت سرور می رویم و در آن به ساخت دیتابیس و جداول مورد نیاز، بررسی Identity و شخصی سازی جداول Identity ، تنظیمات مربوط به JWT ، ایجاد Access Tokenو استفاده از آن در SignalR می پردازیم. سپس Chat Hub و متد های مورد نظر برای Event های مختلف مانند هنگامی که پیام جدیدی دریافت میشود، یا هنگامی که کاربری آنلاین میشود و یا هنگامی که کاربر در حال تایپ است را پیاده سازی میکنیم

#بابک_طارمی
https://vrgl.ir/cKLqV
_________
@DotNetZoom
Forwarded from Software Philosophy
توسعه برنامه های Cross Platform

اگر قصد پیاده سازی برنامه Cross Platform در دات نت را دارید می توانید از Xamarin استفاده کنید.

اما قبل از شروع، احتمالا به دنبال این هستید که برای این کار چه راهی مناسب‌تر است.
در این مقاله بین سه گزینه Xamarin, React Native, Ionic بررسی هایی انجام شده است و شما می‌توانید با توجه به شرایط خود، شرایط تیم، دانش برنامه نویسی خودتان و ... گزینه مورد نظر را انتخاب کنید.

گزینه های دیگری نیز وجود دارد که با توجه به نحوه مقایسه سه مورد ذکر شده در مقاله جاری، حتی می‌توانید آن‌ها را نیز با یکدیگر مقایسه کنید.


در نهایت اگر تصمیمتان Xamarin بود می‌توانید از این کتاب رایگان که توسط خود مایکروسافت ارائه شده است استفاده کنید.
مایکروسافت این کتاب را به صورت خلاصه و با نوشتاری سلیس و روان ارائه کرده است.

در نهایت برای بالا بردن کیفیت پروژه‌های Xamarin خود می‌توانید از سری آموزش‌های توسعه برنامه‌های Cross Platform با Xamarin Forms & Bit Framework استفاده کنید.

#زامارین #xamarin

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، برروی دکمه «نظرت را بگو» کلیک کنید.

#حامد_حاجیلو (لینکدین)

کانال تلگرام:
@SoftwarePhilosophy

________
ساخت چت روم با Blazor Web Assembly و SignalR قسمت دوم: ساخت کلاینت

در این قسمت قصد داریم به ادامه ساخت چت روم بوسیله Blazor web assembly بپردازیم. در این مقاله به مباحثی مانند: SignalR Client
پیاده سازی لاگین و رجیستر کاربر
نحوه استفاده از local storage برای ذخیره و خواندن اطلاعاتی مانند JWT Token
نحوه تنظیم SignalR Client برای استفاده از JWT Token
هندل کردن رویداد های SignalR سمت Client
نحوه ارتباط با web api و فرستادن JWT Token به آن
آشنایی با تایمر
جداسازی کد از UI در Blazor
مبحث Dependecy Injection
استفاده از Toaster Component در Blazor
آشنایی با event های پرکاربرد در Blazor
خواهیم پرداخت

#بابک_طارمی
https://vrgl.ir/kByMS
_________
@DotNetZoom
Forwarded from کدهک
طبق نظرسنجی Stack overflow در ۲۰۲۱ برای پنجمین سال متوالی Redis محبوب ترین دیتابیس انتخاب شده است.
همچنین امسال PostgreSql از MongoDb عبور کرد و در جایگاه دوم قرار گرفت.
Forwarded from DotNetZoom (Ali)
10 افزونه برتر که یک Github-باز باید اونا رو داشته باشه

1️⃣ Enhanced GitHub
کاربردی ترین و پر فیچر ترین افزونه گیتهاب که کلی قابلیت و بهبود رو به صفحات گیتهاب شما اضافه میکنه و کارکردن با اون رو خیلی راحت تر (این یکی جزء باید های منه)

2️⃣ GitHub Hovercard
یه افزونه باحال و فوق العاده مفید که باعث میشه وقتی موس تون رو روی لینک یه issue یا commit یا repo یا user میگیرین، یه پیش نمایش از اون به صورت hover card نمایش داده بشه

3️⃣ File Icons for GitHub and GitLab
یه افزونه خیلی باحال که کنار فایل های ریپازیتوری، آیکون مخصوص بهش رو نمایش میده

4️⃣ Octotree
یه افزونه باحال و کاربردی که میاد فایل ها و فولدر های ریپازیتوری تون رو به صورت درختی (tree) نمایش میده (مثل پنجره Solution Explorer در VS)

5️⃣ GitHub Isometric Contributions
یه افزونه باحال که میاد و Contribution Graphs یا همون نمودار مشارکت های شخص رو به صورت 3 بعدی و ملموس تر نشون میده

6️⃣ Sourcegraph
یه افزونه کاربردی که امکان Go to definition و Find references رو به کد های ریپازیتوری اضافه میکنه و توسطش میتونین ببینین کجا این کلاس یا متد تعریف شده و کجا های دیگه ازش استفاده شده

7️⃣ GitHub Writer
این افزونه به شما این امکان رو میده که موقع نوشتن متن Issue و Pull Request و Comment بتونین از امکانات یک rich-text editor (مانند CKEditor) استفاده کنین

8️⃣ Git History Browser Extension
یه افزونه باحال که به شما این امکان رو میده بتونین تاریخچه تغییرات و Commit های یه فایل رو به شکلی زیبا تر و ملموس تر ببینین.

9️⃣ GitZip for github
بعضی وقتا لازم میشه صرفا یه سری فایل یا پوشه خاص رو از یه مخزن دانلود (نه کل مخزن رو که ممکنه خیلی حجیم باشه). این افزونه کاربردی به شما اجازه میده که Folder یا File هایی از یک ریپازیتوری گیتهاب رو به دلخواه در قالب یک فایل Zip دانلود کنین

🔟 Refined GitHub
اینم مثل همون اولی میمونه و کلی قابلیت و بهبود باحال و کاربردی به صفحات ریپازیتوری اضافه میکنه و کار کردن با اونها رو خیلی راه دست تر

🔸به شخصه این لیست جز باید های منه و خیلی سال هست که ازشون استفاده میکنم و بسیار راضی ام. واسه دیدن اطلاعات بیشتر در مورد قابلیت هاشون حتما لینک هاشون رو ببینید. در ضمن این افزونه ها برای روی مروگر Chrome هستند و قاعدتا روی Edge هم قابل نصب هستند
__________________
@DotNetZoom
Forwarded from DotNetZoom (Ali Abdolmaleki)
❇️ دیباگ بهتر در Visual Studio با 3 ترفند

بعضی وقتا پیش میاد که خطا تو کد هاتون رخ میده ولی Exception ایی نشون داده نمیشه. یا جزئیات کاملی از علت خطا در Exception رخ داده نشون داده نمیشه و...
در اینجا میخوایم با اعمال 3 تنظیم در Visual Studio، بتونیم خطا ها رو بهتر Debug کنیم
مراحل زیر رو انجام بدید تا به هنگام وقوع Exception، اجرای کد سر همون خطی که exception اصلی رخ داده متوقف بشه و علت رو پیدا کنید و نیز جزئیات بیشتری از خطا ها براتون نمایش داده بشه

1️⃣ از پنجره Exception Settings توی VisualStudio گزینه زیر رو به صورت کامل تیک بزنید
Common Language Runtime Exceptions
این باعث میشه "هر" نوع خطایی رخ بده Exception اش رو ببینیم

2️⃣ وارد تنظیمات VS بشین و از "غیر فعال" بودن گزینه Enable Just My Code اطمینان پیدا کنید
Tools > Options > Debugging > General
این باعث میشه هر خطایی (نه صرفا در کد های شما) حتی در library های دیگه رخ بده Exception اش رو ببینیم (اطلاعات بیشتر)

3️⃣ وارد تنظیمات VS بشین و از "فعال" بودن گزینه Suppress JIT optimization اطمینان پیدا کنید
Tools > Options > Debugging > General
این باعث میشه JIT Optimization انجام نشه و جزئیات و اطلاعات بیشتری از Exception ها نمایان بشن

در نهایت کدتون رو اجرا کنید در این صورت اگر هر Exception ایی رخ بده نمایش داده میشه و بعد میتونین توسط Call Stack سلسله مراتب متد های فراخوانی کننده رو ببینید و متوجه بشید علت اصلی خطا کجاست

🔰نکته:
وقتی تنظیمات بالا رو انجام میدید بعضی وقتا ممکنه Exception هایی که در کد های داخلی خود Framework و کتابخانه های BCL دات نت رخ میده و حتی Exception های "هندل شده" هم الکی نمایش داده بشه. که میتونید اون ها رو رد کنید و در نظر نگیرید یا توی پنجره Exception Settings (ترفند اول) راست کلیک کنین و گزینه "Restore Defaults" رو بزنین


🔰توی لینک زیر میتونین تکنیک های بیشتری رو هم ببینین
7 Debugging Techniques you should know in C# .NET
____________________
@DotNetZoom
Forwarded from کدهک
اجرای Postgre روی داکر و سپس اتصال به آن از طریق ASP NET Core و pgAdmin

https://youtu.be/j726BLl_tDU