Software Philosophy

Description
چکیده‌ای از مفاهیم به روز مهندسی نرم افزار برای مهندسین نرم‌افزار.
معماری نوین نرم‌افزار، تکنولوژی‌های برنامه نویسی جدید
We recommend to visit

?? ??? ?? ????? ?

We comply with Telegram's guidelines:

- No financial advice or scams
- Ethical and legal content only
- Respectful community

Join us for market updates, airdrops, and crypto education!

Last updated 6 months, 4 weeks ago

[ We are not the first, we try to be the best ]

Last updated 9 months, 1 week ago

FAST MTPROTO PROXIES FOR TELEGRAM

ads : @IR_proxi_sale

Last updated 5 months, 1 week ago

5 Monate, 2 Wochen her

معرفی Bit Boilerplate Project Template، بهشت دات‌نتی‌ها!

در کمتر از ده دقیقه با یکی از کامل‌ترین NET project template. های حال حاضر برای Cross Platform Desktop/Mobile/Web development آشنا بشید و ببینید با Blazor چه اپ‌های خفنی می‌شه توسعه داد که هم سبک و سریع باشن و بهینه و با معماری فوق‌العاده.

این فریم‌ورک جذاب توسط یه تیم ایرانی درست شده که الان استارتاپ‌شون تو هلنده و خیلی از شرکت‌های خارجی و ایرانی از زیرساختشون استفاده می‌کنن.

https://bitplatform.dev/boilerplate
#dotnet #csharp #blazor #maui

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

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

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

__________

6 Monate her

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

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

توضیح اینکه این از یه مدل ساده بدون هیچ بهبودی داره استفاده می‌کنه و برای پیاده‌سازیش از مدل‌های Azure AI استفاده کردم و کدش رو هم با #csharp نوشتم.

#openai #gpt #dotnet #azure

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

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

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

__________

6 Monate, 2 Wochen her
**مدیریت هوشمند Migrationها در EF Core …

مدیریت هوشمند Migrationها در EF Core با Docker و EF Tools

در این روش، شما EF Core Tools را مستقیماً داخل Docker نصب می‌کنید، که به شما امکان می‌دهد migrationها را بدون نیاز به نصب ابزارهای اضافی روی سیستم شخصی خود، کاملاً داخل کانتینر مدیریت کنید. این روش برای CI/CD و محیط‌های تولیدی عالی است، چون همه چیز ایزوله و مستقل داخل کانتینر انجام می‌شود.

مراحل نصب EF Core Tools در Docker و اجرای migrationها

۱. تنظیم Dockerfile

در Dockerfile، EF Core Tools را نصب می‌کنیم تا migrationها به‌طور خودکار داخل کانتینر اجرا شوند. هر بار که کانتینر ساخته و اجرا می‌شود، migrationها اعمال و دیتابیس آماده استفاده می‌شود.

```
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY ["YourProject/YourProject.csproj", "YourProject/"]
RUN dotnet restore "YourProject/YourProject.csproj"
COPY . .
RUN dotnet build "YourProject/YourProject.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "YourProject/YourProject.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .

# نصب EF Core Tools و اجرای migrationها
RUN dotnet tool install --global dotnet-ef
ENV PATH="$PATH:/root/.dotnet/tools"
RUN dotnet ef database update

ENTRYPOINT ["dotnet", "YourProject.dll"]
```

۲. ساخت و اجرای کانتینر

کافی است دستورات زیر را اجرا کنید تا کانتینر ساخته و اپلیکیشن شما اجرا شود:

docker build \-t your\-image\-name . docker run \-d your\-image\-name

مزایای این روش

▫️سادگی و انعطاف در CI/CD:
عملیات migrationها خودکار اجرا می‌شوند و برای محیط‌های CI/CD فوق‌العاده مناسب هستند.

▫️استقلال از محیط توسعه:
نیاز به ابزارهای اضافی روی سیستم شخصی نیست؛ همه چیز داخل Docker انجام می‌شود.

▫️دیتابیس همیشه به‌روز:
هر بار که کانتینر اجرا شود، migrationها اعمال می‌شوند و دیتابیس سینک می‌ماند.

این روش یه راهکار راحت و ایزوله برای مدیریت migrationهاست و کار با Docker را هم ساده‌تر می‌کند.

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

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

#هوتن_همتی (لینکدین)

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

________

7 Monate, 1 Woche her
**برسی متدهای جدید LINQ در دات …

برسی متدهای جدید LINQ در دات نت ۹

دات‌نت ۹، که قرار است در نوامبر ۲۰۲۴ منتشر شود، پیش‌نمایش جدیدی ارائه کرده است که چندین متد LINQ جدید شامل CountBy، AggregateBy و Index را معرفی می‌کند:

متد CountBy: این متد امکان شمارش سریع عناصر در یک مجموعه بر اساس تابع انتخاب کلید را فراهم می‌کند و دیکشنری‌ای برمی‌گرداند که کلیدها مقادیر منحصربه‌فرد هستند و مقادیر، تعداد هر کلید را نشان می‌دهند.

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

متد Index: این متد یک مجموعه ایندکس شده ایجاد می‌کند، به طوری که هر عنصر با ایندکس خود در مجموعه اصلی همراه است.

این متدهای جدید LINQ در دات‌نت ۹ امکاناتی را برای بهینه‌سازی کد و بهبود عملکرد فراهم کرده‌اند و ابزارهای بیشتری در اختیار توسعه‌دهندگان قرار می‌دهند.

در ادامه، مثال‌هایی از هر یک از متدهای جدید LINQ همراه با خروجی آن‌ها ارائه شده است:

  1. مثال متد CountBy

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

```
var people = new List
{
new Person { Name = "Ali", Age = 25 },
new Person { Name = "Sara", Age = 30 },
new Person { Name = "Reza", Age = 25 },
new Person { Name = "Maryam", Age = 30 },
new Person { Name = "Nima", Age = 20 }
};

var ageCounts = people.CountBy(p => p.Age);
foreach (var ageCount in ageCounts)
{
Console.WriteLine($"Age: {ageCount.Key}, Count: {ageCount.Value}");
}
```

خروجی:

Age: 25, Count: 2 Age: 30, Count: 2 Age: 20, Count: 1

  1. مثال متد AggregateBy

در این مثال، ما قصد داریم مجموع سن‌ها را بر اساس گروه‌های سنی (به عنوان مثال زیر ۳۰ و بالای ۳۰) تجمیع کنیم.

```
var people = new List
{
new Person { Name = "Ali", Age = 25 },
new Person { Name = "Sara", Age = 30 },
new Person { Name = "Reza", Age = 25 },
new Person { Name = "Maryam", Age = 30 },
new Person { Name = "Nima", Age = 20 }
};

var ageSums = people.AggregateBy(
p => p.Age < 30 ? "Under 30" : "30 and Above",
(key, group) => group.Sum(p => p.Age)
);

foreach (var ageSum in ageSums)
{
Console.WriteLine($"Group: {ageSum.Key}, Sum of Ages: {ageSum.Value}");
}
```

خروجی:

Group: Under 30, Sum of Ages: 70 Group: 30 and Above, Sum of Ages: 60

  1. مثال متد Index

در این مثال، لیستی از نام‌ها داریم و می‌خواهیم هر نام را همراه با ایندکس آن در لیست نمایش دهیم.

```
var names = new List { "Ali", "Sara", "Reza", "Maryam", "Nima" };

var indexedNames = names.Index();
foreach (var item in indexedNames)
{
Console.WriteLine($"Index: {item.Index}, Name: {item.Value}");
}
```

خروجی:

Index: 0, Name: Ali Index: 1, Name: Sara Index: 2, Name: Reza Index: 3, Name: Maryam Index: 4, Name: Nima

‼️برای دیدن نمونه مثال و مطالعه بیشتر به دو لینک زیر مراجعه کنید:

?لینک اول

?لینک دوم

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

#هوتن_همتی (لینکدین)

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

_______

7 Monate, 2 Wochen her
**ورک شاپ TDD OpenAI with Semantic …

ورک شاپ TDD OpenAI with Semantic Kernel and skUnit

برنامه‌نویسی چت‌بات‌های هوش‌مصنوعی بر پایه LLM در دات‌نت هیچ وقت انقدر شیرین و لذت‌بخش نبوده!
در این ورک‌شاپ مهران داودی یک چت‌بات رو از صفر می‌سازه و نشون می‌ده چطور می‌شه برای این copilot ها تست‌های اتوماتیک نوشت که بتونه از طریق خود LLM تست‌های معنایی انجام بده (Semantic Assert).

این ورک‌شاپ قبلا به صورت لایو در لینکدین برگزار شده بود و الان ویدئوش در یوتیوب آپلود شده.

https://www.youtube.com/watch?v=JVyLLD5bgoE&t=9s

7 Monate, 2 Wochen her
**شمشیر دو لبه IEnumerable و yield …

شمشیر دو لبه IEnumerable و yield return در C# : راهکارهایی برای بهینه‌سازی و جلوگیری از افت عملکرد

در زبان C#، وقتی می‌خواهیم با مجموعه‌ای از داده‌ها یا توالی‌ها کار کنیم، معمولاً از ساختارهای داده‌ای مثل لیست‌ها یا آرایه‌ها استفاده می‌کنیم. اما گاهی نیاز داریم داده‌ها را به صورت تنبل (Lazy) پردازش کنیم، یعنی فقط زمانی داده‌ها تولید شوند که واقعاً به آن‌ها نیاز داریم. اینجاست که IEnumerable و yield return وارد میدان می‌شوند و می‌توانند کار ما را بسیار ساده‌تر و بهینه‌تر کنند.

