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

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

لینک گروه ASPNET Core:
https://t.iss.one/+ufG25x7lVFgyYTNk
Download Telegram
#فیسبوک، الگوریتم #فشرده_سازی خود را در گیتهاب عمومی کرد

پروژه #Zstandard یا به اختصار zstd یک الگوریتم فشرده سازی بدون افت کیفیت با سرعت بالا است که فیسبوک آن را توسعه داده و برای مصارف خود مانند فشرده سازی دیتا و تصاویر و... استفاده میکرد و به تازگی سورس آن را به صورت متن باز منتشر کرده است
توضیحات بیشتر + بنچمارک :
https://facebook.github.io/zstd/
بنچمارک مقایسه zstd با الگوریتم های هم رده دیگه، نشون میده این الگوریتم دارای بیشترین میزان فشرده سازی (Compress Ratio) و سرعت نسبتا خوبی است.
در واقع از جمله سریع ترین الگوریتم ها می توان به LZ4 و برای قوی ترین الگوریتم فشرده سازی به LZMA اشاره کرد ولی الگوریتم Zstd تعادلی میان این دو است.
لینک ریپازیتوری :
https://github.com/facebook/zstd
این کتابخانه با زبان C نوشته شده است و چندین API جهت استفاده دارد. همچنین Wrapper هایی به زبان های زبادی از جمله C#, Java, PHP, Python, NodeJs و ... برای استفاده از API های این کتابخانه فراهم شده است.
در پست بعدی به معرفی کتابخانه های دات نتی آن و ابزار های استفاده از این الگوریتم می پردازیم.
@IranAspMvc
معرفی برنامه ها و کتابخانه های دات نتی جهت استفاده از الگوریتم فشرده سازی #Zstandard

نسخه مخصوص برنامه 7zip با پشتیبانی از الگوریتم #Zstd و چندین الگوریتم دیگر : Brotli, Fast-LZMA2, Lizard, LZ4, LZ5
لینک ریپازیتوری پروژه (شامل بنچمارک الگوریتم ها) و دانلود نسخه 64 بیتی
https://github.com/mcmilk/7-Zip-Zstd
و یا پلاگین مخصوص 7zip جهت استفاده از Zstd
https://www.tc4shell.com/en/7zip/modern7z/

2 کتابخانه سی شارپی جهت استفاده از Zstd در دات نت
https://github.com/skbkontur/ZstdNet
https://github.com/bp74/Zstandard.Net
طرز کارشون به این صورته که آرایه ای از byte ها رو دریافت کرده و فشرده سازی میکنن. مثال کامل هم داخلش هست
شما میتونین تصاویر یا فایل هایی که میخواین ذخیره کنین (چه توی دیتابیس و چه توی هارد) رو byte[] اش رو بخونین، فشرده کنین و سپس ذخیره کنین
@IranAspMvc
نگاشت خودکار اشیاء توسط #AutoMapper و #Reflection - ایده شماره 2

لینک مقاله :
https://www.dotnettips.info/post/2988
لینک ریپازیتوری :
https://github.com/mjebrahimi/auto-mapping

- در قسمت قبل، یک کلاس جنریک را به نام BaseDto ایجاد کردیم که با ارث بری Dto‌های پروژه از این کلاس، علاوه بر متد‌های ToEntity و FromEntity جهت ساده سازی عملیات نگاشت، Mapping‌های لازم بین Dto‌ها و Entity‌های مربوطه، توسط Reflection به صورت خودکار انجام می‌شد.
- در این قسمت می‌خواهیم مکانیزم Mapping خودکار را کمی تغییر داده و قابلیت سفارشی سازی Mapping‌ها را نیز فراهم کنیم.

#پیشنهاد میکنم حتما بخونین و لذت ببرین :)
@IranAspMvc
پروژه ای جهت پیاده سازی ایده های خلاقانه در ASPNET Core
https://github.com/aspnet/Entropy/

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

چند پروژه منتخب :
- پروژه Mvc.GenericControllers : ساخت کنترولر برای Entity‌ها بدون کدنویسی!
- پروژه Mvc.CustomRoutingConvention : مسیریابی بر اساس namespace کنترولر‌ها
- پروژه Localization.EntityFramework : مدیریت منابع چند زبانگی توسط EntityFramework
@IranAspMvc
تقویم شمسی، قمری و میلادی به همراه انتخاب‌گر زمان و تاریخ برای Kendo UI
https://github.com/kitcat2014/KendoUI_Gregorian-Persian-Hijri_Calendar-DatePicker-TimePicker
_______________
@IranAspMvc
This media is not supported in your browser
VIEW IN TELEGRAM
#آیا_میدانستید

آیا میدانستید اگر در یک ریپازیتوری Github، دکمه "T" را فشار دهید، صفحه ای برای جستجوی فایل ها بر اساس "نام و مسیر" برای شما باز میشود؟
بدون شک این راحت ترین و سریع ترین راه جستجوعه برای زمانی که میدونین دنبال چه فایلی میگردین😎

@IranAspMvc
معرفی کتابخانه EFCore.BulkExtensions
در سری #معرفی_اکستنشن_های_کاربردی_EFCore
Entity Framework Core Bulk Batch Extensions for Insert Update Delete and Read (CRUD) operations on SQL Server

خیلی وقتا نیاز میشه یک مرتبه حجم زیادی از رکورد ها رو توسط EFCore ذخیره کنین (مثلا import کردن از یه فایل excel)
در حالت عادی (متد Add و یا AddRange)، رکورد های شما به صورت تکی Insert میشه و سرعت بالایی نداره، بر خلافش اما، در روش Bulk Insert، همه رکورد ها به صورت یکجا Insert میشن و سرعت بسیار بسیار بالایی داره این روش (حتی تا 20 برابر سریع تر!)

این کتابخونه بی نظیر، قابلیت انجام عملیات Bulk و Batch رو در EF Core فراهم میکنه و از async هم پیشتیبانی میکنه :
- Bulk operations (Insert, Update, Delete, Read, Upsert, Sync)
- Batch operations (Delete, Update)

* برای مقایسه پرفرمنس و تفاوت سرعت بین روش عادی و Bulk هم تصویر پست گویای همه چی هست

لینک ریپازیتوری + مثال و توضیحات :
https://github.com/borisdj/EFCore.BulkExtensions

#Bulk #EFCore #Performance
@IranAspMvc
دانلود کتاب رایگان TypeScript for C# Programmers به صورت PDF
لینک دانلود :
https://ufile.io/ydp6c
@IranAspMvc
مجموعه آموزش ویدئویی فارسی زامارین اندروید به صورت رایگان منتشر شد. از طریق لینک زیر می تونید همه قسمت ها را آنلاین ببینید یا دانلود کنید.
مدرس: ابوالفضل رجب پور
https://rajabpour.net/?p=81
سرفصل ها:
۰- مقدمه ای بر زامارین Xamarin
۱- چرا زامارین مهم است – یک داستان واقعی
۲- آموزش نصب زامارین در ویژوال استودیو – قسمت اول
۲- آموزش نصب زامارین در ویژوال استودیو – قسمت دوم
۳- نصب شبیه ساز جنی موشن Genymotion
۴- ساخت یک برنامه ساده
۵- پلتفرم زامارین
۶- ساختار یک برنامه اندروید
۷- کنترل های طراحی صفحات در اندروید
۸- ساختار پروژه فروشگاه کتاب
۹- ساخت صفحه نمایش جزئیات کتاب
۱۰- متصل کردن دیتا به صفحه نمایش کتاب
۱۱- ساخت یک لیست ویو ساده listview
۱۲- ساخت لیست ویو سفارشی custom listview
۱۳- انتقال دیتا بین اکتیویتی ها
۱۴- ساخت یک وب سرویس rest در asp.net
۱۵- فراخوانی وب سرویس rest در زامارین
۱۶- ذخیره سازی دیتای ساده در زامارین
۱۷- ذخیره سازی دیتا در زامارین با استفاده از sqlite
۱۸- صفحه ثبت نام و سفارش کتاب
۱۹- سبک متریال دیزاین اندروید material design
۲۰- کار با دفترچه تلفن در اندروید
۲۱- ارسال پیامک از طریق کد و دریافت پیام
۲۲- کار با گالری تصویر در اندروید
۲۳- انتشار برنامه اندروید در کافه بازار

#آموزش #فارسی #زامارین #اندروید
خااااار و مادر سرعت توی عملیات Linq با کتابخانه LinqFaster !

