tech-afternoon
1.25K subscribers
175 photos
6 videos
6 files
170 links
تِک‌افترنون، رویدادی گاه‌به‌گاه است با موضوعات حول معماری و توسعه نرم‌افزار، این کانال هم برای اشتراک اخبار، آموزش، نکاتی حول مهندسی نرم‌افزار، دیتابیس‌، تکنولوژی و مدیریت تولید محصولات نر‌م‌افزاری خواهد بود.
youtube.com/@AminTechTalks/videos
امین مصباحی
Download Telegram
قابلیت‌های جدید افزونه‌ی SQL Server برای VS Code!

اگر سیر تغییر رویکرد مایکروسافت رو دنبال کرده باشید، سرعت توسعه و نوآوری توی VS Code به طرز محسوسی سریع و خوشحال‌کننده است.
حالا اومده خیلی قابلیت‌هایی که قبلا فقط توی SSMS برای SQL Server بود رو توی افزونه VS Code اضافه کرده.

احتمالا تصاویر گویا است و می‌بینید که کوئری‌پلن، و تولید اسکریپت و کلا محیط بصری خیلی بهتر و کامل‌تری نسبت به نسخه‌های قبلی توی ورژن جدید داریم.

از طرفی می‌دونید که Azure Data Studio که بر پایه VS Code توسعه داده شده و کدباز و رایگانه، از MySQL, PostgreSQL, MongoDB, CosmosDB و SQL Server پشتیبانی می‌کنه (نه به کاملی DataGrip ولی در حال بهبود و تکمیله).

اینا همه در حالیه که SSMS 21 که الان نسخه پیش‌نمایش است هم تغییرات بزرگی داشته.

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

💬 شما از چی استفاده می‌کنید؟ ابزار مورد علاقه‌تون چیه؟!
👌7👍221
انواع استراتژی‌های تاب‌آوری نرم‌افزار (Resiliency Strategy)

مفهوم Resiliency یا تاب‌آوری، به توانایی یک سیستم برای بازیابی شرایط پایدار در صورت بروز خطا گفته می‌شه. حالا این بازیابی می‌تونی تلاش برای بازیابی باشه، یا انتخاب راه جایگزین. مثل اینکه شما ۲ بار تلاش می‌کنی از API آب‌وهوا مقدار دمای فعلی یک منطقه رو بگیری، هر بار با فاصله زمانی ۵ ثانیه API رو صدا می‌زنی ولی بعد از اینکه پاسخ موفق نمی‌گیری (تا اینجا به این می‌گن استراتژی retry) بعد تصمیم می‌گیری از cache آخرین مقداری که کم‌تر از ۵ ساعت گذشته وجود داشته رو استفاده کنی که فعلا کار راه بیوفته (استراتژی fallback) یا ... به هر کدوم از این رفتارها برای تداوم کار و مقابله با موانع، می‌گن resiliency strategy.

کتابخونه Polly محبوب‌ترین در بین دات‌نتی‌هاست. و تو دل Aspire هم ازش استفاده شده، برای درک بهتر ویدیوی Aspire که به زودی پابلیش می‌شه، خوبه یه مرور روی انواع استراتژی‌ها کنیم...
—————————
دو گروه اصلی داریم:

⚙️گروه استراتژی‌های Reactive (واکنشی)
وقتی به کار می‌رن که یک خطا یا مشکلی رخ داده و سیستم باید به شکلی واکنش نشون بده.

🛡 ۱: استراتژی Retry
فرضیه: خطاها موقتی هستن و ممکنه با کمی تأخیر و تلاش مجدد برطرف بشن.

در این استراتژی، سیستم تلاش می‌کنه که یک عملیات ناموفق رو بعد از یک بازه‌ی زمانی مشخص دوباره امتحان کنه. این بازه زمانی می‌تونه ثابت یا متغیر باشه (مثل Exponential Backoff). مثلاً اگر سرور موقتی قطع شده باشه، با چند بار Retry ممکنه مشکل حل بشه. در Polly، این با “Retry Policy” قابل پیاده‌سازی است. و تعداد دفعات و بازه زمانی بین هر تلاش به تصمیم ما وابسته است.

🛡 ۲: استراتژی Circuit-Breaker
فرضیه: وقتی سیستم به شدت دچار مشکل می‌شه، بهتره سریعاً فرآیندها متوقف بشن به جای اینکه کاربران منتظر بمونن.

چطور کمک می‌کنه؟ مدار رو قطع می‌کنه (اجرای درخواست‌ها رو متوقف می‌کنه) در زمانی که خطاها از حدی مشخص بیشتر می‌شن (مثل وقتی می‌فرسته به صف ولی هِی روی هم انباشت می‌شه و از اون طرف پردازش نمی‌شن)

شبیه به فیوز برق که اگر بیش از حد فشار وارد بشه، مدار رو قطع می‌کنه. این استراتژی به سیستم اجازه می‌ده برای مدتی مشخص درخواست‌ها رو به مقصد ارسال نکنه تا از خرابی‌های بیشتر جلوگیری بشه. مثلاً در Polly می‌تونید مدت‌زمانی که Circuit باز می‌مونه و شرایط بازگشت به حالت نرمال رو تنظیم کنیم.

🛡 ۳: استراتژی Fallback
فرضیه: خطا تداوم خواهد داشت؛ پس برای پلن B برنامه‌ریزی می‌کنیم.

چطوری کمک می‌کنه؟ یک مقدار یا راه حل جایگزین در صورت بروز یا تداوم خطا ارائه می‌ده.

وقتی یک عملیات شکست می‌خوره، به جای نمایش خطا به کاربر، یک نتیجه جایگزین برمی‌گرده. مثلاً به جای اینکه پیام “سرور API در دسترس نیست” نمایش داده بشه، می‌تونید یک مقدار ذخیره شده از کش رو ارائه بدید.

🛡 ۴: استراتژی Hedging
فرضیه: گاهی اوقات برخی مسیرها شاید کند یا حتی ناموفق باشن؛ پس بهتره چندین راه برای رسیدن به هدف در نظر بگیریم، هر کدوم زودتر جواب داد، همون.

چطوری کمک می‌کنه؟ برای یک کار، چند راه رو تلاش می‌کنه به طور موازی پی بگیره و منتظر اولین پاسخ موفق می‌مونه.

در این استراتژی، همزمان چند درخواست به چند مقصد مختلف ارسال می‌شه و اولین پاسخ موفق به عنوان نتیجه پذیرفته می‌شه. این کار برای کاهش زمان انتظار و بهبود اطمینان‌پذیری استفاده می‌شه.

⚙️گروه استراتژی‌های Proactive (کنشگر)
این استراتژی‌ها برای پیشگیری از بروز مشکلات در سیستم طراحی شده‌اند.

🛡 ۱: استراتژی Timeout
فرضیه: بعد از مدت زمانی مشخص، موفقیت بعیده.

چطوری کمک می‌کنه؟ تضمین می‌کنه که درخواست‌ها بیشتر از زمان مشخص منتظر نمی‌مونن.

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

🛡 ۲: استراتژی Rate Limiter
فرضیه: محدود کردن تعداد درخواست‌هایی که سیستم در یک بازه زمانی مشخص می‌پذیره (راهی برای کنترل بار ورودی).

چطوری کمک می‌کنه؟ اجرای درخواست‌ها رو محدود می‌کنه تا از حد مشخصی فراتر نره.

