TGViewer
Channel Public Channel
Software Philosophy

Software Philosophy

@softwarephilosophy

چکیده‌ای از مفاهیم به روز مهندسی نرم افزار برای مهندسین نرم‌افزار.
معماری نوین نرم‌افزار، تکنولوژی‌های برنامه نویسی جدید
Subscribers
3.48K
Photos
162
Videos
42
Links
1.6K

Showing posts older than #2337 · Back to latest

Older Posts 20 shown
Post #2336 1.55K
🚀 تعریف color در css با OKLCH

🔹 خیلی وقت‌ها در طراحی (وب یا گرافیک) از RGB یا HSB استفاده می‌کنیم.
ولی یک مدل رنگ جدیدتر به اسم OKLCH آمده است که دقیق‌تر و طبیعی‌تر عمل می‌کند.

مدل OKLCH یک فضای رنگ ادراکی (Perceptual) است، یعنی رنگ‌ها را به گونه‌ای تعریف می‌کند که تغییراتش برای چشم انسان واقعی‌تر و یکنواخت‌تر باشد.

پارامترها:
پارامتر L (Lightness) : روشنایی (۰ تا ۱۰۰)
پارامتر C (Chroma): شدت/خلوص رنگ
پارامتر H (Hue): فام (زاویه روی چرخه رنگ ۰ تا ۳۶۰)

🔄 تفاوت با RGB
مدل RGB بر اساس سخت‌افزار (سه کانال قرمز، سبز، آبی) است.
اما OKLCH بر اساس چشم انسان.
در RGB وقتی رنگ را روشن‌تر می‌کنیم، ممکن است فامش تغییر کند. ولی در OKLCH همان رنگ فقط روشن‌تر می‌شود.

🔄 تفاوت با HSB
مدل HSB ساده‌تر از RGB است، ولی همچنان غیرادراکی
در واقع Saturation و Brightness تو HSB خطی نیستند.
در مدل OKLCH اما Chroma و Lightness دقیقاً همان چیزی هستند که چشم ما حس می‌کند.

🎨 مثال
گرادینت از قرمز به آبی در RGB : وسط بنفشی تیره و کدر می‌شود.
background: linear-gradient(to right, rgb(255,0,0), rgb(0,0,255));


همان گرادینت در OKLCH: بنفشی روشن و طبیعی به وجود می‌آید.
background: linear-gradient(to right, oklch(65% 0.25 29), oklch(65% 0.25 265));



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


⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

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

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

______
Jakub Krehel What are OKLCH colors? Article about the OKLCH color model.
  • 👍 9
  • ❤ 3
Post #2335 2.05K
اجرای کدهای پایتون در دات‌نت با جادوی CSnakes!

اگر امکان اجرای کدهای پایتون در همان پروسس دات‌نت وجود داشته باشد، یعنی تمام ۱.۵ میلیون مدل هوش مصنوعی که تا به حال روی HuggingFace قرار گرفته را می‌توان با همان پرفورمنس و بدون نیاز به کشیدن لایه‌های REST در دسترس داشت.

پروژه CSnakes در واقع یک Source Generator و Runtime برای سی‌شارپ است که با بهره‌گیری از Python C-API امکان تولید خودکار کلاس‌های دات‌نت از اسکریپت‌های پایتون رو فراهم می‌کنه. شما فقط کافیه پکیج CSnakes.Runtime رو از NuGet نصب کنید و اسکریپت‌های پایتون‌تون رو به پروژه اضافه کنید تا بدون کوچک‌ترین overhead یا لایه اضافی، هر تابع پایتون به‌صورت یک متد native سی‌شارپ قابل فراخوانی باشد. این رویکرد، سرعت و مقیاس‌پذیری Enterprise دات‌نت را با انعطاف‌پذیری و اکوسیستم غنی پایتون پیوند می‌زند و توسعه اپلیکیشن‌های هوش‌مصنوعی و Data Science را به سطحی جدید می‌رساند.

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

🔗 در این ویدئو Scott Hanselman و Anthony Shaw پروژه CSnakes را معرفی می‌کنند. پیشنهاد می‌کنم حتما این ویدئوی جذاب را ببینید.


#csharp #python #machine_learning

#مهران_داودی (لینکدین - بلاگ)

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

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

______
YouTube Python Meets .NET: Building AI Solutions with Combined Strengths | BRK115 .NET is the ideal platform for building fast, scalable, Enterprise-ready apps that run anywhere. Python is the ideal platform for doing data-science, analytics, and machine-learning. .NET runs some of the biggest applications on the planet and Python has…
  • ❤ 10
  • 👍 10
  • 🔥 2
  • 👏 1
  • 😱 1
Post #2334 1.73K
تعامل هوشمند با کاربر از طریق Azure OpenAI