این کتابخانه با استفاده از تکنولوژی SIMD (ساده بگم : پردازش برداری موازی و فوق سریع) و پردازش موازی با Multi-Threading اومده و متد های کمکی مشابه ایی نوشته که عملیات Linq رو با سرعت بالا و مصرف حافظه کمتر انجام میده.
فقط کافیه بنچمارک رو توی تصویر ببینین :)

LinqFaster
متد‌های کمکی Linq با پرفرمنس بالا
https://www.nuget.org/packages/LinqFaster/

LinqFaster.SIMD
متد‌های کمکی Linq با پرفرمنس بالا با استفاده از تکنولوژی SIMD
https://www.nuget.org/packages/LinqFaster.SIMD/

LinqFaster.Parallel
متد‌های کمکی Linq با پرفرمنس بالا با استفاده از پردازش موازی/Multi-Threading
https://www.nuget.org/packages/LinqFaster.Parallel/

LinqFaster.SIMD.Parallel
متد‌های کمکی Linq با پرفرمنس بالا با استفاده از تکنولوژی SIMD و پردازش موازی/Multi-Threading
https://www.nuget.org/packages/LinqFaster.SIMD.Parallel/

لینک ریپازیتوری :
https://github.com/jackmott/LinqFaster

#Linq #Performance
@IranAspMvc
کتابخانه EasyCaching : قابلیت Caching با امکانات زیاد اما یکپارچه و آسان!
https://github.com/dotnetcore/EasyCaching
این کتابخانه، تکنولوژی‌ها و کتابخانه‌های زیر را در راستای ایجاد یک Caching کامل و با امکانات زیاد، یکپارچه کرده و استفاده از آنها را آسان می‌کند.
Caching Providers
- Memory
- Redis
- SQLite
- Memcached
- Hybrid(Combine local caching and distributed caching)
- Disk
Serializer Extensions
- BinaryFormatter
- MessagePack
- Json
- ProtoBuf
Caching Interceptor
- AspectCore
- Castle
Caching Bus
- Redis
- RabbitMQ
_______________
@IranAspMvc
کتابخانه EasyCaching : قابلیت #Caching با امکانات زیاد اما یکپارچه و آسان!
https://github.com/dotnetcore/EasyCaching
این کتابخانه، تکنولوژی‌ها و کتابخانه‌های زیر را در راستای ایجاد یک Caching کامل و با امکانات زیاد، یکپارچه کرده و استفاده از آنها را آسان می‌کند.
Caching Providers
- #Memory
- #Redis
- SQLite
- #Memcached
- Hybrid(Combine local caching and distributed caching)
- Disk
Serializer Extensions
- BinaryFormatter
- #MessagePack
- Json
- #ProtoBuf
Caching Interceptor
- AspectCore
- Castle
Caching Bus
- #Redis
- #RabbitMQ
_______________
@IranAspMvc
منتشر شد .NET Core 3 Preview 2

بررسی تغییرات و قابلیت های مهم :

1- پشتیبانی از قابلیت های جدید سی شارپ 8
- قابلیت Using Declarations :
توسط این قابلیت میتونین متغیر های Disposable تون رو به صورت using توی یک بلاک scope تعریف کنین و قتی اون بلاک به اتمام رسید، اون متغیر هم به صورت خودکار Dispose میشه
HttpResposeMessage GetUrl(string url)
{
using var httpClient = new HttpClient();
return httpClient.Get(url);
} // httpClient disposed here
- قابلیت Switch Expressions :
این قابلیت امکان تعریف راحت تر و هوشمندانه تر دستور switch رو مشابه سینتکس lambda expression را برای ما فراهم میکنه.
string Display(object item) => o switch
{
Point { X: 0, Y: 0 } => "origin",
Point { X: var x, Y: var y } => $"({x}, {y})",
_ => "unknown"
};
- قابلیت Async streams :
محدودیت قابلیت await/async این بود که در آن نمی شد لیستی از مقادیر رو به صورت yield باز گردوند. این محدودیت توسط قابلیت Async streams برطرف شده و شما میتونین همزمان هم از yield return و در نتیجه گرفتن خروجی به صورت lazy توی IEnumerable استفاده کنین و هم از async
- قابلیت های سی شارپ 8 در آینده به تفصل مورد بررسی قرار خواهند گرفت

