✨ قابلیتهای جدید افزونهی 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 که الان نسخه پیشنمایش است هم تغییرات بزرگی داشته.
مثل اینکه مایکروسافت برای سهمگیری از بازار ابزارهای مرتبط با دیتابیس و بهبود ابزارهای قبلی خودش خیز برداشته!
💬 شما از چی استفاده میکنید؟ ابزار مورد علاقهتون چیه؟!
اگر سیر تغییر رویکرد مایکروسافت رو دنبال کرده باشید، سرعت توسعه و نوآوری توی VS Code به طرز محسوسی سریع و خوشحالکننده است.
حالا اومده خیلی قابلیتهایی که قبلا فقط توی SSMS برای SQL Server بود رو توی افزونه VS Code اضافه کرده.
احتمالا تصاویر گویا است و میبینید که کوئریپلن، و تولید اسکریپت و کلا محیط بصری خیلی بهتر و کاملتری نسبت به نسخههای قبلی توی ورژن جدید داریم.
از طرفی میدونید که Azure Data Studio که بر پایه VS Code توسعه داده شده و کدباز و رایگانه، از MySQL, PostgreSQL, MongoDB, CosmosDB و SQL Server پشتیبانی میکنه (نه به کاملی DataGrip ولی در حال بهبود و تکمیله).
اینا همه در حالیه که SSMS 21 که الان نسخه پیشنمایش است هم تغییرات بزرگی داشته.
مثل اینکه مایکروسافت برای سهمگیری از بازار ابزارهای مرتبط با دیتابیس و بهبود ابزارهای قبلی خودش خیز برداشته!
💬 شما از چی استفاده میکنید؟ ابزار مورد علاقهتون چیه؟!
👌7👍2 2❤1
مفهوم Resiliency یا تابآوری، به توانایی یک سیستم برای بازیابی شرایط پایدار در صورت بروز خطا گفته میشه. حالا این بازیابی میتونی تلاش برای بازیابی باشه، یا انتخاب راه جایگزین. مثل اینکه شما ۲ بار تلاش میکنی از API آبوهوا مقدار دمای فعلی یک منطقه رو بگیری، هر بار با فاصله زمانی ۵ ثانیه API رو صدا میزنی ولی بعد از اینکه پاسخ موفق نمیگیری (تا اینجا به این میگن استراتژی retry) بعد تصمیم میگیری از cache آخرین مقداری که کمتر از ۵ ساعت گذشته وجود داشته رو استفاده کنی که فعلا کار راه بیوفته (استراتژی fallback) یا ... به هر کدوم از این رفتارها برای تداوم کار و مقابله با موانع، میگن resiliency strategy.
کتابخونه Polly محبوبترین در بین داتنتیهاست. و تو دل Aspire هم ازش استفاده شده، برای درک بهتر ویدیوی Aspire که به زودی پابلیش میشه، خوبه یه مرور روی انواع استراتژیها کنیم...
—————————
دو گروه اصلی داریم:
وقتی به کار میرن که یک خطا یا مشکلی رخ داده و سیستم باید به شکلی واکنش نشون بده.
فرضیه: خطاها موقتی هستن و ممکنه با کمی تأخیر و تلاش مجدد برطرف بشن.
در این استراتژی، سیستم تلاش میکنه که یک عملیات ناموفق رو بعد از یک بازهی زمانی مشخص دوباره امتحان کنه. این بازه زمانی میتونه ثابت یا متغیر باشه (مثل Exponential Backoff). مثلاً اگر سرور موقتی قطع شده باشه، با چند بار Retry ممکنه مشکل حل بشه. در Polly، این با “Retry Policy” قابل پیادهسازی است. و تعداد دفعات و بازه زمانی بین هر تلاش به تصمیم ما وابسته است.
فرضیه: وقتی سیستم به شدت دچار مشکل میشه، بهتره سریعاً فرآیندها متوقف بشن به جای اینکه کاربران منتظر بمونن.
چطور کمک میکنه؟ مدار رو قطع میکنه (اجرای درخواستها رو متوقف میکنه) در زمانی که خطاها از حدی مشخص بیشتر میشن (مثل وقتی میفرسته به صف ولی هِی روی هم انباشت میشه و از اون طرف پردازش نمیشن)
شبیه به فیوز برق که اگر بیش از حد فشار وارد بشه، مدار رو قطع میکنه. این استراتژی به سیستم اجازه میده برای مدتی مشخص درخواستها رو به مقصد ارسال نکنه تا از خرابیهای بیشتر جلوگیری بشه. مثلاً در Polly میتونید مدتزمانی که Circuit باز میمونه و شرایط بازگشت به حالت نرمال رو تنظیم کنیم.
فرضیه: خطا تداوم خواهد داشت؛ پس برای پلن B برنامهریزی میکنیم.
چطوری کمک میکنه؟ یک مقدار یا راه حل جایگزین در صورت بروز یا تداوم خطا ارائه میده.
وقتی یک عملیات شکست میخوره، به جای نمایش خطا به کاربر، یک نتیجه جایگزین برمیگرده. مثلاً به جای اینکه پیام “سرور API در دسترس نیست” نمایش داده بشه، میتونید یک مقدار ذخیره شده از کش رو ارائه بدید.
فرضیه: گاهی اوقات برخی مسیرها شاید کند یا حتی ناموفق باشن؛ پس بهتره چندین راه برای رسیدن به هدف در نظر بگیریم، هر کدوم زودتر جواب داد، همون.
چطوری کمک میکنه؟ برای یک کار، چند راه رو تلاش میکنه به طور موازی پی بگیره و منتظر اولین پاسخ موفق میمونه.
در این استراتژی، همزمان چند درخواست به چند مقصد مختلف ارسال میشه و اولین پاسخ موفق به عنوان نتیجه پذیرفته میشه. این کار برای کاهش زمان انتظار و بهبود اطمینانپذیری استفاده میشه.
این استراتژیها برای پیشگیری از بروز مشکلات در سیستم طراحی شدهاند.
فرضیه: بعد از مدت زمانی مشخص، موفقیت بعیده.
چطوری کمک میکنه؟ تضمین میکنه که درخواستها بیشتر از زمان مشخص منتظر نمیمونن.
در این استراتژی، زمان محدودی برای انجام یک عملیات در نظر گرفته میشه. اگر عملیات در این زمان به نتیجه نرسید، سیستم اون رو قطع میکنه. این کار مانع از این میشه که یک درخواست معلق منابع سیستم رو اشغال کنه.
فرضیه: محدود کردن تعداد درخواستهایی که سیستم در یک بازه زمانی مشخص میپذیره (راهی برای کنترل بار ورودی).
چطوری کمک میکنه؟ اجرای درخواستها رو محدود میکنه تا از حد مشخصی فراتر نره.
برای جلوگیری از بار زیاد روی سیستم، این استراتژی تعداد درخواستها در یک بازه زمانی مشخص رو محدود میکنه. مثلاً اگر کاربران زیادی همزمان به سیستم درخواست بفرستن، Rate Limiter میتونه از خرابی جلوگیری کنه.
—————————
ما میتونیم از یک یا ترکیبی از چند استراتژی برای افزایش تابآوری سیستمهامون استفاده کنیم.
🔗 رفرنس جهت مطالعه عمیقتر
Please open Telegram to view this post
VIEW IN TELEGRAM
👏8 3🔥2🙏2🤔1
مفهومی داریم به نام Cargo Cult Practices که به رفتارها یا فرآیندهایی اشاره داره که بهطور «سطحی» شبیه به رفتارهای موفق و موثر هستن، اما «بدون درک عمیقی» از دلیل یا اصول اساسیای که پشت اون رفتارها و انتخابها وجود داره...
ریشه تاریخی: کارگو کالت به رفتارها و آیینهایی گفته میشه که در برخی جوامع، بهویژه در جزایر اقیانوس آرام، بعد از جنگ جهانی دوم شکل گرفته. در طول جنگ، نیروهای نظامی آمریکایی در این جزایر پایگاههایی ساختند و کالاهای مدرن (کارگو) رو با هواپیما به اونجا میبردند. بومیان این جزایر که هرگز چنین فناوریهایی را ندیده بودن، شروع به تقلید از رفتارهای سربازها کردن!! با این باور که این کارها (اداها) باعث جلب کالاهایی شبیه اونایی که نظامیها میآوردن میشه!!
بعد از پایان جنگ و ترک نیروهای نظامی، بومیها به ساخت تجهیزات نمادین مثل باند فرودگاه، برج مراقبت و هواپیماهای چوبی ادامه دادن. حتی لباسهای شبیه به یونیفرم نظامی میپوشیدن و با چوبهای شبیه به رادیو ارتباط برقرار میکردن!
اصطلاح "کارگو کالت" در زمینههای مختلف برای توصیف تقلید ظاهری از یک عمل، بدون درک عمیق از مکانیزمهای واقعی اوها به کار میره، بهویژه در حوزههایی مثل مدیریت و توسعه نرمافزار.
استفاده از فلان معماری یا فلان زبون یا فلان ساختار تیمی چون فلان شرکت استفاده کرده، از همین مصادیقه... توی فرهنگ ما ضربالمثل «مرغی که انجیر میخوره نوکش کجه» مترادف با همینه...
و بعدش:
یلدای همگی مبارک و امیدوارم در کنار خانواده و عزیزانتون سلامت و شاد و موفق باشین 😉
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👏2 2👍1
ورکلودهای داتنت مجموعهای از اجزای اختیاری SDK هستن که برای توسعه انواع خاصی از برنامهها مورد استفاده قرار میگیرن. به زبون سادهتر، به جای نصب یک SDK بزرگ که همه چیز رو شامل بشه، میتونیم فقط اجزای مورد نیاز برای پروژه خودمون را نصب کنیم.
مثال:
توی نسخههای قبل از داتنت ۵، تمام قابلیتها در قالب یک SDK یکپارچه (مونولیتیک) ارائه میشد. این رویکرد مشکلات متعددی داشت:
- حجم زیاد SDK و مشکلات توزیع
- زمان طولانی ساخت محصول
- پیچیدگی توی مدیریت و بهروزرسانی
- مصرف منابع غیرضروری توی محیط CI/CD
مایکروسافت با معرفی ورکلودها، چند هدف کلیدی رو دنبال کرد:
- امکان دانلود انتخابی قابلیتهای مورد نیاز (مثلاً فقط ASP.NET Core یا فقط Xamarin)
- سادهسازی پیکربندی برای محیطهای CI/CD
- ارائه پیامهای خطای مفید هنگام نبود ورکلود مورد نیاز
- قابلیت نصب خودکار ورکلودها بر اساس فایل پروژه
- امکان بهروزرسانی ورکلودها بدون نیاز به نصب نسخه جدید SDK (مثلا aspire رو بهروز کنیم مستقل از سایر SDKها)
ساختار و ترکیببندی
ورکلودها از دو بخش اصلی تشکیل شدهاند:
برای دیدن لیست ورکلودها و انتخاب از بینشون:
dotnet workload search
یا برای آپدیت کردن ورکلودها:
dotnet workload update
یا مثلا وقتی میخواین ورکلود لازم برای ساختن نرمافزار روی تلویزیون سامسونگ مجهز به تایزن رو نصب کنین:
dotnet workload install maui-tizen
طبق برنامه مایکروسافت، در آینده:
یکی از ویژگیهای مهم که از داتنت ۸.۰.۴۰۰ معرفی شد، قابلیت 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
🔥11❤3👍1
از اونجایی که دورهمی بعدیمون در مورد سیستمهای توزیعشده است، مطالب دیروز (workload) و این مطلب (OpenTelemetry) پیشدرآمدی است برای دوستانی که آشنایی کمتری دارن ولی دوست دارن از دورهمی استفاده بیشتری ببرن.
به زبون ساده و تا حد امکان کوتاه، OpenTelemetry رو توضیح دادم و Log, Metric و Trace مرور کردم. اگر دوست داشتید مطالعه کنید (instant view تلگرام دسکتاپ مشکلاتی با فارسی داره که اگر روی دسکتاپ مطالعه میکنید بهتره تا لینک رو باز کنید)
📎 لینک مطلب
Please open Telegram to view this post
VIEW IN TELEGRAM
امین مصباحی
در باب OpenTelemetry
مقدمهحتماً اسم OpenTelemetry (یا همون OTel) رو حول و حوش موضوعات مانیتورینگ و لاگینگ، شنیدین. هرچقدر تنوع کامپوننتها، سرویسها، اپلیکیشنها بیشتر بیشتر بشه؛ یا به زبون ساده سیستم توزیع بشه، لزوم استفاده از یک استاندارد یا مکانیزم فراگیر، اهمیتش بیشتر میشه.…
❤10 3👍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 میکنین؟
لذا طیف وسیعی از ابزارهای اتوماسیون برای کارهای مختلف وجود داره، یکی از مهمترینهاش هم ابزارهای خودکارسازی بیلد و دپلوی است. ابزارهای Build Automation از فایلهای XML که برای استفاده از MS Build سالها پیش میساختیم تا فایلهای Yaml که برای GitHub یا GitLab میسازیم؛ وقتی مراحل بیلد، پیچیده و متعدد میشدن؛ نوشتن، ایرادیابی و مدیریت فایل Yaml سختتر میشه.
حتی توی پروژهها و تیمهای کوچیک هم شاید یادگیریش برای دولوپر تازهکار دشوار باشه.
درسته که افزونههایی بروی سهولت نوشتنشون در دسترس هست؛ ولی بیاین فکر کنیم اگر توی فایل #C با متدها و کلاسهایی که AutoComplete و... خیلی خوبی هم دارن، بهتر نیست؟ خوندن داینامیک مقادیر و تصمیمگیری راحتتر نیست؟ دیباگ کردن راحتتر نیست؟
پروژه Nuke.Build و Cake همینه! یه پروژه رایگان کدباز با لایسنس MIT که با همه CI/CDهای رایج GitHub GitLab CI, Azure Pipelines, Actions و... هم سازگاره.
خیر! nuke با ۳۱۰۰ ستاره در گیتهاب و cake با ۳۹۰۰ ستاره، پروژههای بدی نیستن، برای پروژههای کوچک، و یا جایی که دانش یا نیروی کافی برای DevOps نداریم، و یا نیازهای خاصی داریم که با Yamlنویسی نگهداری و توسعهاش سخت میشه (پایپلاینهای خیلی پویا)، باز هم خوبن. ولی اینکه از فردا روشهای native رو بگذاریم کنار و بدون دلیل منطقی و حسابشده بیوفتیم دنبال اینا هم کار ابلهانهای است
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤3 3
🧠 مروری بر 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ها
✨ اگر دوست دارید این موضوع ادامه بدم:
ریاکشن 🤓
شاید شوخی دور از واقعیتی نباشه که طی این چند سال، اینقدر که همه روی AI تمرکز کردن یا باهاش شوآف کردن، اگر روی پیدا کردن قاتل بروسلی وقت گذاشته بودن حتمن اون نامرد رو دستگیر کرده بودن!
مایکروسافت هم که به لطف سرمایهگذاریهای هوشمندانهای که روی استارتاپها و شرکتهای مستعد داشته، اوضاع خیلی خوبی داره. یادمون نره همونطور که برنامهنویسی وب یا معماری سرویسگرا، ۲۵ سال پیش چیزهای مدرنی بودن ولی الان بدیهی و پیشپا افتاده به شمار میان؛ استفاده از AI توی نرمافزارها هم تا چند وقت دیگه (خیلی خیلی کمتر از ۲۵ سال، حتی کمتر از ۵ سال دیگه) یه موضوع بدیهی خواهد بود.
البته منظورم چپوندن زورکی و شوآف نیست، بلکه چیزی برای تسهیل نیازهای کاربر نهایی و ارتقاء عملکرد خود سیستمه.
کتابخونه Semantic Kernel که فقط هم برای داتنتیها نیست و پایتون و جاوا رو هم پشتیبانی میکنه؛ یک کتابخونهی متنبازه که به عنوان میانافزار (middleware) عمل میکند.
مثلا شما یه نرمافزار سنتی فروشگاه آنلاین لباس داری؛ کاربر میگه برام یه ست لباس مهمونی برای فصل پاییز و سقف قیمت فلان، برای یک خانم ۳۰ ساله با سایز M پیشنهاد کن، این یه متنه، ولی Semantic Kernel این امکان رو میده به راحتی از دل دیتای ساختار یافته دیتابیس، فرض کنید جدولی که نام کالا، قیمت، رنگ و سایز رو داره، کوئری مورد نیاز رو بسازه. چجوری؟ با دیتایی که توی مدل زبانی داره میفهمه رنگهای مناسب با پاییز، یا نوع لباسهای مورد نیاز برای یک مهمانی (شلوار، پیراهن، پالتو، کفش، شالگردن برای پاییز و یک خانم نیازه) اینا رو از دل دیتابیس میکشه بیرون و متن هم از نتیج خروجی که احتمالا یه لیست از آبجکت کالا است بسازه که: فلانیجون اگر اینو اونو اونیکی رو ست کنی برای پاییز خوبه و به بودجهات هم میخوره!
🧞♂️ این یه روزی جادو بود، یه روز رویا بود، یه روز محال بود؛ الان با وجود امکانات ساختاری وکتورها و کتابخونهها به راحتی شدنیه، حتی با تغییرات کم در کدهای فعلی!
این Semantic Kernel در حقیقت یه پُله بین دنیای برنامهنویسی سنتی و مدلهای زبانی بزرگ (LLM).
فعلا هم با زبونهای C#، Python و Java قابل استفاده است. یه لایهی میانی که درخواستهای مدلهای AI رو به توابع تعریفشده توی کد ترجمه میکنه و پاسخها را مدیریت میکنه (تبدیل متن به یه کلاس، و ساخت متن با استفاده از دیتای ساختاریافته).
مدلهای هوش مصنوعی مثل GPT و DALL-E و… تحول بزرگی توی نحوه تعامل ما با نرمافزار ایجاد کردن. اما استفاده از این مدلها توی محیطهای واقعی چالشهایی هم داره:
و Semantic Kernel برای پاسخ به این چالشها طراحی شد؛ و هدفش سادهسازی یکپارچهسازی هوش مصنوعی در پروژههای واقعیه.
- ایجاد رباتها و عاملهای هوشمند: مثل چتباتهایی که بهصورت پویا تصمیم میگیرن یا فرآیندها رو خودکار میکنن.
- یکپارچهسازی آسون با کد موجود: با استفاده از قابلیت Function Calling، میشه مدلهای AI رو به کدهای موجود متصل کرد.
- اتوماسیون فرآیندهای کسبوکار: مثل پردازش خودکار درخواستهای مشتریها یا مدیریت منابع سازمانی.
- مدیریت آسون هوش مصنوعی: فراهم کردن قابلیت مشاهده و نظارت بر عملکرد مدلهای مختلف.
- اتصال به مدلهای مختلف AI (مثل OpenAI، یا مدلهایی که روی ماشین خودتون دارید)
- پشتیبانی از Vector Storeها
ریاکشن 🤓
Please open Telegram to view this post
VIEW IN TELEGRAM
🤓17❤4👍1🤔1 1
پیشدرآمد شروع کار با Semantic Kernel
—————————————————
پیشنوشت:
مسعود دانشپور عزیز، در صدد تهیه ویدیو و مثال آموزشی از Semantic Kernel با استفاده از APIهای AvvalAI است. در نتیجه من پُستهای این موضوع رو طوری تنظیم میکنم که همپوشانی نداشته باشه، و دوستان بتونن با دنبال کردن مطالب دو کانال، طیف وسیعتری از نکات رو در اختیار داشته باشن.
—————————————————
چتجیپیتی، جمینای، Claude یا سرویسهای مشابه، که به صورت بسته ارائه میشن و امکان اجرای مدل بهصورت لوکال رو نداریم. و نهایتا میتونیم با استفاده از API شون بهشون دسترسی داشته باشیم.
اگر دنبال راهکار جایگزین باشیم که مدل رو خودمون هاست کنیم، باید سراغ مدلهای باز بریم، مثل لاما (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
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 رو استفاده کنید.
♻️🌱 نکته محیط زیستی: همه ما در قبال زمین مسئولیم استفاده از مدلهای کوچک زبانی (SLM)ها مثل همین Phi3.5 مصرف انرژی و طبیعتا ردپای کربن بسیار کمتری نسبت به مدلهای بزرگ داره. اگر نیاز به مدل خیلی بزرگ نداریم، حواسمون به نسلهای بعدی باشه 😊
توضیح: مدل Phi4 روی Ollama هست ولی هنوز اکانت رسمی مایکروسافت ارائه نکرده، مایکروسافت فعلا روی Azure اون نسخه رو گذاشته و بهزودی روی Ollama هم میاد.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤓13❤6👍1
این ۵ روز باقیمانده از ۲۰۲۴، هر روز تعدادی پیشنهاد یا ایده، حول یک موضوع مشخص، به اشتراک میگذارم، امیدوارم مفید یا الهامبخش باشه.
موضوع فردا: رفتار فردی و کاری!
Please open Telegram to view this post
VIEW IN TELEGRAM
این چند روز باقیمانده از ۲۰۲۴، هر روز تعدادی پیشنهاد در یک حوزه مشخص اشتراک به اشتراک میگذارم، امیدوارم مفید یا الهامبخش باشن.
موضوع فردا: برنامهریزی یادگیری
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤4 1
tech-afternoon
اگر نمیدونید SWOT چیه؟ ریاکشن ⚙️ تا توضیح بدم
اگر دوست داشتید ببینید و اگر هم که نظری داشتید، همینجا یا توی یوتیوب بنویسید 😉
🎬 مشاهده در یوتیوب
⌛️ مدت: ۱۴ دقیقه
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍1 1
📚 یکی از علایق من کتاب کادو دادنه. و به کسایی که خیلی برام عزیزن، کتابی هدیه میدم که خودم خوندمش (منظورم همونیه خوندم و عموما یه جاهاییش یادداشت نوشتم یا خط کشیدم) که عموما با کلی توضیح که طرف مقابل فکر نکنه کتاب مستعمل دارم هدیه میدم 😅.
کلاسهای ایران یه رسمی داشتم که برخی دورهها (حدود ۵۰٪ شون)، کتابی که مبنای سرفصلهای دوره بود و خودم خونده بودم و خط کشیده بودم رو آخر کلاس میدادم به کسی که به نظرم بیشتر از بقیه تلاش کرده بود و انگیزه داشت. و با اینکه اون نسخهها برام خیلی عزیز بودن با علاقه و رغبت تمام هدیه میدادم، و برای خودم هم مشوقی شده بود که هر دوره کتاب مرجع رو کامل مرور کنم دوباره.
امروز دو تا کتابی رو که برای هدیه دادن خریدم، رسید دستم، داشتم فکر میکردم کتابهای فنی و غیر فنی رو که طی این سالها بیشتر هدیه دادم کدوما بودن، اینا به ذهنم اومد:
📔 Continuous Delivery
📔 Clean Code
📔 The Pragmatic Programmer
📔 A Philosophy of Software Design
📔 کتابهای دورههای رسمی مایکروسافت خصوصا داتنت، اسکیوال سرور و بیزتاک (از ۲۰۰۵ به بعد)
کتابهای غیر فنی:
📗 Start with Why
📗 Skin in the Game
📗 The Black Swan
📗 سرگذشت پنجاه کنشگر اقتصادی ایران (فریدون شیرینکام، ایمان فرجامنیا)
📗 ارادههای پولادین (سعید فتحاللهیراد، حسین شریفی)
📗 مفاهیم اخلاقی (توشیهیکو ایزوتسو)
💬 اگر تو این لیست کتاب مورد علاقه شما هم هست، خوشحال میشم بگید چه بخشیش به طور متمایز براتون جالب بوده 😉
اگر هم موردی جالب بود و مردد بودید در شروع کردنش، بگید تا یه خلاصه خیلی کوتاه در حدی که یادم مونده بنویسم
کلاسهای ایران یه رسمی داشتم که برخی دورهها (حدود ۵۰٪ شون)، کتابی که مبنای سرفصلهای دوره بود و خودم خونده بودم و خط کشیده بودم رو آخر کلاس میدادم به کسی که به نظرم بیشتر از بقیه تلاش کرده بود و انگیزه داشت. و با اینکه اون نسخهها برام خیلی عزیز بودن با علاقه و رغبت تمام هدیه میدادم، و برای خودم هم مشوقی شده بود که هر دوره کتاب مرجع رو کامل مرور کنم دوباره.
امروز دو تا کتابی رو که برای هدیه دادن خریدم، رسید دستم، داشتم فکر میکردم کتابهای فنی و غیر فنی رو که طی این سالها بیشتر هدیه دادم کدوما بودن، اینا به ذهنم اومد:
📔 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
❤10 2👍1
این چند روز باقیمانده از ۲۰۲۴، هر روز تعدادی پیشنهاد در یک حوزه مشخص اشتراک به اشتراک میگذارم، امیدوارم مفید یا الهامبخش باشن.
فردا: فراتر از صفر و یکها
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤1🔥1
این چند روز باقیمانده از ۲۰۲۴، هر روز تعدادی پیشنهاد در یک حوزه مشخص اشتراک به اشتراک میگذارم، امیدوارم مفید یا الهامبخش باشن.
فردا، روز آخر و خلاصی شما از این پستها: خود!!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤2
تست 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()));
}
}
Please open Telegram to view this post
VIEW IN TELEGRAM
یکی از دوستان که توی پروژه جدیدشون از Aspire استفاده کردن، دوست داشتن تا هم یه مروری روی پیادهسازیشون بشه، هم نکات پرداکشن رو بررسی کنیم. از اونجایی که مثالهای ویدیو دوم و سوم Aspire مدتهاست آماده است ولی به دلیل مشغلههای پایان سال، و زمانبر بودن ضبط و ادیت به تاخیر افتاده بود؛ تصمیم گرفتم با یه دورهمی این کار رو بکنیم. و بخشی از مطالب هم حول پروژهی ایشون خواهد بود که نمونه واقعیتر از مثالهاست.
اگر شما هم دغدغه و نکته خاصی دارید لطفا بنویسید
🗓 هفته آینده یکشنبه (۵ ژانویه، ۱۶ دیماه)؛ ساعت ۱۶:۳۰ (به وقت تهران؛ مدت ۱ ساعت)
✍️ ثبتنام (ایونتهای تکافترنون هزینهای ندارند)
Please open Telegram to view this post
VIEW IN TELEGRAM
Google Docs
وبینار بررسی داتنت اَسپایر
از توسعه تا رهانش
❤9
tech-afternoon pinned «✨ 🚀 دورهمی آنلاین با موضوع NET Aspire. یکی از دوستان که توی پروژه جدیدشون از Aspire استفاده کردن، دوست داشتن تا هم یه مروری روی پیادهسازیشون بشه، هم نکات پرداکشن رو بررسی کنیم. از اونجایی که مثالهای ویدیو دوم و سوم Aspire مدتهاست آماده است ولی به دلیل…»
این پنجمین و آخرین سری پیشنهاداته، چند ساعت دیگه ۲۰۲۴ تموم میشه و امیدوارم این سری یادداشتها ولو اندک، مفید یا الهامبخش بوده باشه.
🌱 امیدوارم این ۵ روز و پیشنهادها، حمل بر نصیحت یا توهم و تکبر صلاحیت نصیحت، نشده باشه، و فقط پیشنهادات و یادآوریهایی که به خودم داشتم رو با شما هم اشتراک گذاشتم تا اگر نظر و اصلاحی دارید به خودم برای بهبود خودم کمک کنید.
ببخشید اگر از موضوعات مورد انتظار از این کانال دور بود.
سال ۲۰۲۵ رو برای همه سالی پر از پیشرفت و سلامتی و شادی آرزو میکنم...
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
این چند روز، ۷ تا پروژه پر کاربرد رو کاویدم و گاهن تا لایهی چهارم تودرتو ی وابستگیهاشون آسیبپذیری امنیتی پیدا کردم. و این در مورد فلان پروژهی گمنام نیست. ویژوال استدیو آسیبپذیریها رو نشون میده ولی وقتی تودرتو میشن از یه لایهای به پایین کمی کار دشوار میشه.
این موضوع در مورد پکیجهای جاوا اسکریپت و پایتون و گو هم هست. اینو نوشتم تا کمی توجهتون رو به سمت آسیبهای بالقوهی اینها جلب کنم.
مثال دنیای واقعی:
سال ۲۰۲۴؛ 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