Warning: Undefined array key 0 in /var/www/tgoop/function.php on line 65

Warning: Trying to access array offset on value of type null in /var/www/tgoop/function.php on line 65
723 - Telegram Web
Telegram Web
Forwarded from Web Devs
#Caching

کشینگ (Caching) چیست؟

از جمله مواردی که استفاده درست و بجا از آن به طور قابل ملاحظه ای باعث افزایش کارایی برنامه میشود Caching میباشد.درواقع Caching مکانیزمی است که داده ها را ذخیره میکند تا درخواست های آینده برای آن داده ها سریعتر انجام شود و نتیجه به کلاینت زودتر بازگشت داده شود.داده های ذخیره شده می تواند نتیجه محاسبات قبلی یا کپی ای از داده های دیگر در جای دیگری باشد.این کار برای جلوگیری از محاسبات تکراری و یا کاهش درخواست ها به دیتابیس،برای داده هایی که امکان تغییر مداوم آنها کم است و همچنین هزینه محاسبه و یا ساخت دوباره آن زیاد است، صورت میگیرد.
خوشبخانه AspNetCore از روش های مختلف Caching پشتیبانی میکند.
از جمله این روش ها به Cache In Memory و Distributed Cache می توان اشاره کرد.
روش Cache In Memory از حافظه رم سرور برای ذخیره داده های کش شده استفاده میکند. این نوع Cache متناسب برای یک سرور است و برای استفاده از این روش زمانی که چند سرور دارید از ویژگی یا تکنینک Sticky session ( که به معنی درخواست های کلاینت به همان سروری که داده ها را Cache کرده برای پردازش Route میشوند) استفاده کرد.
از روش Distributed Cache برای share کردن داده های کش شده بین چندین سرور استفاده میشود. معمولا داده ها در یک سرور خارجی نگه داشته میشوند و دیگر سرور ها به آن دسترسی دارند.

محل قرا گیری عملیات Caching در معماری پروژه هایمان کجاست؟
معماری رایج در بین وب اپلیکیشن ها غالبا یک معماری تمیز (Clean Architecture) میباشد . و ما در این پست به قرار دادن عملیات مربوط به caching در چنین معماری هایی میپردازیم.
در این قبیل معماری ها براساس اصول طراحی و قوائد تعیین شده در DDD اپلیکیشن به لایه هایی تقسیم میشود و به ترتیب داخلی ترین لایه که Domain layer میباشد و کمترین وابستگی را به یک Dll خارجی دارد و هرچه به لایه های بالاتر میرویم وابستگی لایه ها به یکدیگر بیشتر میشود. از ویژگی های یک معماری خوب Loose Coupling در بین لایه ها میباشد یعنی وابستگی لایه ها به یکدیگر را بقدری کاهش داد که با تغییر یک لایه خللی در کار دیگر لایه ها صورت نگیرد. البته در این تعریف منظور از کاهش وابستگی یعنی کاهش وابستگی در زمان Compile time.

در یک Clean Architecture یا به عبارتی در یک Clean DDD Architecture معمولا لایه های بدین شکل خواهند بود :
1 - Domain|Core layer
2 - Services | Application Layer
3 - Infrastructure Layer
4 - UI Layer

در لایه Domain اپلیکیشن Entitiy ها و Contract ها(interface) های قرار میگیرد و در لایه Infrastructure معمولا پیاده سازی دسترسی به داده ها و دیگر سرویس ها خارجی مانند FileLogger و SmtpNotifier میباشد.این لایه امکان دسترسی و ذخیره سازی دائمی داده ها را ممکن میسازد،همچنین اطلاعات موجود Domain Entity ها در دیتابیس یا هر store دیگری به صورت دائمی در این لایه برای ذخیره، پیاده سازی میشود.از سوی دیگر ریپازیتوری های ما در این لایه پیاده سازی میشوند.(ریپازیتوری محلی است که امکان دسترسی یه اینتیتی ها و valueObject ها را فراهم میکند).
برای پیدا کردن محل درست caching باید با وظیفه یک عامل دیگر اشنا باشیم.

Repository pattern

