DotNet | دات نت
1.12K subscribers
665 photos
229 videos
484 files
707 links
تو این روزا بهتره که همیشه علم خودمون رو بالا ببریم و بتونیم با سریع ترین راه ممکن خودمونو بروز نگه داریم.
- سعی کنیم از کمترین امکانات بیشترین بهره رو ببریم
منتظرت هستیم😉
دنیا رو جای بهتری برای یادگیری کنیم 🌹
#course #book


🆔 @dotnetcode
Download Telegram
قابلیت HTTP Headers در C# چطوریه؟

امروز می‌خوایم یه موضوع ساده ولی فوق‌العاده کاربردی رو با هم مرور کنیم: کار با هدرهای HTTP در C# با استفاده از HttpClient.

هدرها (Headers) بخش مهمی از هر درخواست و پاسخ HTTP هستن و اطلاعات اضافی مثل کلیدهای دسترسی (API Key)، نوع محتوا (Content-Type) و... رو منتقل می‌کنن. توی این پست ۳ سناریوی اصلی رو با هم می‌بینیم:

۱. اضافه کردن هدر به تمام درخواست‌ها (Default Headers)

وقتی یه سری اطلاعات مثل ApiKey یا Authorization Token باید توی تمام درخواست‌هایی که به یک سرور خاص ارسال میشه وجود داشته باشه، بهترین راه استفاده از DefaultRequestHeaders هست. اینطوری یک بار هدر رو تنظیم می‌کنید و برای همیشه (تا زمانی که اون HttpClient زنده است) استفاده میشه.

مثال:
// Create a single instance of HttpClient for your application
HttpClient client = new();

// Add an API Key that will be sent with EVERY request made by this client
client.DefaultRequestHeaders.Add("ApiKey", "YourSuperSecretKeyFromApi");

// Now, any request like client.GetAsync, client.PostAsync, etc. will have this header.
var response = await client.GetAsync("https://api.example.com/data");

۲. اضافه کردن هدر فقط به یک درخواست خاص
گاهی وقت‌ها لازمه یک هدر رو فقط برای یک درخواست خاص ارسال کنید. مثلاً یک هدر برای ردیابی (tracing) یا کشینگ. در این حالت، هدر رو مستقیماً به شیء HttpRequestMessage اضافه می‌کنیم.

مثال:
HttpClient client = new();
var url = "https://api.example.com/data";

// Create a specific request message
HttpRequestMessage request = new(HttpMethod.Get, url);

// Add a header ONLY for this specific request
request.Headers.Add("X-Custom-ID", "some-unique-value-123");

// Send the request
HttpResponseMessage response = await client.SendAsync(request);

۳. خوندن هدر از پاسخ سرور (Response)
بعد از اینکه درخواستی رو ارسال کردید، سرور در پاسخ (Response) ممکنه هدرهای مهمی رو برگردونه. مثلاً اطلاعات مربوط به محدودیت تعداد درخواست (Rate Limiting) یا جزئیات صفحه‌بندی (Pagination). برای خوندن این هدرها به شکل ایمن (که اگر هدر وجود نداشت برنامه کرش نکنه)، از متد TryGetValues استفاده می‌کنیم.

مثال:
// Assuming 'response' is the HttpResponseMessage from the server
string apiKey = string.Empty;

// Try to get the value of the "ApiKey" header
if (response.Headers.TryGetValues("ApiKey", out var keyValues))
{
// If the header exists, get the first value.
// keyValues is an IEnumerable<string>
apiKey = keyValues.FirstOrDefault();
}

Console.WriteLine($"API Key from response: {apiKey ?? "Not Found"}");

💡 نکته کلیدی: از DefaultRequestHeaders برای مقادیر ثابت مثل کلید API و از request.Headers برای مقادیر داینامیک که در هر درخواست ممکنه تغییر کنن استفاده کنید تا کدتون تمیزتر و بهینه‌تر باشه.

🎺برای یادگیری بیشتر و دریافت مطالب مفید در زمینه .NET و برنامه‌نویسی، به کانال ما بپیوندید!

📚💻 @dotnetcode 🖥👨‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
8👏4👍1🎉1
Forwarded from TondTech (مسعود بیگی)
دوستان خوب و عزیزم سلام، من و تیم خوبم در #رسمیو، مدتی رو سرمون خلوت خواهد بود و دوست داریم به شکل مشاوره یا همکاری در انجام پروژه های شما (به صورت صفر تا صد یا مشارکت در پیاده سازی بخشی از سرویس هاتون) همراه باشیم .

ما توی تیممون به جز توسعه دهندگان .net و React ، پروداکت منیجر و دیزاینر هم داریم اگر لازم داشته باشید برای این پروژه ها.

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


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

خیلی به من لطف خواهید کرد اگر این پست را در همه ی گروه های فنی و بیزنسی تان منتشر کنید.
متاسفانه فعلا فقط از طریق اکانت تلگرام @StartupNerd وشماره 09308282925 در خدمت شما و پاسخگو خواهم بود.

🫂 مجددا از شما خواهش میکنم این پست رو (در همه ی گروه های خودتون که فکر میکنید ممکنه کسی به توانایی ما نیاز داشته باشه) بازنشر کنید
👍43🔥2
آشنایی با دستورات دو ابزار هوش مصنوعی برای بازبینی کد: Gemini و CodeRabbit 🤖

اگه تو تیم‌های برنامه‌نویسی کار می‌کنید، حتما با ابزارهای بازبینی کد (Code Review) مبتنی بر هوش مصنوعی آشنا هستید یا ازشون استفاده می‌کنید. این ابزارها با کامنت گذاشتن تو گیت‌هاب (یا پلتفرم‌های مشابه) به ما کمک می‌کنند. در ادامه دستورات دوتا از این ابزارها رو مرور می‌کنیم:

دستورات دستیار Gemini
این دستیار دستورات ساده و مستقیمی برای انجام کارهای اصلی داره.

* بازبینی کد (Code Review)
برای اینکه دستیار تمام تغییرات موجود در پول ریکوئست (Pull Request) رو بررسی و نظرش رو اعلام کنه:
/gemini review

* خلاصه کردن (Summary)
برای دریافت خلاصه‌ای از تغییرات انجام شده در پول ریکوئست:
/gemini summary

* پاسخ در کامنت‌ها (Comment)
وقتی می‌خواید به صورت مستقیم در یک کامنت از دستیار سوالی بپرسید یا پاسخی بگیرید:
@gemini-code-assist

* راهنما (Help)
برای نمایش لیست تمام دستورات موجود:
/gemini help

🐰 دستورات دستیار CodeRabbit 🐰
این دستیار کنترل دقیق‌تری روی فرآیند بازبینی خودکار به شما می‌ده.
* کنترل بازبینی خودکار
* توقف موقت (Pause)
بازبینی خودکار رو برای یک پول ریکوئست خاص متوقف می‌کنه:
@coderabbitai pause 

* ادامه (Resume)
بازبینی خودکار رو که قبلاً متوقف کرده بودید، دوباره فعال می‌کنه:
@coderabbitai resume

* نادیده گرفتن (Ignore)
برای اینکه CodeRabbit یک پول ریکوئست رو به طور کامل نادیده بگیره، این دستور رو در توضیحات پول ریکوئست اضافه کنید:
@coderabbitai ignore

* درخواست بازبینی دستی
* بازبینی کامل (Full Review)
یک بازبینی کامل و جدید از تمام کدها، بدون در نظر گرفتن کامنت‌های قبلی:
@coderabbitai full review

* بازبینی افزایشی (Incremental Review)
فقط تغییرات جدیدی که از آخرین بازبینی به بعد اضافه شده‌اند رو بررسی می‌کنه:
@coderabbitai review

* به‌روزرسانی اطلاعات
* به‌روزرسانی خلاصه (Update Summary)
خلاصه‌ی تولید شده توسط دستیار رو در توضیحات پول ریکوئست آپدیت می‌کنه:
@coderabbitai summary

* ایجاد دیاگرام (Generate Diagram)
یک دیاگرام از تاریخچه و روند تغییرات پول ریکوئست ایجاد و در کامنت‌ها ارسال می‌کنه:
@coderabbitai generate sequence diagram

با این دستورات می‌تونید کنترل دقیق‌تری روی دستیارهای هوش مصنوعی داشته باشید و سرعت توسعه رو بالا ببرید.

🔗لینک نصب بات در گیت‌هاب:
https://github.com/marketplace/coderabbitai

https://github.com/marketplace/gemini-code-assist

#برنامه_نویسی #هوش_مصنوعی #گیت‌هاب #CodeReview #AI

🎺برای یادگیری بیشتر و دریافت مطالب مفید در زمینه .NET و برنامه‌نویسی، به کانال ما بپیوندید!

📚💻 @dotnetcode 🖥👨‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥2👏21🤩1
Forwarded from OfferingOne
🎯 تو هفت ثانیه استخدام شو!
آیا لینکدین برای تو فقط ‌یه رزومه آنلاین ساده‌ست؟ وقتشه دیدت رو تغییر بدی!
امروزه لینکدین فقط محل درج سابقه کاری نیست؛ ‌یه فرصت بی‌نظیره برای ساخت برند شخصی، دیده شدن توسط کارفرما‌ها، گسترش شبکه حرفه‌ای و حتی جذب فرصت‌های شغلی داخلی و بین‌المللی.

توی این وبینار یاد می‌گیری:
چطور مثله حرفه‌ای‌ها پروفایل لینکدین بسازی
📢 ساختاربندی رزومت رو باتوجه به موقعیت شغلی بنویسی
🤝 چطور با لینکدین فرصت شغلی، پروژه و همکاری جذب کنی
🧑🏻‍💻بررسی پروفایل و رزومه ۵ نفر از شما

🎙 با حضور دو متخصص فعال و الهام‌بخش در این حوزه:
👩‍💻 فریماه فروغی
سرپرست منابع انسانی آفرینگان

👨‍💻 پریسا فرودیان
سوشال مدیا منیجر و دیجیتال مارکتر
فعال لینکدین

📅 زمان برگزاری:
چهارشنبه ۱ امرداد ۱۴۰۴
🕘 از ساعت ۱۷ تا ۱۹

📍 پیوستن به رویداد:

https://t.iss.one/+SCreJcTM7gg2OWM0

💡 این وبینار کاملاً رایگانه
✔️همین الان ثبت‌نام کن و‌یه قدم جدی برای رشد حرفه‌ای‌ت بردار
📲 و یادت نره توی تقویمت اضافه کنی 😉

برای هماهنگی @OfferingOne
+98 912 458 8834
1🔥1🎉1
Forwarded from .NET Fun
This media is not supported in your browser
VIEW IN TELEGRAM
#LeetCode
Is Subsequence

یه سوال خیلی باحال و ساده که ممکنه توی مصاحبه ها ازتون بپرسن . از دستش ندید

❗️❗️Download Code

@DotNetIsFun
6🔥3👍2
۳۰ مفهوم کلیدی طراحی سیستم برای مهندسان نرم‌افزار

طراحی سیستم یکی از مهارت‌های ضروری برای هر مهندس نرم‌افزار است. درک مفاهیم بنیادی آن به شما کمک می‌کند تا سیستم‌هایی مقیاس‌پذیر، قابل اتکا و با کارایی بالا بسازید. در ادامه، لیستی از ۳۰ مفهوم کلیدی در طراحی سیستم به همراه مقالاتی عالی برای یادگیری هر کدام، گردآوری شده است.

لیست مفاهیم و منابع یادگیری