برای جلوگیری از بار زیاد روی سیستم، این استراتژی تعداد درخواست‌ها در یک بازه زمانی مشخص رو محدود می‌کنه. مثلاً اگر کاربران زیادی همزمان به سیستم درخواست بفرستن، Rate Limiter می‌تونه از خرابی جلوگیری کنه.

—————————

ما می‌تونیم از یک یا ترکیبی از چند استراتژی برای افزایش تاب‌آوری سیستم‌هامون استفاده کنیم.

🔗 رفرنس جهت مطالعه عمیق‌تر

💬 نظر؟ تجربه؟ سوال؟
Please open Telegram to view this post
VIEW IN TELEGRAM
👏83🔥2🙏2🤔1
🍉 مطلب ویژه برای شبی که 1️⃣ دقیقه بیشتر برای فکر کردن وقت داریم...

مفهومی داریم به نام Cargo Cult Practices که به رفتارها یا فرآیندهایی اشاره داره که به‌طور «سطحی» شبیه به رفتارهای موفق و موثر هستن، اما «بدون درک عمیقی» از دلیل یا اصول اساسی‌ای که پشت اون رفتارها و انتخاب‌ها وجود داره...

ریشه تاریخی: کارگو کالت به رفتارها و آیین‌هایی گفته می‌شه که در برخی جوامع، به‌ویژه در جزایر اقیانوس آرام، بعد از جنگ جهانی دوم شکل گرفته. در طول جنگ، نیروهای نظامی آمریکایی در این جزایر پایگاه‌هایی ساختند و کالاهای مدرن (کارگو) رو با هواپیما به اونجا می‌بردند. بومیان این جزایر که هرگز چنین فناوری‌هایی را ندیده بودن، شروع به تقلید از رفتارهای سربازها کردن!! با این باور که این کارها (اداها) باعث جلب کالاهایی شبیه اونایی که نظامی‌ها می‌آوردن می‌شه!! 😳
بعد از پایان جنگ و ترک نیروهای نظامی، بومی‌ها به ساخت تجهیزات نمادین مثل باند فرودگاه، برج مراقبت و هواپیماهای چوبی ادامه دادن. حتی لباس‌های شبیه به یونیفرم نظامی می‌پوشیدن و با چوب‌های شبیه به رادیو ارتباط برقرار می‌کردن!

اصطلاح "کارگو کالت" در زمینه‌های مختلف برای توصیف تقلید ظاهری از یک عمل، بدون درک عمیق از مکانیزم‌های واقعی او‌ها به کار می‌ره، به‌ویژه در حوزه‌هایی مثل مدیریت و توسعه نرم‌افزار.

استفاده از فلان معماری یا فلان زبون یا فلان ساختار تیمی چون فلان شرکت استفاده کرده، از همین مصادیقه... توی فرهنگ ما ضرب‌المثل «مرغی که انجیر می‌خوره نوکش کجه» مترادف با همینه...

👀 چند پیشنهاد مقدماتی برای ساختن تیم بهتر؛ به جای تمرکز روی تقلید رفتارهای شرکت‌ها و تیم‌های دیگه روی یک چیز تمرکز کنیم:

⚡️ ساختن فرهنگ و فرایند «متناسب» با نیازها و بضاعتمون، و به کارگیری ابزار مناسب براش... ⚡️

و بعدش:

✔️ کورکورانه از روش‌های شرکت‌های دیگه کپی نکن! اول ببین اصلاً به درد تیمت می‌خوره یا نه. یه چیزی که برای یه شرکت دیگه خوب بوده، الزاماً برای تو هم خوب نیست. حتی اگر اون شرکت خیلی خفن و مشهور باشه!

✔️ یه فضایی درست کن که برنامه‌نویس‌هات احساس مسئولیت کنن، بتونن مستقل کار کنن و راحت با هم‌تیمی‌هاشون حرف بزنن. نذار حس کنن دارن زیر میکروسکوپ کار می‌کنن.

✔️ به جای اینکه هر روز صبح همه رو بکشونی تو جلسه استندآپ، از ابزارها و روش‌هایی استفاده کن که خود به خود همه بدونن چی به چیه و مشکلات کجاست.

✔️ این افسانه برنامه‌نویس ده برابری (10x programmer) رو باور نکن! معمولاً اونایی که خیلی خوبن، تو یه زمینه خاص تخصص دارن، نه اینکه تو همه چیز استاد باشن.

✔️ موقع استخدام نیروی جدید، از همون اول درست بهشون یاد بده که چطور باید با بقیه ارتباط بگیرن و مسئولیت‌پذیر باشن. نذار عادت‌های بد از همون اول شکل بگیره.

یلدای همگی مبارک و امیدوارم در کنار خانواده و عزیزانتون سلامت و شاد و موفق باشین 😉
Please open Telegram to view this post
VIEW IN TELEGRAM
12👏22👍1
👀 ورک‌لود توی دات‌نت چیه؟
ورک‌لود‌های دات‌نت مجموعه‌ای از اجزای اختیاری SDK هستن که برای توسعه انواع خاصی از برنامه‌ها مورد استفاده قرار می‌گیرن. به زبون ساده‌تر، به جای نصب یک SDK بزرگ که همه چیز رو شامل بشه، می‌تونیم فقط اجزای مورد نیاز برای پروژه خودمون را نصب کنیم.

مثال: 🔤aspire 🔤یا macos یا tvos یا maui-tizen


✍️ تاریخچه و دلیل ایجاد ورک‌لود‌ها
توی نسخه‌های قبل از دات‌نت ۵، تمام قابلیت‌ها در قالب یک SDK یکپارچه (مونولیتیک) ارائه می‌شد. این رویکرد مشکلات متعددی داشت:

- حجم زیاد SDK و مشکلات توزیع
- زمان طولانی ساخت محصول
- پیچیدگی توی مدیریت و به‌روزرسانی
- مصرف منابع غیرضروری توی محیط‌ CI/CD

📌 اهداف اصلی معرفی ورک‌لود‌ها
مایکروسافت با معرفی ورک‌لود‌ها، چند هدف کلیدی رو دنبال کرد:

- امکان دانلود انتخابی قابلیت‌های مورد نیاز (مثلاً فقط ASP.NET Core یا فقط Xamarin)
- ساده‌سازی پیکربندی برای محیط‌های CI/CD
- ارائه پیام‌های خطای مفید هنگام نبود ورک‌لود مورد نیاز
- قابلیت نصب خودکار ورک‌لود‌ها بر اساس فایل پروژه
- امکان به‌روزرسانی ورک‌لود‌ها بدون نیاز به نصب نسخه جدید SDK (مثلا aspire رو به‌روز کنیم مستقل از سایر SDKها)

ساختار و ترکیب‌بندی
ورک‌لود‌ها از دو بخش اصلی تشکیل شده‌اند:

*️⃣مانیفست: فایلی که ورک‌لود و اجزاش رو توصیف می‌کنه
*️⃣پک‌ها: مجموعه فایل‌های فشرده‌شده شامل ابزارها، کتابخونه‌ها و منابع مورد نیاز

شروع به کار:
برای دیدن لیست ورک‌لودها و انتخاب از بینشون:

dotnet workload search


یا برای آپدیت کردن ورک‌لودها:

dotnet workload update


یا مثلا وقتی می‌خواین ورک‌لود لازم برای ساختن نرم‌افزار روی تلویزیون سامسونگ مجهز به تایزن رو نصب کنین:

dotnet workload install maui-tizen


🛫 آینده ورک‌لود‌ها
طبق برنامه مایکروسافت، در آینده:

*️⃣تمام قابلیت‌های دات‌نت (از جمله WPF و Windows Forms) به صورت ورک‌لود ارائه خواهند شد
*️⃣امکان نصب و مدیریت از طریق مدیریت‌کننده‌های بسته لینوکس فراهم می‌شه
*️⃣ابزارهای CLI برای مدیریت ورک‌لود‌ها گسترش پیدا می‌کنن

🚀 مدیریت نسخه‌های ورک‌لود با Workload Sets
یکی از ویژگی‌های مهم که از دات‌نت ۸.۰.۴۰۰ معرفی شد، قابلیت Workload Sets بود. این قابلیت به ما امکان می‌ده مجموعه‌ای از ورک‌لود‌ها رو با یک شماره نسخه مشخص مدیریت کنیم.

مزایای استفاده از Workload Sets

- کنترل بهتر روی نسخه‌های نصب شده
- اطمینان از سازگاری ورک‌لود‌ها با همدیگه
- همگام‌سازی آسون‌تر نسخه‌ها توی تیم توسعه
- مدیریت ساده‌تر به‌روزرسانی‌ها

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

dotnet workload install aspire --version 9.0.100-preview.7.24414.1


dotnet workload config --update-mode workload-set



حتی می‌تونیم توی global.json هم درجشون کنیم:

{
"sdk": {
"workloadVersion": "9.0.200-preview.0"
}
}



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

و NET Aspire. اساسا بر پایه‌ی workloadها بنا شد و چابکی خودش رو وامدار workloadها است، و با رهانش (release)های مستقل از دات‌نت خودش رو مرتب بهبود داده تا امروز...


امیدوارم این مطلب به درک بهتر ورک‌لود کمک کرده باشه و بتونه به عنوان خونه‌های پازل کمک کنه تا Aspire رو بهتر درک کنید.

🔗مدخل مستندات رسمی
🔗داستان پیدایش توی گیت‌هاب و توسعه دات‌نت

💬 اگر سوالی دارید، حتماً طرح کنید!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥113👍1
اندر باب OpenTelemetry

از اونجایی که دورهمی بعدی‌مون در مورد سیستم‌های توزیع‌شده است، مطالب دیروز (workload) و این مطلب (OpenTelemetry) پیش‌درآمدی است برای دوستانی که آشنایی کمتری دارن ولی دوست دارن از دورهمی استفاده بیشتری ببرن.

به زبون ساده و تا حد امکان کوتاه، OpenTelemetry رو توضیح دادم و Log, Metric و Trace مرور کردم. اگر دوست داشتید مطالعه کنید (instant view تلگرام دسکتاپ مشکلاتی با فارسی داره که اگر روی دسکتاپ مطالعه می‌کنید بهتره تا لینک رو باز کنید)

📎 لینک مطلب

💬 نظر، سوال، گپ‌ و گفت؟ 😉
Please open Telegram to view this post
VIEW IN TELEGRAM
103👍2🔥1
خودکار کردن کارها یه رکن اساسی مهندسی نرم‌افزاره. و عملا بخش مهمی از کار هر توسعه‌دهنده‌، DevOpsکار و Platform Engineer و... همین خودکار کردن فرایندهاست.

لذا طیف وسیعی از ابزارهای اتوماسیون برای کارهای مختلف وجود داره، یکی از مهم‌ترین‌هاش هم ابزارهای خودکارسازی بیلد و دپلوی است. ابزارهای Build Automation از فایل‌های XML که برای استفاده از MS Build سال‌ها پیش می‌ساختیم تا فایل‌های Yaml که برای GitHub یا GitLab می‌سازیم؛ وقتی مراحل بیلد، پیچیده و متعدد می‌شدن؛ نوشتن، ایرادیابی و مدیریت فایل Yaml سخت‌تر می‌شه.
حتی توی پروژه‌ها و تیم‌های کوچیک هم شاید یادگیریش برای دولوپر تازه‌کار دشوار باشه.

درسته که افزونه‌هایی بروی سهولت نوشتنشون در دسترس هست؛ ولی بیاین فکر کنیم اگر توی فایل #C با متدها و کلاس‌هایی که AutoComplete و... خیلی خوبی هم دارن، بهتر نیست؟ خوندن داینامیک مقادیر و تصمیم‌گیری راحت‌تر نیست؟ دیباگ کردن راحت‌تر نیست؟

پروژه Nuke.Build و Cake همینه! یه پروژه رایگان کدباز با لایسنس MIT که با همه CI/CDهای رایج GitHub GitLab CI, Azure Pipelines, Actions و... هم سازگاره.

🧐 حالا یه سوال جدی؟ آیا «امروزه، عصر، عصر مهاجرت به Nuke است و با مهاجرت به آن موفقیت را در دستان خود بگیریم و به پوست شفاف‌تر، زندگی شاداب‌تر و گوارش بهتر دست یابیم!» است؟

خیر! nuke با ۳۱۰۰ ستاره در گیت‌هاب و cake با ۳۹۰۰ ستاره، پروژه‌های بدی نیستن، برای پروژه‌های کوچک، و یا جایی که دانش یا نیروی کافی برای DevOps نداریم، و یا نیازهای خاصی داریم که با Yamlنویسی نگهداری و توسعه‌اش سخت می‌شه (پایپ‌لاین‌های خیلی پویا)، باز هم خوبن. ولی اینکه از فردا روش‌های native رو بگذاریم کنار و بدون دلیل منطقی و حساب‌شده بیوفتیم دنبال اینا هم کار ابلهانه‌ای است 😁 خودکارسازی خوبه، آشنایی با ابزارها خوبه، انتخاب با آگاهی و بجا از جفتش بهتره 😉

💬 تجربه شما چیه؟ با چه روش یا ابزاری build automation می‌کنین؟
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1033
🧠 مروری بر Semantic Kernel، نرم‌افزار، ولی باهوش!

شاید شوخی دور از واقعیتی نباشه که طی این چند سال، اینقدر که همه روی AI تمرکز کردن یا باهاش شوآف کردن، اگر روی پیدا کردن قاتل بروسلی وقت گذاشته بودن حتمن اون نامرد رو دستگیر کرده بودن!

مایکروسافت هم که به لطف سرمایه‌گذاری‌های هوشمندانه‌ای که روی استارتاپ‌ها و شرکت‌های مستعد داشته، اوضاع خیلی خوبی داره. یادمون نره همون‌طور که برنامه‌نویسی وب یا معماری سرویس‌گرا، ۲۵ سال پیش چیزهای مدرنی بودن ولی الان بدیهی و پیش‌پا افتاده به شمار میان؛ استفاده از AI توی نرم‌افزارها هم تا چند وقت دیگه (خیلی خیلی کمتر از ۲۵ سال، حتی کمتر از ۵ سال دیگه) یه موضوع بدیهی خواهد بود.

🎅 دو تا خاطره توی کامنت این مطلب می‌گذارم (خاطره است و اگر نخونید چیزی از مطلب رو از دست ندادید)

البته منظورم چپوندن زورکی و شوآف نیست، بلکه چیزی برای تسهیل نیازهای کاربر نهایی و ارتقاء عملکرد خود سیستمه.