2- اضافه شدن Json Seralizer داخلی بسیار سریع
در راستای حذف وابستگی JsonNET - Newtonsoft از ASP Core و جایگزین کردن آن با یک Json Serializer داخلی سبک و سریع، کلاس های Utf8JsonWriter و JsonDocument اضافه شده اند.
کلاس Utf8JsonWriter که برای Serialize کردن استفاده میشه نسبت به مشابه اون در JsonNET، افزایش پرفرمنس 30 تا 80 درصدی را (بدون تخصیص حافظه) به همراه داشته.
و کلاس JsonDocument که برای Desrialize/Parse کردن استفاده میشه نیز نسبت به مشابه آن در JsonNET بین 2 تا 3 برابر سریع تره و حافظه کمتری تخصیص میکنه.

3- بهبود محاسبات اعداد اعشاری!
در راستای مطابقت با استاندارد IEEE 754-2008 revision (که درباره عملیات های مربوط به محاسبات اعداد اعشاری است) بهبود هایی انجام گرفته و چندین api محاسبات ریاضی جدید هم اضافه شده.

4- پیشتبانی بیشتر از CPU instruction sets
مجموعه ای دستور العمل هایی برای CPU (مانند SIMD یا Bit Manipulation) وجود دارند که در بعضی سناریو های خاص مانند پردازش موازی یا... ،پرفرمنس را به شدت افزایش میدهند که در این ورژن پشتیبانی بیشتری از آنها انجام شده است.

لیست تغییرات خیلی بیشتره میتونین از لینک زیر مطالعه کنین.
توضیحات بیشتر :
https://blogs.msdn.microsoft.com/dotnet/2019/01/29/announcing-net-core-3-preview-2/
_______________
@IranAspMvc
منتشر شد ASP.NET Core 3.0
اینطور که پیداست، تغییرات توی AspCore 3.0 و پیش نمایش هاش زیاده و هر بار با تعداد زیادی قابلیت و تغییر مواجه میشیم
Razor Components
SignalR client-to-server streaming
Pipes on HttpContext
Generic host in templates
Endpoint routing updates

به زودی تغییرات مهم این رو هم بررسی میکنیم

https://blogs.msdn.microsoft.com/webdev/2019/01/29/aspnet-core-3-preview-2/
_____________
@IranAspMvc
دانلود کتاب رایگان Domain Driven Design: The First 15 Years
به مناسبت 15 امین سالگرد به وجود اومدن Domain Driven Design، با دعوت اساتید برجسته این حوزه، کتابی تحت عنوان "15 سال اول" تهیه و به صورت رایگان منتشر شده است.
https://ufile.io/u6bx8
_______________
@IranAspMvc
توی این سری پست ها میخوایم تغییرات مهم ASP.NET Core 3.0 پیش نمایش 2 رو بررسی کنیم.


1️⃣ حذف وابستگی ها

یکی از تغییرات مهم این نسخه، حذف وابستگی JSON.Net از ASP Core 3.0 و اضافه شدن یک Json Serializer داخلی سریع و سبک در NET Core 3.0 در راستای ایجاد یک بستر مشترک و مستقل برای ASP Core است
به همین جهت از این به بعد برای استفاده از JSON.Net (مثل سابق) و یا برای ارتقاء برنامه های موجود خود با ورژن های پایین تر به ASP Core 3.0، باید پکیج Microsoft.AspNetCore.Mvc.NewtonsoftJson نصب و متد زیر اعمال شود.
services.AddMvc()
.AddNewtonsoftJson();
در غیر این صورت، عملیات سریالاز Json توسط Json Serializer داخلی آن انجام می شود که در پست قبلی سرعت آن را مقایسه کردیم و پیشنهاد می شود از این به بعد از آن به جای JSON.Net استفاده شود چرا که بسیار سریع تر و سبک تر است.

همچنین در همین راستا، وابستگی کامپایلر Roslyn نیز حذف شده و در نتیجه آن قابلیت کامپایل runtime برای View ها نیز حذف شده است و به جای آن، کامپایل ویو ها در زمان Build انجام خواهد شد.
ولی گفته شده برای فعال سازی قابلیت کامپایل runtime ویو ها در نسخه های پیش نمایش بعدی، یک پکیچ Nuget ارائه خواهد شد.