۱. رابط‌های برنامه‌نویسی کاربردی (APIs): (https://blog.algomaster.io/p/whats-an-api)

۲. توکن‌های وب جیسون (JWTs): (https://blog.algomaster.io/p/json-web-tokens)

۳. وب‌هوک‌ها (Webhooks): (https://blog.algomaster.io/p/what-are-webhooks)

۴. دروازه‌های API (API Gateways): (https://blog.algomaster.io/p/what-is-an-api-gateway)

۵. توزیع بار (Load Balancing): (https://blog.algomaster.io/p/load-balancing-algorithms-explained-with-code)

۶. پراکسی در مقابل پراکسی معکوس (Proxy vs Reverse Proxy): (https://blog.algomaster.io/p/proxy-vs-reverse-proxy-explained)

۷. مقیاس‌پذیری (Scalability): (https://blog.algomaster.io/p/scalability)

۸. در دسترس بودن (Availability): (https://blog.algomaster.io/p/system-design-what-is-availability)

۹. نقطه شکست منفرد (SPOF): (https://blog.algomaster.io/p/system-design-how-to-avoid-single-point-of-failures)

۱۰. قضیه CAP (CAP Theorem): (https://blog.algomaster.io/p/cap-theorem-explained)

۱۱. پایگاه‌داده‌های SQL در مقابل NoSQL: (https://blog.algomaster.io/p/sql-vs-nosql-7-key-differences)

۱۲. تراکنش‌های ACID: (https://blog.algomaster.io/p/what-are-acid-transactions-in-databases)

۱۳. ایندکس‌های پایگاه‌داده (Database Indexes): (https://blog.algomaster.io/p/a-detailed-guide-on-database-indexes)

۱۴. شاردینگ پایگاه‌داده (Database Sharding): (https://blog.algomaster.io/p/what-is-database-sharding)

۱۵. هشینگ سازگار (Consistent Hashing): (https://blog.algomaster.io/p/consistent-hashing-explained)

۱۶. ضبط داده‌های تغییر یافته (CDC): (https://blog.algomaster.io/p/change-data-capture-cdc)

۱۷. کشینگ (Caching): (https://blog.algomaster.io/p/4d7d6f8a-6803-4c7b-85ca-864c87c2cbf2)

۱۸. استراتژی‌های کشینگ (Caching Strategies): (https://blog.algomaster.io/p/top-5-caching-strategies-explained)

۱۹. سیاست‌های حذف از کش (Cache Eviction Policies): (https://blog.algomaster.io/p/7-cache-eviction-strategies)

۲۰. شبکه تحویل محتوا (CDN): (https://blog.algomaster.io/p/content-delivery-networks)

۲۱. الگوریتم‌های محدودسازی نرخ درخواست (Rate Limiting): (https://blog.algomaster.io/p/rate-limiting-algorithms-explained-with-code)

۲۲. صف‌های پیام (Message Queues): (https://blog.algomaster.io/p/message-queues)

۲۳. فیلترهای بلوم (Bloom Filters): (https://blog.algomaster.io/p/bloom-filters)

۲۴. همان‌توانی (Idempotency): (https://blog.algomaster.io/p/idempotency-in-distributed-systems)

۲۵. همزمانی در مقابل موازی‌سازی (Concurrency vs Parallelism): (https://blog.algomaster.io/p/concurrency-vs-parallelism)

۲۶. لانگ پولینگ در مقابل وب‌سوکت‌ها (Long Polling vs WebSockets): (https://blog.algomaster.io/p/long-polling-vs-websockets)

۲۷. معماری حالت‌مند در مقابل بی‌حالت (Stateful vs. Stateless): (https://blog.algomaster.io/p/stateful-vs-stateless-architecture)

۲۸. پردازش دسته‌ای در مقابل پردازش جریانی (Batch vs Stream Processing): (https://blog.algomaster.io/p/batch-processing-vs-stream-processing)

۲۹. سازگاری قوی در مقابل سازگاری نهایی (Strong vs. Eventual Consistency): (https://blog.algomaster.io/p/strong-vs-eventual-consistency)

۳۰. REST در مقابل GraphQL: (https://blog.algomaster.io/p/rest-vs-graphql)

---

امیدواریم این مجموعه به شما در مسیر یادگیری طراحی سیستم کمک کند. موفق باشید!

🎺برای یادگیری بیشتر و دریافت مطالب مفید در زمینه .NET و برنامه‌نویسی، به کانال ما بپیوندید!

📚💻 @dotnetcode 🖥👨‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍72👏2
🎁 سورپرایز ویژه برای بچه‌های کانال 🎁

دوره فوق‌العاده Techlead 360 با تدریس مسعود عزیز قراره توی شهریور برگزار بشه و خیلی‌هاتون مشتاق شرکت بودید 👨‍💻🔥

حالا یه خبر خوب براتون دارم:

💥 کد تخفیف اختصاصی برای اعضای این کانال!

با هماهنگی‌ای که با خود مسعود عزیز انجام دادم، یه کد تخفیف ویژه گرفتم که فقط و فقط برای شما بچه‌های گل کاناله ❤️

📌 فقط کافیه موقع ثبت‌نام از کد زیر استفاده کنید:

کد تخفیف: HOOTAN

با این کد، می‌تونید با هزینه کمتر توی دوره‌ای شرکت کنید که می‌تونه مسیر شغلی‌تون رو واقعاً متحول کنه!

ظرفیت محدوده، پس اگه تصمیم‌تون قطعی‌ـه، معطل نکنید!
5🔥1👏1😱1
Forwarded from Learning With M
🔥🔥 خبر خبر 🔥🔥
بلاخره زمان پیدا کردم تا دوره جدید Techlead 360 رو شروع کنم 🎉
خیلی درخواست داده بودید و من وقتش رو نداشتم، ولی حالا برای شهریور ماه این کلاس 4 روزه رو برای علاقه مندان برنامه ریزی کردم.
محتوی جدید هم بر اساس تجربه و مطالعه به دوره اضافه شده.
توی این دوره شما در مورد این یاد میگیرید که :

1. یک تکلید باید چه خصوصیاتی داشته باشه.
2. یک تکلید در تیم چه وظایفی داره.
3. یک تکلید در سازمان چه وظایفی داره.


دوره مثل همیشه به صورت آنلاین و در روز های چهارشنبه و پنج شنبه در دو هفته پشت هم برنامه ریزی شده که همه بتونن راحت ازش استفاده کنند.

بهتون پیشنهاد می کنم برنامه درسی دوره رو حتمی مطالعه کنید.

برای ثبت نام می تونید از این آدرس استفاده کنید :

ثبت نام در تکلید 360 شهریور ماه
Please open Telegram to view this post
VIEW IN TELEGRAM
2
This media is not supported in your browser
VIEW IN TELEGRAM
یک دوره خیلی خوب از مایکروسافت راجع به Model Context Protocol (MCP) به اسم MCP for Beginners. اگه هنوز نمیدونید MCP چی هست یا اینکه چطور کار میکنه حتما این دوره را ببینید. به جز یک ویدیو ۱ ساعته باقی ویدیوها زیر ۵-۶ دقیقه هستند. MCP یکی از مهمترین مباحث برای درست کردن AI agents هست.

Youtube: https://youtube.com/watch?v=VfZlglOWWZw&list=PLlrxD0HtieHjYfVUpGl_-ai7D6FRBjV-d&index=1

🎺برای یادگیری بیشتر و دریافت مطالب مفید در زمینه .NET و برنامه‌نویسی، به کانال ما بپیوندید!

📚💻 @dotnetcode 🖥👨‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍72
Forwarded from Learning With M
فقط ۱۴ ثانیه!

چند وقت پیش پستی در لینکدین دیدم که یکی از عزیزان از این‌که رزومه‌اش تنها در ۱۴ ثانیه رد شده بود ناراحت بود.

نظرم رو در کامنت نوشتم: به‌عنوان کسی که بارها رزومه بررسی کرده، این ۱۴ ثانیه برای یک رزومه عدد عجیبی نیست!

بعد از اون پست، افراد زیادی پیام دادن و خواستن که رزومه‌هاشون رو بررسی کنم. همین جرقه‌ای شد برای شروع یک ایده تازه:

🎯 «رویداد ۱۴ ثانیه‌ای!»

در این ایونت آنلاین و رایگان ، رزومه‌هایی که شرکت‌کننده‌ها برام می‌فرستن رو به صورت زنده اسکرین می‌کنم، از نگاه یک ریکروتر واقعی بررسی‌شون می‌کنم و بازخورد واقعی و مستقیم می‌دم.

اگه دوست داری بدونی توی اون ۱۴ ثانیه چه اتفاقی برای رزومه‌ات می‌افته، این رویداد دقیقاً برای توئه.

📌 اگر علاقه‌مندی:

ثبت نام کن ← عضو گروه اطلاع رسانی ای که در پروفایلت بعد از ثبت نام قرار میگیره بشو ← رزومتو بفرست و روز جلسه آنلاین باش تا بررسی رزومتو ببینی.

منتظرت هستم تا با هم بفهمیم در ۱۴ ثانیه چقدر میشه تأثیر گذاشت!

لینک ثبت نام رایگان : https://yun.ir/14sec1
دوره شهریور ماه تکلید ۳۶۰ : https://yun.ir/tl3603
2
Media is too big
VIEW IN TELEGRAM
📱ویدیوی معرفی هوش مصنوعی GPT

🎺برای یادگیری بیشتر و دریافت مطالب مفید در زمینه .NET و برنامه‌نویسی، به کانال ما بپیوندید!

📚💻 @dotnetcode 🖥👨‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
دسترسی به آخرین مدل GPT-5 هم روی GitHub Copilot فعال شد.

https://github.blog/changelog/2025-08-07-openai-gpt-5-is-now-in-public-preview-for-github-copilot/

🎺برای یادگیری بیشتر و دریافت مطالب مفید در زمینه .NET و برنامه‌نویسی، به کانال ما بپیوندید!

📚💻 @dotnetcode 🖥👨‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
2🤯2
۱۲ قاعدهٔ طلایی برای ترتیب Middleware در ASP.NET Core

اگر می‌خواهید اپلیکیشن ASP.NET Core شما پایدار، امن و قابل توسعه باشد، رعایت ترتیب صحیح Middlewareها (میان‌افزارها) حیاتی است. در ادامه ۱۲ گام کلیدی را برایتان آورده‌ام:

1️⃣ UseForwardedHeaders()
اگر پشت پروکسی هستید، حتماً اول این middleware را اضافه کنید تا آدرس کلاینت درست شناسایی شود.

2️⃣ UseHttpsRedirection()
قبل از همه‌چیز، کاربر را به HTTPS هدایت کنید تا ارتباط امن باشد.

3️⃣ UseRouting()
قبل از هر middlewareی که به اطلاعات مسیر نیاز دارد، این یکی را فراخوانی کنید.

4️⃣ UseCors()
بلافاصله بعد از Routing، اما قبل از Authentication، سیاست‌های CORS را اعمال کنید.

5️⃣ UseAuthentication()
تأیید هویت کاربران پیش از اعمال مجوزها باید رخ دهد.

6️⃣ UseAuthorization()
پس از Routing و Authentication بیاید تا قوانین دسترسی به درستی اجرا شود.

7️⃣ UseExceptionHandler()
نزدیک به بالای پشته برای گرفتن و مدیریت همه خطاها قرارش دهید.

8️⃣ UseRateLimiter()
اوایل pipeline تا از حملات DOS یا بار زیاد روی API جلوگیری کند.

9️⃣ UseResponseCompression()
بعد از Routing و پیش از endpoints تا پاسخ‌ها فشرده و کارایی بالاتر برود.

🔟 UseStaticFiles()
اگر فقط محتوای استاتیک می‌دهید، قبل از Routing قرارش دهید.

1️⃣1️⃣ Custom Middleware
(مثل Logging، Tracing و …) هر چه زودتر تا سراسر درخواست را پوشش دهد.

1️⃣2⃣ UseEndpoints()
حتماً آخرین Middleware باشد تا درخواست‌ها به endpoint مناسب برسند و pipeline خاتمه یابد.


---

با رعایت این ترتیب:
• از بروز خطاهای عجیب جلوگیری می‌کنید
• پرفورمنس و امنیت اپلیکیشن‌تان بالاتر می‌رود
• نگهداری و توسعهٔ کد ساده‌تر خواهد شد

🎺برای یادگیری بیشتر و دریافت مطالب مفید در زمینه .NET و برنامه‌نویسی، به کانال ما بپیوندید!

📚💻 @dotnetcode 🖥👨‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👏8👍76
Forwarded from thisisnabi.dev [Farsi]
بچه ها سلام،
این هم ویدیوهای رود مپ بود که سال گذشته رکوردش کرده بودیم برای کامیونیتی دات نت ایران، این با کورس aspnet core خودم متفاوت هست ولی بد نیست قبلش اینا رو ببینید.

01 | General Development Skills
02 | C#
03 | SQL Fundamentals
04 | ASP.NET Core Basics
05 | SOLID
06 | ORM
07 | Dependency Injection
08 | Databases
09 | Caching
10 | Log Frameworks
11 | API Clients & Communications
12 | Real-Time Communication
13 | Object Mapping
14 | Background Task Scheduler
15 | Testing
16 | Microservices 1
17 | Microservices 2
18 | CI/CD
19 | Design Patterns
20 | Observibility
21 | Client Side .NET
22 | Good to know libraries

@thisisnabi_dev

خفن باشید و پایدار ❤️
10
Forwarded from thisisnabi.dev [Farsi]
احتمالا این عکس رو خیلی هامون دیدیم، کنارش یه کتاب هست با عنوان Clean Code with C# که اونم کتاب خوبی هست برای شما که توی استک دات‌نت کار می کنید.
🔍 جستجوی فازی (Fuzzy Search) در Elasticsearch چیست و چطور کار می‌کند؟

تاحالا شده در یک سایت یا اپلیکیشن، کلمه‌ای را با غلط املایی جستجو کنید ولی باز هم نتایج درستی بگیرید؟ این جادو نیست، این قدرت جستجوی فازی است!

به زبان ساده، جستجوی فازی به ما اجازه می‌دهد کلماتی را پیدا کنیم که شبیه به کلمه مورد نظر ما هستند، حتی اگر دقیقاً یکسان نباشند. این قابلیت برای جبران غلط‌های املایی و اشتباهات تایپی عالی است.

-----

⚙️ الگوریتم پشت صحنه: فاصله لِوِن‌اشتاین (Levenshtein)

مفهوم اصلی خیلی ساده است: فاصله لون‌اشتاین یعنی تعداد تغییرات (حذف، اضافه یا جایگزینی یک حرف) که لازم است تا یک کلمه به کلمه‌ی دیگر تبدیل شود.

بیایید با یک مثال ببینیم:
فرض کنید کاربر تایپ کرده elatic اما منظورش elastic بوده.

- مقایسه: elatic و elastic
- تغییر لازم: فقط کافیست حرف s را اضافه کنیم. (1 تغییر)
- نتیجه: فاصله لون‌اشتاین بین این دو کلمه 1 است.

-----

👨‍💻 مثال عملی در Elasticsearch

فرض کنید این اسناد را در ایندکس خود داریم:

- سند اول: An introduction to elasticsearch
- سند دوم: Learning about statistics
- سند سوم: The basics of elastics

حالا کاربر کلمه‌ی اشتباه elastik را جستجو می‌کند. یک کوئری فازی به شکل زیر است:

GET /my_index/_search
{
"query": {
"fuzzy": {
"title": {
"value": "elastik",
"fuzziness": "2"
}
}
}
}


- در بخش value کلمه‌ای که کاربر جستجو کرده قرار می‌گیرد.
- در بخش fuzziness که مهم‌ترین قسمت است، ما به Elasticsearch می‌گوییم کلماتی را پیدا کن که حداکثر 2 تغییر با کلمه ما دارند.

🤔 نتیجه چه می‌شود؟

- مقایسه با "elasticsearch":
کلمه‌ی elastik با یک تغییر به elastic تبدیل می‌شود. چون فاصله 1 کمتر از 2 است، پس این سند پیدا می‌شود.

- مقایسه با "statistics":
فاصله این دو کلمه بسیار بیشتر از 2 است، پس این سند پیدا نمی‌شود.

- مقایسه با "elastics":
کلمه‌ی elastik با دو تغییر به elastics تبدیل می‌شود. چون فاصله 2 با fuzziness ما برابر است، پس این سند هم پیدا می‌شود.

بنابراین، اسناد شماره یک و سه در نتایج نمایش داده می‌شوند!

-----

💡 نکته طلایی: از `fuzziness: "AUTO"` استفاده کنید!

به جای عدد ثابت (مثل 1 یا 2)، بهتر است از مقدار "AUTO" استفاده کنید. این حالت هوشمند، fuzziness را بر اساس طول کلمه تنظیم می‌کند:

- کلمات کوتاه (تا 2 حرف): بدون فازی (فاصله 0)
- کلمات متوسط (3 تا 5 حرف): حداکثر 1 غلط مجاز (فاصله 1)
- کلمات بلند (بیش از 5 حرف): حداکثر 2 غلط مجاز (فاصله 2)

این کار جلوی نتایج بی‌ربط برای کلمات کوتاه را می‌گیرد و بهترین عملکرد را دارد.

-----

جمع‌بندی نهایی:

- هدف اصلی: پیدا کردن نتایج با وجود غلط املایی.
- الگوریتم پایه: فاصله لون‌اشتاین.
- پارامتر کلیدی: fuzziness (حداکثر تغییرات مجاز).
- بهترین روش: استفاده از "fuzziness": "AUTO".

🎺برای یادگیری بیشتر و دریافت مطالب مفید در زمینه .NET و برنامه‌نویسی، به کانال ما بپیوندید!

📚💻 @dotnetcode 🖥👨‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍114🔥1
جستجوی هوشمند یعنی چی؟ با Stemming آشنا شو!

تاحالا شده دنبال کلمه‌ی "خرید" بگردی ولی نتایجی که توشون "خریدم" یا "خریدن" هست رو پیدا نکنی؟ اینجاست که Stemming یا ریشه‌یابی وارد میشه!

---

ریشه‌یابی (Stemming) چیه؟

خیلی ساده‌ست! فرض کن یک هرس‌کننده‌ی هوشمند داری که شاخ و برگ اضافی کلمه‌ها رو میزنه تا به ریشه‌شون برسه.

برای مثال، این کلمات رو در نظر بگیر:
* کتاب‌ها
* کتابی
* کتابخانه

ریشه‌یاب همه‌ی این‌ها رو به یک کلمه‌ی اصلی برمی‌گردونه: "کتاب"

---

چطوری کار می‌کنه؟

وقتی در سیستمی مثل الاستیک‌سرچ (Elasticsearch) از ریشه‌یابی استفاده می‌کنیم، دو تا اتفاق مهم میفته:

۱. موقع ذخیره: وقتی متنی رو ذخیره می‌کنیم، سیستم کلمه‌ها رو به ریشه‌شون تبدیل می‌کنه.
- جمله‌ی "من کتاب‌ها را خواندم" اینطوری ذخیره میشه: "من کتاب را خواند"

۲. موقع جستجو: وقتی تو کلمه‌ی "کتاب" رو جستجو می‌کنی، سیستم دنبال ریشه‌ی "کتاب" می‌گرده و تمام نتایج مرتبط رو پیدا می‌کنه! 🎉

---

چند مثال دیگه:

* رفتم، می‌روی، رفتند ⬅️ رفت
* کارگر، کارها، کارخانه ⬅️ کار
* نوشته، می‌نویسم، نویسنده ⬅️ نویس

---

نتیجه نهایی:

با ریشه‌یابی، دیگه فرقی نمی‌کنه کاربر دنبال "خرید" بگرده یا "خریدار" یا "خریدند"؛ در هر صورت به چیزی که می‌خواد می‌رسه. این یعنی جستجوی دقیق‌تر، نتایج بیشتر و تجربه‌ی کاربری بهتر!

لینک منبع :

https://www.elastic.co/docs/manage-data/data-store/text-analysis/stemming

🎺برای یادگیری بیشتر و دریافت مطالب مفید در زمینه .NET و برنامه‌نویسی، به کانال ما بپیوندید!

📚💻 @dotnetcode 🖥👨‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥32👏2👍1
چرا جستجوی من همه‌چیز رو پیدا نمی‌کنه؟ راز Synonyms!

تاحالا شده دنبال "موبایل" بگردی، ولی محصولاتی که اسمشون "گوشی" هست رو از دست بدی؟ یا دنبال "کتونی" باشی و نتایج "کفش ورزشی" رو نبینی؟

اینجاست که Synonyms یا مترادف‌ها وارد بازی میشن و جستجو رو نجات میدن!

---

مترادف‌ها (Synonyms) چی هستن؟

خیلی ساده! ما به موتور جستجو (مثلاً الاستیک‌سرچ) یک لیست از کلمات هم‌معنی رو میدیم و میگیم: "رفیق! این کلمه‌ها همشون یه معنی میدن. حواست باشه!"

اینطوری یک گروه از کلمات رو با هم رفیق می‌کنیم!

چند مثال کاربردی:

🔗 گروه اول:
موبایل, گوشی, تلفن همراه

🔗 گروه دوم:
لپ تاپ, نوت بوک, لب تاب (حتی املای اشتباه!)

🔗 گروه سوم:
ماشین, خودرو, اتومبیل

🔗 گروه چهارم:
هوش مصنوعی, AI (برای کلمات اختصاری)

---

جادوش چطوری کار می‌کنه؟

وقتی کاربر کلمه‌ی "گوشی" رو جستجو می‌کنه، الاستیک‌سرچ به‌طور خودکار دنبال "موبایل" و "تلفن همراه" هم می‌گرده. انگار که کاربر همه‌ی این کلمات رو با هم جستجو کرده باشه!

---

نتیجه نهایی:

استفاده از مترادف‌ها باعث میشه جستجوی ما هیچ نتیجه‌ی مرتبطی رو از دست نده. مهم نیست کاربر از چه کلمه‌ای استفاده می‌کنه، همیشه به بهترین و کامل‌ترین جواب می‌رسه. این یعنی کاربر راضی‌تر و جستجوی هوشمندتر!

لینک منبع :
https://www.elastic.co/docs/solutions/search/full-text/search-with-synonyms

🎺برای یادگیری بیشتر و دریافت مطالب مفید در زمینه .NET و برنامه‌نویسی، به کانال ما بپیوندید!

📚💻 @dotnetcode 🖥👨‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13👏3🔥1
Forwarded from TondTech (مسعود بیگی)
#استخدام .net Developer
اگه .net Developer با حداقل 3-4 سال تجربه ی کاری هستید، و دوست دارین تجربه جدید به دست بیارین، بیاین بیشتر گپ بزنیم در موردش.
یه پوزیشن توی Rasmio.com باز کردیم.
مشاهده آگهی و ارسال رزومه در جاب ویژن
2👍2🔥1
دوره MCP مایکروسافت | زیرنویس فارسی


یوتیوب
https://youtu.be/Vr1vMyyIdzM?si=TEuNuXjEJhuE4fQG

آپارات (نیم بها)
https://www.aparat.com/v/azkvpjg

@DevTwitter | <Hamed Heydarian/>
👍4🔥32🥰1🎉1🤩1