کتابخونه‌ Semantic Kernel که فقط هم برای دات‌نتی‌ها نیست و پایتون و جاوا رو هم پشتیبانی می‌کنه؛ یک کتابخونه‌ی متن‌بازه که به عنوان میان‌افزار (middleware) عمل می‌کند.

یعنی چی؟ یعنی این کتابخونه به توسعه‌دهنده کمک می‌کنه تا به سادگی مدل‌های هوش مصنوعی مختلف رو با کدهای موجودش ترکیب کنه و عامل‌های هوشمند (AI agents) بسازه، (بدون داشتن درک عمیق از دل و روده‌ی AI یا LLM)

یکم بیشتر؟ چشم. مثلا شما می‌خواهید از مدلی که یه بابایی یا یه شرکتی، رایگان یا پولی، روی کامپیوتر خودتون یا روی کلاد، وجود داره و مثلا بهش یه متن می‌دید و می‌گید با صدای فلان خواننده بخونه؛ یا یه متن می‌دید می‌گید یه عکس بر اساسش بسازه؛ یا سوال و جواب عادی؛ یا سوال و جوابی که مبنای پاسخش دیتای توی دیتابیس شماست؛
مثلا شما یه نرم‌افزار سنتی فروشگاه آنلاین لباس داری؛ کاربر می‌گه برام یه ست لباس مهمونی برای فصل پاییز و سقف قیمت فلان، برای یک خانم ۳۰ ساله با سایز M پیشنهاد کن، این یه متنه، ولی Semantic Kernel این امکان رو می‌ده به راحتی از دل دیتای ساختار یافته دیتابیس، فرض کنید جدولی که نام کالا، قیمت، رنگ و سایز رو داره، کوئری مورد نیاز رو بسازه. چجوری؟ با دیتایی که توی مدل زبانی داره می‌فهمه رنگ‌های مناسب با پاییز، یا نوع لباس‌های مورد نیاز برای یک مهمانی (شلوار، پیراهن، پالتو، کفش، شال‌گردن برای پاییز و یک خانم نیازه) اینا رو از دل دیتابیس می‌کشه بیرون و متن هم از نتیج خروجی که احتمالا یه لیست از آبجکت کالا است بسازه که: فلانی‌جون اگر اینو اونو اون‌یکی رو ست کنی برای پاییز خوبه و به بودجه‌ات هم می‌خوره!

🧞‍♂️ این یه روزی جادو بود، یه روز رویا بود، یه روز محال بود؛ الان با وجود امکانات ساختاری وکتورها و کتابخونه‌ها به راحتی شدنیه، حتی با تغییرات کم در کدهای فعلی!

این Semantic Kernel در حقیقت یه پُله بین دنیای برنامه‌نویسی سنتی و مدل‌های زبانی بزرگ (LLM).
فعلا هم با زبون‌های C#، Python و Java قابل استفاده است. یه لایه‌ی میانی که درخواست‌های مدل‌های AI رو به توابع تعریف‌شده توی کد ترجمه می‌کنه و پاسخ‌ها را مدیریت می‌کنه (تبدیل متن به یه کلاس، و ساخت متن با استفاده از دیتای ساختاریافته).

مدل‌های هوش مصنوعی مثل GPT و DALL-E و… تحول بزرگی توی نحوه تعامل ما با نرم‌افزار ایجاد کردن. اما استفاده از این مدل‌ها توی محیط‌های واقعی چالش‌هایی هم داره:
🔤 مدیریت درخواست‌ها: چجوری درخواست‌های پیچیده کاربر رو به توابع کدنویسی ترجمه کنیم؟ (مثلا ورودی‌های متد GetProductsByDescription)

🔤 اتصال به سیستم‌های موجود: چجوری هوش مصنوعی با APIها، دیتابیس‌ها، یا فرآیندهای کسب‌وکاری تعامل داشته باشه؟

🔤 امنیت و مقیاس‌پذیری: چجوری میشه این قابلیت‌ها رو به‌صورت ایمن (جلوگیری از نشت اطلاعات یا دسترسی به داده‌هایی که نباید بهش دسترسی داشته باشع) و توی مقیاس بزرگ ارائه کرد؟

و Semantic Kernel برای پاسخ به این چالش‌ها طراحی شد؛ و هدفش ساده‌سازی یکپارچه‌سازی هوش مصنوعی در پروژه‌های واقعیه.

👀 چی کار می‌شه باهاش کرد حالا؟
- ایجاد ربات‌ها و عامل‌های هوشمند: مثل چت‌بات‌هایی که به‌صورت پویا تصمیم می‌گیرن یا فرآیندها رو خودکار می‌کنن.

- یکپارچه‌سازی آسون با کد موجود: با استفاده از قابلیت Function Calling، می‌شه مدل‌های AI رو به کدهای موجود متصل کرد.

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

- مدیریت آسون هوش مصنوعی: فراهم کردن قابلیت مشاهده و نظارت بر عملکرد مدل‌های مختلف.

- اتصال به مدل‌های مختلف AI (مثل OpenAI، یا مدل‌هایی که روی ماشین خودتون دارید)

- پشتیبانی از Vector Store‌ها


اگر دوست دارید این موضوع ادامه بدم:
ری‌اکشن 🤓
Please open Telegram to view this post
VIEW IN TELEGRAM
🤓174👍1🤔11
اجرای مدل‌های هوش‌مصنوعی به‌صورت آفلاین
پیش‌درآمد شروع کار با Semantic Kernel

‌‌‎—————————————————
پیش‌نوشت:
مسعود دانش‌پور عزیز، در صدد تهیه ویدیو و مثال آموزشی از Semantic Kernel با استفاده از APIهای AvvalAI است. در نتیجه من پُست‌های این موضوع رو طوری تنظیم می‌کنم که هم‌پوشانی نداشته باشه، و دوستان بتونن با دنبال کردن مطالب دو کانال، طیف وسیع‌تری از نکات رو در اختیار داشته باشن.
‎—————————————————

چت‌جی‌پی‌تی، جمینای، Claude یا سرویس‌های مشابه، که به صورت بسته ارائه می‌شن و امکان اجرای مدل به‌صورت لوکال رو نداریم. و نهایتا می‌تونیم با استفاده از API شون بهشون دسترسی داشته باشیم.

🗜 محدودیت‌ها:

*️⃣در هر حال درخواست‌های شما و داده‌هایی که لابلای تعامل با API رد و بدل می‌کنید عملا در اختیار شرکت OpenAI یا Microsoft یا AvvalAI یا... قرار می‌گیره، و حتی اگر به امنیت اونا اطمینان داشته باشیم، ولی استفاده‌شون از داده‌های شما برای آموزش مدل‌هاشون محتمله. این برای بعضی سازمان‌ها و صنایع غیر مجاز است.

*️⃣محدودیت ویژه ایران: تحریم، فیلتر، اینترنت، دشواری پرداخت و قص علی هذا 😡


💡 راهکار جایگزین:
اگر دنبال راهکار جایگزین باشیم که مدل رو خودمون هاست کنیم، باید سراغ مدل‌های باز بریم، مثل لاما (Llama) از شرکت متا یا خانواده مدل‌های فای (Phi) که مایکروسافت ارائه کرده.

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

۱: نرم‌افزار Ollama رو روی Mac، Linux، Windows نصب کنید.
۲: حالا توی ترمینال دستور ollama رو دارید:

برای مشاهده لیست مدل‌هایی که روی ماشینتون دارید:
ollama list


برای دانلود و نصب مدل. (اینجا مدل Phi3.5 (۳.۸۲ میلیارد پارامتر))
ollama pull phi3.5


برای اجرای مدل. (اینجا مدل Phi3.5 (۳.۸۲ میلیارد پارامتر))
ollama run phi3.5


برای حذف مدل.
ollama rm phi3.5


🌡دمای مدل (Temperature) یکی از مهم‌ترین پارامترهای کنترل خروجی مدل‌های زبانیه. بذارید ساده توضیح بدم:
محدوده‌ی مجاز Temperature بین 0 تا 1 تنظیم میشه:

کاربرد temperature = 0.0
- خروجی کاملاً قطعی و تکرارپذیر
- همیشه محتمل‌ترین کلمات رو انتخاب می‌کنه
- مناسب برای: محاسبات، کدنویسی، پاسخ‌های دقیق و تکنیکی


کاربرد temperature = 0.7 (معمولاً مقدار پیش‌فرض)
- تعادل خوبی بین خلاقیت و ثبات
- مناسب برای: چت عمومی، نوشتن متن، اکثر کاربردها


کاربرد temperature = 1.0
- خروجی کاملاً تصادفی و خلاقانه
- هر بار ممکنه پاسخ متفاوتی بده
- مناسب برای: داستان‌نویسی، شعر، ایده‌پردازی خلاقانه

# output:  دقیق و تکرارپذیر
ollama run phi --temperature 0.1 "یک برنامه ساده پایتون بنویس"

# output: متعادل (پیش‌فرض)
ollama run phi --temperature 0.7 "یک داستان کوتاه بنویس"

# output: خلاقانه و متنوع
ollama run phi --temperature 1.0 "یک شعر در مورد بهار بنویس"


برای نمایش منابع مورد مصرف
ollama stats



⚙️ علاوه بر امکان کار با کامندلاین، Ollama بهمون REST API هم می‌ده که به راحتی می‌تونیم باهاش کار کنیم. مثال ساده:
curl http://localhost:11434/api/generate -d'{
"model": "phi3.5",
"prompt": "suggest a city to travel"
}'



با همین API می‌شه چت هم کرد:
curl http://localhost:11434/api/chat -d '{
"model": "phi3.5",
"messages": [
{ "role": "user", "content": "lets chat about cooking recipes?" }
]
}'


شاید اولین آرزوتون این باشه که کاش یه یوزر اینترفیس تحت وب عینهو ChatGPT هم داشت! ولی این آرزو نیست. پاشید پروژه Open WebUI رو استفاده کنید.

📎خوبی Ollama اینکه مدل API که ارائه میده استاندارده و به راحتی می‌تونید بین مثلا Phi و Llama یا هر مدل دیگه‌ای که اینجا می‌بینید به راحتی سوییچ کنید (در این ساعت ۱۴۵ مدل مختلف)

⚡️ این مقدمه اولیه اجرای مدل روی ماشین‌شخصی یا سرور بود. بعدن می‌تونید با Semantic Kernel از مدل لوکال خودتون استفاده کنید...

💬 نظرتون رو بگید لطفا، اگر دوست دارید این موضوع رو ادامه بدیم لطفا اول خودتون همین مثال‌ها رو اجرا کنید و ری‌اکشن 🤓 بگذارید.

♻️🌱 نکته محیط زیستی: همه ما در قبال زمین مسئولیم استفاده از مدل‌های کوچک زبانی (SLM)ها مثل همین Phi3.5 مصرف انرژی و طبیعتا ردپای کربن بسیار کمتری نسبت به مدل‌های بزرگ داره. اگر نیاز به مدل خیلی بزرگ نداریم، حواسمون به نسل‌های بعدی باشه 😊

توضیح: مدل Phi4 روی Ollama هست ولی هنوز اکانت رسمی مایکروسافت ارائه نکرده، مایکروسافت فعلا روی Azure اون نسخه رو گذاشته و به‌زودی روی Ollama هم میاد.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤓136👍1
🎅 چند پیشنهاد برای ۲۰۲۵
این ۵ روز باقیمانده از ۲۰۲۴، هر روز تعدادی پیشنهاد یا ایده، حول یک موضوع مشخص، به اشتراک می‌گذارم، امیدوارم مفید یا الهام‌بخش باشه.

5️⃣ روز تا ۲۰۲۵

⚙️ پیشنهادات شغلی:

*️⃣خوبه تا سالی یک‌بار، مسیر شغلی‌مون رو مرور کنیم. آیا هنوز خوشحالیم؟ هنوز روی همون مسیری هستیم که باید باشیم و دوست داشتیم باشیم؟ «حال خوب» داریم با کارهایی که هر روز انجام می‌دیم؟

*️⃣چه دنبال شغل جدید باشیم چه نباشیم، سالی یکبار یا دو سالی یکبار؛ ۳۰ تا ۵۰ شرح شغلی مشابه خودمون یا پوزیشنی که دوست داریم به دست بیاریم رو از لینکدین جمع کنیم، و چندین بار بخونیم… (یا از ChatGPT بخواهیم مشترکات و پرتکرارها رو بهمون بگه)؛ ناخودآگاه انتظارات «امروز» و «فردای نزدیک» از عنوان شغلیمون رو می‌فهمیم. (من این کار رو طی حداقل ۵ سال گذشته به تعداد زیادی از دوستانی که قصد اپلای کردن شغل (خصوصا وقتی قصد مهاجرت کاری داشتن) پیشنهاد کردم، و به نظرم از اونجایی که مسئله شغل، یه موضوع دو طرفه‌ی عرضه و تقاضا است، وقتی ما برایند انتظارات طرف «تقاضا» رو خوب بشناسیم، می‌تونیم خودمون رو با عنوان طرف «عَرضه»، با توانایی، تخصص متناسب، همسو و آماده کنیم. آیا داریم همسو و هم‌تراز با این صنعت حرکت می‌کنیم؟ یا یه چیز ایرانیزه یا شرکتمونیزه ساختیم؟ )

*️⃣نیم ساعت/یک ساعت وقت بگذاریم و یک تحلیل SWOT از شغلمون روی کاغذ پیاده کنیم (اگر نمی‌دونید SWOT چیه؟ ری‌اکشن ⚙️ تا توضیح بدم)

*️⃣فکر کنیم به جز کسب درآمد از شغلمون، چی کسب کردیم؟ به جز برآورده کردن انتظارات شغلی‌مون، چه ارزش افزوده یا کار جدیدی ما اضافه کردیم به شغلمون؟

موضوع فردا: رفتار فردی و کاری!

💬 نظرتون چیه؟ گپ بزنیم؟ ادامه بدم؟
Please open Telegram to view this post
VIEW IN TELEGRAM
34👍8
🎄 چند پیشنهاد برای ۲۰۲۵ - ۲

این چند روز باقیمانده از ۲۰۲۴، هر روز تعدادی پیشنهاد در یک حوزه مشخص اشتراک به اشتراک می‌گذارم، امیدوارم مفید یا الهام‌بخش باشن.

4️⃣ روز تا ۲۰۲۵؛ پیشنهادات رفتاری:

خود-مشاهده‌گری فعال: خوبه تا در سال آینده هر روز چند دقیقه برای خودمون وقت بذاریم و فکر کنیم امروز کجاها احساس یا رفتاری از خودم سر زد که می‌تونست بهتر باشه یا جایگزین بهتری براش وجود داشت؟ چه چیزی باعث تحریک اون احساس یا رفتار شد؟ به‌ مرور یاد می‌گیریم محرک‌ها رو بشناسیم و واکنش‌های جایگزین براشون داشته باشیم.

بخشندگی در تعاملات: چند روز یک‌بار به صورت هدفمند و «بدون چشم‌داشت»، با حرف زدن، گوش دادن، یا کمک‌های کوچیک، به حال خوب اطرافیانمون کمک کنیم. این بخشندگی نه‌تنها حال بقیه رو بهتر می‌کنه، بلکه ما رو در مسیر رشد احساسی و سلامت روانی نگه می‌داره.

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

تقویت گوش‌دادن فعال: به صورت کاملاً هدفمند گوش بدیم و «وسط حرف» دیگران نپریم، به عکس‌العمل چهره و تُن صداشون توجه کنیم و تلاش کنیم بعد از تموم شدن صحبتشون، قبل از پاسخ‌دادن، چند لحظه مکث کنیم. این کار حتی ارتباطات عادی رو سازنده‌تر و صمیمی‌تر می‌کنه.

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

چند رفتار رایج که می‌تونیم به کم کردنشون یا تداوم نداشتنشون فکر کنیم:

*️⃣ نگاه صفر و صدی به مسایل
*️⃣ بایاس بودن و اصرار روی یک موضوع، تکنولوژی، نظر و...
*️⃣مقاومت به تغییر! اصرار به توجیه!
*️⃣عکس‌العمل‌های عجولانه و احساسی یا از سر یقین بیش‌ از حد به باورهای قبلی
*️⃣عدم انعطاف‌پذیری؛ قرار نیست ما خر و خرما و خدا و خیارشور و خربزه و ۷ تا خ دیگه رو با هم داشته باشیم
*️⃣اجازه بدیم بعضی آدما در موردمون اشتباه فکر کنن! اگر خواستن براشون توضیح می‌دیم
*️⃣ما فقط یکی از هشت میلیارد آدم روی زمین هستیم. همین! اینو باور کنیم :)



موضوع فردا: برنامه‌ریزی یادگیری

💬 نظرتون چیه؟ ادامه بدیم؟
Please open Telegram to view this post
VIEW IN TELEGRAM
👍741
tech-afternoon
اگر نمی‌دونید SWOT چیه؟ ری‌اکشن ⚙️ تا توضیح بدم
📱 به احترام ۱۹ ری‌اکشن ⚙️ ویدیو SWOT ضبط و منتشر شد 🌱😊

اگر دوست داشتید ببینید و اگر هم که نظری داشتید، همینجا یا توی یوتیوب بنویسید 😉

🎬 مشاهده در یوتیوب
⌛️ مدت: ۱۴ دقیقه
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍11
📚 یکی از علایق من کتاب کادو دادنه. و به کسایی که خیلی برام عزیزن، کتابی هدیه می‌دم که خودم خوندمش (منظورم همونیه خوندم و عموما یه جاهاییش یادداشت نوشتم یا خط کشیدم) که عموما با کلی توضیح که طرف مقابل فکر نکنه کتاب مستعمل دارم هدیه می‌دم 😅.

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

امروز دو تا کتابی رو که برای هدیه دادن خریدم، رسید دستم، داشتم فکر می‌کردم کتاب‌‌های فنی و غیر فنی رو که طی این سال‌ها بیشتر هدیه دادم کدوما بودن، اینا به ذهنم اومد:

📔 Continuous Delivery
📔 Clean Code
📔 The Pragmatic Programmer
📔 A Philosophy of Software Design
📔 کتاب‌های دوره‌های رسمی مایکروسافت خصوصا دات‌نت، اس‌کیوال سرور و بیزتاک (از ۲۰۰۵ به بعد)

کتاب‌های غیر فنی:
📗 Start with Why
📗 Skin in the Game
📗 The Black Swan
📗 سرگذشت پنجاه کنشگر اقتصادی ایران (فریدون شیرین‌کام، ایمان فرجام‎نیا)
📗 اراده‌های پولادین (سعید فتح‌اللهی‌راد، حسین شریفی)
📗 مفاهیم اخلاقی (توشیهیکو ایزوتسو)

💬 اگر تو این لیست کتاب مورد علاقه شما هم هست، خوشحال می‌شم بگید چه بخشیش به طور متمایز براتون جالب بوده 😉

اگر هم موردی جالب بود و مردد بودید در شروع کردنش، بگید تا یه خلاصه خیلی کوتاه در حدی که یادم مونده بنویسم
Please open Telegram to view this post
VIEW IN TELEGRAM
102👍1
🤩 چند پیشنهاد برای ۲۰۲۵ - ۳

این چند روز باقیمانده از ۲۰۲۴، هر روز تعدادی پیشنهاد در یک حوزه مشخص اشتراک به اشتراک می‌گذارم، امیدوارم مفید یا الهام‌بخش باشن.

3️⃣ روز تا ۲۰۲۵؛ پیشنهادات یادگیری:

خونه‌تکونی و نقشه‌راه: اگر توی دیسکتون میلیان میلیان گیگابایت ویدیو آموزشی و کتاب الکترونیکی دارین، اول با یک Shift-Delete یا Shift-Command-Delete رهسپار دیار باقی‌ کنیدشون. بعد برای ۶ ماه یا یکسال بعد، نهایتا ۲ یا ۳ عنوان رو که براساس 🔤نقشه‌راهی🔤 که برای خودتون ترسیم و انتخاب کردید نگه دارید. اونم توی یک فلدر روی دسکتاپ که جلو چشم باشه

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

ترکیب مهارت‌های رفتاری با یادگیری تخصصی: بخشی از نقشه‌راه یادگیری رو به مهارت‌های نرم و مهارت‌های رفتاری تخصیص بدین. خفن‌ترین کدنویس جهان اگر نتونه با ۴ نفر تعامل سازنده و هم‌افزا داشته باشه، نمی‌تونه جز اندکی، بضاعت تخصص خودش رو شکوفا کنه. لازم نیست مهارت‌ نرم رو «لیدرشیپ» و… ترجمه کنیم، «هم‌تیمی خوب»، «شنونده خوب»، و… بودن یعنی مهارت‌های نرم‌.

شیر رو از خود گاو بگیریم؛ نه کارخونه پتروشیمی!: شاید کارخونه پتروشیمی هم بتونه مایع سفید رنگ تولید کنه، ولی اون، مایع دستشویی با رایحه وانیله، نه شیر! منظورم اینه که برای یادگیری سعی کنیم از منابع «اصلی» و «اصیل» استفاده کنیم. هر اکانتی شروع به تولید محتوا کرد، اول با دید نقادانه بهش نگاه کنیم تا اصالت محتوا برامون ثابت شه، در ادامه هم دید انتقادی خودمون رو همیشه حفظ کنیم. (خواهش می‌کنم نگاه انتقادی خودتون رو نسبت به تک‌تک کلماتی که من می‌نویسم و فریم‌به‌فریم ویدیویی که ضبط می‌کنم حفظ کنید). هر چی توی فلان بلاگ، فلان اکانت یوتیوب یا… بود صحیح نیست، یا الزاما دقیق نیست. دلیل اینکه من تمام دوران تدریس، کتب رفرنس استفاده کردم همین بوده که حداقل دخل و تصرف و انحراف واردشون بشه.

بازنگری و اعتراف به ندونستن: اگر فکر می‌کنم/می‌کنیم یه چیزی رو خیلی بلدیم، یه تحقیق «اصیل» کنیم که آیا این زنگ هشداریه که اتفاقا خوب بلد نیستیم؟ آماده باشیم چیزایی رو که بلدیم اگر دقیق یا صحیح نیستن، تدقیق یا حتی تدفین کنیم؛ بدون تعصب!

فردا: فراتر از صفر و یک‌ها
💬 ادامه بدیم؟ شما برای ۶ ماه یا یکسال آینده برنامه یادگیری‌تون رو ترسیم کردین؟
Please open Telegram to view this post
VIEW IN TELEGRAM
👍101🔥1
🥴 چند پیشنهاد برای ۲۰۲۵ - ۴

این چند روز باقیمانده از ۲۰۲۴، هر روز تعدادی پیشنهاد در یک حوزه مشخص اشتراک به اشتراک می‌گذارم، امیدوارم مفید یا الهام‌بخش باشن.

2️⃣ روز تا ۲۰۲۵؛ پیشنهاداتی فراتر از صفر و یک (مسئولیت اجتماعی):

🗣️ یه سری کارها هستن مثل یاد گرفتن یه مهارت، «اثر مستقیم» روی ما دارن، ولی بعضی کارها «اثر بازگشتی» دارن، نسبت انعکاسشون هم عموما ≥ ۱ است. خوبه تا ساعات آخر هر سال، یه چیزایی توی رزومه ذهنی‌مون داشته باشیم که تاریخ انقضاءش طولانی‌تر از کدهایی باشه که می‌نویسیم…

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

مشارکت در متن‌باز: اگر برنامه‌نویس هستیم، بخشی از وقت و مهارتمون رو به مشارکت در پروژه‌های اپن‌سورس اختصاص بدیم. حتی در حد به‌روز کردن لایبری‌ها، حتی در حد بهبود مستندات، این کار نه تنها به جامعه برنامه‌نویسی کمک می‌کنه، بلکه باعث رشد خودمون هم میشه. چرا سهیمه‌ی ۱۰ تا pull request برای یک سال رو که عدد بسیار دست‌یافتنی‌ای است برای خودمون هدف‌گذاری نکنیم؟؟

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

زمین: زمین مال همه ما و نسل‌های بعدی‌مون است، توی فرایند طراحی و توسعه محصولات، به مصرف انرژی و تاثیرات زیست‌محیطی توجه کنیم. مثلاً استفاده از تکنولوژی‌ها و الگوریتم‌های بهینه‌تر، کامپایل برای پلتفرم‌های بهینه مثل arm که مصرف انرژی کمتری دارند یا طراحی‌هایی که به سرورهای کمتری نیاز دارن. فکر کردن به رد پای کربنی که پروژه‌مون قراره به جا بگذاره…

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

فردا، روز آخر و خلاصی شما از این پست‌ها: خود!!
💬 دیگه تا اینجا که اومدیم، اگه اجازه بدین فردا رو هم بگیم 😅
Please open Telegram to view this post
VIEW IN TELEGRAM
👍42
🧪تست end-to-end با Playwright

تست End-to-End (E2E) چیه؟
تست End-to-End یا E2E یه نوع تست نرم‌افزاریه که فرآیندهای واقعی کاربر رو از شروع تا پایان شبیه‌سازی می‌کنه تا مطمئن شیم تمام بخش‌های نرم‌افزار (شامل رابط کاربری، پایگاه داده، API‌ها و غیره) به درستی و بدون مشکل با هم کار می‌کنن.
هدف اصلی E2E اینه که رفتار سیستم رو از نگاه کاربر واقعی بررسی کنه و مطمئن بشیم که مسیرهای اصلی و بحرانی کسب‌وکار به درستی عمل می‌کنن.

حالا Microsoft Playwright چیه؟
مایکروسافت سال ۲۰۲۰ فریم‌ورک Playwright رو معرفی کرد که طی این سال‌ها خیلی با اقبال خوبی روبرو شده و به نظر من از Selenium و Cypress خیلی بهتر و سریع‌تره. Playwright این امکان رو می‌ده که اپلیکیشن‌های وب رو توی مرورگرهای مختلف (Chrome، Firefox، Safari و Edge) تست کنیم. از زبون‌های برنامه‌نویسی محبوب مثل JavaScript، TypeScript، Python، Java و NET. هم پشتیبانی می‌کنه.

به راحتی می‌شه براش تست نوشت که عین کاربر صفحات وب رو مرور کنه، نتایج رو بررسی کنه. APIها رو هم همینطور. و به راحتی توی پایپ‌لاین CI/CD تون قرار بدید.

یک مثال خیلی ساده (توی یک صفحه وب جستجو کنه و ببینه نتایج میاد یا نه)

test('search works', async ({ page }) => {
await page.goto('https://example.com');
await page.fill('#search', 'محصول');
await page.click('#submit');
await expect(page.locator('.results')).toBeVisible();
});


یه مثال دیگه ولی REST API به جای صفحه وب (از سرویس reqres که یه API مُفته برای تست، چک می‌کنه API کد ۲۰۰ بده و داده صحیح و کد ۴۰۴ برای آدرس غلط)
*
const { test, expect } = require("@playwright/test");

test.describe("API Testing with Playwright", () => {
const baseurl = "https://reqres.in/api";

test("GET API Request with - Valid 200 Response", async ({ request }) => {
const response = await request.get(`${baseurl}/users/10`);
expect(response.status()).toBe(200);
});

test("GET API Request with - Invalid 404 Response", async ({ request }) => {
const response = await request.get(`${baseurl}/usres/invalid-data`);
expect(response.status()).toBe(404);
});

test("GET Request - Verify User Details", async ({ request }) => {
const response = await request.get(`${baseurl}/users/10`);
const responseBody = JSON.parse(await response.text());
expect(response.status()).toBe(200);
expect(responseBody.data.id).toBe(10);
expect(responseBody.data.first_name).toBe("Byron");
expect(responseBody.data.last_name).toBe("Fields");
expect(responseBody.data.email).toBeTruthy();
});
});


معادل کد 📱:
using Microsoft.Playwright;
using System.Text.Json;

public class PlaywrightApiTests
{
private const string BaseUrl = "https://reqres.in/api";

[Fact]
public async Task GetApiRequest_Valid200Response()
{
using var playwright = await Playwright.CreateAsync();
var request = await playwright.APIRequest.NewContextAsync();

var response = await request.GetAsync($"{BaseUrl}/users/10");
Assert.Equal(200, response.Status);
}

[Fact]
public async Task GetApiRequest_Invalid404Response()
{
using var playwright = await Playwright.CreateAsync();
var request = await playwright.APIRequest.NewContextAsync();

var response = await request.GetAsync($"{BaseUrl}/usres/invalid-data");
Assert.Equal(404, response.Status);
}

[Fact]
public async Task GetRequest_VerifyUserDetails()
{
using var playwright = await Playwright.CreateAsync();
var request = await playwright.APIRequest.NewContextAsync();

var response = await request.GetAsync($"{BaseUrl}/users/10");
Assert.Equal(200, response.Status);

var responseBody = JsonSerializer.Deserialize<JsonDocument>(await response.TextAsync());
var userData = responseBody?.RootElement.GetProperty("data");

Assert.Equal(10, userData.Value.GetProperty("id").GetInt32());
Assert.Equal("Byron", userData.Value.GetProperty("first_name").GetString());
Assert.Equal("Fields", userData.Value.GetProperty("last_name").GetString());
Assert.False(string.IsNullOrEmpty(userData.Value.GetProperty("email").GetString()));
}
}