مدل‌های زبانی مثل GPT با استفاده از Chat Completions API به توسعه‌دهندگان این امکان را می‌دهند که مکالماتی هوشمند، زمینه‌محور و شخصی‌سازی‌شده در اپلیکیشن‌ها پیاده‌سازی کنند. برخلاف روش‌های سنتی که فقط یک ورودی و خروجی ساده دارند، این API از ساختار مکالمه‌ای پشتیبانی می‌کند. یعنی می‌توانید چند پیام با نقش‌های مختلف ارسال کنید و پاسخ‌هایی دقیق‌تر و طبیعی‌تر دریافت کنید.

❓برای اتصال به Azure OpenAI چه چیزهایی لازم است؟
- اشتراک Azure فعال
- فعال‌سازی سرویس Azure OpenAI از طریق Azure Portal
- دریافت Endpoint و کلید دسترسی (API Key)
- نام مدل و Deployment ID که خودتان در پورتال تعریف می‌کنید (مثلاً gpt-4-deployment)


✅نکات مهم درباره Chat Completions
• نقش‌ها (roles): هر پیام باید نقش داشته باشد، برای تنظیم رفتار مدل، برای ورودی کاربر و برای پاسخ مدل.
• زمینه مکالمه: می‌توانید چند پیام پشت ‌سرهم ارسال کنید تا مدل، زمینه را بهتر بفهمد.
• تنظیم (temperature): عددی بین ۰ تا ۱ که میزان خلاقیت پاسخ را کنترل می‌کند. عدد بالاتر یعنی پاسخ‌های متنوع‌تر.

کد نمونه (C# با استفاده از Chat Completions API در Azure)
public async Task<string> GetGptReplyAsync(string userMessage)
{
var endpoint = new Uri("https://YOUR_RESOURCE_NAME.openai.azure.com/");
var apiKey = new AzureKeyCredential("YOUR_API_KEY");
var client = new OpenAIClient(endpoint, apiKey);

var chatOptions = new ChatCompletionsOptions()
{
Messages =
{
new ChatMessage(ChatRole.System, "شما یک دستیار هوشمند هستید که به کاربران در نوشتن مقاله کمک می‌کنید."),
new ChatMessage(ChatRole.User, userMessage)
},
Temperature = 0.7f
};

var deploymentName = "gpt-4-deployment"; // نامی که موقع ساخت مدل در Azure انتخاب کردی

Response<ChatCompletions> response = await client.GetChatCompletionsAsync(deploymentName, chatOptions);
string reply = response.Value.Choices[0].Message.Content;

return reply.Trim();
}

🔗 در این مورد در اینجا بیشتر بخوانید.

———
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#نگار_قاسمی (لینکدین)

کانال تلگرام:
@SoftwarePhilosophy
_________
SoundCode Calling Azure OpenAI models from C# with Microsoft.Extensions.AI AI opens up a lot of exciting possibilities for developers to use its capabilities within their own applications, but it can feel a bit overwhelming getting started. You have a lot of choices around which models to use and how best to interact with them.
  • 👍 9
  • ❤ 1
  • 🔥 1
Post #2333 1.49K
مدل Claude Sonnet 4.5، قوی‌ترین مدل کدنویسی دنیا، حتی جلوتر از GPT-5!

شرکت Anthropic با معرفی Claude Sonnet 4.5 نه ‌تنها در کدنویسی بی‌رقیب شده است، بلکه در منطق، ریاضی و امنیت هم جهش بزرگی داشته.

چرا Claude 4.5 خاص است؟
- صدرنشین بنچمارک OSWorld با امتیاز 61.4٪ (GPT-5 پایین‌تره)

- عملکرد 82٪ در SWE-bench Verified برای حل مشکلات واقعی برنامه‌نویسی

- تمرکز پایدار در وظایف طولانی (بیش از ۳۰ ساعت!)

- اجرای مستقیم کد، ساخت فایل‌ها، و تعامل با ابزارها در گفتگو

- وجود SDK اختصاصی برای ساخت ایجنت‌های هوشمند با حافظه بلندمدت و زیرایجنت‌ها

- افزونه‌های VS Code و Chrome برای توسعه‌دهنده‌ها

امنیت و هم‌راستایی:
مدل Claude 4.5 تحت سطح ایمنی ASL-3 عرضه شده؛ با کاهش رفتارهای ناهماهنگ مثل چاپلوسی، توهم‌زایی، و مقاومت بالا در برابر حملات prompt injection.

📊 مقایسه با GPT-5:
در حالی که GPT-5 در زبان و تولید محتوا قوی‌تر است، Claude 4.5 در استفاده عملی از کامپیوتر، اجرای کد، و ... برتری دارد. مخصوصاً برای توسعه‌دهنده‌ها، Claude انتخابی حرفه‌ای‌تر است.

📎 جزئیات کامل در معرفی رسمی مدل توسط Anthropic

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

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

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

______
Anthropic Introducing Claude Sonnet 4.5 Claude Sonnet 4.5 is the best coding model in the world, strongest model for building complex agents, and best model at using computers.
  • 👍 8
  • ❤ 2
Post #2332 1.51K
🎬✨ همین دیروز Sora 2 رسید!

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

🔹 اجرای حرکات پیچیده مثل ژیمناستیک المپیکی و ...
🔹 کنترل دقیق صحنه‌ها و حفظ وضعیت اصلی در چند شات
🔹 و مهمترین ویژگی امکان حضور خودتون یا دوستانتون در ویدیوها با ویژگی Cameo




📚 اطلاعات بیشتر در سایت OpenAI.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

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

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

______
OpenAI Sora 2 is here This post introduced Sora 2, a video generation model with synchronized dialogue and sound effects. The Sora product is no longer available.
  • 🔥 8
  • ❤ 2
  • 👍 2
Post #2331 1.52K
خبر داغ برای توسعه‌دهندگان وب!

🔐 کتابخانه محبوب Auth.js (که قبلاً با نام NextAuth.js شناخته می‌شد) حالا تحت مدیریت تیم Better Auth قرار گرفته است!

اگر تا حالا با ChatGPT، Google Labs یا Cal.com کار کرده باشید، احتمالاً با Auth.js هم تعامل داشته‌اید، یکی از پراستفاده‌ترین ابزارهای احراز هویت در دنیای جاوااسکریپت.

📌 چرا این مسئله مهم است؟ تیم Better Auth با هدف ارتقاء تجربه احراز هویت، حالا مسئول نگهداری و توسعه Auth.js شده. این یعنی امنیت بیشتر، امکانات بهتر و مسیر روشن‌تر برای آینده‌ی این ابزار قدرتمند.

✅ به پروژه‌های جدید پیشنهاد می‌شود با Better Auth شروع کنند.
✅ برای پروژه‌های فعلی، Auth.js همچنان پشتیبانی می‌شود.
✅ راهنمای مهاجرت از NextAuth به Better Auth هم آماده است.

🎯 هدف نهایی؟ اینکه کنترل کامل احراز هویت دست خود شما باشد!

📚 اطلاعات بیشتر و راهنماها.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

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

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

______
Better Auth Auth.js is now part of Better Auth Auth.js, formerly known as NextAuth.js, is now being maintained and overseen by Better Auth team
  • ❤ 7
  • 👍 5
Post #2330 1.54K
🎯‌فیدو (FIDO2) چیست و چرا مهم است؟

فیدو - FIDO2 استانداردی جهانی برای احراز هویت بدون رمز عبور است که توسط مایکروسافت و شرکت‌های بزرگ دیگر طراحی شده است تا امنیت ورود به حساب‌ها را بالا ببرد و جلوی حملات فیشینگ و هک رو بگیرد.

🔐‌ چگونه کار می‌کند؟
به جای رمز عبور، FIDO2 از یک جفت کلید رمزنگاری استفاده می‌کند:
- کلید عمومی برای سرور.
- کلید خصوصی که فقط روی دستگاه شما می‌ماند.
وقتی می‌خواهید وارد حساب کاربری خود شوید، دستگاه شما رمزنگاری را با کلید خصوصی امضا می‌کنه و امنیت را تضمین می‌کند.

📱‌ انواع احراز هویت‌کننده‌ها:
۱. قابل حمل (Roaming): مانند فلش امنیتی، گوشی یا ساعت هوشمند.
۲. داخلی (Platform): مثل اثر انگشت یا تشخیص چهره روی لپ‌تاپ یا موبایل.

✅‌ مزایای FIDO2:
- امنیت بالا در برابر فیشینگ و بدافزار.
- حفظ حریم خصوصی (اطلاعات بیومتریک فقط روی دستگاه ذخیره می‌شود).
- راحتی در ورود بدون نیاز به رمز.
- مقیاس‌پذیری برای شرکت‌ها و سازمان‌ها.

💻‌ نمونه کد ساده برای استفاده از FIDO2 در سی‌شارپ:

بخش ابتدایی جهت ایجاد کلیدها:
// 1. پیکربندی اولیه FIDO2
var fidoConfig = new Fido2Configuration
{
ServerDomain = "myapp.com",
ServerName = "My Secure App",
Origin = "https://myapp.com"
};

var fido2 = new Fido2(fidoConfig);

// 2. تعریف کاربر
var user = new Fido2User
{
DisplayName = "Hamed",
Name = "hamed123",
Id = Encoding.UTF8.GetBytes("unique-user-id")
};

// 3. ایجاد گزینه‌های ثبت‌نام
var options = fido2.RequestNewCredential(
user,
new List<PublicKeyCredentialDescriptor>(), // لیست دستگاه‌های قبلی
AuthenticatorSelection.Default,
AttestationConveyancePreference.None
);

// 4. ارسال گزینه‌ها به کلاینت برای ادامه ثبت‌نام
return Json(options);



بخش دوم برای احراز هویت کلیدهای از قبل ایجاد شده:

var success = await fido2.MakeAssertionAsync(
clientResponse, // پاسخ امضا شده از کلاینت
assertionOptions,
storedPublicKey, // کلید عمومی ثبت‌شده قبلی
storedUserHandle
);

if (success.Result.Status == "ok")
{
// ورود موفق
return Ok("ورود با موفقیت انجام شد!");
}
else
{
return BadRequest("احراز هویت ناموفق بود.");
}



🔗 داکیومنت ها ( ۱ و ۲ )

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

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

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

______
  • ❤ 14
  • 👍 7
  • 🔥 1
Post #2328 1.73K
ایندکسر (Indexer) در سی‌شارپ

#csharp_for_beginners

وقتی یک کلاس یا ساختار (struct) را می‌سازیم، ممکن است بخواهیم از آن مانند آرایه‌ای با “[]” به موقعیت‌های کلاس یا ساختار دسترسی داشت: هم خواندن و هم نوشتن. ایندکسرها این امکان را فراهم می‌کنند. یعنی به جای روش‌های معمول مثل GetItem(…) یا SetItem(…)، بتوان نوشت:
myObject[i] = value;
var x = myObject[i];

ساختار ایندکسر

ایندکسر شبیه پراپرتی تعریف می‌شود، با این تفاوت که زمان get و set یک یا چند پارامتر (معمولاً اندیس) دریافت می‌کند. برای تعریف ایندکسر از کلمه‌ی کلیدی this استفاده می‌کنیم:
public class SampleCollection<T>
{
private T[] arr = new T[100];

public T this[int i]
{
get { return arr[i]; }
set { arr[i] = value; }
}

انواع ایندکسر
خواندنی و نوشتنی (Read/Write): هم get و هم set را داراست.
فقط خواندنی (Read-only): فقط get را داراست. مثلاً اگر لازم باشد فقط به داده‌ها دسترسی دهیم ولی تغییری در داده‌ها ندهیم.
چند پارامتری: ایندکسر می‌تواند بیشتر از یک ایندکس داشته باشد، مانند ایندکسر دو بعدی
غیر عددی: الزامی نیست شاخص‌ها عدد باشند؛ می‌اتونند نوعی مانند رشته، تاریخ یا هر نوع دلخواهی باشند.

موارد استفاده
شبیه‌سازی آرایه یا لیست: وقتی کلاس شما مانند یک مجموعه عمل می‌کند، ولی نمی‌خواهید جزئیات داخلی را بیرون دهید.
دیکشنری / نگاشت (mapping): مثلاً وقتی می‌خواهید بر اساس کلید (مانند رشته یا تاریخ) مقدار دهی کنید یا مقداری را بگیرید، بجای متدهایی مانند Get یا Find، می‌توانید بنویسید: obj[“key”] .
داده‌های وابسته به زمان یا تاریخ: مانند ثبت دما بر اساس تاریخ، طوری که بتوانید با obj[date] بخوانید یا بنویسید.
زمانی که نمی‌خواهیم کل داده‌ها به صورت همزمان در حافظه داشته باشیم: ممکن است بخش‌هایی از داده را بر حسب نیاز بارگذاری یا حذف کنید. ایندکسر اجازه می‌دهد که فقط وقتی به داده‌ای نیاز داریم، آن قسمت پردازش شود.

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

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

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

______
Docs Indexers - C# Indexers in C# allow class or struct instances to be indexed like arrays. You can set or get the indexed value without specifying a type or instance member.
  • 👍 4
  • ❤ 3
Post #2327 1.35K
کارگاه «Mastering MCP: A Technical Deep Dive»

تو این کارگاه قراره یه MCP رو با هم از صفر بنویسیم و بعدش هم با هم جزئیات پروتکل MCP رو بررسی کنیم و بفهمین که چه امکاناتی داره و چطور می‌شه ازش تو نرم‌افزارهای جدید و مبتنی بر هوش‌مصنوعی استفاده کرد.

📅 Wednesday, September 24, 2025
🕒 11:30 AM Toronto | 5:30 PM Europe | 7:00 PM Iran

https://meet.google.com/zht-fcyx-pkg
  • 🔥 9
  • ❤ 3
  • 👍 1
  • 👏 1
Post #2326 1.43K
🧵 مقایسه AOT در NET. و Java، کدام برای تولید آماده‌تر است؟

در سال ۲۰۲۵، AOT (کامپایل پیش از اجرا) به یک ابزار کلیدی برای بهینه‌سازی زمان شروع، مصرف حافظه و ساده‌سازی دیپلوی تبدیل شده. اما بین NET. و Java، کدام بهتر عمل کرده؟

خلاصه NET Native AOT
✅ کاملاً یکپارچه با SDK
✅ خروجی اجرایی مستقل از runtime
✅ شروع سریع و مصرف حافظه پایین
✔️ محدودیت در کدهای داینامیک (مثل Reflection.Emit)

خلاصه Java GraalVM Native Image
✅ خروجی باینری مستقل از JVM
✅ مناسب برای ابزارهای CLI و serverless
✔️ نیاز به پیکربندی دستی برای reflection و proxy
✔️ زمان ساخت طولانی‌تر و پیچیدگی بیشتر

📊 مقایسه نهایی
در حال حاضر NET Native AOT. گزینه‌ای بالغ‌تر و آماده‌تر برای استفاده در محیط‌های تولیدی است. Java با GraalVM قدرتمند است، اما بیشتر مناسب پروژه‌های خاص یا جدید.

📎 مطلب کامل را اینجا بخوانید.

#مهران_داودی (لینکدین - بلاگ)

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

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

______
DEV Community AOT: .NET vs Java ⚔️ AOT Showdown: .NET vs Java in 2025; Who’s really production-ready? In the race to optimize...
  • 👍 3
  • ❤ 1
  • 🔥 1
Post #2325 2.01K
🚀 هوش مصنوعی Local با Ollama و GPT-OSS در CSharp

اگر به دنبال راهی ساده، امن و قدرتمند برای اجرای مدل‌های هوش مصنوعی برروی سیستم خود هستید، Ollama دقیقاً همان چیزی است که می‌خواهید! با ترکیب Ollama و مدل GPT-OSS می‌توانید دستیاری هوشمند بسازید که کاملاً آفلاین و خصوصی کار می‌کند.

🔧‌ چه لازم دارید؟
- سیستم با حداقل ۱۶ گیگ رم و GPU مناسب (یا مک با Apple Silicon)
- نصب NET 8. یا بالاتر
- نصب Ollama و اجرای دستور زیر برای دریافت مدل:
ollama pull gpt-oss:20b


🛠‌ مراحل ساخت اپ کنسولی با سی‌شارپ:
۱. ساخت پروژه جدید:
dotnet new console -n OllamaGPTOSS
cd OllamaGPTOSS


۲. نصب پکیج‌ها:
dotnet add package Microsoft.Extensions.AI
dotnet add package OllamaSharp


۳. نوشتن کد چت در Program.cs:
کدی بنویسید که تاریخچه گفتگو را نگه‌دارد و پاسخ‌ها را به‌صورت زنده نمایش دهد. (نمونه کد)

۴. اجرای برنامه:
مطمئن شوید که سرویس Ollama در حال اجراست، بعد با دستور زیر برنامه را اجرا کنید:
dotnet run


💡‌ قدم بعدی؟
با Microsoft.Extensions.AI می‌توانید از همه قابلیت‌های Model استفاده کنید.

🔗 [لینک پست لینکدین]

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

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

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

______
  • ❤ 11
  • 👍 2
  • 🔥 2
Post #2324 1.53K
وقتی تعداد ورودی‌ها مشخص نیست، params وارد می‌شود!

در دنیای توسعه نرم‌افزار، همیشه با توابعی مواجه می‌شویم که باید انعطاف‌پذیر باشند؛ یعنی بتوانند با ورودی‌های مختلف و تعداد متغیر از داده‌ها کار کنند. زبان سی‌شارپ با کلمه کلیدی params این امکان را فراهم کرده‌است تا بدون دردسر، توابعی بنویسیم که مثل یک میزبان خوش‌برخورد، هر تعداد مهمان را با آغوش باز بپذیرند!

🔘مثال:
public static void LogErrors(params string[] errorMessages)
{
foreach (var msg in errorMessages)
{
Console.WriteLine($"[ERROR] {DateTime.Now}: {msg}");
}
}

🔘 استفاده از تابع:
LogErrors("خطا در اتصال به دیتابیس");
LogErrors("کاربر یافت نشد", "توکن منقضی شده", "دسترسی غیرمجاز");


✅ نکات مهم:
- فقط یک پارامتر می‌تواند params باشد و باید آخرین پارامتر تابع باشد.
- نوع داده‌ی params باید آرایه‌ای باشد (مثلاً int[], string[]).
- اگر هیچ مقداری ارسال نشود، آرایه خالی می‌شود و تابع بدون خطا اجرا می‌شود.

🎯 مزیت این روش:
- نیازی به ساخت آرایه نیست
- تابع با هر تعداد پیام کار می‌کند
- کد خواناتر و تمیزتر

مطلب کامل را در اینجا می‌توانید مطالعه کنید.
———
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#نگار_قاسمی (لینکدین)

کانال تلگرام:
@SoftwarePhilosophy
_______
C-Sharpcorner Params Keyword in C# C# params. In this article, I explain how and what is the use of the params keyword in C#.
  • 👍 7
  • ❤ 1
Post #2323 1.37K
ساده‌سازی Property ها با کلمه کلیدی field

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

در نسخه‌های قبلی سی‌شارپ، وقتی یک property تعریف می‌شد و قصد داشتید در get یا set به فیلد پشتیبانش دسترسی داشته باشید، باید آن فیلد دستی تعریف می‌شد. اما حالا با filed ، می‌توان از فیلد پنهانی‌ای که کامپایلر خودش برای property تولید می‌کند استفاده کرد.

🔘 روش قدیمی (قبل از اضافه شدن field):
private string _email;

public string Email
{
get => _email;
set
{
if (!value.Contains("@"))
throw new ArgumentException("Invalid email address");
_email = value;
}
}

در اینجا:
- باید فیلد _email را جداگانه تعریف می‌کردیم.
- در get و set به آن فیلد دستی اشاره می‌کردیم.

🟣 روش جدید با fileld:
public string Email
{
get => field;
set
{
if (!value.Contains("@"))
throw new ArgumentException("Invalid email address");
field = value;
}
}

در این نسخه:
- نیازی به تعریف فیلد جداگانه نیست و کامپایلر خودش یک فیلد پنهان برای Email می‌سازد.

🔗 در اینجا بیشتر بخوانید.

———
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

#نگار_قاسمی (لینکدین)

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

______
  • 👍 19
  • ❤ 5
  • 🔥 1
Post #2322
Software Philosophy pinned «🚀 کارگاه GenAI/LLM Fundamentals for Business People 👤 توسط : مهران داودی 📅 تاریخ: چهارشنبه، ۲۶ شهریور ۱۴۰۴ 🕒 زمان: - ساعت ۱۱:۳۰ صبح (تورنتو) - ساعت ۵:۳۰ عصر (اروپا) - ساعت ۷:۰۰ شب (ایران) 🚀 «مبانی GenAI و مدل‌های زبانی بزرگ (LLM) برای افراد بیزنسی»…»
Post #2321 4.5K
🚀 کارگاه GenAI/LLM Fundamentals for Business People
👤 توسط : مهران داودی

📅 تاریخ: چهارشنبه، ۲۶ شهریور ۱۴۰۴
🕒 زمان:
- ساعت ۱۱:۳۰ صبح (تورنتو)
- ساعت ۵:۳۰ عصر (اروپا)
- ساعت ۷:۰۰ شب (ایران)

🚀 «مبانی GenAI و مدل‌های زبانی بزرگ (LLM) برای افراد بیزنسی»
این کارگاه برای مدیران و متخصصان کسب‌وکار طراحی شده که می‌خواهند درک دقیقی از کاربردهای عملی هوش مصنوعی مولد و مدل‌های زبانی بزرگ در فضای واقعی کسب‌وکار داشته باشند. چه در آغاز مسیر یادگیری هوش مصنوعی باشید و چه به دنبال تعمیق دانش خود، این ورکشاپ پایه‌های ضروری برای حرکت در مسیر پرشتاب GenAI را در اختیار شما قرار می‌دهد.

شرکت برای همه آزاد و رایگان است.
▫️اینجا ثبت نام کنید:
https://www.linkedin.com/feed/update/urn:li:activity:7372270104853610496/

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

______
LinkedIn #genai #llm #businesstransformation #aiforbusiness #professionaldevelopment | Divan 🚀 Excited to share an upcoming session: GenAI/LLM Fundamentals for Business People 📅 Date: Wednesday, September 17, 2025 🕒 Time: - 11:30 AM (Toronto) - 5:30 PM (Europe) - 7:00 PM (Iran) Instructor: Mehran Davoudi This session is designed for business…
  • ❤ 7
  • 👏 3
  • 🔥 1
Post #2318 1.74K
کانستراکترها (سازنده‌ها) در سی‌شارپ

#csharp_for_beginners

۱. تعریف و نقش
کانستراکتر روش (متودی) است که توسط محیط زمان اجرای (Runtime) هنگام ساخت یک شیء (instance) از یک کلاس یا ساختار (struct) فراخوانی می‌شود. می‌توان برای یک کلاس یا struct چندین کانستراکتر با پارامترهای مختلف تعریف کرد تا اطمینان حاصل شود که اشیاء جدید در وضعیت معتبر ساخته می‌شوند.

۲. ترتیب اجرای مراحل ساخت شیء
هنگام ساخت یک شیء با عملگر new، مراحل زیر به ترتیب انجام می‌شوند:
۱. میدان‌های نمونه‌ای (instance fields) به مقدار پیش‌فرض (مثل صفر) مقداردهی می‌شوند.
۲. مقداردهی اولیه‌ی فیلدها (field initializers) در نوع مشتق‌شده اجرا می‌شود.
۳. مقداردهی اولیه‌ی فیلدها در نوع پایه آغاز می‌شود تا به System.Object برسد.
۴. کانستراکترهای نمونه‌ای کلاس‌های پایه ابتدا اجرا می‌شوند تا به کلاس جاری برسند.
۵. در نهایت، کانستراکتر خود کلاس اجرا می‌شود.
۶. اگر از initializerهای شیء (object initializers) استفاده شده باشد، آن‌ها بعد از کانستراکتر اجرا می‌شوند، به ترتیب متنی ظاهرشده.

در ساختارها (struct) اگر از مقدار پیش‌فرض (default) استفاده شود، همه فیلدها به صفر مقداردهی می‌شوند.
در آرایه‌ها هم تمامی عناصر هنگام ساخت آرایه به مقدار پیش‌فرضشان (صفر یا null) تنظیم می‌شوند.

۳. کانستراکترهای استاتیک (static constructors)
کانستراکتر استاتیک (بدون پارامتر) برای مقداردهی اولیه‌ی اعضای استاتیک استفاده می‌شود.
این کانستراکتر حداکثر یک‌بار، پیش از هر کانستراکتر نمونه‌ای اجرا می‌شود.
در صورت عدم تعریف آن، کامپایلر به‌طور خودکار اعضای استاتیک را به مقادیر پیش‌فرضشان مقداردهی می‌کند.

نمونه کانستراکتر:

public class Person
{
private string last, first;

public Person(string lastName, string firstName)
{
last = lastName;
first = firstName;
}
}


۴. کانستراکتر اولیه (Primary constructor)
از سی‌شارپ ۱۴ به بعد امکان تعریف primary constructor وجود دارد: روشی برای مشخص کردن پارامترهایی که برای نمونه‌سازی نوع مورد نیاز هستند.
• مثال:

public class LabelledContainer<T>(string label)
{
public string Label { get; } = label;
public required T Contents { get; init; }
}
. می‌توان برای یک کلاس یا struct چندین کانستراکتر با پارامترهای مختلف تعریف کرد تا اطمینان حاصل شود که اشیاء جدید در وضعیت معتبر ساخته می‌شوند


ترتیب اجرا
۵. کانستراکترهای partial
از سی‌شارپ ۱۴ به بعد امکان تعریف کانستراکترهای partial در انواع جزئی وجود دارد.
این کانستراکترها باید دارای اعلامیه (declaration) و پیاده‌سازی (implementation) با امضای (signature) یکسان باشند.

همچنین ()base : یا ()this : نمی‌تواند در بخش declaration استفاده شود؛ این موارد باید در implementing declaration قرار بگیرند.

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

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

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

______
Docs Constructors - C# A constructor in C# is called when a class or struct is created. Use constructors to set defaults, limit instantiation, and write flexible, easy-to-read code.
  • 👍 10
Post #2317 1.57K
بهبود عملکرد JSON در دات‌نت با حذف Reflection!

در اپلیکیشن‌های دات‌نت که در حجم بالا با JSON سروکار دارند، استفاده از JsonSerializer باعث کندی در شروع برنامه، مصرف زیاد حافظه و کاهش سرعت می‌شود. دلیل این موضوع استفاده از Reflection در زمان اجراست که منابع زیادی مصرف می‌کند.

راه‌حل:
در دات‌نت ۶ قابلیت جدیدی معرفی شده: Source Generator برای System.Text.Json. این ابزار در زمان کامپایل کدهای لازم برای سریال‌سازی و دی‌سریال‌سازی را تولید می‌کند، و دیگر نیازی به Reflection در زمان اجرا نیست!

مزایای این موضوع:
- افزایش سرعت سریال‌سازی تا ۱.۶ برابر
- کاهش زمان شروع برنامه
- کاهش مصرف حافظه
- سازگاری بهتر با trimming و کاهش حجم نهایی اپ


public class Person {
public string FirstName { get; set; }
public string LastName { get; set; }
}


حالا با استفاده از Source Generator:
[JsonSerializable(typeof(Person))]
internal partial class MyJsonContext : JsonSerializerContext { }


و برای سریال‌سازی:
var person = new Person { FirstName = "Jane", LastName = "Doe" };
var json = JsonSerializer.Serialize(person, MyJsonContext.Default.Person);



📎 برای جزئیات بیشتر، مطلب کامل را اینجا بخوانید.

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

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

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

______
Microsoft News Try the new System.Text.Json source generator Learn about the new System.Text.Json source generator
  • ❤ 11
  • 👍 4
  • 🔥 1
Post #2316 1.56K
گاهی وقت‌ها لازم است مرورگر به‌صورت خودکار اجرا شود و بخشی از کارها را انجام دهد.

مثال:
- نوشتن تست E2E برای نرم‌افزار: باز کردن سایت، لاگین، بررسی مودال‌ها
- گرفتن PDF یا اسکرین‌شات از صفحات خاص
- اسکرپینگ داده‌ها از سایت‌های مختلف

برای این کارها، سه ابزار محبوب داریم:
ابزار Selenium: قدیمی‌ترین و پایدارترین ابزار تست مرورگرها. پشتیبانی از همه مرورگرها، سازگار با زبان‌های مختلف (Java, Python, C#, ...)، سرعت پایین‌تر.
نکته: Dockerize کردن آن گاهی دردسر دارد، بخصوص در CI/CD.

ابزار :Puppeteer / PuppeteerSharp: ابزاری مدرن مبتنی بر DevTools، مخصوص Chrome/Chromium، سریع و سبک، مناسب برای اسکرپینگ، تولید PDF، گرفتن اسکرین‌شات.
نکته: نسخه‌ی #CSharp با نام PuppeteerSharp در NuGet موجود است و راحت در محیط‌های Docker قابل استفاده ولی محدود به مرورگرهای گوگل!


ابزار Playwright: نسل جدید از مایکروسافت، با قابلیت‌های پیشرفته، پشتیبانی از Chrome, Firefox, Safari (WebKit) ،Auto-wait هوشمند، کانتکست‌های ایزوله، پشتیبانی رسمی از #CSharp، Node.js، Python، Java، مناسب برای تست‌های مدرن و پروژه‌های جدید، عالی برای شبیه‌سازی چند کاربر همزمان.

پیشنهاد من:
پروژه‌ی جدید و کراس‌مرورگر از Playwright

اسکرپینگ سبک یا تولید PDF فقط روی کروم از Puppeteer / PuppeteerSharp

پروژه‌ی Enterprise یا نیاز به سازگاری Legacy از Selenium

▫️اگه تجربه‌ای با این ابزارها دارید یا سوالی براتون پیش اومده، خوشحال می‌شم بشنوم.

🔗 مطلب کامل را در اینجا بخوانید.

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

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

______
  • 👍 9
  • ❤ 3
  • 🔥 1
Post #2314 1.49K
معرفی کلی Pattern Matching در زبان سی‌شارپ

#csharp_for_beginners

تکنیک Pattern matching روشی است که امکان بررسی یک عبارت (expression) براساس ویژگی‌های خاصی را فراهم می‌کند.
این روش در سی‌شارپ کمک می‌کند تا کدها خواناتر، مختصرتر و ایمن‌تر شوند، مثلاً به جای عملیات مرسوم قبلی، بررسی نوع یا وضعیت ارزش‌ها را در قالب‌هایی مستقیم‌تر انجام می‌دهد.


سازوکارها و ساختارهای اصلی در سی‌شارپ

۱. is Expression (عمل‌گر is)

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

مثال

int? maybe = 12;
if (maybe is int number) {
Console.WriteLine($"The value is {number}");
}


۲. عبارت switch یا switch Expression

یک روش کامپکت برای انتخاب رفتار یا مقدار خروجی بر اساس الگوی تطابق

visitorCount switch {
1 => 12.0m,
2 => 20.0m,
_ => 0.0m
}


Declaration & Type Patterns
Constant Patterns
Relational Patterns
Property Patterns
Positional Patterns
Var Patterns
Discard Pattern (_)
Logical Patterns (and, or, not)
List Patterns

مثال کاربردی ساده (Switch Expression)

برای تفهیم بهتر، یک مثال ساده از switch expression

var x = 4;
string result = x switch {
1 => "one",
2 => "two",
3 => "three",
_ => "other"
};
Console.WriteLine(result); // خروجی: "other"


نکات مهم و پیش‌فرض‌ها
خوانایی و اجتناب از boilerplate: الگوها کمک می‌کنند تا از ساختارهای طولانی if-else یا casting‌های دستی دوری کنیم.

اعتبارسنجی compile-time: کامپایلر در صورت نپرداختن به حالت‌هایی مانند null یا همهٔ مقدارهای احتمالاً ممکن، هشدار می‌دهد.

ترکیب با refactoring‌های IDE: ابزار‌هایی مانند Visual Studio پیشنهاد می‌دهند به جای as و null check، از pattern matching استفاده شود.

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

⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنت‌ها به اشتراک بگذارید.

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

______
Docs Pattern matching overview - C# Learn about pattern matching expressions in C#
  • ❤ 7
  • 👍 4
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →