تعامل هوشمند با کاربر از طریق 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)
🔗 در این مورد در اینجا بیشتر بخوانید.
———
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
#نگار_قاسمی (لینکدین)
کانال تلگرام:
@SoftwarePhilosophy
_________
مدلهای زبانی مثل 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
اجرای کدهای پایتون در داتنت با جادوی 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
______
اگر امکان اجرای کدهای پایتون در همان پروسس داتنت وجود داشته باشد، یعنی تمام ۱.۵ میلیون مدل هوش مصنوعی که تا به حال روی 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❤9🔥2👏1😱1
🚀 تعریف 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 : وسط بنفشی تیره و کدر میشود.
همان گرادینت در OKLCH: بنفشی روشن و طبیعی به وجود میآید.
🔗 مطلب کامل را در این لینک میتوانید مطالعه کنید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
#حامد_حاجیلو (لینکدین)
کانال تلگرام:
@SoftwarePhilosophy
______
🔹 خیلی وقتها در طراحی (وب یا گرافیک) از 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.kr
What are OKLCH colors?
Article about the OKLCH color model.
👍9❤3
رابط (Interface) در سیشارپ
#csharp_for_beginners
تعریف و کاربرد
کلمه کلیدی interface برای تعریف یک قرارداد به کار میرود. این قرارداد مجموعهای از امضاهای اعضا را مشخص میکند که میتواند شامل متدها، ویژگیها، ایندکسرها، رویدادها و غیره باشد.
یک interface میتواند اعضایی بدون پیادهسازی یا اعضایی با پیادهسازی پیشفرض داشته باشد. همچنین امکان تعریف اعضای static نیز وجود دارد.
از نسخه سیشارپ ۱۱ به بعد interface میتواند اعضای static abstract یا static virtual داشته باشد. این موضوع زمانی مفید است که بخواهیم در یک نوع عمومی (generic) رفتار مشخصی برای تمام انواع پیادهساز اجباری کنیم. به عنوان مثال در کتابخانه داتنت انواع عددی مختلف واسط INumber را پیاده میکنند تا عملیات ریاضی مشترک میان آنها تضمین شود.
قوانین دسترسی و سطح تعریف
یک interface سطح بالا (در فضای نام) میتواند internal یا public باشد. پیشفرض internal است.
اگر interface به صورت تو در تو داخل یک نوع دیگر تعریف شود میتوان از هر نوع اصلاحکننده دسترسی استفاده کرد.
اعضای interface که بدون پیادهسازی هستند اصلاحکننده دسترسی ندارند. اما اگر برای آن عضو پیادهسازی پیشفرض بنویسیم میتوان دسترسی آن را مشخص کرد.
انواع اعضا در interface
یک interface میتواند شامل موارد زیر باشد:
-متدها
-ویژگیها
-ایندکسرها
-رویدادها
-ثابتها
-عملگرها
-انواع تو در تو
-سازنده ایستا
پیادهسازی
یک interface میتواند از یک یا چند interface دیگر مشتق شود. هر نوعی که interface مشتق را پیاده کند باید تمام اعضای interfaceهای پایه و مشتق را پیادهسازی کند.
کلاس یا ساختار میتواند اعضای interface را به صورت ضمنی یا به صورت صریح (explicit implementation) پیاده کند.
اگر یک عضو interface پیادهسازی پیشفرض داشته باشد معمولاً تنها از طریق نمونهای از نوع interface قابل دسترسی است نه مستقیماً از طریق کلاس پیادهساز.
مثالها
تعریف یک قرارداد ساده
تعریف ویژگیها و متدها
🔗 مطلب کامل را در این لینک میتوانید مطالعه کنید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
کانال تلگرام:
@SoftwarePhilosophy
______
#csharp_for_beginners
تعریف و کاربرد
کلمه کلیدی interface برای تعریف یک قرارداد به کار میرود. این قرارداد مجموعهای از امضاهای اعضا را مشخص میکند که میتواند شامل متدها، ویژگیها، ایندکسرها، رویدادها و غیره باشد.
یک interface میتواند اعضایی بدون پیادهسازی یا اعضایی با پیادهسازی پیشفرض داشته باشد. همچنین امکان تعریف اعضای static نیز وجود دارد.
از نسخه سیشارپ ۱۱ به بعد interface میتواند اعضای static abstract یا static virtual داشته باشد. این موضوع زمانی مفید است که بخواهیم در یک نوع عمومی (generic) رفتار مشخصی برای تمام انواع پیادهساز اجباری کنیم. به عنوان مثال در کتابخانه داتنت انواع عددی مختلف واسط INumber را پیاده میکنند تا عملیات ریاضی مشترک میان آنها تضمین شود.
قوانین دسترسی و سطح تعریف
یک interface سطح بالا (در فضای نام) میتواند internal یا public باشد. پیشفرض internal است.
اگر interface به صورت تو در تو داخل یک نوع دیگر تعریف شود میتوان از هر نوع اصلاحکننده دسترسی استفاده کرد.
اعضای interface که بدون پیادهسازی هستند اصلاحکننده دسترسی ندارند. اما اگر برای آن عضو پیادهسازی پیشفرض بنویسیم میتوان دسترسی آن را مشخص کرد.
انواع اعضا در interface
یک interface میتواند شامل موارد زیر باشد:
-متدها
-ویژگیها
-ایندکسرها
-رویدادها
-ثابتها
-عملگرها
-انواع تو در تو
-سازنده ایستا
پیادهسازی
یک interface میتواند از یک یا چند interface دیگر مشتق شود. هر نوعی که interface مشتق را پیاده کند باید تمام اعضای interfaceهای پایه و مشتق را پیادهسازی کند.
کلاس یا ساختار میتواند اعضای interface را به صورت ضمنی یا به صورت صریح (explicit implementation) پیاده کند.
اگر یک عضو interface پیادهسازی پیشفرض داشته باشد معمولاً تنها از طریق نمونهای از نوع interface قابل دسترسی است نه مستقیماً از طریق کلاس پیادهساز.
مثالها
تعریف یک قرارداد ساده
interface ISampleInterface
{
void SampleMethod();
}
class ImplementationClass : ISampleInterface
{
void ISampleInterface.SampleMethod()
{
// پیادهسازی متد
}
}
تعریف ویژگیها و متدها
interface IPoint
{
int X { get; set; }
int Y { get; set; }
double Distance { get; }
}
class Point : IPoint
{
public int X { get; set; }
public int Y { get; set; }
public double Distance => Math.Sqrt(X * X + Y * Y);
}
🔗 مطلب کامل را در این لینک میتوانید مطالعه کنید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
کانال تلگرام:
@SoftwarePhilosophy
______
Docs
interface keyword - C# reference
Use the `interface` keyword to define contracts that any implementing type must support. Interfaces provide the means to create common behavior among a set of unrelated types.
👍2
اقدامات جدید مایکروسافت در جهت افزایش چشمگیر امنیت ابری
مایکروسافت بهجای استفاده از ماژولهای امنیتی متمرکز (HSM)، حالا تراشههای امنیتی را داخل هر سرور قرار داده است. این یعنی امنیت بیشتر و حذف نیاز به ارتباط TLS با سرور مرکزی.
🔐 تراشه اختصاصی Azure Integrated HSM
این تراشه علاوه بر رمزنگاری، قابلیت تشخیص نفوذ و دستکاری را هم دارد. طراحی هم به گونهای است که کممصرف و کوچک باشد تا در هر سرور قابل استفاده باشد.
🧠 محافظت از دادهها در زمان استفاده
با فناوری Confidential Computing، حتی وقتی دادهها در حال پردازش هستند، محافظت میشوند. این موضوع برای multi-tenant environments بسیار مهم است.
تراشهای متنباز معرفی کرده است که بهعنوان Root Of Trust عمل میکند. این حرکت باعث شفافیت بیشتر در امنیت و تفاوت با سایر ارائهدهندگان ابری شده است.
🔗 در این لینک میتونید اطلاعات دقیقتری از این موضوع را مطالعه و همچنین آمار جالبی که مایکروسافت داده را هم مشاهده کنید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
#حامد_حاجیلو (لینکدین)
کانال تلگرام:
@SoftwarePhilosophy
______
مایکروسافت بهجای استفاده از ماژولهای امنیتی متمرکز (HSM)، حالا تراشههای امنیتی را داخل هر سرور قرار داده است. این یعنی امنیت بیشتر و حذف نیاز به ارتباط TLS با سرور مرکزی.
🔐 تراشه اختصاصی Azure Integrated HSM
این تراشه علاوه بر رمزنگاری، قابلیت تشخیص نفوذ و دستکاری را هم دارد. طراحی هم به گونهای است که کممصرف و کوچک باشد تا در هر سرور قابل استفاده باشد.
🧠 محافظت از دادهها در زمان استفاده
با فناوری Confidential Computing، حتی وقتی دادهها در حال پردازش هستند، محافظت میشوند. این موضوع برای multi-tenant environments بسیار مهم است.
تراشهای متنباز معرفی کرده است که بهعنوان Root Of Trust عمل میکند. این حرکت باعث شفافیت بیشتر در امنیت و تفاوت با سایر ارائهدهندگان ابری شده است.
🔗 در این لینک میتونید اطلاعات دقیقتری از این موضوع را مطالعه و همچنین آمار جالبی که مایکروسافت داده را هم مشاهده کنید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
#حامد_حاجیلو (لینکدین)
کانال تلگرام:
@SoftwarePhilosophy
______
ServeTheHome
Microsoft Azure Hardware Security to Help Thwart the World's 3rd Largest GDP
At Hot Chips 2025, Microsoft went into its Azure Hardware Security that it uses to help keep its cloud services secure
👍3
ویکی هوشمند برای کدهای گیتهاب - DeepWiki
اگر بخواهید خیلی سریع داکیومنتی کامل و جامع از هر ریپازیتوری گیت هابی داشته باشید میتوانید از DeepWiki استفاده کنید.
- فقط کافی است در URL ریپازیتوری گیت هاب به جای github.com بنویسید deepwiki.com (تا همین جا یک نمونه را امتحان کنید و ببینید چه اتفاقی رخ میدهد!)
- مستندی کامل شامل خلاصه پروژه، تکنولوژیهای استفادهشده، ساختار فایلها و نمودارهای معماری را خودکار دریافت میکنید.
- هر سوالی داشته باشید یا اگر به طور مثال به باگی خوردید میتوانید همانجا بپرسید و جواب بگیرید!
🔗 توضیحات تکمیلی را اینجا بخوانید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
#حامد_حاجیلو (لینکدین)
کانال تلگرام:
@SoftwarePhilosophy
______
اگر بخواهید خیلی سریع داکیومنتی کامل و جامع از هر ریپازیتوری گیت هابی داشته باشید میتوانید از DeepWiki استفاده کنید.
- فقط کافی است در URL ریپازیتوری گیت هاب به جای github.com بنویسید deepwiki.com (تا همین جا یک نمونه را امتحان کنید و ببینید چه اتفاقی رخ میدهد!)
- مستندی کامل شامل خلاصه پروژه، تکنولوژیهای استفادهشده، ساختار فایلها و نمودارهای معماری را خودکار دریافت میکنید.
- هر سوالی داشته باشید یا اگر به طور مثال به باگی خوردید میتوانید همانجا بپرسید و جواب بگیرید!
🔗 توضیحات تکمیلی را اینجا بخوانید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
#حامد_حاجیلو (لینکدین)
کانال تلگرام:
@SoftwarePhilosophy
______
www.aitidbits.ai
DeepWiki: Understand Any Codebase
How I use DeepWiki to speed up real coding work
👍15❤4🔥2
اپراتورها در سیشارپ
#csharp_for_beginners
زبان سیشارپ مجموعهای از اپراتورها دارد که روی انواع دادههای پایه مثل اعداد، مقدارهای بولی و رشتهها عمل میکنند. با استفاده از این اپراتورها میتوان عبارات مختلف ساخت و محاسبات پیچیده انجام داد. ترتیب اجرا یا همان اولویت اپراتورها مشخص میکند که در یک عبارت ترکیبی، کدام قسمت زودتر ارزیابی شود. اگر بخواهیم این ترتیب پیشفرض را تغییر دهیم، میتوانیم از پرانتز استفاده کنیم.
دستههای اصلی اپراتورها
۱. اپراتورهای حسابی: برای انجام محاسبات ریاضی مثل جمع، تفریق، ضرب، تقسیم و باقیمانده استفاده میشوند.
۲. اپراتورهای مقایسهای: برای مقایسه دو مقدار بهکار میروند، مثل بزرگتر، کوچکتر یا برابر بودن.
۳. اپراتورهای منطقی بولی: برای ترکیب و معکوس کردن مقادیر درست و نادرست (true/false) استفاده میشوند.
۴. اپراتورهای بیتبهبیت و شیفت: برای کار روی بیتهای داخلی دادههای عددی کاربرد دارند.
۵. اپراتورهای برابری: برای بررسی مساوی یا نامساوی بودن دو مقدار استفاده میشوند.
۶. اپراتورهای انتساب و ترکیبی: برای مقداردهی متغیرها یا ترکیب یک عملیات با انتساب بهکار میروند، مانند += یا -=.
۷. اپراتور شرطی سهتایی: یک عبارت شرطی است که بین دو مقدار یکی را انتخاب میکند.
۸. اپراتورهای Null: برای بررسی نال بودن و جایگزین کردن مقدار پیشفرض استفاده میشوند.
۹. اپراتورهای دسترسی به عضو، ایندکس، افزایش یا کاهش و تبدیل نوع: برای دسترسی به اعضای یک شیء، کار با آرایهها، افزایش/کاهش مقدار یا تبدیل نوع داده به نوع دیگر استفاده میشوند.
اولویت و جهت اجرای اپراتورها
اپراتورها در سیشارپ اولویتهای مختلفی دارند. اپراتورهایی با اولویت بالاتر زودتر اجرا میشوند. اگر چند اپراتور در یک سطح اولویت باشند، ترتیب اجرا توسط جهت ارجاع مشخص میشود. اکثر اپراتورهای دوتایی از چپ به راست اجرا میشوند، اما برخی مانند انتساب و اپراتور شرطی از راست به چپ اجرا میشوند.
بهعنوان مثال، عبارت a + b - c بهصورت (a + b) - c محاسبه میشود، ولی عبارت x = y = z به شکل x = (y = z) ارزیابی خواهد شد
ترتیب ارزیابی عملوندها
بهطور پیشفرض، عملوندهای یک اپراتور از چپ به راست محاسبه میشوند. با این حال، برخی اپراتورها شرطی هستند و ممکن است همه عملوندها محاسبه نشوند.
• در اپراتور && اگر عملوند سمت چپ برابر false باشد، سمت راست دیگر بررسی نمیشود.
• در اپراتور || اگر عملوند سمت چپ true باشد، سمت راست اجرا نمیشود.
• در اپراتور ?? یا ??=، اگر مقدار سمت چپ نال نباشد، سمت راست محاسبه نمیشود.
• در اپراتور شرطی سهتایی ?: فقط یکی از شاخهها اجرا میشود.
• در عملگرهای شرطی نال مانند ?. یا ?[]، اگر شیء سمت چپ نال باشد، ادامهی عبارت متوقف میشود
🔗 مطلب کامل را در این لینک میتوانید مطالعه کنید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
کانال تلگرام:
@SoftwarePhilosophy
______
#csharp_for_beginners
زبان سیشارپ مجموعهای از اپراتورها دارد که روی انواع دادههای پایه مثل اعداد، مقدارهای بولی و رشتهها عمل میکنند. با استفاده از این اپراتورها میتوان عبارات مختلف ساخت و محاسبات پیچیده انجام داد. ترتیب اجرا یا همان اولویت اپراتورها مشخص میکند که در یک عبارت ترکیبی، کدام قسمت زودتر ارزیابی شود. اگر بخواهیم این ترتیب پیشفرض را تغییر دهیم، میتوانیم از پرانتز استفاده کنیم.
دستههای اصلی اپراتورها
۱. اپراتورهای حسابی: برای انجام محاسبات ریاضی مثل جمع، تفریق، ضرب، تقسیم و باقیمانده استفاده میشوند.
۲. اپراتورهای مقایسهای: برای مقایسه دو مقدار بهکار میروند، مثل بزرگتر، کوچکتر یا برابر بودن.
۳. اپراتورهای منطقی بولی: برای ترکیب و معکوس کردن مقادیر درست و نادرست (true/false) استفاده میشوند.
۴. اپراتورهای بیتبهبیت و شیفت: برای کار روی بیتهای داخلی دادههای عددی کاربرد دارند.
۵. اپراتورهای برابری: برای بررسی مساوی یا نامساوی بودن دو مقدار استفاده میشوند.
۶. اپراتورهای انتساب و ترکیبی: برای مقداردهی متغیرها یا ترکیب یک عملیات با انتساب بهکار میروند، مانند += یا -=.
۷. اپراتور شرطی سهتایی: یک عبارت شرطی است که بین دو مقدار یکی را انتخاب میکند.
۸. اپراتورهای Null: برای بررسی نال بودن و جایگزین کردن مقدار پیشفرض استفاده میشوند.
۹. اپراتورهای دسترسی به عضو، ایندکس، افزایش یا کاهش و تبدیل نوع: برای دسترسی به اعضای یک شیء، کار با آرایهها، افزایش/کاهش مقدار یا تبدیل نوع داده به نوع دیگر استفاده میشوند.
اولویت و جهت اجرای اپراتورها
اپراتورها در سیشارپ اولویتهای مختلفی دارند. اپراتورهایی با اولویت بالاتر زودتر اجرا میشوند. اگر چند اپراتور در یک سطح اولویت باشند، ترتیب اجرا توسط جهت ارجاع مشخص میشود. اکثر اپراتورهای دوتایی از چپ به راست اجرا میشوند، اما برخی مانند انتساب و اپراتور شرطی از راست به چپ اجرا میشوند.
بهعنوان مثال، عبارت a + b - c بهصورت (a + b) - c محاسبه میشود، ولی عبارت x = y = z به شکل x = (y = z) ارزیابی خواهد شد
ترتیب ارزیابی عملوندها
بهطور پیشفرض، عملوندهای یک اپراتور از چپ به راست محاسبه میشوند. با این حال، برخی اپراتورها شرطی هستند و ممکن است همه عملوندها محاسبه نشوند.
• در اپراتور && اگر عملوند سمت چپ برابر false باشد، سمت راست دیگر بررسی نمیشود.
• در اپراتور || اگر عملوند سمت چپ true باشد، سمت راست اجرا نمیشود.
• در اپراتور ?? یا ??=، اگر مقدار سمت چپ نال نباشد، سمت راست محاسبه نمیشود.
• در اپراتور شرطی سهتایی ?: فقط یکی از شاخهها اجرا میشود.
• در عملگرهای شرطی نال مانند ?. یا ?[]، اگر شیء سمت چپ نال باشد، ادامهی عبارت متوقف میشود
🔗 مطلب کامل را در این لینک میتوانید مطالعه کنید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
کانال تلگرام:
@SoftwarePhilosophy
______
Docs
Operators and expressions - List all operators and expression - C# reference
Learn the C# operators and expressions, operator precedence, and operator associativity.
👍8❤1🔥1
فراتر از چتباتها، نزدیکتر به انسان
در دنیایی که هوش مصنوعی هر روز مرزهای تازهای را فتح میکند، مدل جدید GPT-4o از شرکت OpenAI نقطهی عطفی در مسیر تعامل طبیعیتر میان انسان و ماشین به شمار میآید. این مدل چندوجهی با توانایی پردازش همزمان متن، تصویر و صوت، تجربهای بیسابقه از گفتوگوهای هوشمند و واکنشهای لحظهای را فراهم کرده است. نسخه جدید Realtime API نیز با بهرهگیری از قدرت GPT-4o، امکان ساخت دستیارهای صوتی با واکنش سریع، صدای طبیعی و درک عمیقتر از زبان انسانی را فراهم میکند.
ویژگیهای برجسته gpt-realtime:
- تبدیل گفتار به گفتار (Speech-to-Speech): برخلاف مدلهای قبلی که گفتار را به متن و بعد دوباره به گفتار تبدیل میکردند، این مدل مستقیماً گفتار تولید میکند. این باعث کاهش تأخیر و طبیعیتر شدن مکالمه میشود.
- درک بهتر دستورها: مدل میتواند دستورهای پیچیده را دقیقتر دنبال کند، مثل گفتن جملات با لحن خاص یا تکرار دقیق اطلاعات مثل شمارهها و حروف.
- توانایی چندزبانه: میتواند وسط جمله زبان را عوض کند و حتی نشانههای غیرکلامی مثل خنده را تشخیص بدهد.
- صداهای جدید: دو صدای جدید به نامهای Cedar و Marin معرفی شدهاند که طبیعیترین کیفیت گفتار را دارند.
قابلیتهای جدید Realtime API:
- پشتیبانی از تصاویر: حالا میتوانید عکس یا اسکرینشات را همراه با صوت یا متن ارسال کنید تا مدل بتواند درباره آن تصویر صحبت کند.
- تماس تلفنی با SIP: امکان تماس صوتی واقعی از طریق پروتکل SIP فراهم شده است.
- اتصال به سرورهای MCP: برای استفاده از ابزارهای خارجی بدون نیاز به تنظیمات پیچیده.
- قیمتگذاری جدید: هزینهها ۲۰٪ کاهش پیدا کرده و کنترل بیشتری روی طول مکالمهها برای کاهش هزینه فراهم شده است.
🔗 برای آشنایی بیشتر این مطلب را مطالعه کنید.
———
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
#نگار_قاسمی (لینکدین)
کانال تلگرام:
@SoftwarePhilosophy
_______
در دنیایی که هوش مصنوعی هر روز مرزهای تازهای را فتح میکند، مدل جدید GPT-4o از شرکت OpenAI نقطهی عطفی در مسیر تعامل طبیعیتر میان انسان و ماشین به شمار میآید. این مدل چندوجهی با توانایی پردازش همزمان متن، تصویر و صوت، تجربهای بیسابقه از گفتوگوهای هوشمند و واکنشهای لحظهای را فراهم کرده است. نسخه جدید Realtime API نیز با بهرهگیری از قدرت GPT-4o، امکان ساخت دستیارهای صوتی با واکنش سریع، صدای طبیعی و درک عمیقتر از زبان انسانی را فراهم میکند.
ویژگیهای برجسته gpt-realtime:
- تبدیل گفتار به گفتار (Speech-to-Speech): برخلاف مدلهای قبلی که گفتار را به متن و بعد دوباره به گفتار تبدیل میکردند، این مدل مستقیماً گفتار تولید میکند. این باعث کاهش تأخیر و طبیعیتر شدن مکالمه میشود.
- درک بهتر دستورها: مدل میتواند دستورهای پیچیده را دقیقتر دنبال کند، مثل گفتن جملات با لحن خاص یا تکرار دقیق اطلاعات مثل شمارهها و حروف.
- توانایی چندزبانه: میتواند وسط جمله زبان را عوض کند و حتی نشانههای غیرکلامی مثل خنده را تشخیص بدهد.
- صداهای جدید: دو صدای جدید به نامهای Cedar و Marin معرفی شدهاند که طبیعیترین کیفیت گفتار را دارند.
قابلیتهای جدید Realtime API:
- پشتیبانی از تصاویر: حالا میتوانید عکس یا اسکرینشات را همراه با صوت یا متن ارسال کنید تا مدل بتواند درباره آن تصویر صحبت کند.
- تماس تلفنی با SIP: امکان تماس صوتی واقعی از طریق پروتکل SIP فراهم شده است.
- اتصال به سرورهای MCP: برای استفاده از ابزارهای خارجی بدون نیاز به تنظیمات پیچیده.
- قیمتگذاری جدید: هزینهها ۲۰٪ کاهش پیدا کرده و کنترل بیشتری روی طول مکالمهها برای کاهش هزینه فراهم شده است.
🔗 برای آشنایی بیشتر این مطلب را مطالعه کنید.
———
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
#نگار_قاسمی (لینکدین)
کانال تلگرام:
@SoftwarePhilosophy
_______
Openai
Introducing gpt-realtime and Realtime API updates for production voice agents
We’re releasing a more advanced speech-to-speech model and new API capabilities including MCP server support, image input, and SIP phone calling support.
👍5❤2
ساخت شرطهای پویا با OR در LINQ to SQL
در بسیاری از پروژههای نرمافزاری، نیاز داریم تا بر اساس ورودیهای کاربر، فیلترهایی را به صورت پویا روی دادهها اعمال کنیم. یکی از چالشهای رایج، ترکیب چند شرط با عملگر OR در کوئریهای LINQ است، بهویژه زمانی که از LINQ to SQL استفاده میکنیم.
مشکل کجاست؟
در LINQ، وقتی چند .()Where پشت سر هم استفاده میکنیم، شرطها به صورت AND ترکیب میشوند. اما اگر بخواهیم چند شرط را با OR ترکیب کنیم، نمیتوانیم به راحتی از .()Or استفاده کنیم، چون <<Expression<Func<T, bool چنین متدی ندارد.
راهحل: استفاده از Expression.OrElse
برای ساخت شرطهای OR، باید از Expression.OrElse استفاده کنیم و پارامترهای مشترک را با دقت جایگزین کنیم. در ادامه، روشی ارائه میشود که لیستی از شرطها را دریافت کرده و آنها را با OR ترکیب میکند:
مثال:
فرض کنید میخواهید لیستی از افراد را فیلتر کنید که یا سنشان بالای ۳۰ باشد، یا نامشان با "ن" شروع شود، یا فعال باشند:
این کوئری به صورت زیر در SQL ترجمه میشود:
🔗 جهت آشنایی و مطالعه بیشتر اینجا و اینجا را میتوانید ببینید.
___________
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
#نگار_قاسمی (لینکدین)
کانال تلگرام:
@SoftwarePhilosophy
________
در بسیاری از پروژههای نرمافزاری، نیاز داریم تا بر اساس ورودیهای کاربر، فیلترهایی را به صورت پویا روی دادهها اعمال کنیم. یکی از چالشهای رایج، ترکیب چند شرط با عملگر OR در کوئریهای LINQ است، بهویژه زمانی که از LINQ to SQL استفاده میکنیم.
مشکل کجاست؟
در LINQ، وقتی چند .()Where پشت سر هم استفاده میکنیم، شرطها به صورت AND ترکیب میشوند. اما اگر بخواهیم چند شرط را با OR ترکیب کنیم، نمیتوانیم به راحتی از .()Or استفاده کنیم، چون <<Expression<Func<T, bool چنین متدی ندارد.
راهحل: استفاده از Expression.OrElse
برای ساخت شرطهای OR، باید از Expression.OrElse استفاده کنیم و پارامترهای مشترک را با دقت جایگزین کنیم. در ادامه، روشی ارائه میشود که لیستی از شرطها را دریافت کرده و آنها را با OR ترکیب میکند:
public static Expression<Func<T, bool>> OrElse<T>(IEnumerable<Expression<Func<T, bool>>> expressions)
{
var parameter = Expression.Parameter(typeof(T), "x");
Expression? body = null;
foreach (var expr in expressions)
{
var visitor = new ReplaceParameterVisitor(expr.Parameters[0], parameter);
var visitedBody = visitor.Visit(expr.Body);
body = body == null ? visitedBody : Expression.OrElse(body, visitedBody);
}
return body != null
? Expression.Lambda<Func<T, bool>>(body, parameter)
: x => false;
}
class ReplaceParameterVisitor : ExpressionVisitor
{
private readonly ParameterExpression _oldParam;
private readonly ParameterExpression _newParam;
public ReplaceParameterVisitor(ParameterExpression oldParam, ParameterExpression newParam)
{
_oldParam = oldParam;
_newParam = newParam;
}
protected override Expression VisitParameter(ParameterExpression node)
{
return node == _oldParam ? _newParam : base.VisitParameter(node);
}
}
مثال:
فرض کنید میخواهید لیستی از افراد را فیلتر کنید که یا سنشان بالای ۳۰ باشد، یا نامشان با "ن" شروع شود، یا فعال باشند:
var filters = new List<Expression<Func<Person, bool>>>
{
p => p.Age > 30,
p => p.Name.StartsWith("ن"),
p => p.IsActive
};
var combined = OrElse(filters);
var result = db.People.Where(combined);
این کوئری به صورت زیر در SQL ترجمه میشود:
WHERE Age > 30 OR Name LIKE 'ن%' OR IsActive = 1
🔗 جهت آشنایی و مطالعه بیشتر اینجا و اینجا را میتوانید ببینید.
___________
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
#نگار_قاسمی (لینکدین)
کانال تلگرام:
@SoftwarePhilosophy
________
Docs
Expression.OrElse Method (System.Linq.Expressions)
Creates a BinaryExpression that represents a conditional OR operation that evaluates the second operand only if the first operator evaluates to false.
👍17
ساختارها در سیشارپ
#csharp_for_beginners
ساختار یا struct نوعی value type در زبان سیشارپ است که برای نگهداری دادهها و رفتار مرتبط با آنها استفاده میشود.
وقتی متغیری از نوع struct ساخته میشود، دادهها مستقیماً درون آن متغیر ذخیره میشوند، نه در یک شیء جداگانه در heap.
در نتیجه، وقتی یک struct به متد ارسال یا از متد بازگردانده میشود، کل مقدار آن کپی میگردد.
به همین دلیل، struct برای انواع دادهای کوچک و مستقل مناسب است.
در مقابل، اگر نوعی داده رفتار پیچیده یا اندازهی بزرگ دارد، معمولاً کلاس گزینهی بهتری است.
مثال ساده از تعریف ساختار
یک نوع دیگر به نام readonly struct & readonly
میتوان یک ساختار را با کلیدواژه readonly تعریف کرد تا تغییرناپذیر باشد.
در یک readonly struct تمام فیلدها باید readonly باشند و تمام ویژگیها (properties) باید فقط getter داشته باشند یا از نوع init باشند. در این حالت ساختار دیگر قابل تغییر نیست و اطمینان حاصل میشود که دادهها پس از ساخت ثابت باقی میمانند.
همچنین میتوان متدهای خاصی را با کلیدواژه readonly مشخص کرد تا نشان دهد که این متدها وضعیت ساختار را تغییر نمیدهند. اگر چنین متدی درون ساختار فراخوانی شود، کامپایلر از تغییر وضعیت جلوگیری میکند و در صورت نیاز، یک کپی موقت از ساختار ایجاد میکند.
مثال از readonly struct
آرایههای درونخطی (inline arrays)
از نسخهی سیشارپ ۱۲ به بعد، امکان تعریف آرایههای درونخطی در قالب struct فراهم شده است. در این نوع ساختار، فقط یک فیلد داخلی وجود دارد که شامل یک بلوک پیوسته از عناصر داده است. این ویژگی برای موقعیتهایی که نیاز به سرعت بالا و دسترسی سریع به حافظه وجود دارد مفید است.
مقداردهی اولیه و مقدار پیشفرض struct
ساختارها مستقیماً دادهها را درون خود ذخیره میکنند. هنگامی که از دستور default برای ساختار استفاده شود، همهی فیلدها با مقدار پیشفرض خود مقداردهی میشوند و هیچ سازندهای فراخوانی نمیشود.
اگر برای ساختار سازندهی بدون پارامتر تعریف شود، باز هم دستور default آن را فراخوانی نمیکند و مقدار پیشفرض برای هر فیلد اعمال میشود.
از سیشارپ ۱۱ به بعد اگر سازنده مقداری برای فیلدها تعیین نکند، کامپایلر به صورت خودکار آنها را با مقدار پیشفرض مقداردهی میکند.
همچنین میتوان بدون استفاده از new یک متغیر از نوع ساختار تعریف کرد، اما در این صورت تمام فیلدهای آن باید پیش از استفاده مقداردهی شوند.
🔗 مطلب کامل را در این لینک میتوانید مطالعه کنید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
کانال تلگرام:
@SoftwarePhilosophy
______
#csharp_for_beginners
ساختار یا struct نوعی value type در زبان سیشارپ است که برای نگهداری دادهها و رفتار مرتبط با آنها استفاده میشود.
وقتی متغیری از نوع struct ساخته میشود، دادهها مستقیماً درون آن متغیر ذخیره میشوند، نه در یک شیء جداگانه در heap.
در نتیجه، وقتی یک struct به متد ارسال یا از متد بازگردانده میشود، کل مقدار آن کپی میگردد.
به همین دلیل، struct برای انواع دادهای کوچک و مستقل مناسب است.
در مقابل، اگر نوعی داده رفتار پیچیده یا اندازهی بزرگ دارد، معمولاً کلاس گزینهی بهتری است.
مثال ساده از تعریف ساختار
public struct Coords
{
public Coords(double x, double y)
{
X = x
Y = y
}
public double X { get }
public double Y { get }
public override string ToString() => $"({X}, {Y})"
}
یک نوع دیگر به نام readonly struct & readonly
میتوان یک ساختار را با کلیدواژه readonly تعریف کرد تا تغییرناپذیر باشد.
در یک readonly struct تمام فیلدها باید readonly باشند و تمام ویژگیها (properties) باید فقط getter داشته باشند یا از نوع init باشند. در این حالت ساختار دیگر قابل تغییر نیست و اطمینان حاصل میشود که دادهها پس از ساخت ثابت باقی میمانند.
همچنین میتوان متدهای خاصی را با کلیدواژه readonly مشخص کرد تا نشان دهد که این متدها وضعیت ساختار را تغییر نمیدهند. اگر چنین متدی درون ساختار فراخوانی شود، کامپایلر از تغییر وضعیت جلوگیری میکند و در صورت نیاز، یک کپی موقت از ساختار ایجاد میکند.
مثال از readonly struct
public readonly struct Coords
{
public Coords(double x, double y)
{
X = x
Y = y
}
public double X { get; init; }
public double Y { get; init; }
public readonly override string ToString() => $"({X}, {Y})"
}
آرایههای درونخطی (inline arrays)
از نسخهی سیشارپ ۱۲ به بعد، امکان تعریف آرایههای درونخطی در قالب struct فراهم شده است. در این نوع ساختار، فقط یک فیلد داخلی وجود دارد که شامل یک بلوک پیوسته از عناصر داده است. این ویژگی برای موقعیتهایی که نیاز به سرعت بالا و دسترسی سریع به حافظه وجود دارد مفید است.
مقداردهی اولیه و مقدار پیشفرض struct
ساختارها مستقیماً دادهها را درون خود ذخیره میکنند. هنگامی که از دستور default برای ساختار استفاده شود، همهی فیلدها با مقدار پیشفرض خود مقداردهی میشوند و هیچ سازندهای فراخوانی نمیشود.
اگر برای ساختار سازندهی بدون پارامتر تعریف شود، باز هم دستور default آن را فراخوانی نمیکند و مقدار پیشفرض برای هر فیلد اعمال میشود.
از سیشارپ ۱۱ به بعد اگر سازنده مقداری برای فیلدها تعیین نکند، کامپایلر به صورت خودکار آنها را با مقدار پیشفرض مقداردهی میکند.
همچنین میتوان بدون استفاده از new یک متغیر از نوع ساختار تعریف کرد، اما در این صورت تمام فیلدهای آن باید پیش از استفاده مقداردهی شوند.
🔗 مطلب کامل را در این لینک میتوانید مطالعه کنید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
کانال تلگرام:
@SoftwarePhilosophy
______
Docs
Structure types - C# reference
Learn about the struct type in C#
👍5
🎬 برنامهنویسی ویدیو با React!
اگر دنبال راهی خلاقانه برای ساخت ویدیو با کدنویسی هستید، ریپازیتوری Remotion یک انتخاب بینظیر است. این فریمورک قدرتمند به شما اجازه میدهد با استفاده از React و تکنولوژیهای وب مثل CSS، SVG، Canvas و حتی WebGL، ویدیوهای کاستوم بسازید.
برای شروع فقط کافی است دستور زیر را اجرا کنید:
و مابقی ماجرا را در گیت هاب میتوانید ببینید.
📚 مستندات کامل و API Reference در remotion.dev در دسترس است.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
#حامد_حاجیلو (لینکدین)
کانال تلگرام:
@SoftwarePhilosophy
______
اگر دنبال راهی خلاقانه برای ساخت ویدیو با کدنویسی هستید، ریپازیتوری Remotion یک انتخاب بینظیر است. این فریمورک قدرتمند به شما اجازه میدهد با استفاده از React و تکنولوژیهای وب مثل CSS، SVG، Canvas و حتی WebGL، ویدیوهای کاستوم بسازید.
برای شروع فقط کافی است دستور زیر را اجرا کنید:
npx create-video@latest
و مابقی ماجرا را در گیت هاب میتوانید ببینید.
📚 مستندات کامل و API Reference در remotion.dev در دسترس است.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
#حامد_حاجیلو (لینکدین)
کانال تلگرام:
@SoftwarePhilosophy
______
GitHub
GitHub - remotion-dev/remotion: 🎥 Make videos programmatically with React
🎥 Make videos programmatically with React. Contribute to remotion-dev/remotion development by creating an account on GitHub.
❤3👍2🔥2
تجربه کار با Map و پکیجهای مختلف در Blazor و Angular
تیم ما در سالهای اخیر زمان زیادی را برای کار کردن با Map توی بیلیزور گذراند و تجربههای خوبی به دست آوردهایم. انواع مختلف نیازمندیهای Map را توانستیم با MapBox GL و Wrapper سیشارپیای که برایش نوشتیم پیاده سازی کنیم.
اخیرا هم در پروژه دیگری که Angular است از Map استفاده کردیم و چون نیاز خیلی سادهای داشتیم از Leaflet استفاده کردیم.
🔗 در این پست لینکدین بیشتر در مورد این تجربه صحبت کردم و توضیح دادم که دلیل استفاده از هر کدام چه بوده است. خوشحال میشوم اگه تجربه کار در این زمینه را دارید با ما به اشتراک بگذارید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
#حامد_حاجیلو (لینکدین)
کانال تلگرام:
@SoftwarePhilosophy
______
تیم ما در سالهای اخیر زمان زیادی را برای کار کردن با Map توی بیلیزور گذراند و تجربههای خوبی به دست آوردهایم. انواع مختلف نیازمندیهای Map را توانستیم با MapBox GL و Wrapper سیشارپیای که برایش نوشتیم پیاده سازی کنیم.
اخیرا هم در پروژه دیگری که Angular است از Map استفاده کردیم و چون نیاز خیلی سادهای داشتیم از Leaflet استفاده کردیم.
🔗 در این پست لینکدین بیشتر در مورد این تجربه صحبت کردم و توضیح دادم که دلیل استفاده از هر کدام چه بوده است. خوشحال میشوم اگه تجربه کار در این زمینه را دارید با ما به اشتراک بگذارید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
#حامد_حاجیلو (لینکدین)
کانال تلگرام:
@SoftwarePhilosophy
______
Linkedin
From Blazor to Angular: My Mapping Library Journey | Hamed Hajiloo posted on the topic | LinkedIn
From Blazor + Mapbox GL to Angular + Leaflet: My Mapping Journey
In our projects, We had the chance to go really deep with Mapbox GL in a Blazor application.
We wrote a custom C# wrapper around it and implemented advanced use cases:
- multiple vector layers…
In our projects, We had the chance to go really deep with Mapbox GL in a Blazor application.
We wrote a custom C# wrapper around it and implemented advanced use cases:
- multiple vector layers…
👍4❤1
تعریف Enum
#csharp_for_beginners
یک Enum در واقع نوع دادهای سفارشی است که مجموعهای از ثابتهای عددی نامگذاریشده را در خود نگه میدارد. برای مثال:
در اینجا، اعضا به ترتیب دارای مقادیر عددی 0، 1، 2 و 3 هستند. نوع پایهی Enum بهصورت پیشفرض int است، اما میتوان آن را تغییر داد.
تعیین نوع پایه و مقادیر صریح
میتوان نوع پایه و مقادیر اعضا را بهصورت دستی مشخص کرد:
در این مثال، نوع پایه ushort است و هر عضو مقدار خاص خود را دارد.
نکات مهم در استفاده از Enum
مقدار پیشفرض یک Enum برابر با عدد صفر است، حتی اگر هیچ عضوی با مقدار صفر تعریف نشده باشد.
تبدیل عددی به Enum مجاز است، اما اگر مقدار عددی به هیچ عضو مشخصی مربوط نباشد، نتیجه ممکن است نامعتبر باشد.
کاربردهای Enum
۱. انتخاب از میان چند مقدار مشخص
یک Enum زمانی مفید است که بخواهیم متغیری یکی از چند مقدار مشخص را بگیرد. مثلاً برای وضعیت سفارش یا فصل سال:
۲. استفاده بهصورت ترکیبی (Flags)
گاهی لازم است چند مقدار با هم ترکیب شوند. در این حالت از ویژگی [Flags] استفاده میکنیم و مقادیر را بهصورت توانهای دو تعریف میکنیم:
جمعبندی
ابزار Enum یکی از ابزارهای ساده اما قدرتمند در سیشارپ است که به شما کمک میکند مجموعهای از مقادیر ثابت را با نامهای قابل فهم تعریف کنید. این کار باعث افزایش خوانایی، کاهش خطا و بهبود نگهداری کد میشود. با رعایت چند قاعدهی ساده —مثل داشتن عضو صفر، اعتبارسنجی مقادیر و استفادهی درست از [Flags]— میتوان Enumهایی ساخت که در پروژههای واقعی بسیار کاربردی و ایمن باشند.
🔗 مطلب کامل را در این لینک میتوانید مطالعه کنید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
کانال تلگرام:
@SoftwarePhilosophy
______
#csharp_for_beginners
یک Enum در واقع نوع دادهای سفارشی است که مجموعهای از ثابتهای عددی نامگذاریشده را در خود نگه میدارد. برای مثال:
enum Season
{
Spring,
Summer,
Autumn,
Winter
}
در اینجا، اعضا به ترتیب دارای مقادیر عددی 0، 1، 2 و 3 هستند. نوع پایهی Enum بهصورت پیشفرض int است، اما میتوان آن را تغییر داد.
تعیین نوع پایه و مقادیر صریح
میتوان نوع پایه و مقادیر اعضا را بهصورت دستی مشخص کرد:
enum ErrorCode : ushort
{
None = 0,
Unknown = 1,
ConnectionLost = 100,
OutlierReading = 200
}
در این مثال، نوع پایه ushort است و هر عضو مقدار خاص خود را دارد.
نکات مهم در استفاده از Enum
مقدار پیشفرض یک Enum برابر با عدد صفر است، حتی اگر هیچ عضوی با مقدار صفر تعریف نشده باشد.
تبدیل عددی به Enum مجاز است، اما اگر مقدار عددی به هیچ عضو مشخصی مربوط نباشد، نتیجه ممکن است نامعتبر باشد.
کاربردهای Enum
۱. انتخاب از میان چند مقدار مشخص
یک Enum زمانی مفید است که بخواهیم متغیری یکی از چند مقدار مشخص را بگیرد. مثلاً برای وضعیت سفارش یا فصل سال:
enum OrderStatus
{
Pending,
Processing,
Shipped,
Delivered
}
۲. استفاده بهصورت ترکیبی (Flags)
گاهی لازم است چند مقدار با هم ترکیب شوند. در این حالت از ویژگی [Flags] استفاده میکنیم و مقادیر را بهصورت توانهای دو تعریف میکنیم:
[Flags]
public enum Days
{
None = 0,
Monday = 1,
Tuesday = 2,
Wednesday = 4,
Thursday = 8,
Friday = 16,
Saturday = 32,
Sunday = 64,
Weekend = Saturday | Sunday
}
جمعبندی
ابزار Enum یکی از ابزارهای ساده اما قدرتمند در سیشارپ است که به شما کمک میکند مجموعهای از مقادیر ثابت را با نامهای قابل فهم تعریف کنید. این کار باعث افزایش خوانایی، کاهش خطا و بهبود نگهداری کد میشود. با رعایت چند قاعدهی ساده —مثل داشتن عضو صفر، اعتبارسنجی مقادیر و استفادهی درست از [Flags]— میتوان Enumهایی ساخت که در پروژههای واقعی بسیار کاربردی و ایمن باشند.
🔗 مطلب کامل را در این لینک میتوانید مطالعه کنید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
کانال تلگرام:
@SoftwarePhilosophy
______
Docs
Enumeration types - C# reference
Learn about C# enumeration types that represent a choice or a combination of choices
👍9❤3
پروپوزال WebMCP، باز هم همکاری مایکروسافت و گوگل!
پیشنهاد میکنم حتما این پروپوزال را دنبال کنید، چون تاثیر زیادی در آینده یکپارچگی مرورگرهایی مثل Edge و Chrome با ابزارهای هوشمصنوعی خواهد داشت.
هوش مصنوعی دارد نحوه تعامل ما با وب را متحول میکند. این بار WebMCP، پیشنهادی از تیمهای Microsoft و Google، قرار است این تعامل را شفافتر و قابلکنترلتر کند. با WebMCP، توسعهدهندگان میتوانند مجموعهای از اکشنها (مثل play، pause، add-todo و ...) را بهصورت MCP Tools مستقیم از طریق API مرورگر در اختیار ایجنتهای هوشمصنوعی قرار دهند.
یعنی بهجای اینکه AI با حدس و گمان از روی DOM یا اسکرینشاتها عمل کند، میتواند از خود کد اپلیکیشن استفاده کند و دقیقاً همان کاری را انجام دهد که توسعهدهنده مشخص کرده است. WebMCP نه تنها دقت و امنیت تعاملات را بالا میبرد، بلکه نقش توسعهدهنده را در عصر عاملهای هوشمند زیاد میکند و عملا قسمتی از کار برنامهنویسی وب به غیرساخت صفحات، فراهم کردن WebMCP های مناسب خواهد بود.
🔗 در این صفحه بیشتر بخوانید.
#mcp #llm #ai
#مهران_داودی (لینکدین - بلاگ)
@SoftwarePhilosophy
______
پیشنهاد میکنم حتما این پروپوزال را دنبال کنید، چون تاثیر زیادی در آینده یکپارچگی مرورگرهایی مثل Edge و Chrome با ابزارهای هوشمصنوعی خواهد داشت.
هوش مصنوعی دارد نحوه تعامل ما با وب را متحول میکند. این بار WebMCP، پیشنهادی از تیمهای Microsoft و Google، قرار است این تعامل را شفافتر و قابلکنترلتر کند. با WebMCP، توسعهدهندگان میتوانند مجموعهای از اکشنها (مثل play، pause، add-todo و ...) را بهصورت MCP Tools مستقیم از طریق API مرورگر در اختیار ایجنتهای هوشمصنوعی قرار دهند.
یعنی بهجای اینکه AI با حدس و گمان از روی DOM یا اسکرینشاتها عمل کند، میتواند از خود کد اپلیکیشن استفاده کند و دقیقاً همان کاری را انجام دهد که توسعهدهنده مشخص کرده است. WebMCP نه تنها دقت و امنیت تعاملات را بالا میبرد، بلکه نقش توسعهدهنده را در عصر عاملهای هوشمند زیاد میکند و عملا قسمتی از کار برنامهنویسی وب به غیرساخت صفحات، فراهم کردن WebMCP های مناسب خواهد بود.
🔗 در این صفحه بیشتر بخوانید.
#mcp #llm #ai
#مهران_داودی (لینکدین - بلاگ)
@SoftwarePhilosophy
______
3👍10❤5🔥2😱1
کلاس لیست (List)
#csharp_for_beginners
کلاس «لیست» یا List در فضای نام System.Collections.Generic قرار دارد و یکی از پرکاربردترین ساختارهای داده در چارچوب .NET است. این کلاس نمایانگر مجموعهای از عناصر همنوع (دارای نوع مشخص) است که میتوان به هر کدام از آنها از طریق شمارهی ایندکس دسترسی داشت.
علاوه بر این، کلاس لیست امکاناتی برای افزودن، حذف، جستجو، مرتبسازی و مدیریت دادهها در اختیار برنامهنویس قرار میدهد.
پارامتر نوع
لیست از نوع عمومی (Generic) است و دارای پارامتری به نام T میباشد.
این پارامتر مشخص میکند که نوع دادهای که قرار است در لیست نگهداری شود چیست (مثلاً عدد صحیح، رشته، شیء و غیره).
سازندهها (ایجادکنندههای لیست)
کلاس لیست چند روش برای ساخت شیء جدید ارائه میدهد:
سازندهی بدون ورودی: یک لیست خالی با ظرفیت اولیهی پیشفرض میسازد.
سازندهای که ورودی آن یک مجموعه است: از عناصر مجموعهی داده شده، یک لیست جدید میسازد.
سازندهای که عدد صحیح میگیرد: لیستی خالی با ظرفیت اولیهی مشخصشده ایجاد میکند.
ویژگیهای اصلی لیست
• ظرفیت (Capacity): تعداد کل عناصری که لیست میتواند بدون تغییر اندازه در خود جای دهد.
• تعداد (Count): تعداد واقعی عناصری که در حال حاضر در لیست وجود دارند.
• اندیس (Item): اجازه میدهد تا با استفاده از شمارهی اندیس، به یک عنصر دسترسی پیدا کرده یا مقدار آن را تغییر دهیم.
متدهای مهم در لیست
کلاس لیست دارای دهها متد کاربردی است. در ادامه مهمترین آنها آورده شده است
افزودن (Add): یک عنصر جدید را به انتهای لیست اضافه میکند.
افزودن مجموعهای از عناصر (AddRange): چندین عنصر را به انتهای لیست اضافه میکند.
فقطخواندنی (AsReadOnly): نمایی فقط برای خواندن از لیست ایجاد میکند که قابل تغییر نیست.
جستجوی دودویی (BinarySearch): با استفاده از الگوریتم جستجوی دودویی، عنصری را در لیست مرتبشده پیدا میکند.
پاککردن (Clear): همهی عناصر موجود در لیست را حذف میکند.
شامل بودن (Contains): بررسی میکند که آیا یک عنصر خاص در لیست وجود دارد یا نه.
کپی کردن (CopyTo): عناصر لیست را در آرایهای دیگر کپی میکند.
افزایش ظرفیت (EnsureCapacity): اطمینان حاصل میکند که ظرفیت لیست به اندازهی کافی برای اضافه شدن عناصر جدید وجود دارد.
وجود شرطی (Exists): بررسی میکند آیا عنصری مطابق یک شرط مشخص در لیست وجود دارد یا نه.
یافتن اولین مورد (Find): اولین عنصری که با شرط دادهشده مطابقت دارد را برمیگرداند.
یافتن همهی موارد (FindAll): تمام عناصری که شرط را برآورده میکنند بازمیگرداند.
یافتن اندیس (FindIndex / FindLastIndex): موقعیت اولین یا آخرین عنصر مطابق شرط را برمیگرداند.
برای هر عنصر (ForEach): عملی را روی تمام عناصر اجرا میکند.
دریافت بازه (GetRange): بخش مشخصی از لیست را بهصورت یک لیست جدید برمیگرداند.
درج (Insert / InsertRange): عنصری یا مجموعهای از عناصر را در موقعیت مشخصی از لیست قرار میدهد.
حذف (Remove): اولین وقوع یک عنصر مشخص را حذف میکند.
حذف شرطی (RemoveAll): همهی عناصری که شرط خاصی را برآورده میکنند حذف میکند.
حذف بر اساس اندیس (RemoveAt / RemoveRange): عنصری در یک موقعیت یا بازهای از عناصر را حذف میکند.
معکوسکردن (Reverse): ترتیب عناصر را برعکس میکند، میتواند کل لیست یا بخشی از آن باشد.
مرتبسازی (Sort): عناصر را به ترتیب صعودی یا بر اساس مقایسهکنندهی دلخواه مرتب میکند.
تبدیل به آرایه (ToArray): عناصر لیست را در قالب یک آرایه بازمیگرداند.
بهینهسازی حافظه (TrimExcess): ظرفیت لیست را به تعداد واقعی عناصر کاهش میدهد تا از مصرف بیمورد حافظه جلوگیری شود.
بررسی شرط برای همه (TrueForAll): بررسی میکند آیا همهی عناصر شرط مشخصی را برآورده میکنند یا خیر.
🔗 مطلب کامل را در این لینک میتوانید مطالعه کنید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
کانال تلگرام:
@SoftwarePhilosophy
______
#csharp_for_beginners
کلاس «لیست» یا List در فضای نام System.Collections.Generic قرار دارد و یکی از پرکاربردترین ساختارهای داده در چارچوب .NET است. این کلاس نمایانگر مجموعهای از عناصر همنوع (دارای نوع مشخص) است که میتوان به هر کدام از آنها از طریق شمارهی ایندکس دسترسی داشت.
علاوه بر این، کلاس لیست امکاناتی برای افزودن، حذف، جستجو، مرتبسازی و مدیریت دادهها در اختیار برنامهنویس قرار میدهد.
پارامتر نوع
لیست از نوع عمومی (Generic) است و دارای پارامتری به نام T میباشد.
این پارامتر مشخص میکند که نوع دادهای که قرار است در لیست نگهداری شود چیست (مثلاً عدد صحیح، رشته، شیء و غیره).
سازندهها (ایجادکنندههای لیست)
کلاس لیست چند روش برای ساخت شیء جدید ارائه میدهد:
سازندهی بدون ورودی: یک لیست خالی با ظرفیت اولیهی پیشفرض میسازد.
سازندهای که ورودی آن یک مجموعه است: از عناصر مجموعهی داده شده، یک لیست جدید میسازد.
سازندهای که عدد صحیح میگیرد: لیستی خالی با ظرفیت اولیهی مشخصشده ایجاد میکند.
ویژگیهای اصلی لیست
• ظرفیت (Capacity): تعداد کل عناصری که لیست میتواند بدون تغییر اندازه در خود جای دهد.
• تعداد (Count): تعداد واقعی عناصری که در حال حاضر در لیست وجود دارند.
• اندیس (Item): اجازه میدهد تا با استفاده از شمارهی اندیس، به یک عنصر دسترسی پیدا کرده یا مقدار آن را تغییر دهیم.
متدهای مهم در لیست
کلاس لیست دارای دهها متد کاربردی است. در ادامه مهمترین آنها آورده شده است
افزودن (Add): یک عنصر جدید را به انتهای لیست اضافه میکند.
افزودن مجموعهای از عناصر (AddRange): چندین عنصر را به انتهای لیست اضافه میکند.
فقطخواندنی (AsReadOnly): نمایی فقط برای خواندن از لیست ایجاد میکند که قابل تغییر نیست.
جستجوی دودویی (BinarySearch): با استفاده از الگوریتم جستجوی دودویی، عنصری را در لیست مرتبشده پیدا میکند.
پاککردن (Clear): همهی عناصر موجود در لیست را حذف میکند.
شامل بودن (Contains): بررسی میکند که آیا یک عنصر خاص در لیست وجود دارد یا نه.
کپی کردن (CopyTo): عناصر لیست را در آرایهای دیگر کپی میکند.
افزایش ظرفیت (EnsureCapacity): اطمینان حاصل میکند که ظرفیت لیست به اندازهی کافی برای اضافه شدن عناصر جدید وجود دارد.
وجود شرطی (Exists): بررسی میکند آیا عنصری مطابق یک شرط مشخص در لیست وجود دارد یا نه.
یافتن اولین مورد (Find): اولین عنصری که با شرط دادهشده مطابقت دارد را برمیگرداند.
یافتن همهی موارد (FindAll): تمام عناصری که شرط را برآورده میکنند بازمیگرداند.
یافتن اندیس (FindIndex / FindLastIndex): موقعیت اولین یا آخرین عنصر مطابق شرط را برمیگرداند.
برای هر عنصر (ForEach): عملی را روی تمام عناصر اجرا میکند.
دریافت بازه (GetRange): بخش مشخصی از لیست را بهصورت یک لیست جدید برمیگرداند.
درج (Insert / InsertRange): عنصری یا مجموعهای از عناصر را در موقعیت مشخصی از لیست قرار میدهد.
حذف (Remove): اولین وقوع یک عنصر مشخص را حذف میکند.
حذف شرطی (RemoveAll): همهی عناصری که شرط خاصی را برآورده میکنند حذف میکند.
حذف بر اساس اندیس (RemoveAt / RemoveRange): عنصری در یک موقعیت یا بازهای از عناصر را حذف میکند.
معکوسکردن (Reverse): ترتیب عناصر را برعکس میکند، میتواند کل لیست یا بخشی از آن باشد.
مرتبسازی (Sort): عناصر را به ترتیب صعودی یا بر اساس مقایسهکنندهی دلخواه مرتب میکند.
تبدیل به آرایه (ToArray): عناصر لیست را در قالب یک آرایه بازمیگرداند.
بهینهسازی حافظه (TrimExcess): ظرفیت لیست را به تعداد واقعی عناصر کاهش میدهد تا از مصرف بیمورد حافظه جلوگیری شود.
بررسی شرط برای همه (TrueForAll): بررسی میکند آیا همهی عناصر شرط مشخصی را برآورده میکنند یا خیر.
🔗 مطلب کامل را در این لینک میتوانید مطالعه کنید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
کانال تلگرام:
@SoftwarePhilosophy
______
Docs
List<T> Class (System.Collections.Generic)
Represents a strongly typed list of objects that can be accessed by index. Provides methods to search, sort, and manipulate lists.
❤6👍1
و اینک NET Conf Watch Party! 🎂🍰🥂
داتنتکانف امسال امروز (سهشنبه ۲۰ آبان) ساعت ۷:۳۰ شروع میشه. ما قراره تو آنلاین با هم رویداد رو تماشا کنیم. از ساعت ۷ لینک تیمز رو میفرستیم که هر کی دوست داشت بیاد.
نیم ساعت اول یکم گپ میزنیم و با هم آشنا میشیم تا رویداد شروع بشه.
هماهنگی و لینک تیمز تو این گروه انجام میشه: @SoftwarePhilosophyGroup
#مهران_داودی (http://ow.ly/GwIl309lFEm)
کانال تلگرام:
@SoftwarePhilosophy
___
داتنتکانف امسال امروز (سهشنبه ۲۰ آبان) ساعت ۷:۳۰ شروع میشه. ما قراره تو آنلاین با هم رویداد رو تماشا کنیم. از ساعت ۷ لینک تیمز رو میفرستیم که هر کی دوست داشت بیاد.
نیم ساعت اول یکم گپ میزنیم و با هم آشنا میشیم تا رویداد شروع بشه.
هماهنگی و لینک تیمز تو این گروه انجام میشه: @SoftwarePhilosophyGroup
#مهران_داودی (http://ow.ly/GwIl309lFEm)
کانال تلگرام:
@SoftwarePhilosophy
___
🔥5❤2👍2👏1
Forwarded from Software Philosophy
لینک «با هم کنفرانس داتنت رو ببینیم»!!!
https://teams.microsoft.com/l/meetup-join/19%3a46ecfc4157634db68224484eb717f3ed%40thread.tacv2/1762875140672?context=%7b%22Tid%22%3a%2224fbf492-43a9-4a8f-ba7b-6f12fa9b8d87%22%2c%22Oid%22%3a%22aca9b64a-ea78-46f4-a5b4-b3afd7832f63%22%7d
https://teams.microsoft.com/l/meetup-join/19%3a46ecfc4157634db68224484eb717f3ed%40thread.tacv2/1762875140672?context=%7b%22Tid%22%3a%2224fbf492-43a9-4a8f-ba7b-6f12fa9b8d87%22%2c%22Oid%22%3a%22aca9b64a-ea78-46f4-a5b4-b3afd7832f63%22%7d
Microsoft Teams
Join conversation
👍3
🎯 سرویس پرداخت یکپارچه Stripe
اگر قصد دارید در پروژههای خارجی یا بینالمللی پرداخت آنلاین را پیادهسازی کنید، یکی از بهترین گزینهها استفاده از سرویس قدرتمند Stripe است. این سرویس در بسیاری از کشورها و پلتفرمهای جهانی کاربرد دارد و مستندات جامعی برای توسعهدهندگان ارائه کرده است.
در این راهنما که از مستندات رسمی Stripe تهیه شده، مراحل راهاندازی محیط توسعه برای زبان سیشارپ توضیح داده شده است. این مراحل شامل موارد زیر است:
🔧 نصب Stripe CLI
ابزاری خط فرمان برای تعامل مستقیم با APIهای Stripe بدون نیاز به نوشتن کدهای اضافی.
🧰 نصب Stripe SDK برای سیشارپ
کتابخانهای برای ارسال درخواستهای API از داخل پروژههای داتنت، بدون نیاز به نوشتن کدهای تکراری.
🚀 استفاده از API
ساخت یک محصول و تعیین قیمت آن با استفاده از SDK، بهصورت مرحلهبهمرحله و قابل اجرا در محیط تست.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
#حامد_حاجیلو (لینکدین)
کانال تلگرام:
@SoftwarePhilosophy
______
اگر قصد دارید در پروژههای خارجی یا بینالمللی پرداخت آنلاین را پیادهسازی کنید، یکی از بهترین گزینهها استفاده از سرویس قدرتمند Stripe است. این سرویس در بسیاری از کشورها و پلتفرمهای جهانی کاربرد دارد و مستندات جامعی برای توسعهدهندگان ارائه کرده است.
در این راهنما که از مستندات رسمی Stripe تهیه شده، مراحل راهاندازی محیط توسعه برای زبان سیشارپ توضیح داده شده است. این مراحل شامل موارد زیر است:
🔧 نصب Stripe CLI
ابزاری خط فرمان برای تعامل مستقیم با APIهای Stripe بدون نیاز به نوشتن کدهای اضافی.
🧰 نصب Stripe SDK برای سیشارپ
کتابخانهای برای ارسال درخواستهای API از داخل پروژههای داتنت، بدون نیاز به نوشتن کدهای تکراری.
🚀 استفاده از API
ساخت یک محصول و تعیین قیمت آن با استفاده از SDK، بهصورت مرحلهبهمرحله و قابل اجرا در محیط تست.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
#حامد_حاجیلو (لینکدین)
کانال تلگرام:
@SoftwarePhilosophy
______
Stripe
Set up your development environment
Setup guide for the Stripe development environment including CLI, SDKs, and testing tools.
❤8👍4🔥1
تاپلها در سیشارپ
#csharp_for_beginners
در زبان برنامهنویسی سیشارپ، از نسخههای جدیدتر مفهومی با نام تاپلها معرفی شده است؛ این امکان فراهم میکند که چند مقدار مرتبط را بهصورت کمحجم و منسجم در کنار هم نگهدارید. بهطور خاص، این مقاله به نوع دادهای به نام «تاپل مقدار» (value-tuple) میپردازد که در سند رسمی مایکروسافت تحت عنوان «Tuple types (C# reference)» معرفی شده است.
تعریف و سینتکس
تاپلها در سیشارپ راهی برای گروهبندی چند متغیر مرتبط در یک ساختار سبک است. بهعبارت دیگر، به جای آنکه چند متغیر جداگانه بازگردانده شوند، میتوانید آنها را در یک واحد بازگردانید.
مثال ابتدایی:
برابری (Tuple equality)ها چگونه مقایسه میشوند
تاپلها از عملگرهای == و != پشتیبانی میکنند؛ این مقایسه اعضای متناظر (به ترتیب) را با اپراتور مقایسه انجام میدهد. نام فیلدها در مقایسه دخیل نیستند؛ به همین دلیل دو تاپل با نامهای متفاوت اما همان ترتیب و مقادیر، برابر در نظر گرفته میشوند.
مثال صفحه
نامگذاری فیلدهای تاپل (Tuple field names)، جزئیات مهم
نحوهٔ تعیین نام فیلدها
نام فیلدها را میتوان صریحاً هنگام مقداردهی یا در تعریف نوع تاپل مشخص کرد:
یا:
تاپلهای زبان بر پایهٔ System.ValueTuple هستند؛ یعنی نوع مقدار (value type) و اعضای آن بهصورت فیلدهای عمومی پیادهسازی شدهاند. نتیجهٔ مستقیم این پیادهسازی این است که تاپلها mutable value types هستند، یعنی میتوان مقادیر فیلدهایشان را تغییر داد.
🔗 مطلب کامل را در این لینک میتوانید مطالعه کنید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
کانال تلگرام:
@SoftwarePhilosophy
______
#csharp_for_beginners
در زبان برنامهنویسی سیشارپ، از نسخههای جدیدتر مفهومی با نام تاپلها معرفی شده است؛ این امکان فراهم میکند که چند مقدار مرتبط را بهصورت کمحجم و منسجم در کنار هم نگهدارید. بهطور خاص، این مقاله به نوع دادهای به نام «تاپل مقدار» (value-tuple) میپردازد که در سند رسمی مایکروسافت تحت عنوان «Tuple types (C# reference)» معرفی شده است.
تعریف و سینتکس
تاپلها در سیشارپ راهی برای گروهبندی چند متغیر مرتبط در یک ساختار سبک است. بهعبارت دیگر، به جای آنکه چند متغیر جداگانه بازگردانده شوند، میتوانید آنها را در یک واحد بازگردانید.
مثال ابتدایی:
(double, int) t1 = (4.5, 3);
Console.WriteLine($"Tuple with elements {t1.Item1} and {t1.Item2}.");
برابری (Tuple equality)ها چگونه مقایسه میشوند
تاپلها از عملگرهای == و != پشتیبانی میکنند؛ این مقایسه اعضای متناظر (به ترتیب) را با اپراتور مقایسه انجام میدهد. نام فیلدها در مقایسه دخیل نیستند؛ به همین دلیل دو تاپل با نامهای متفاوت اما همان ترتیب و مقادیر، برابر در نظر گرفته میشوند.
مثال صفحه
(int a, byte b) left = (5, 10);
(long a, int b) right = (5, 10);
Console.WriteLine(left == right); // True
نامگذاری فیلدهای تاپل (Tuple field names)، جزئیات مهم
نحوهٔ تعیین نام فیلدها
نام فیلدها را میتوان صریحاً هنگام مقداردهی یا در تعریف نوع تاپل مشخص کرد:
var t = (Sum: 4.5, Count: 3);
Console.WriteLine($"Sum of {t.Count} elements is {t.Sum}.");
یا:
(double Sum, int Count) d = (4.5, 3);
تاپلهای زبان بر پایهٔ System.ValueTuple هستند؛ یعنی نوع مقدار (value type) و اعضای آن بهصورت فیلدهای عمومی پیادهسازی شدهاند. نتیجهٔ مستقیم این پیادهسازی این است که تاپلها mutable value types هستند، یعنی میتوان مقادیر فیلدهایشان را تغییر داد.
🔗 مطلب کامل را در این لینک میتوانید مطالعه کنید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
کانال تلگرام:
@SoftwarePhilosophy
______
Docs
Tuple types - C# reference
C# tuples: lightweight data structures that you can use to group loosely related data elements. Tuples introduce a type that contains multiple public members.
👍5
اجرای ویندوز داخل داکر!
اگر با داکر (Docker) کار میکنید، پروژه Dockur/Windows یک ابزار فوقالعاده برایتان خواهد بود. این پروژه متنباز به شما اجازه میدهد نسخههای مختلف ویندوز را داخل یک کانتینر داکر اجرا کنید، بدون اینکه نیاز به ماشین مجازی یا نصبهای پیچیده داشته باشید.
ویژگیهای برجسته:
- نصب خودکار ویندوز با انتخاب نسخه دلخواه (از XP تا Windows 11 و حتی Windows Server 2025)
- پشتیبانی از زبانهای مختلف از جمله فارسی
- امکان اتصال از طریق مرورگر یا Remote Desktop
- قابلیت تنظیم مقدار RAM، CPU، اندازه دیسک و حتی عبور USB و دیسکهای فیزیکی
- مناسب برای توسعهدهندگان، تستکنندگان نرمافزار و علاقهمندان به مجازیسازی
🌍 این پروژه در GitHub بیش از ۴۵ هزار ستاره گرفته و توسط هزاران نفر استفاده میشود. برای استفاده فقط کافی است Docker و KVM روی سیستم شما فعال باشد.
📦 نحوه استفاده:
با یک فایل Docker Compose ساده یا دستور CLI میتوانید کانتینر را اجرا کرده و از طریق مرورگر به دسکتاپ ویندوز دسترسی پیدا کنید. همه چیز به صورت خودکار نصب میشود!
🔗 لینک پروژه در گیتهاب:
dockur/windows در GitHub1
اگر دنبال راهی سریع، سبک و قابل تنظیم برای اجرای ویندوز هستید، این پروژه را از دست ندهید. مناسب برای تست نرمافزار، آموزش، یا حتی استفاده روزمره در محیطهای توسعه!
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
#حامد_حاجیلو (لینکدین)
کانال تلگرام:
@SoftwarePhilosophy
______
اگر با داکر (Docker) کار میکنید، پروژه Dockur/Windows یک ابزار فوقالعاده برایتان خواهد بود. این پروژه متنباز به شما اجازه میدهد نسخههای مختلف ویندوز را داخل یک کانتینر داکر اجرا کنید، بدون اینکه نیاز به ماشین مجازی یا نصبهای پیچیده داشته باشید.
ویژگیهای برجسته:
- نصب خودکار ویندوز با انتخاب نسخه دلخواه (از XP تا Windows 11 و حتی Windows Server 2025)
- پشتیبانی از زبانهای مختلف از جمله فارسی
- امکان اتصال از طریق مرورگر یا Remote Desktop
- قابلیت تنظیم مقدار RAM، CPU، اندازه دیسک و حتی عبور USB و دیسکهای فیزیکی
- مناسب برای توسعهدهندگان، تستکنندگان نرمافزار و علاقهمندان به مجازیسازی
🌍 این پروژه در GitHub بیش از ۴۵ هزار ستاره گرفته و توسط هزاران نفر استفاده میشود. برای استفاده فقط کافی است Docker و KVM روی سیستم شما فعال باشد.
📦 نحوه استفاده:
با یک فایل Docker Compose ساده یا دستور CLI میتوانید کانتینر را اجرا کرده و از طریق مرورگر به دسکتاپ ویندوز دسترسی پیدا کنید. همه چیز به صورت خودکار نصب میشود!
🔗 لینک پروژه در گیتهاب:
dockur/windows در GitHub1
اگر دنبال راهی سریع، سبک و قابل تنظیم برای اجرای ویندوز هستید، این پروژه را از دست ندهید. مناسب برای تست نرمافزار، آموزش، یا حتی استفاده روزمره در محیطهای توسعه!
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
#حامد_حاجیلو (لینکدین)
کانال تلگرام:
@SoftwarePhilosophy
______
GitHub
GitHub - dockur/windows: Windows inside a Docker container.
Windows inside a Docker container. Contribute to dockur/windows development by creating an account on GitHub.
👍10❤4🔥4👏1
This media is not supported in your browser
VIEW IN TELEGRAM
آشنایی با دو قابلیت جدید در ویژوال استودیو
اگر با Razor در توسعه وب کار میکنید، خبر خوب اینکه دو قابلیت جدید در Visual Studio و VS Code اضافه شده که حسابی کار شما را راحتتر میکند:
🔹 «استخراج کامپوننت» (Extract to Component):
با این قابلیت میتوانید فقط با چند کلیک، بخشهایی از کد HTML را به یک کامپوننت جداگانه تبدیل کنید. دیگر نیازی به کپیپیست و ساخت دستی فایل نیست!
🔹 «توکنایزر جدید سیشارپ» با پشتیبانی از Roslyn:
این بهروزرسانی باعث میشود Razor بهتر بتواند کدهای سیشارپ را پردازش کند؛ از جمله raw string literals، رشتههای verbatim و حتی دستورهای پیشپردازنده.
📌 این قابلیتها فعلاً در نسخههای جدید Visual Studio و NET 9. فعال هستند و قرار است در NET 10. بهصورت پیشفرض فعال باشند.
🔗 بیشتر بخوانید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
#حامد_حاجیلو (لینکدین)
کانال تلگرام:
@SoftwarePhilosophy
______
اگر با Razor در توسعه وب کار میکنید، خبر خوب اینکه دو قابلیت جدید در Visual Studio و VS Code اضافه شده که حسابی کار شما را راحتتر میکند:
🔹 «استخراج کامپوننت» (Extract to Component):
با این قابلیت میتوانید فقط با چند کلیک، بخشهایی از کد HTML را به یک کامپوننت جداگانه تبدیل کنید. دیگر نیازی به کپیپیست و ساخت دستی فایل نیست!
🔹 «توکنایزر جدید سیشارپ» با پشتیبانی از Roslyn:
این بهروزرسانی باعث میشود Razor بهتر بتواند کدهای سیشارپ را پردازش کند؛ از جمله raw string literals، رشتههای verbatim و حتی دستورهای پیشپردازنده.
📌 این قابلیتها فعلاً در نسخههای جدید Visual Studio و NET 9. فعال هستند و قرار است در NET 10. بهصورت پیشفرض فعال باشند.
🔗 بیشتر بخوانید.
⁉️ برای بحث و تبادل نظر فنی در مورد این پست، نظرات خود را با ما در قسمت کامنتها به اشتراک بگذارید.
#حامد_حاجیلو (لینکدین)
کانال تلگرام:
@SoftwarePhilosophy
______
1👍7❤2🔥1