2️⃣ قابلیت Streaming دیتا از کلاینت به سرور در SignalR

قابلیت استریمینگ از سرور به کلاینت توی نسخه 2.1 اضافه شد و این امکان رو به ما میداد که به جای اینکه سمت سرور منتظر باشیم تا دیتا کامل لود بشه و بعد اون رو سمت کلاینت ارسال کنیم، دیتا ها رو به محض اماده شدن، به صورت بخش بخش به کلانیت ارسال کنیم

حالا برعکس این قابلیت یعنی استریمینگ از کلاینت به سرور اضافه شده در نتیجه کلاینت میتونه به جای اینکه صبر کنه تا دیتا کامل سمت کلاینت آماده بشه، لحظه به لحظه به محض اینکه هر دیتایی سمت کلاینت آماده شد، اون رو به سرور ارسال کنه.
از این قابلیت میشه مثلا برای استریمینگ ویدئو به سرور (مثلا ارسال تصاویر وبکم به سرور) استفاده کرد و سمت سرور هم میتونیم تصاویر دریافتی رو به یه کاربر دیگه به صورت استریمینگ ارسال کنیم و این یعنی امکان ایجاد یک ارتباط ویدئویی آنلاین بین دو/چند نفر!
لینک زیر هم همینکارو خیلی جالب انجام داده. اگه وبکم دارین کافیه لینک زیر رو باز کنین و توی اون تکس باکس یه اسم تایپ کنین و دکمه Start Streaming رو بزنین و اجازه دسترسی وبکم رو بهش بدین و تصویر خودتون رو به صورت متنی مشاهده کنین!
https://streamr.azurewebsites.net/

در کل در این نسخه، تغییرات زیادی داشته و اگه نجنبیم از غافله اپدیت ها عقب میمونیم :)

ادامه بررسی ها در پست بعدی
@IranAspMvc
3️⃣ قابلیت جدیدی به نام Razor Component

اما میشه گفت مهم ترین قابلیتی که به این نسخه اضافه شده Razor Components هست. این قابلیت یه روش جدید برای ساخت کامپیوننت های UI سمت کلاینت هست با این تفاوت که امکان اجرا کد های اونا سمت سرور هم وجود داره و ارتباط کلاینت و سرور جهت برورسانی وضعیت اون کامپوننت، به صورت real-time توسط SignalR انجام میشه. درنتیجه باهاش میتونین کد های منطق کامپوننت تون رو به جای javascript، با سی شارپ و سمت سرور بنویسین و بلافاصله تغییرات ظاهری لازم رو سمت کاربر مشاهده کنین.
این کامپوننت های کاملا مستقل هتستند و به راحتی میتونین کامپوننت ها رو بیلد کنین و خروجی dll اش رو توی پروژه هاتون اضافه و از کامپوننت هاتون استفاده کنین.

این قابلیت در ابتدا توی پروژه Blazor تحت عنوان Blazor Component به وجود آومد و الان ماکروسافت، اون رو به ASP Core هم منتقل کرده و هم اکنون امکان اجرای Razor Component ها بر روی هر دو پلتفرم ASP Core و Blazor ممکن شده.
اینطور که پیداست ماکروسافت حسابی پشت Blazor رو گرفته و تصمیم داره بعضی از قابلیت های Blazor رو به ASP Core اضافه کنه. پس میشه احتمال داد که آینده خوبی در انتظار Blazor هست!
پیشنهاد میکنم یه بار تستش کنین خیلی با حاله.
نحوه کار باهاش تو لینک زیر :
https://bit.ly/2GpmCqs

تو این مثال، یه button گذاشته که با هربار کلیک روش، یه واحد به یک عدد اضافه میشه؛ تو حالت عادی این کد باید با javascript نوشته بشه، ولی در اینجا، کد تمام کد لازم برای این عملیات با سی شارپ و سمت سرور نوشته شده و وقتی روی اون button کلیک میکنین با SignalR عملیات لازم سمت سرور انجام و نتیجه اون بلافاصله سمت کلاینت مشاهده میشه.
البته چون این قابلیت، عملیات منطق و رندر شدن کامپوننت ها سمت سرور انجام میشه، ممکنه توی تعداد بازدید بالا، بار روی سرور رو زیاد کنه پس بهتره با احتیاط استفاده بشه.
توضیحات بیشتر و آموزش :
https://bit.ly/2Gobkml
نکته جالب دیگه، امکان تعامل و اجرای کد های جاواسکریپت در Razor Component ها هست. یعنی میتونین سمت سرور مشخص کنین، وقتی روی فلان button کلیک شد یه کد javascript ایی سمت کاربر اجرا بشه، مثلا یه مودال خوشگل (که کتابخانه JS ایش سمت کلاینت اضافه شده) نمایش داده بشه. (که به این قابلیت میگن JavaScript interop)

یه روش دیگه برای کار با Razor Component ها، اجرای مستقیم اون ها درون مرورگر بدون نیاز به اتصال به سرور از طریق SignalR هست. در واقع به لطف پروژه Blazor و امکان اجرای کد های دات نت در مروگر توسط WebAssembly، میشه کامپوننت هایی با سی شارپ نوشت که مستقما توی مروگر اجرا میشن
البته این قابلیت هنوز توی این نسخه از ASP Core نیومده ولی قراره در نسخه های بعدی اضافه بشه.

نکته آخر هم اینکه: در حال حاضر فقط ادیتور VS 2019 از Razor Component پشتیبانی میکنه و نه VS for Mac و نه VS Code واسه توسعه این قابلیت پشتیبانی لازم رو ندارند. اینم به اون معنی نیست که بدون VS 2019 نمیتونین از Razor Component استفاده کنین. بلکه فقط intellisense و عیب یابی رو توی بقیه ندارین وگرنه با یه notepad هم میشه کد های Razor Component رو ویرایش کرد و توسعه داد.

مهم ترین تغییراتش اینا بود ولی چندتای دیگه هم مونده که اگه فرصت کردم در آینده بهشون می‌پردازم.
@IranAspMvc
aspnetcore-developer-roadmap.png
534.3 KB
نقشه راه برنامه نویسی ASP.NET Core 2019

اگه میخواین بدونین چه سرفصل ها و موضوعاتی رو باید/بهتره یاد بگیرین و یا از کجاش شروع کنین، این نقشه راه (Roadmap) خیلی کمکتون میکنه

https://github.com/MoienTajik/AspNetCore-Developer-Roadmap

در آینده این رودمپ تکمیل تر و اصلاح تر هم خواهد شد پس واسه دیدن آخرین تغییرات به لینک ریپازیتوریش سر بزنین
@IranAspMvc
مقایسه تکنولوژی استفاده شده در شرکت های بزرگ برنامه نویسی دنیا

توسط این سایت می توانید بهترین تکنولوژی، ابزار ها و فریمورک های مورد استفاده در شرکت های بزرگ برنامه نویسی دنیا را مشاهده و با یکدیگر مقایسه کنید.
https://stackshare.io/

مثلا لینک زیر تکنولوژی ها و ابزاری های مورد استفاده در شرکت Airbnb را نمایش می دهد.
https://stackshare.io/airbnb/airbnb
_______________
@IranAspMvc
مقایسه بهترین کتابخانه های دات نت
https://dotnet.libhunt.com
توسط این سایت میتونین کتابخانه های دات نت رو با هم مقایسه کنین و بفهمین کدوم محبوب تره، همچنین میتونین لیستی از کتابخانه های مشابه رو هم برای هر کدوم پیدا کنید.

این سایت از پارامتر های مختلفی برای مقایسه و امتیازدهی کتابخانه ها استفاده میکنه. از جمله:
- Star, Fork, Watcher گیتهاب
- میزان فعال بودن بر اساس آخریت کامیت
- تعداد دانلود در ماه
- میزان کیفیت کد و ...
- میزان سرچ اش رو هم براسا امار Google Trend نشون میده

مثلا لینک زیر IOC Container های معروف Autofac و Ninject را با هم مقایسه میکنه.
https://dotnet.libhunt.com/compare-autofac-vs-ninject?rel=cmp-lib

🔸 توسط این سایت و سایت قبلی که معرفی کردیم میتونین بدون شک "محبوب ترین" کتابخانه و ابزار ها رو برای کاراتون پیدا کنین.
@IranAspMvc