A layman's guide to thinking like the self-aware smol brained
این رو به اشتراک گذاشتم چون هم فان هم آموزنده است, ابتدا سعی کردم عنوانش رو فارسی کنم ترجمه مناسبی به ذهنم نرسید. اگر با انگلیسی بودنش مشکلی ندارید, پیشنهاد میکنم بخونید.
اگر با Elasticsearch کار کرده باشید میدانید که تولید Elasticsearch DSL Query کمی پیچیده است و عموما باید به صورت manual این Query هارو تولید کنید.
با استفاده از این پکیج برای تولید این Queryها میتوانید از syntax پشتیبانی شده در Gridify استفاده کنید که کار ساخت Query برای Elasticsearch را ساده میکند.
مثال:
await client.SearchAsync<User>(s => s .Index("users") .ApplyFiltering("emailAddress = John"));
query زیر را تولید میکند:
GET users/_search { "query": { "term": { "emailAddress.keyword": { "value": "test@test.com" } } } }
دات نت متاسفانه هیچ تایپ مناسبی برای کار و دستکاری دادههای باینری (Bit) به غیر از کلاس BitArray ندارد, که این کلاس اولا Immutable و ValueType نیست و دوم به عنوان بافر از Int32 استفاده میکند که باعث میشود (بسته به نوع دیتا) Memory زیادی مصرف کند و همچنین امکاناتی مثل Bit Shifting هم ندارد.
BitVector یه struct ساده ولی قدرتمند است که این مشکلات را برطرف میکند.
(البته struct BitArray32 هم وجود دارد که برای دیتاستهای بزرگ به دلیل اینکه نهایتا از 32 بیت استفاده میکند مناسب نیست.)
Enumهای دات نت با [Flags] attribute, ویژگی قدرتمندی است که امکان ذخیره و ترکیب چندین گزینه یا Feature را تنها به صورت یک مقدار ثابت فراهم میکند که از طریق Bitwise operatorها میتوانیم به ترکیب چندین Enum بپردازیم و یا از طریق این مقدار ثابت به تک تک اعضای تشکیل دهنده آن برسیم. ولی مشکل بزرگی این این ویژگی دارد محدودیت آن است که برای Enum هایی از نوع int تنها 32 آیتم و از نوع long تنها 64 مورد را پشتیبانی میکند. این مشکل سبب میشود در اکثر سناریوها به سراغ این ویژگی نرویم,
به طور مثال برای تعریف دسترسیهای یک نرم افزار به صورت Strongly Type به احتمال زیاد با بزرگتر شدن برنامه در آینده به مشکل برخورد میکنیم.
InfiniteEnumFlags کتابخانه کوچکی است که تمام امکانات [Flags] را در اختیار ما میگذارد و میتواند حدود 2.1 میلیارد آیتم را پشتیبانی کند.
public class Permission : InfiniteEnum<Permission> { public static readonly Flag<Permission> None = new(-1); public static readonly Flag<Permission> ViewRoles = new(0); public static readonly Flag<Permission> ManageRoles = new(1); public static readonly Flag<Permission> ViewUsers = new(2); public static readonly Flag<Permission> ManageUsers = new(3); public static readonly Flag<Permission> ConfigureAccessControl = new(4); public static readonly Flag<Permission> Counter = new(5); public static readonly Flag<Permission> Forecast = new(6); public static readonly Flag<Permission> ViewAccessControl = new(7); // We can support up to 2,147,483,647 items }
مثال استفاده از آن برای تعریف سطح دسترسیها در برنامههای Asp.net core در فولدر Example این مخزن میتوانید پیدا کنید.
git clone --recurse-submodules https://github.com/alirezanet/InfiniteEnumFlags.git
Dependency management is a core feature of NuGet. Managing dependencies for a single project can be easy. Managing dependencies for multi-project solutions can prove to be difficult as they start to scale in size and complexity. In situations where you manage common dependencies for many different projects, you can leverage NuGet’s central package management features to do all of this from the ease of a single location.
The collection includes 14 different tools including a Json to Yaml and Yaml to Json converter, a JWT decoder, a Text compare tool, and more.
The full list includes:
Some of the tools will have wider appeal, for example, the text comparison tool would be useful for writers and solicitors alike, while the PNG/JPEG compressor could help webmasters. Expect more utilities to join the bundle in the future.
The collection is free, and can be accessed via GitHub here or free via the Microsoft Store.
ابزاری ایست که به جرات میتونم بگم تمام شرکتها و پروژههای Open-Source و تیمهای متوسط تا بزرگ بهش نیاز دارند. برنامه نویسها JavaScript و بیشتر وب, پکیج هایی با نام husky و lint-staged دارند که به صورت گستره روی بیشتر پروژههای خوبی که دیدم داره ازش استفاده میشه ولی پیش نیازهایی داره که برای دات نت کارها زیاد شاید جالب نباشه. مثل نصب node و yarn و ....
این ابزار امکانات اون پکیج هارو دراختیار برنامه نویسان دات نت میگذاره. (البته فیچر هایی بیشتری هم داره)
تولید داخل هم هست حمایت فراموش نشه D:
اگر نیاز بود در مورد اینکه چرا گفتم تمام شرکتها نیاز دارند بهش نظر بدید سعی میکنم یک مقاله کوچک آماده کنم در این مورد.