ابزار IEnumerable این امکان را به ما می‌دهد که به طور مؤثر بر روی مجموعه‌ای از داده‌ها پیمایش کنیم، بدون اینکه نیاز باشد تمام داده‌ها را یکجا در حافظه بارگذاری کنیم. از طرف دیگر، yield return به ما اجازه می‌دهد که یک توالی از داده‌ها را مرحله به مرحله و در طول زمان تولید کنیم، به جای اینکه همه‌چیز یکجا آماده شود.

اما مشکل از آنجا شروع می‌شود که استفاده نادرست از این قابلیت‌ها می‌تواند منجر به کاهش کارایی برنامه شود. مثلاً فرض کنید در حال استفاده از yield return هستید و هر بار که از داده‌های تولید شده استفاده می‌کنید، محاسبات سنگینی برای تولید آن داده‌ها انجام می‌شود. اگر این محاسبات هر بار تکرار شوند، زمان اجرای برنامه افزایش می‌یابد و منابع سیستم بی‌مورد مصرف می‌شوند. یا در مواقعی که منابعی مثل فایل‌ها یا دیتابیس را در دسترس داریم، استفاده نادرست از IEnumerable و اجرای به تعویق افتاده (Deferred Execution) ممکن است باعث خطاهایی در مدیریت منابع شود.

در این پست، ما دقیقاً به این مشکلات می‌پردازیم و نشان می‌دهیم که چطور می‌توانیم با آگاهی و استفاده صحیح از IEnumerable و yield return هم از مزایای آنها بهره‌مند شویم و هم از بروز مشکلات و افت عملکرد جلوگیری کنیم. همچنین چند مثال عملی از جمله کار با دیتابیس، فایل‌ها، و لیست‌های داده ارائه می‌دهیم که به شما کمک می‌کند این ابزارها را به درستی به کار بگیرید.

? نسخه کامل مقاله را می‌توانید اینجا مطالعه کنید.

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

#هوتن_همتی (لینکدین)

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

_______

1 Jahr her

EXACT INSTRUCTIONSپیشنهاد می‌کنم اول فیلم رو ببنید بعد بقیه مطلب رو بخونید.

https://www.youtube.com/watch?reload=9&v=Ct-lOOUqmyY

خیلی جالب بود و در نگاه اول هیچ ربطی به نرم‌افزار و دنیای نرم‌افزار نداره. ولی وقتی یه خورده عمیق بشیم خیلی جالب میشه.

یکی از مهم‌ترین کارهایی که باید توی شرکت‌های نرم‌افزاری به درستی انجام بشه، داکیومنت کردن است. (داکیومنت به معنی کامنت گذاشتن داخل کد اصلا منظورم نیست، کد باید خودش به قدری خوانا باشه که نیاز به کامنت نداشته باشه یا به اصطلاح Self-Document باشه.)
داکیومنت کردن رو نباید به عنوان یه کار اضافه دید و سرسری انجامش داد.
تمام مراحل انتقال دانش باید به وسیله داکیومنت انجام بشه. نه به صورت نقل قول و سینه به سینه.

اتفاقی که برای خودم افتاد رو براتون تعریف می‌کنم:
در شرکت کرانه ادمین TFS بودم، و یکی از کارهایی که باید انجام می‌دادم و داکیومنت می‌کردم Disaster Recovery خود TFSبود. ۱ روز کامل وقت گذاشتم و Recovery رو انجام دادم و داکیومنتش رو نوشتم، کاری که مدیرمون کرد خیلی خوب بود. داکیومنت رو داد به یکی دیگه گفت TFS رو بیار بالا. حدس می‌زنید چی شد؟ نتونست، چون داکیومنتی که نوشته بودم به درد خودم می‌خورد.
و حرفی که به من زد این بود «داکیومنت باید طوری باشه که اگه دست یه نفر رو از توی خیابون گرفتم و این داکیومنت رو بهش دادم بتونه TFS رو بیاره بالا». بعد از ۳ بار داکیومنت نوشتن بالاخره موفق شدم داکیومنتی بنویستم که به هر کی بدمش فقط با Back up دیتا بیس بتونه TFS رو بالا بیاره.

به نظر من داکیومنت باید طوری باشه تا تمام کسانی که می‌خوننش، همشون یک برداشت رو داشته باشن، داکیومنت نباید وابسته به Context ذهن ما باشه.

خوشحال می‌شم نظر شما رو هم بدونم.

#افشین_علیزاده (http://ow.ly/l7cA30m3OQ9)

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

___

We recommend to visit

?? ??? ?? ????? ?

We comply with Telegram's guidelines:

- No financial advice or scams
- Ethical and legal content only
- Respectful community

Join us for market updates, airdrops, and crypto education!

Last updated 6 months, 4 weeks ago

[ We are not the first, we try to be the best ]

Last updated 9 months, 1 week ago

FAST MTPROTO PROXIES FOR TELEGRAM

ads : @IR_proxi_sale

Last updated 5 months, 1 week ago