💬 نظر، سوال؟ E2E دارید؟
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍3
💵 حالا که رفهاب تخفیف ۴۰ درصدی گذاشته، اگر یک کتاب بخرید، اون کتاب چی خواهد بود؟ کامنت کنید 😉
Please open Telegram to view this post
VIEW IN TELEGRAM
🚀 دورهمی آنلاین با موضوع NET Aspire.

یکی از دوستان که توی پروژه جدیدشون از Aspire استفاده کردن، دوست داشتن تا هم یه مروری روی پیاده‌سازی‌شون بشه، هم نکات پرداکشن رو بررسی کنیم. از اونجایی که مثال‌های ویدیو دوم و سوم Aspire مدت‌هاست آماده است ولی به دلیل مشغله‌های پایان سال، و زمانبر بودن ضبط و ادیت به تاخیر افتاده بود؛ تصمیم گرفتم با یه دورهمی این کار رو بکنیم. و بخشی از مطالب هم حول پروژه‌ی ایشون خواهد بود که نمونه واقعی‌تر از مثال‌هاست.

اگر شما هم دغدغه و نکته خاصی دارید لطفا بنویسید

🗓 هفته آینده یکشنبه (۵ ژانویه، ۱۶ دی‌ماه)؛ ساعت ۱۶:۳۰ (به وقت تهران؛ مدت ۱ ساعت)
✍️ ثبت‌نام (ایونت‌های تک‌افترنون هزینه‌ای ندارند)
Please open Telegram to view this post
VIEW IN TELEGRAM
9
tech-afternoon pinned «🚀 دورهمی آنلاین با موضوع NET Aspire. یکی از دوستان که توی پروژه جدیدشون از Aspire استفاده کردن، دوست داشتن تا هم یه مروری روی پیاده‌سازی‌شون بشه، هم نکات پرداکشن رو بررسی کنیم. از اونجایی که مثال‌های ویدیو دوم و سوم Aspire مدت‌هاست آماده است ولی به دلیل…»
🎄 چند پیشنهاد برای ۲۰۲۵ - پایانی

این پنجمین و آخرین سری پیشنهاداته، چند ساعت دیگه ۲۰۲۴ تموم می‌شه و امیدوارم این سری یادداشت‌ها ولو اندک، مفید یا الهام‌بخش بوده باشه.

1️⃣ روز (چند ساعت) تا ۲۰۲۵؛ پیشنهاداتی در مورد خودمون!:

🗣️ در مورد «شغل»، «رفتار»، «یادگیری» و «مسئولیت اجتماعی» پیشنهاداتی نوشتم؛ ولی همه اینا توسط «خود» ما باید محقق بشه؛ وگرنه از پست تلگرامی فراتر نخواهد رفت؛ هزار برابر عمیق‌تر از این پیشنهادات توی فضای مجازی وجود داره، ولی اینکه وضع نرم‌افزار، کار تیمی، تاب‌آوری و تعامل با نظرات متفاوت، جامعه، محیط زیست، توسعه و سیاست و... ما اینه؛ ناشی از خودمونه. پیشنهادات این بخش رو تیتروار می‌نویسم تا در مورد جزئیاتش اگر اشتیاقی بود صحبت کنیم.

تغییر از خودمون شروع می‌شه؛ «پرنسیپ» رکن اصلی پیشرفته.

عمل به جای انتظار.

تحمل و صبر نظرات متفاوت.

هیچ چیز ایده‌آل نیست، ایده‌آل هم نخواهد شد. «حرکت مداوم در مسیر بهبود» مهمه!

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

نکبتی بالاتر از تعصب نداریم، چون حتی جلو اصلاح ریشه بدی‌ها یعنی دروغ رو هم می‌گیره.

🌱 امیدوارم این ۵ روز و پیشنهادها، حمل بر نصیحت یا توهم و تکبر صلاحیت نصیحت، نشده باشه، و فقط پیشنهادات و یادآوری‌هایی که به خودم داشتم رو با شما هم اشتراک گذاشتم تا اگر نظر و اصلاحی دارید به خودم برای بهبود خودم کمک کنید.

ببخشید اگر از موضوعات مورد انتظار از این کانال دور بود.
سال ۲۰۲۵ رو برای همه سالی پر از پیشرفت و سلامتی و شادی آرزو می‌کنم...

🔔 در ضمن دورهمی یکشنبه رو هم اگر دوست داشتید شرکت کنید خوشحال می‌شم ببینمتون 😊
Please open Telegram to view this post
VIEW IN TELEGRAM
9
🧨 بمب‌های خفته در پکیج‌ها!

این چند روز، ۷ تا پروژه پر کاربرد رو کاویدم و گاهن تا لایه‌ی چهارم تودرتو ی وابستگی‌هاشون آسیب‌پذیری امنیتی پیدا کردم. و این در مورد فلان پروژه‌ی گمنام نیست. ویژوال استدیو آسیب‌پذیری‌ها رو نشون می‌ده ولی وقتی تودرتو می‌شن از یه لایه‌ای به پایین کمی کار دشوار می‌شه.

این موضوع در مورد پکیج‌های جاوا اسکریپت و پایتون و گو هم هست. اینو نوشتم تا کمی توجهتون رو به سمت آسیب‌های بالقوه‌ی این‌ها جلب کنم.

مثال دنیای واقعی:

سال ۲۰۲۴؛ XZ Utils Backdoor

نسخه‌های ۵.۶.۰ و ۵.۶.۱ کتابخونه فشرده‌سازی XZ Utils بالاترین درجه آسیب‌پذیری CVSS، یعنی ۱۰ رو به خاطر بکدور تعمدی دریافت کرد که به هکر اجازه می‌داد بدون مجوز به ماشین لینوکسی دسترسی پیدا کنن. با احراز هویت SSH تداخل داشت که باعث می‌شد هکر بتونه به سیستم‌ها نفوذ کنن. ☠️
توزیع‌های مهم لینوکس مثل فدورا، دبیان، اوپن‌سوزه و کالی لینوکس رو درگیر کرد.

فجایع Solarwinds و Log4Shell و MavenGate و... کلی اتفاق دیگه، نمونه‌های خوبی از آسیب خوردن یا آسیب زدن به پروژه‌ها بود.

طبق آمار، بیش از ۵۰ درصد پروژه‌های ما با کتابخونه‌ها و ابزارهای کدباز تولید می‌شه. لطفا بیشتر به این موضوع توجه کنید و اگر بسته‌ای نیاز به به‌روز رسانی داره، زحمتش رو بکشید 😊 اکثر این نمونه‌ها ساده است، سورس رو باز کنید، وابستگی‌ها رو لایه به لایه به‌روزرسانی کنید (شاید تغییرات کوچکی از جنس breaking change نیاز داشته باشه) بعد pull request.
چرا می‌گم آسونه؟ چون در مورد آسیب‌پذیری‌های شناخته شده صحبت می‌کنم. نه اینکه بگردید آسیب‌پذیری پیدا کنید، خود ویژوال استدیو یا SonarQube دقیقا می‌گن کدوم بسته آسیب‌پذیره.

تمرین خوبیه! اعتماد کنید... نمونه خواستید برای تمرین، بهم بگید 😉

#security
Please open Telegram to view this post
VIEW IN TELEGRAM
5