الگوی طراحی ریپازیتوری یک روش برای انتزاعی کردن دسترسی به داده ها به جای استفاده Concrete شده از آنها میباشد.
از جمله دلیل استفاده از این الگو جلوگیری از دوباره نویسی Query ها و همچنین امکان تغییر دیتابیس یا ORM اپلیکیشن را میتوان بر شمرد.
همانطور که گفتیم ریپازیتوری راه دسترسی ما به داده هاست ، این داده ها ممکن از از دیتابیس واکشی شوند یا اینکه از Cache خوانده شوند و از آنجایی که پیاده سازی الگوی Repository در لایه Infrastructure صورت میگیرد پس در نتیجه لایه قرارگیری caching نیز در همین لایه و در ریپازیتوری میباشد .
اما پیاده سازی caching در داخل خود ریپازیتوری چند مشکل اساسی دارد، مشکل، عدم تست پذیری و نقض اصل اول Solid یعنی Single responsibility میباشد.
برای حل این مشکل یک الگوی طراحی Structural به کمک ما می آید و با پیاده سازی آن این مشکل را حل میکنیم.

در این قسمت به بررسی یک سری از مسائل پایه پرداختیم و در قسمت بعدی این پست به طریقه پیاده سازی آن خواهیم پرداخت.

@fullStackDevs
#SemanticKernel
#Semantic_Kernel


سی شارپ (C#) و Python Copilot خود را بسازید و آنها را بهتر از ChatGPT با GPT4 بسازید :).

معرفی Semantic Kernel — یک پروژه منبع باز جدید که به توسعه دهندگان کمک می کند تا LLM های پیشرفته را به راحتی در برنامه های خود ادغام کنند: لینک

در واقع Semantic Kernel یک SDK سبک و منبع باز است که به شما کمک می کند از زبان طبیعی و کد بومی (natural language and native code) برای ساخت برنامه های مبتنی بر هوش مصنوعی با چهار کامپوننت استفاده کنید:
Skills،
Memories/Embeddings،
Connectors ,
Planner.

با OpenAI و Azure OpenAI Services کار می کند و از C# با پشتیبانی از پیش نمایش پایتون پشتیبانی می کند.
در اینجا بیشتر بیاموزید.

@fullStackDevs
#Net8
#DotNet8

ویژگی های جدید دات نت 8 : آنچه باید در مورد این ویژگی ها بدانید.

✏️ لینک مطلب



@fullStackDevs
#Net8
#DotNet8

💡 .𝐍𝐄𝐓 8 𝐟𝐞𝐚𝐭𝐮𝐫𝐞𝐬

IPNetwork class is A representation of an IP network based on 𝐂𝐈𝐃𝐑 𝐧𝐨𝐭𝐚𝐭𝐢𝐨𝐧.

کلاس IPNetwork نمایشی از یک شبکه IP بر اساس 𝐂𝐈𝐃𝐑 𝐧𝐨𝐭𝐚𝐭𝐢𝐨𝐧 است. در این نسخه متدهای جدید Parse و TryParse t برای ایجاد یک شبکه IP اضافه شده است.

@fullStackDevs
#chunk
#linq

💡مجموعه اسپیلیت ( split) با LINQ Chunk💡

اگر نیاز دارید که مجموعه و یا collection ای را به مجموعه های کوچکتر بدون روش های اضافی تقسیم کنید، LINQ یک متد 𝗖𝗵𝘂𝗻𝗸 را که از 6 NET. معرفی شد ،پیشنهاد میکند.

تعداد سایز عنصر را به عنوان پارامتر در نظر می گیرد و سپس مجموعه را با حداکثر تعداد عنصر به مجموعه های کوچکتر تقسیم می کند.

در مثال فوق در chunkResult سه آرایه وجود خواهد داشت که تعداد دو مجموعه اول 5 و مجموعه سوم 4 آیتم وجود دارد.!



@fullStackDevs
#feature
#cSharp

یکی از ویژگی های که از C# 7.0 معرفی شد استفاده از خط زیر (underscore) ( _ ) به عنوان جداکننده رقم شناخته می شود. هدف این است که خوانایی بهتر و آسان‌تر را بخصوص در اعداد بزرگ فراهم کنیم.

📌 اطلاعات بیشتر
@fullStackDevs
This media is not supported in your browser
VIEW IN TELEGRAM
🔹 6 API Architectures you MUST know/be aware

1 - REST
2 - Webhook
3 - SOAP
4 - MQTT
5 - Web Socket
6 - GraphQL

Vladimir Romanov

@fullStackDevs
What will be the output?
Forwarded from Jadi Var Log
ترماکس (که بعضی بهش می گن ترموکس) برنامه ای است که یه محیط ترمینال در سیستم‌عامل اندروید برای شما فراهم می‌کنه. این ترمینال کلی از برنامه‌های مرسوم دنیای گنو و ابزارهای برنامه نویسی و مدیریت سیستم رو داره یا می‌شه توش نصب کرد. در نتیجه با داشتن ترماکس فضا شبیه اینه که شما پشت ترمینال یه سیستم عامل گنو/لینوکس نشستین و می‌تونین توی ویم برنامه بنویسین، با پایتون اجراش کنین، به یه سرور اس اس اچ کنین و توی تی ماکس در حال کمپایل برنامه راست خودتون باشین.

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

https://youtu.be/kqYTYlLjKYE
🔹توی این پست قراره یه بررسی بیسیک و مفید در مورد دات نت و سی شارپ داشته باشیم.


🔰Convert Class

▫️متد های استاتیک این کلاس برای تبدیل Base Data Type ها در .Net استفاده میشن، و بسته به مقدار Base Data Type و تایپی که قراره به اون تبدیل بشن، در runtime ممکنه مواردی رخ بده.
یکی از اون موارد Overflow Exception هست. وقتی دو مقدار از دوتا تایپ که به هم قابل تبدیل شدن هستند رو Convert می کنید، اگر در این حین امکان از بین رفتن دیتا وجود داشته باشه با Overflow Exception مواجه میشید، پس حتما این Exception رو هندل کنید.


🔰Decimal Data Type in .Net

▫️اگه ازتون بپرسن که آیا decimal یک Primitive تایپه چی پاسخ میدین؟
نوع داده ای دسیمال یک تایپه بسیار خاصه، زبان هایی مثل C# و VB اون رو به عنوان Primitive Type در نظر میگیرن اما برای CLR اینطور نیست.
یعنی CLR برای manipulate کردن مقادیر از این نوع داده، دستور IL خاصی نداره، اگه سری به سورس کد این دیتا تایپ در .Net Framework SDK بزنین، می بینید که توی decimal.cs برای عملیات های Add , Subtract , Multiply , Divide متد های استاتیکی با همین نام وجود داره و operator های + , – , × , / و... هم oveload شدن.

▫️وقتی توی کدتون از مقادیری با نوع دسیمال استفاده می‌کنید، کامپایلر برای manipulate کردن این مقادیر باید IL تولید کنه و معادل دستور IL خاصی وجود نداره و این به این معنیه که manipulate کردن مقادیر از نوع دسیمال کندتر از Primitive Type هاییه که توسط CLR شناخته میشن.

▫️همچنین چون دستور IL خاصی برای manipulate کردن داده های از نوع دسیمال وجود نداره، درنتیجه operator, statement های checked و unchecked هم تاثیری برای نوع داده های دسیمالی نداره و انجام هر نوع عملیاتی بروی داده هایی از نوع دسیمال که باعث از بین رفتن دیتا بشه (unsafe باشه)، باعث Overflow Exception میشه.


@fullStackDevs
🔰تا حالا به این فکر کردین وقتی توی سی شارپ operator ای رو overload می کنین چه اتفاقی می افته ؟

▫️به طور کلی بعضی زبان های برنامه نویسی، اجازه overload کردن operator ها رو بهتون میدن، برای مثال در سی شارپ، تایپ های string, decimal, datetime عملگرهای == و != overload کردن.

🔰از نظر CLR اما overload کردن یک operator به چه شکله؟

▫️درواقع برای CLR  اورلود کردن یک operator باعث به وجود اومدن شرایط خاصی نمیشه چون اصلا CLR اطلاعی نداره که یک operator مثل (+) چه معنی ای میده.
درواقع زبان برنامه نویسی که ازش استفاده میکنین برای نمایش این operator ها  از symbol هایی استفاده میکنه و مشخص میکنه که درهنگام استفاده از این symbol ها چه کدی باید تولید بشه.

🔹️برای مثال درسی شارپ استفاده از سیمبل + برای primitive تایپی مثل int باعت میشه تا کامپایلر کدی رو برای جمع کردن اونها باهم تولید کنه و یا وقتی ازسیمبل + برای تایپ های string استفاده میکنین، کامپایلر کد concatenate براشون تولید میکنه.

🔸️ناگفته نمونه که از طرف CLS ولی یک سری قوانین وجود داره که overload یک operator حتما باید public و static باشه.

▫️با overload کردن یک operator در سی شارپ، کامپایلر متدی رو برای مشخص کردن آنچه که operator باید انجام بده تولید میکنه.
اسم این متد به اضای هر operator برای کامپایلر یک اسم خاص هستش و اگه تایپتون از قبل متدی همنام با این متد و پارامتر های یکسان داشته باشه با یک ارور مواجه میشین.

🔹️برای مثال وقتی کامپایلر سی شارپ با عملگر + در سورس کد مواجه میشه، در operand های این operator به دنبال متدی با نام خاص op_Addition می گرده و اگه نتونه چنین متدی با پارامتر های مشابه با operand های این عملگر پیدا کنه یک کامپایل ارور صادر میکنه.

🔸️این فرایند برای core numeric تایپ هایی مثل (int32, int64, int16 و ...) که در FCL وجود دارند متفاوته و کامپایر در این تایپ ها مستقیما به دنبال خود operator می گرده و دستور معادل IL براشون تولید میکنه.

در آخر، براتون توی جدولی، متد خاص معادل هریک از operator ها، که کامپایلر در operand های عملگر بدنبال شون میگرده رو گذاشتم.

@fullStackDevs
#CLI
#NETCLI

وقتی که از dotnet CLI برای پروژه ای میخواییم استفاده کنیم (مثلا زمانی که میخوایم از vsCode برای توسعه یه پروژه دات نتی مثلا web api استفاده میکنیم) و میخوایم Migrations بزنیم روی پروژه ای که یک سولوشنمون با دو تا یا بیشتر پروژه و لایبرری داریم (api,infra,application and ...) برای migration اضافه کردن باید از دستور زیر استفاده کنیم:



CD My_Solution



dotnet ef migrations add YourMigrationName --project DataAccess_Project --startup-project WebApp_Project


برای مثال فرض کنید MyDbContext توی لایه infrastructure است و AdminApi هم api و InitialCreate نام فایل ای که ایجاد خواهد شد:


dotnet ef migrations add InitialCreate --project Infrastructure --startup-project AdminApi

و برای اپدیت کردن از دستور زیر استفاده کنید


dotnet ef database update --project DataAccess_Project --startup-project WebApp_Project

دقت کنید پکیج زیر حتما روی پروژه ای (DataAccess_Project) که DBContext توش قرار داره و قراره مایگریشن بزنید باید نصب باشد.


dotnet add package Microsoft.EntityFrameworkCore.SqlServer


و همچنین پکیج زیر باید در پروژه WebApp_Project
نصب باشد.


dotnet add package Microsoft.EntityFrameworkCore.Design


@fullStackDevs
#Roslyn
#Performance

🔰 بررسی و معرفی یک نکته پرفورمنسی در شی شارپ

🔹 در نسخه 3.0 سی شارپ Anonymous type ها معرفی شدند.
که بهتون قابلیت نمونه سازی ابجکت های مختلف بدون مشخص کردن تایپ اونها رو میده.

▪️ به کمک این قابلیت و همچنین فیچری که در کامپایلر سی شارپ ( roslyn ) وجود داره می تونید آرایه هایی به شکل زیر تعریف کنید.

var arr = new[]
{
new { Id = 1 , Name = "Anonymous" },
new { Id = 2, Name = "BitBard" }
};


🔸 نکته ای که جالبه بدونید اینکه اگه ارایه بالا به شکل زیر تعریف بشه با کامپایلر ارور مواجه می شین.

var arr = new[]
{
new { Id = 1 , Name = "Anonymous" },
new { Name = "BitBard" , Id = 2, }
};


▪️ علت این موضوع برمیگرده به ویژگی type identity کامپایلر برای Anonymous Type ها.

🔹 به این صورت که کامپایلر در مواجه با نمونه سازی یک Anonymous Type در کد (object initializer)، ابتدا نام و نوع پراپرتی ها رو تشخیص میده ( به طور خیلی خلاصه ) و در نهایت برای اون Anonymous type، یک تایپ (class) با نامی که خودش انتخاب میکنه میسازه و از اون نمونه سازی میکنه.

🔸 از نظر کامپایلر Anonymous Type ها دارای یک identical structure هستند که برای تشخیص identical بودن ( یکسان بودن ) دو Anonymous Type باید نام و نوع پراپرتی ها و همچنین ترتیب تعریف شدن پراپرتی های اونها یکسان باشه.
🔸 حتی اگه دو Anonymous Type نام و نوع پراپرتی های اونها یکی باشه اما ترتیب تعریف کردن پراپرتی هاشون موقع نمونه سازی متفاوت باشه، کامپایلر برای هرکدوم از اونها تایپ های متفاوتی generate میکنه.

▪️ به همین خاطره که نمونه کد دوم تعریف آرایه با کامپایل ارور مواجه میشه، چون تمام عناصر ارایه باید از یک نوع باشن.

🔸 رعایت این نکته در نمونه سازی از Anonymous Type ها باعث افزایش پرفورمنس و کاهش مصرف حافظه میشه چون اگه توی یک assembly یک یا چندین Anonymous Type وجود داشته باشه که identical structure باشن، کامپایلر اونها رو از یک نوع تایپ در نظر میگیره و فقط یک تایپ براشون generate میکنه.
@fullStackDevs
NET 9 is out today.
𝗖# 𝟭𝟯
Params collections, enhanced lock types, and a new escape make coding smoother. Plus, implicit index access to simplify initialization.

𝗔𝗦𝗣.𝗡𝗘𝗧 𝗖𝗼𝗿𝗲
OpenAPI enhancements, faster asset delivery, PAR support, and the new HybridCache library boost performance and security.

𝗘𝗙 𝗖𝗼𝗿𝗲
Improved Cosmos DB support, pre-compiled AOT queries, better LINQ, and streamlined migrations make data handling faster.

𝗥𝘂𝗻𝘁𝗶𝗺𝗲
Feature switches, control-flow enforcement, and dynamic adaptation improve performance across different app sizes.

𝗟𝗶𝗯𝗿𝗮𝗿𝗶𝗲𝘀
Base64Url, new TimeSpan overloads, new collections, and cryptography upgrades add flexibility and security.

𝗦𝗗𝗞
Run tests in parallel, new terminal logger by default, a workload sets feature.

.𝗡𝗘𝗧 𝗔𝘀𝗽𝗶𝗿𝗲
New MSBuild SDK, an improved dashboard, telemetry updates, support to wait for dependencies, and lots more.

.𝗡𝗘𝗧 𝗠𝗔𝗨𝗜
Opt into Native AOT deployment, embedding APIs, full trimming, and new controls for smaller, faster mobile apps.

@fullStackDevs
📌 LLM چیست؟ (مدل‌های زبانی بزرگ) 🤖

🔹 تا حالا فکر کردی چطور چت‌بات‌های هوشمند مثل ChatGPT می‌تونن باهات مکالمه کنن؟
🔹 چطور یه مدل هوش مصنوعی می‌تونه کدنویسی کنه، متن بنویسه و ترجمه کنه؟

همه‌ی اینا به لطف LLM یا Large Language Model (مدل‌های زبانی بزرگ) انجام می‌شه! 🚀

💡 LLM چطور کار می‌کند؟

مدل‌های زبانی بزرگ با استفاده از شبکه‌های عصبی عمیق و معماری Transformer روی حجم عظیمی از داده‌های متنی آموزش می‌بینن. این مدل‌ها می‌تونن:
متن تولید کنن
سؤالات رو پاسخ بدن
کدنویسی کنن
ترجمه و خلاصه‌سازی کنن

🔥 چند نمونه از LLM‌های معروف:

💠 GPT-4 (OpenAI) – مدل ChatGPT
💠 Gemini (Google DeepMind)
💠 Claude (Anthropic)
💠 LLaMA (Meta)
💠 Mistral (مدل متن‌باز)

این مدل‌ها در حال تغییر دنیای برنامه‌نویسی، تولید محتوا و تعاملات دیجیتال هستن! 🌍💻

📢 نظر تو چیه؟ آینده‌ی هوش مصنوعی و برنامه‌نویسی رو چطور می‌بینی؟ 👇

🔹 #هوش_مصنوعی #LLM #ChatGPT #یادگیری_ماشین #توسعه_دهنده #کدنویسی

@fullStackDevs
2025/07/07 15:04:25
Back to Top
HTML Embed Code: