Forwarded from Python Hints
وقتی ChatGPT 3.5 معرفی شد گفتم که نیروهای جونیور بسیار کار سختی برای یافتن شغل خواهند داشت.
الان به اون وضعیت رسیده؛ طوری که نیروی جونیور توی خیلی از زمینهها تبدیل شده به سنگ جلوی پای نیروهای سنیور متاسفانه.
اما یک ویژگی خیلی خوب داشت وجود جونیورها؛ اونم معرفی استکهای جدید تکنولوژیهای بهتر و تکنیکهای بهبود یافته بود.
متأسفانه این موضوع توی ایران دیگه صادق نیست؛ ندیدم (از کسی هم نشنیدم) جونیوری که
با این وضعیت قطعاً موقعیتهای شغلی
الان به اون وضعیت رسیده؛ طوری که نیروی جونیور توی خیلی از زمینهها تبدیل شده به سنگ جلوی پای نیروهای سنیور متاسفانه.
اما یک ویژگی خیلی خوب داشت وجود جونیورها؛ اونم معرفی استکهای جدید تکنولوژیهای بهتر و تکنیکهای بهبود یافته بود.
متأسفانه این موضوع توی ایران دیگه صادق نیست؛ ندیدم (از کسی هم نشنیدم) جونیوری که
experiment های شخصی با ابزارهای مختلف که شاید مرسوم هم نباشند انجام داده باشه (علاوه بر استک اصلی) همگی همون استک اصلی رو یاد میگیرند و به محض استخدام دیگه حتی برای پیشرفت خودشون هم زحمت نمیکشند.با این وضعیت قطعاً موقعیتهای شغلی
Junior ها حذف خواهد شد؛ حتی در ایران.Forwarded from Python Hints
Python Hints
وقتی ChatGPT 3.5 معرفی شد گفتم که نیروهای جونیور بسیار کار سختی برای یافتن شغل خواهند داشت. الان به اون وضعیت رسیده؛ طوری که نیروی جونیور توی خیلی از زمینهها تبدیل شده به سنگ جلوی پای نیروهای سنیور متاسفانه. اما یک ویژگی خیلی خوب داشت وجود جونیورها؛ اونم…
این موضوع واقعاً گرد ناامیدی نیست، یک نیمنگاه به آمار اخراجها یا لیست مشاغلی که دیگه نیروی جونیور نمیگیرند بندازید (البته بعضیها زدن جونیور ولی دقت کنید لیست مهارتها رو ببینید.)
مثال بکند میزنم:
قبلاً جونیور رو میاوردند که سنیور وقت آزادتری داشته باشه برای طراحی سیستم و بررسی بخشهای مختلف و چیزای مهمتر؛ یعنی شرکتی نبود که به سنیور بگه یک لاگین بزن، یک صفحه بزنم اسم کاربر رو برگردونه و ...
اینها تسکهای جونیور بود و سنیور نهایتاً review میکرد؛ الان تمام اینکارهارو یک الگوریتم هوش مصنوعی میکنه، سنیور در لحظه مسئله رو میشکنه و از AI میپرسه کد رو تحویل میگیره و کپی و تمام ...
همین مسیر رو ادامه میده و در نهایت حالات مختلف تست نویسی که به ذهنش میرسه رو هم دونه دونه از AI میخواد بنویسه بازم دابل چک میشه و تمام.
بعد هم وقتش رو میذاره روی تسکهای اصلی؛ طراحی سیستم، طراحی دیتابیس و ... زیر بار بردن پروژه
تستهای مختلف خارج شدن بخشهای مختلف سیستم از دسترس و ...
حالا شما بیا به من بگو من جونیور هستم، جنگو و جنگو رست و پستگرس رو بلدم.
اولین سوالاتی که توی ذهن من میاد:
سلری چطور ؟ کار با redis چی ؟ تست نویسی چطور ؟ پروفایلینگ چی میشه پس ؟ لاگ نویسی خوب چی ؟ (دوتا پست قبلتر یک مشکل رو مثال زدم و قدیما یک آموزش گذاشتم) و ...
اگر شما نتونی اینکارها رو انجام بدی و نشناسی؛ خب تمام مدلهای AI از شما بهتر کد میزنند و وقت کمتری هم میگیره اگر قرار باشه من هی برم سراغش و بهش بگم چیکار کنه و چطوری بزن و ...
دو گروه اینجا بهشون بر میخوره (توی آمارهای مختلف هم همین رو نشون داده؛ به دیتاهای آمریکای شمالی نگاه کنید) :
۱- پکیج فروشها: دیگه پکیجی که فقط جنگو یاد بده بدون پروژهای که استاندارد باشه بیارزش میشه و کاسبی خراب (این نیروها استخدام نمیشوند و کمتر کسی سراغ این آموزشها میره)
۲- افرادی که شغل برنامهنویسی رو برای راحتی استفاده کردند؛ جدی میگم بسیار شنیدم که میگن بابا کار شما که چیزی نیست ۸ ساعت پشت کامپیوتر میشینی بعدم میری خونه ۱۲ ساعت عشق و حال و پارتی و ....
والا ما یک مهمونی هم میخوایم بریم باید ۷ روز قبل خبر داشته باشیم که بتونیم اون ۴-۵ ساعت مهمونی رو توی ۷ روز جبران کنیم تسک عقب افتاده نداشته باشیم.
چرا اینارو مجدداً اینجا میگم:
من از آموزش دادن به کسی سودی نمیبرم، هرکسی هم با من کار کرده میدونه تمام دانشم تمام وقت در دسترس تمام نیروهای زیردستم هست، هیچ ترسی ازینکه کسی جام رو بگیره ندارم و ازین موضوع و رشد کردن نیروهام بسیار لذت میبرم.
برای همین بجای اینکه بگم آقای X خانم Y بیاید برنامهنویسی یاد بگیرید ماهی ۲۰۰ میلیون درآمد دارید (دیدی اینو میگه بعد پکیج آموزشی ۳۰۰ هزارتومنی میذاره) میگم این مسیر سختیهاش زیاد شده، دیگه فقط با سینتکس یاد گرفتن نمیتونید شغل پیدا کنید، کسی که الان شروع میکنه از صفر حداقل ۲ سال وقت میذاره. اگر قرار نیست جدی بگیرید برنامهنویسی رو پیشنهاد میکنم برید دنبال کار مورد علاقتون.
مکانیک - برق کار - آشپز - باریستا و ... همگی مشاغل کاملاً قابل احترام هست و توی ۲ سال وقتی علاقه هم باشه قطعاً موفق تر خواهید بود.
در نهایت، این متن باید به شمایی که برنامهنویسی رو انتخاب کردید انگیزه بده که برنامهنویسی رو جدی بگیرید و از وقت اینستاگرام و پارتی و ... بزنید و روی تخصص تمرکز کنید.
اگر نه که رشته یا تخصص رو اشتباه انتخاب کردید.
مثال بکند میزنم:
قبلاً جونیور رو میاوردند که سنیور وقت آزادتری داشته باشه برای طراحی سیستم و بررسی بخشهای مختلف و چیزای مهمتر؛ یعنی شرکتی نبود که به سنیور بگه یک لاگین بزن، یک صفحه بزنم اسم کاربر رو برگردونه و ...
اینها تسکهای جونیور بود و سنیور نهایتاً review میکرد؛ الان تمام اینکارهارو یک الگوریتم هوش مصنوعی میکنه، سنیور در لحظه مسئله رو میشکنه و از AI میپرسه کد رو تحویل میگیره و کپی و تمام ...
همین مسیر رو ادامه میده و در نهایت حالات مختلف تست نویسی که به ذهنش میرسه رو هم دونه دونه از AI میخواد بنویسه بازم دابل چک میشه و تمام.
بعد هم وقتش رو میذاره روی تسکهای اصلی؛ طراحی سیستم، طراحی دیتابیس و ... زیر بار بردن پروژه
تستهای مختلف خارج شدن بخشهای مختلف سیستم از دسترس و ...
حالا شما بیا به من بگو من جونیور هستم، جنگو و جنگو رست و پستگرس رو بلدم.
اولین سوالاتی که توی ذهن من میاد:
سلری چطور ؟ کار با redis چی ؟ تست نویسی چطور ؟ پروفایلینگ چی میشه پس ؟ لاگ نویسی خوب چی ؟ (دوتا پست قبلتر یک مشکل رو مثال زدم و قدیما یک آموزش گذاشتم) و ...
اگر شما نتونی اینکارها رو انجام بدی و نشناسی؛ خب تمام مدلهای AI از شما بهتر کد میزنند و وقت کمتری هم میگیره اگر قرار باشه من هی برم سراغش و بهش بگم چیکار کنه و چطوری بزن و ...
دو گروه اینجا بهشون بر میخوره (توی آمارهای مختلف هم همین رو نشون داده؛ به دیتاهای آمریکای شمالی نگاه کنید) :
۱- پکیج فروشها: دیگه پکیجی که فقط جنگو یاد بده بدون پروژهای که استاندارد باشه بیارزش میشه و کاسبی خراب (این نیروها استخدام نمیشوند و کمتر کسی سراغ این آموزشها میره)
۲- افرادی که شغل برنامهنویسی رو برای راحتی استفاده کردند؛ جدی میگم بسیار شنیدم که میگن بابا کار شما که چیزی نیست ۸ ساعت پشت کامپیوتر میشینی بعدم میری خونه ۱۲ ساعت عشق و حال و پارتی و ....
والا ما یک مهمونی هم میخوایم بریم باید ۷ روز قبل خبر داشته باشیم که بتونیم اون ۴-۵ ساعت مهمونی رو توی ۷ روز جبران کنیم تسک عقب افتاده نداشته باشیم.
چرا اینارو مجدداً اینجا میگم:
من از آموزش دادن به کسی سودی نمیبرم، هرکسی هم با من کار کرده میدونه تمام دانشم تمام وقت در دسترس تمام نیروهای زیردستم هست، هیچ ترسی ازینکه کسی جام رو بگیره ندارم و ازین موضوع و رشد کردن نیروهام بسیار لذت میبرم.
برای همین بجای اینکه بگم آقای X خانم Y بیاید برنامهنویسی یاد بگیرید ماهی ۲۰۰ میلیون درآمد دارید (دیدی اینو میگه بعد پکیج آموزشی ۳۰۰ هزارتومنی میذاره) میگم این مسیر سختیهاش زیاد شده، دیگه فقط با سینتکس یاد گرفتن نمیتونید شغل پیدا کنید، کسی که الان شروع میکنه از صفر حداقل ۲ سال وقت میذاره. اگر قرار نیست جدی بگیرید برنامهنویسی رو پیشنهاد میکنم برید دنبال کار مورد علاقتون.
مکانیک - برق کار - آشپز - باریستا و ... همگی مشاغل کاملاً قابل احترام هست و توی ۲ سال وقتی علاقه هم باشه قطعاً موفق تر خواهید بود.
در نهایت، این متن باید به شمایی که برنامهنویسی رو انتخاب کردید انگیزه بده که برنامهنویسی رو جدی بگیرید و از وقت اینستاگرام و پارتی و ... بزنید و روی تخصص تمرکز کنید.
اگر نه که رشته یا تخصص رو اشتباه انتخاب کردید.
به نظرم این مطلب بالا خیلی از سوالات در مورد ورود هوش مصنوعی و نابود کردن خیلی از شغلارو جواب بده و خوب درنتیجه باید بفهمیم که روند عوض شده پس قطعا ماهم باید روندمون رو عوض کنیم و به جهان و آینده شغلیمون حداقل طور دیگه بنگریم:))))
#تلنگر
#تلنگر
👍3
Forwarded from Ninja Learn | نینجا لرن
جنگو کنده، پس نباید استفاده کنیم؟ 🙂↔️
یکی از بحثهای همیشگی توی گروه های جنگو اینه که "جنگو کنده، پس بریم سمت FastAPI یا Go یا ...". این حرفو زیاد شنیدم، خودمم یه زمانی فکر میکردم سرعت، همهچیزه ولی بیاین یه بار منطقی بررسی کنیم، بدون تعصب.
چرا میگن جنگو کنده؟
خب راستشو بخواین، جنگو واقعا کنده (نسبت به فریمورکهای async بیس مثل FastAPI و زبانهای کامپایلری مثل Go که توی I/O bound حرف اولو میزنن). ولی چرا؟
جنگو سینکروسه 🥸
جنگو از اساس برای وباپلیکیشنهای سنتی طراحی شده(طبیعیم هست چون ۲۰ سال پیش ساخته شد اون موقع مفهومی به اسم async به این صورت نبود).
ولی فریمورکهایی مثل FastAPI میتونن همزمان چند درخواست رو مدیریت کنن (به لطف async).
Overhead بالای ORM 🏋️♂️
ORM جنگو سنگینه. هر کوئری که میزنی، کلی پردازش اضافه انجام میده تا کارتو راحت کنه، ولی همین باعث میشه کندتر از ORMهای سبکتر باشه.
Middleware و Request Cycle پیچیدهتره 🌀
جنگو یه سری پردازشهای اضافه برای هر درخواست انجام میده (مانند middleware ها، سیگنالها، template rendering و ...)، که باعث میشه به طور طبیعی کمی کندتر باشه.
پس چرا بازم از جنگو استفاده کنیم؟
حالا که جنگو کنده، یعنی نباید سمتش بریم؟ نه بابا بذار تجربه خودمو بگم.
1⃣ سرعت، همیشه مهمترین فاکتور نیست
اکثر پروژهها، گلوگاه سرعت، فریمورک نیست، بلکه دیتابیس، شبکه، و لاجیکهای بیزینسی هستن. یه اپلیکیشن CRUD ساده که روزی ۱۰۰۰ تا درخواست داره، با FastAPI یا جنگو، تفاوت محسوسی نداره.
2⃣ توسعه سریعتر = زمان و پول بیشتر
جنگو کلی چیز آماده داره. سیستم مدیریت کاربر، فرمها، ORM، ادمین پنل، و کلی ماژول دیگه. این یعنی تو به جای ساختن همهچی از صفر، فقط تمرکزت روی بیزینس لاجیکه. توسعه سریعتر = هزینه کمتر.
3⃣ امنیت، یکپارچگی، و قابلیت اطمینان
جنگو به طور پیشفرض مقاوم در برابر حملات XSS، CSRF، SQL Injection و غیرهست. ولی FastAPI؟ باید خودت امنیت رو درست کنی و Middleware بنویسی، که اگه اشتباه کنی، فاجعه میشه
کی بریم سمت FastAPI یا Go یا هرچیز سریع؟
1⃣ وقتی واقعا به Async نیاز داری
اگه داری یه چتاپ، وبساکت، یا یه سیستم پردازش سنگین با درخواستهای همزمان بالا مینویسی، FastAPI و Go گزینههای بهتری هستن.
2⃣ وقتی هر میلیثانیه مهمه
توی سرویسهای real-time مثل سیستمهای تریدینگ، گیمینگ، یا پردازش داده سنگین، Go و Rust گزینههای بهتری هستن، چون کامپایل میشن و خیلی سریعتر از پایتون اجرا میشن.
پس چی کار کنیم؟
سرعت، همه چیز نیست، بلکه بستگی داره که چه چیزی برات مهمتره و نیاز داری بهش
➖➖➖➖➖➖➖➖➖
یکی از بحثهای همیشگی توی گروه های جنگو اینه که "جنگو کنده، پس بریم سمت FastAPI یا Go یا ...". این حرفو زیاد شنیدم، خودمم یه زمانی فکر میکردم سرعت، همهچیزه ولی بیاین یه بار منطقی بررسی کنیم، بدون تعصب.
چرا میگن جنگو کنده؟
خب راستشو بخواین، جنگو واقعا کنده (نسبت به فریمورکهای async بیس مثل FastAPI و زبانهای کامپایلری مثل Go که توی I/O bound حرف اولو میزنن). ولی چرا؟
جنگو سینکروسه 🥸
جنگو از اساس برای وباپلیکیشنهای سنتی طراحی شده(طبیعیم هست چون ۲۰ سال پیش ساخته شد اون موقع مفهومی به اسم async به این صورت نبود).
ولی فریمورکهایی مثل FastAPI میتونن همزمان چند درخواست رو مدیریت کنن (به لطف async).
Overhead بالای ORM 🏋️♂️
ORM جنگو سنگینه. هر کوئری که میزنی، کلی پردازش اضافه انجام میده تا کارتو راحت کنه، ولی همین باعث میشه کندتر از ORMهای سبکتر باشه.
Middleware و Request Cycle پیچیدهتره 🌀
جنگو یه سری پردازشهای اضافه برای هر درخواست انجام میده (مانند middleware ها، سیگنالها، template rendering و ...)، که باعث میشه به طور طبیعی کمی کندتر باشه.
پس چرا بازم از جنگو استفاده کنیم؟
حالا که جنگو کنده، یعنی نباید سمتش بریم؟ نه بابا بذار تجربه خودمو بگم.
1⃣ سرعت، همیشه مهمترین فاکتور نیست
اکثر پروژهها، گلوگاه سرعت، فریمورک نیست، بلکه دیتابیس، شبکه، و لاجیکهای بیزینسی هستن. یه اپلیکیشن CRUD ساده که روزی ۱۰۰۰ تا درخواست داره، با FastAPI یا جنگو، تفاوت محسوسی نداره.
2⃣ توسعه سریعتر = زمان و پول بیشتر
جنگو کلی چیز آماده داره. سیستم مدیریت کاربر، فرمها، ORM، ادمین پنل، و کلی ماژول دیگه. این یعنی تو به جای ساختن همهچی از صفر، فقط تمرکزت روی بیزینس لاجیکه. توسعه سریعتر = هزینه کمتر.
3⃣ امنیت، یکپارچگی، و قابلیت اطمینان
جنگو به طور پیشفرض مقاوم در برابر حملات XSS، CSRF، SQL Injection و غیرهست. ولی FastAPI؟ باید خودت امنیت رو درست کنی و Middleware بنویسی، که اگه اشتباه کنی، فاجعه میشه
کی بریم سمت FastAPI یا Go یا هرچیز سریع؟
1⃣ وقتی واقعا به Async نیاز داری
اگه داری یه چتاپ، وبساکت، یا یه سیستم پردازش سنگین با درخواستهای همزمان بالا مینویسی، FastAPI و Go گزینههای بهتری هستن.
2⃣ وقتی هر میلیثانیه مهمه
توی سرویسهای real-time مثل سیستمهای تریدینگ، گیمینگ، یا پردازش داده سنگین، Go و Rust گزینههای بهتری هستن، چون کامپایل میشن و خیلی سریعتر از پایتون اجرا میشن.
پس چی کار کنیم؟
اگه سرعت برات مهمه: Go بزن Java بزن یا ...
اگه یه API سبک و سریع لازم داری: FastAPI بزن
اگه میخوای سریع یه اپلیکیشن کامل و امن بالا بیاری: Django بهترین گزینهست
سرعت، همه چیز نیست، بلکه بستگی داره که چه چیزی برات مهمتره و نیاز داری بهش
خوشحال میشم نظرتون رو بشنوم
تو کامنتای همین پست بگید 👇
#️⃣ #programming #django #backend
➖➖➖➖➖➖➖➖➖
🥷 CHANNEL | GROUP
👍1
Forwarded from Linux Zone | لینوکس زون
چرا میگن بگیم "گنو/لینوکس" و نگیم "لینوکس"؟
با یه پست جدید در خدمتتونیم 😊
یکی از صحبتهایی که همیشه بین حرفهای و تازهکارا شکل میگیره اینه که نباید بگیم
لینوکس بلکه باید بگیم گنو/لینوکس.
خب چرا؟
بیاید برگردیم به 1983، زمانی که گنو (GNU) به عنوان یه پروژه اوپن سورس توسط ریچارد استالمن ایجاد شد. هدف اصلیشونم ساخت سیستم عاملی بود که سورس کد مشخص داشته باشه همچنین متن باز، آزاد، سریع و ایمنی باشه.
پروژه گنو شروع کرد به ساختن بخشهای مختلف سیستم عامل، و خیلی از ابزارها و چیزای مهمی که هنوز بسیار بسیار مهم هستن، مثلا GCC، Bash، emacs، coreutils
اینایی که گفتیم چنتا نمونه از چیزایی بودن که پروژه گنو ساخت.
مثلا coreutils کامندها و دستورات بیسیکی کار با فایلها رو شامل میشه. کامند ls و cp و rm و ... از همین coreutils هستن.
خلاصه که خیلی چیزا ساختن، ولی همچنان یه مشکلی بود...
کرنل که عملا هسته سیستم عامل بود رو نداشتن و کرنلهای موجود رو هم استفاده نکردن به دلایل دیگه.
میرسیم به 1991، یه دانشجوی فنلاندی به اسم لینوس توروالدز میاد و یه کرنل میسازه و توجه پروژه گنو جمع میشه به این کرنل، یه کرنل اوپن سورس و رایگان که همین قضیه هم باعث میشه جای خالی کرنل توسظ لینوکس پر بشه.
وایسا ببینم، مگه لینوکس سیستم عامل نبود؟
خب باید بگم نه :)))
لینوکس در اصل یه کرنله.
در نهایت ابزارهای گنو و کرنل لینوکس ترکیب میشن و گنو/لینوکس متولد میشه.
با ترکیب این دوتا، اولین توزیع گنو/لینوکسی به وجود میاد تو سال 1993 و اسمشم میشه Slackware
احتمالا خیلیا نمیشناسنش ولی یه نام آشنا در همین زمان به وجود میاد که قطعا میدونم میشناسید :)
و دبیان متولد میشه 😄
پس اگر بگیم لینوکس، عملا داریم بخش عظیمی از سیستم عامل رو که گنو تشکیل میده رو زیر سوال میبریم و بیخیال زحماتش میشیم.
یه سوال دیگه هم پیش میاد:
چرا گنو خودش کرنل ننوشت؟
در اصل گنو هم یه کرنل داره!!
یه میکرو کرنل به اسم Mach که فانکشنالیتیهای اصلی و هسته رو انجام میده و hurd هم در اصل چیزای high level تر رو انجام میده.
اما خب باید بگم که اگه پشت گوشتون رو دیدید کرنل کامل hurd رو هم خواهید دید 😁
حدود 30 ساله که داره توسعه پیدا میکنه و هنوزم بدرد استفاده نمیخوره و جای کار داره.
و این بود داستان توسعه لینوکس، گنو، و قضیه نامگذاری گنو/لینوکس که بهش پرداختیم.
امیدوارم روز و شب خوبی داشته باشید
با یه قلب خوشگل خوشحالمون کن 🫡❤️
➖➖➖➖➖➖➖➖➖➖
با یه پست جدید در خدمتتونیم 😊
یکی از صحبتهایی که همیشه بین حرفهای و تازهکارا شکل میگیره اینه که نباید بگیم
لینوکس بلکه باید بگیم گنو/لینوکس.
خب چرا؟
بیاید برگردیم به 1983، زمانی که گنو (GNU) به عنوان یه پروژه اوپن سورس توسط ریچارد استالمن ایجاد شد. هدف اصلیشونم ساخت سیستم عاملی بود که سورس کد مشخص داشته باشه همچنین متن باز، آزاد، سریع و ایمنی باشه.
پروژه گنو شروع کرد به ساختن بخشهای مختلف سیستم عامل، و خیلی از ابزارها و چیزای مهمی که هنوز بسیار بسیار مهم هستن، مثلا GCC، Bash، emacs، coreutils
اینایی که گفتیم چنتا نمونه از چیزایی بودن که پروژه گنو ساخت.
مثلا coreutils کامندها و دستورات بیسیکی کار با فایلها رو شامل میشه. کامند ls و cp و rm و ... از همین coreutils هستن.
خلاصه که خیلی چیزا ساختن، ولی همچنان یه مشکلی بود...
کرنل که عملا هسته سیستم عامل بود رو نداشتن و کرنلهای موجود رو هم استفاده نکردن به دلایل دیگه.
میرسیم به 1991، یه دانشجوی فنلاندی به اسم لینوس توروالدز میاد و یه کرنل میسازه و توجه پروژه گنو جمع میشه به این کرنل، یه کرنل اوپن سورس و رایگان که همین قضیه هم باعث میشه جای خالی کرنل توسظ لینوکس پر بشه.
وایسا ببینم، مگه لینوکس سیستم عامل نبود؟
خب باید بگم نه :)))
لینوکس در اصل یه کرنله.
در نهایت ابزارهای گنو و کرنل لینوکس ترکیب میشن و گنو/لینوکس متولد میشه.
با ترکیب این دوتا، اولین توزیع گنو/لینوکسی به وجود میاد تو سال 1993 و اسمشم میشه Slackware
احتمالا خیلیا نمیشناسنش ولی یه نام آشنا در همین زمان به وجود میاد که قطعا میدونم میشناسید :)
و دبیان متولد میشه 😄
پس اگر بگیم لینوکس، عملا داریم بخش عظیمی از سیستم عامل رو که گنو تشکیل میده رو زیر سوال میبریم و بیخیال زحماتش میشیم.
یه سوال دیگه هم پیش میاد:
چرا گنو خودش کرنل ننوشت؟
در اصل گنو هم یه کرنل داره!!
یه میکرو کرنل به اسم Mach که فانکشنالیتیهای اصلی و هسته رو انجام میده و hurd هم در اصل چیزای high level تر رو انجام میده.
اما خب باید بگم که اگه پشت گوشتون رو دیدید کرنل کامل hurd رو هم خواهید دید 😁
حدود 30 ساله که داره توسعه پیدا میکنه و هنوزم بدرد استفاده نمیخوره و جای کار داره.
و این بود داستان توسعه لینوکس، گنو، و قضیه نامگذاری گنو/لینوکس که بهش پرداختیم.
امیدوارم روز و شب خوبی داشته باشید
با یه قلب خوشگل خوشحالمون کن 🫡❤️
#⃣#gnome #linux
➖➖➖➖➖➖➖➖➖➖
🐧 CHANNEL | GROUP
Forwarded from Linuxor ?
خبر داغ : علی بابا امروز کارت آس خودشو رو کرد و مدل QwQ-32B رو به صورت اوپن سورس منتشر کرد که در حد DeepSeek R1 هستش فقط با این تفاوت که دیپ سیک 671 میلیاد پارامتر داره اما این فقط 32 میلیارد.
روش کارشون هم این بوده که تمرکز رو گذاشتن روی یادگیری تقویتی؛ طبق تحقیقات نشون داده شده که یادگیری تقویتی میتونه استدلال مدل هارو به طور قابل توجهی بهبود بده.
https://modelscope.cn/models/Qwen/QwQ-32B
@Linuxor
روش کارشون هم این بوده که تمرکز رو گذاشتن روی یادگیری تقویتی؛ طبق تحقیقات نشون داده شده که یادگیری تقویتی میتونه استدلال مدل هارو به طور قابل توجهی بهبود بده.
https://modelscope.cn/models/Qwen/QwQ-32B
@Linuxor
ما در برنامه نویسی چیزی داریم به اسم software development methodology یعنی اینکه بر اساس چه راه و روشی ما نرمافزارمون رو توسعه میدیم.
یکی از اونها مثلا waterfall (آبشار) هست که ما همهچیز رو از قبل مشخص میکنیم و بعد شروع میکنیم به کد زدن. سیستم دست و پا گیری هست و اصطلاحا بهشون میگن heavyweight (سنگینوزن)، بعد یه عدهای اومدن گفتن، بابا ولمون کن، بیایید یه سیستم lightweight (سبکوزن) داشته باشیم که اینقدر اذیت نکنه و برای همین methodologyهای متفاوتی توسعه پیدا کرد. مثل scrum یا extreme programming و ... که بعدن به اینها گفتن مجموعه روشهای agile (چابک) در مقابل با روشهای قبلی.
توی مثلا extreme programming از pair progaramming استفاده میشه (یعنی دو نفر میشینن پای یک مانیتور و یکی کد میزنه و یکی نظر میده) و کد رو فقط در صورتی میزنن که بهش نیاز باشه.
توی scrum که الآن رایجترین روش هست، ما یه مفهومی داریم به اسم sprint یعنی یه timebox (جعبه زمانی؟) مشخص دو هفتهای باید یک سری هدفها به پایان برسن. پس ما وقت نداریم که محض محکمکاری فلان کار رو بکنیم. باید ببینیم که نیاز هست یا نه.
بعد توی scrum که یه روش iterative (تکرارشونده؟) هست، ما سریع پشت سر هم نسخه جدید میدیم بیرون. توی هر iteration (تکرار؟) ما میبینیم که چه چیزی اولویت هست و چه چیزی نیست. وقتی که ما فلان feature رو میدیم، نمیشینیم محض محکمکاری به بهترین حالت ممکن بنویسیم، بلکه میبینیم که آیا توی فیدبکی که از کاربرها گرفتن و اینکه ما اونها رو track کردیم توی سایت، آیا اون فیچر رو اصلا استفاده میکنن و ارزش داره که ما توسعهاش بدیم یا نه؟
فرض کن مثلا یه feature اضافه کردیم به سایت، export کردن رزومه کاربر. حالا میشه pdf که مهم هست (مهم بودنش رو من و شما مشخص نمیکنیم، بلکه رفتار کاربر توی سایت آنالیز میشه. حتی نظر خود کاربر هم مهم نیست، رفتاری که توی سایت نشون میده مهمه، این خیلی نکته اساسی هست) و export کردن به json. خوب وقتی که اون پیدیاف مشکل داره، اولویت اون هست. و توی iteration بعدی به اون میرسیم. یا اینکه باید ببینیم که کدوم کاربرها پول بیشتری میدن، آنالیز رفتار اونها مهمتر هست، تا یه نفر که مجانی از سایت ما استفاده میکنه. چون هدف نگاه داشتن کاربرانی هست که پول میدن.
@softwrteach
--------‐----------------
🌐💻
یکی از اونها مثلا waterfall (آبشار) هست که ما همهچیز رو از قبل مشخص میکنیم و بعد شروع میکنیم به کد زدن. سیستم دست و پا گیری هست و اصطلاحا بهشون میگن heavyweight (سنگینوزن)، بعد یه عدهای اومدن گفتن، بابا ولمون کن، بیایید یه سیستم lightweight (سبکوزن) داشته باشیم که اینقدر اذیت نکنه و برای همین methodologyهای متفاوتی توسعه پیدا کرد. مثل scrum یا extreme programming و ... که بعدن به اینها گفتن مجموعه روشهای agile (چابک) در مقابل با روشهای قبلی.
توی مثلا extreme programming از pair progaramming استفاده میشه (یعنی دو نفر میشینن پای یک مانیتور و یکی کد میزنه و یکی نظر میده) و کد رو فقط در صورتی میزنن که بهش نیاز باشه.
توی scrum که الآن رایجترین روش هست، ما یه مفهومی داریم به اسم sprint یعنی یه timebox (جعبه زمانی؟) مشخص دو هفتهای باید یک سری هدفها به پایان برسن. پس ما وقت نداریم که محض محکمکاری فلان کار رو بکنیم. باید ببینیم که نیاز هست یا نه.
بعد توی scrum که یه روش iterative (تکرارشونده؟) هست، ما سریع پشت سر هم نسخه جدید میدیم بیرون. توی هر iteration (تکرار؟) ما میبینیم که چه چیزی اولویت هست و چه چیزی نیست. وقتی که ما فلان feature رو میدیم، نمیشینیم محض محکمکاری به بهترین حالت ممکن بنویسیم، بلکه میبینیم که آیا توی فیدبکی که از کاربرها گرفتن و اینکه ما اونها رو track کردیم توی سایت، آیا اون فیچر رو اصلا استفاده میکنن و ارزش داره که ما توسعهاش بدیم یا نه؟
فرض کن مثلا یه feature اضافه کردیم به سایت، export کردن رزومه کاربر. حالا میشه pdf که مهم هست (مهم بودنش رو من و شما مشخص نمیکنیم، بلکه رفتار کاربر توی سایت آنالیز میشه. حتی نظر خود کاربر هم مهم نیست، رفتاری که توی سایت نشون میده مهمه، این خیلی نکته اساسی هست) و export کردن به json. خوب وقتی که اون پیدیاف مشکل داره، اولویت اون هست. و توی iteration بعدی به اون میرسیم. یا اینکه باید ببینیم که کدوم کاربرها پول بیشتری میدن، آنالیز رفتار اونها مهمتر هست، تا یه نفر که مجانی از سایت ما استفاده میکنه. چون هدف نگاه داشتن کاربرانی هست که پول میدن.
@softwrteach
--------‐----------------
🌐💻
👍3
Forwarded from TorhamDev | تورهام 😳
یک مبحثی که خیلی وقتها آدمهای رو داخل #جنگو گیج میکنه موضوع Aggregation هستش. برای مثال کوئری پایین:
خب این کوئری مشخصه چه کاری داره انجام میده، همه میتونن بفهمنش مخصوصا وقتی خروجی کوئری رو میبینن، اما اگر ازشون بپرسید خب Aggregation چی هستش هیچ ایده ای ندارن! و این ماجرا از ضعف در دانش SQL سر چشمه میگیره. چون خیلی از آدمهایی که دارن #django کار میکنن مستقیم سراغ جنگو اومدن و نرفتن چیزهای دیگه رو مطالعه کنن و یاد بگیرن.
اسم Aggregation داخل ORM جنگو مستقیما از SQL میاد. در SQL یک سری فانکشن وجود داره که بهشون Aggregation functions میگن و کارشون خلاصه سازی اطلاعات:
MIN() - returns the smallest value within the selected column
MAX() - returns the largest value within the selected column
COUNT() - returns the number of rows in a set
SUM() - returns the total sum of a numerical column
AVG() - returns the average value of a numerical column
و خب شما میتونید داخل کوئریهای SQL ازشون استفاده کنید و دیتا خروجی رو خلاصه سازی کنید و یا یک آمار ازش دربیارید. مثلا میانگین قیمت کتابهای تو سال اخیر و ...
یک کوئری مثال برای Aggregation میتونه این باشه:
خب از اونجایی که ORM جنگو در نهایت قرار کار همین SQL نوشتن برای شما انجام بده و کوئری شمارو به SQL تبدیل کنه شما دقیقا همین کوئری میتونید داخل جنگو به این صورت بنویسید:
میتونید لیست فانکشنهای Aggregation خود SQL داخل این لینک ببینید و ساپورت جنگو هم میتونید داخل این لینک ببینید.
در نهایت از دانش SQL غافل نباشید و حتما یادش بیگیرید. هرچی بیشتر SQL بدونید زندگی راحتتری خواهید داشت.
@TorhamDevCH
>>> from django.db.models import Avg, Max, Min
>>> Book.objects.aggregate(Avg("price"), Max("price"), Min("price"))
# {'price__avg': 34.35, 'price__max': Decimal('81.20'), 'price__min': Decimal('12.99')}
خب این کوئری مشخصه چه کاری داره انجام میده، همه میتونن بفهمنش مخصوصا وقتی خروجی کوئری رو میبینن، اما اگر ازشون بپرسید خب Aggregation چی هستش هیچ ایده ای ندارن! و این ماجرا از ضعف در دانش SQL سر چشمه میگیره. چون خیلی از آدمهایی که دارن #django کار میکنن مستقیم سراغ جنگو اومدن و نرفتن چیزهای دیگه رو مطالعه کنن و یاد بگیرن.
اسم Aggregation داخل ORM جنگو مستقیما از SQL میاد. در SQL یک سری فانکشن وجود داره که بهشون Aggregation functions میگن و کارشون خلاصه سازی اطلاعات:
MIN() - returns the smallest value within the selected column
MAX() - returns the largest value within the selected column
COUNT() - returns the number of rows in a set
SUM() - returns the total sum of a numerical column
AVG() - returns the average value of a numerical column
و خب شما میتونید داخل کوئریهای SQL ازشون استفاده کنید و دیتا خروجی رو خلاصه سازی کنید و یا یک آمار ازش دربیارید. مثلا میانگین قیمت کتابهای تو سال اخیر و ...
یک کوئری مثال برای Aggregation میتونه این باشه:
SELECT AVG(Price) as price_avg FROM Books WHERE puddate='2023-01-01';
خب از اونجایی که ORM جنگو در نهایت قرار کار همین SQL نوشتن برای شما انجام بده و کوئری شمارو به SQL تبدیل کنه شما دقیقا همین کوئری میتونید داخل جنگو به این صورت بنویسید:
>>> from django.db.models import Avg
>>> from datetime import datetime
>>> Books.objects.filter(pubdate=datetime(2023, 1, 1)).aggregate(price_avg=Avg("price"))
میتونید لیست فانکشنهای Aggregation خود SQL داخل این لینک ببینید و ساپورت جنگو هم میتونید داخل این لینک ببینید.
در نهایت از دانش SQL غافل نباشید و حتما یادش بیگیرید. هرچی بیشتر SQL بدونید زندگی راحتتری خواهید داشت.
@TorhamDevCH
W3Schools
W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.
Forwarded from Ninja Learn | نینجا لرن
خب خب خب WebSocket در Fastapi
امروز میخوام دربارهی یه موضوع باحال و کاربردی تو دنیای وب حرف بزنم: پیادهسازی WebSocket در FastAPI اگه دنبال ساخت اپلیکیشنهای realtime مثل چت، داشبوردهای زنده یا بازیهای آنلاین هستین، این پست براتون خیلی مفیده. پس با من همراه باشین تا با هم یاد بگیریم WebSocket چیه و چطور میتونیم تو FastAPI ازش استفاده کنیم.
🧠 WebSocket چیه و چرا مهمه؟
WebSocket یه پروتکل ارتباطیه که به کلاینت (مثل مرورگر) و سرور اجازه میده یه ارتباط دوطرفه و همیشگی داشته باشن. برعکس HTTP که فقط یه درخواست میفرستی و یه پاسخ میگیری، WebSocket این امکان رو میده که هر دو طرف هر وقت خواستن پیام بفرستن و بگیرن، بدون اینکه نیاز باشه کلاینت مدام درخواست بفرسته. این برای اپلیکیشنهایی که نیاز به آپدیتهای زنده دارن، مثل چت رومها، اعلانهای realtime یا بازیهای آنلاین، عالیه
🚀 FastAPI و WebSocket
FastAPI یه فریمورک وب مدرن و سریع برای پایتونه. یکی از قابلیتهای باحالش هم پشتیبانی از WebSocketه. FastAPI از Starlette استفاده میکنه (یه فریمورک ASGI سبک و قدرتمند)، و همین باعث میشه بتونیم به راحتی WebSocket رو پیادهسازی کنیم.
🛠 چطوری WebSocket رو تو FastAPI پیادهسازی کنیم؟
برای شروع، باید از کلاس
تو این کد:
به این میگن یه Echo Server ساده هر چی کلاینت بفرسته، سرور عینشو برمیگردونه.
📡 یه مثال پیشرفتهتر: چت روم با WebSocket
حالا بیاین یه چیز باحالتر بسازیم، مثلاً یه چت روم که چندتا کلاینت بتونن بهش وصل بشن و پیامهاشون رو به هم بفرستن. برای این کار، باید اتصالهای فعال رو مدیریت کنیم. یه کلاس به اسم ConnectionManager
اینجا چی داریم؟
ConnectionManager یه کلاسه که اتصالهای فعال رو تو یه لیست نگه میداره.
وقتی کلاینت وصل میشه، به لیست اضافه میشه (connect) و وقتی قطع میشه، حذف میشه (disconnect).
send_personal_message به یه کلاینت خاص پیام میفرسته.
broadcast به همه کلاینتهای وصلشده پیام رو میفرسته.
تو endpoint، پیام کلاینت رو میگیریم، به خودش یه جواب شخصی میدیم و به بقیه هم broadcast میکنیم.
جمعبندی ✍
WebSocket تو FastAPI به شما این امکان رو میده که اپلیکیشنهای realtime و جذاب بسازین. از چت رومها گرفته تا داشبوردهای زنده و بازیهای آنلاین.
خب اینم از این امید وارم مفید بوده باشه :]
➖➖➖➖➖➖➖➖➖
امروز میخوام دربارهی یه موضوع باحال و کاربردی تو دنیای وب حرف بزنم: پیادهسازی WebSocket در FastAPI اگه دنبال ساخت اپلیکیشنهای realtime مثل چت، داشبوردهای زنده یا بازیهای آنلاین هستین، این پست براتون خیلی مفیده. پس با من همراه باشین تا با هم یاد بگیریم WebSocket چیه و چطور میتونیم تو FastAPI ازش استفاده کنیم.
🧠 WebSocket چیه و چرا مهمه؟
WebSocket یه پروتکل ارتباطیه که به کلاینت (مثل مرورگر) و سرور اجازه میده یه ارتباط دوطرفه و همیشگی داشته باشن. برعکس HTTP که فقط یه درخواست میفرستی و یه پاسخ میگیری، WebSocket این امکان رو میده که هر دو طرف هر وقت خواستن پیام بفرستن و بگیرن، بدون اینکه نیاز باشه کلاینت مدام درخواست بفرسته. این برای اپلیکیشنهایی که نیاز به آپدیتهای زنده دارن، مثل چت رومها، اعلانهای realtime یا بازیهای آنلاین، عالیه
🚀 FastAPI و WebSocket
FastAPI یه فریمورک وب مدرن و سریع برای پایتونه. یکی از قابلیتهای باحالش هم پشتیبانی از WebSocketه. FastAPI از Starlette استفاده میکنه (یه فریمورک ASGI سبک و قدرتمند)، و همین باعث میشه بتونیم به راحتی WebSocket رو پیادهسازی کنیم.
🛠 چطوری WebSocket رو تو FastAPI پیادهسازی کنیم؟
برای شروع، باید از کلاس
WebSocket تو FastAPI استفاده کنیم. بیاین با یه مثال ساده شروع کنیم:from fastapi import FastAPI, WebSocket
app = FastAPI()
@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
await websocket.accept()
while True:
data = await websocket.receive_text()
await websocket.send_text(f"پیامت این بود: {data}")
تو این کد:
یه endpoint به اسم /ws ساختیم.وقتی کلاینت بهش وصل میشه، سرور با accept() ارتباط رو قبول میکنه.بعدش تو یه حلقه پیامهای کلاینت رو میگیره و همونو برمیگردونه.
به این میگن یه Echo Server ساده هر چی کلاینت بفرسته، سرور عینشو برمیگردونه.
📡 یه مثال پیشرفتهتر: چت روم با WebSocket
حالا بیاین یه چیز باحالتر بسازیم، مثلاً یه چت روم که چندتا کلاینت بتونن بهش وصل بشن و پیامهاشون رو به هم بفرستن. برای این کار، باید اتصالهای فعال رو مدیریت کنیم. یه کلاس به اسم ConnectionManager
میسازیم که لیست اتصالها رو نگه داره و بتونیم بهشون پیام بفرستیم یا به همه broadcast کنیم.from fastapi import FastAPI, WebSocket
from typing import List
app = FastAPI()
class ConnectionManager:
def __init__(self):
self.active_connections: List[WebSocket] = []
async def connect(self, websocket: WebSocket):
await websocket.accept()
self.active_connections.append(websocket)
def disconnect(self, websocket: WebSocket):
self.active_connections.remove(websocket)
async def send_personal_message(self, message: str, websocket: WebSocket):
await websocket.send_text(message)
async def broadcast(self, message: str):
for connection in self.active_connections:
await connection.send_text(message)
manager = ConnectionManager()
@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
await manager.connect(websocket)
try:
while True:
data = await websocket.receive_text()
await manager.send_personal_message(f"تو نوشتی: {data}", websocket)
await manager.broadcast(f"یکی گفت: {data}")
except Exception as e:
print(f"خطا: {e}")
finally:
manager.disconnect(websocket)
اینجا چی داریم؟
ConnectionManager یه کلاسه که اتصالهای فعال رو تو یه لیست نگه میداره.
وقتی کلاینت وصل میشه، به لیست اضافه میشه (connect) و وقتی قطع میشه، حذف میشه (disconnect).
send_personal_message به یه کلاینت خاص پیام میفرسته.
broadcast به همه کلاینتهای وصلشده پیام رو میفرسته.
تو endpoint، پیام کلاینت رو میگیریم، به خودش یه جواب شخصی میدیم و به بقیه هم broadcast میکنیم.
جمعبندی ✍
WebSocket تو FastAPI به شما این امکان رو میده که اپلیکیشنهای realtime و جذاب بسازین. از چت رومها گرفته تا داشبوردهای زنده و بازیهای آنلاین.
خب اینم از این امید وارم مفید بوده باشه :]
#️⃣ #fastapi #backend #python
➖➖➖➖➖➖➖➖➖
🥷 CHANNEL | GROUP
خب خب خب آشنایی با Windows Subsystem for Linux (WSL) 🐧
امروز میخوایم دربارهی یه ابزار کاربردی تو ویندوز حرف بزنیم: Windows Subsystem for Linux یا به اختصار WSL. اگه تا حالا باهاش کار نکردین، حتماً این پست رو بخونین، چون قراره کلی چیزای جدید یاد بگیرین
🧠 WSL چیه؟
Windows Subsystem for Linux (WSL) یه ویژگی تو ویندوز ۱۰ و ۱۱ هست که به شما اجازه میده یه محیط لینوکس رو مستقیماً روی ویندوز اجرا کنین. یعنی میتونین دستورات لینوکس رو اجرا کنین، فایلهای لینوکس رو مدیریت کنین و حتی برنامههای لینوکسی رو اجرا کنین، همه اینا بدون اینکه نیاز به ماشین مجازی یا دوال بوت داشته باشین. این ابزار برای توسعهدهندهها، به خصوص کسایی که با پروژههای open source کار میکنن، خیلی مفیده چون منابع کمتری نسبت به یه ماشین مجازی کامل مصرف میکنه و کار باهاش خیلی راحتتره.
📚 نسخههای WSL
WSL دو نسخه داره که هر کدوم ویژگیهای خاص خودشون رو دارن:
1️⃣ WSL 1:
این نسخه سال ۲۰۱۶ معرفی شد و یه لایهی سازگاری بود که از کرنل ویندوز برای اجرای برنامههای لینوکسی استفاده میکرد. ولی چون از کرنل لینوکس واقعی استفاده نمیکرد، بعضی وقتها محدودیتهایی داشت.
2️⃣ WSL 2:
این نسخه سال ۲۰۱۹ اومد و یه کرنل لینوکس واقعی رو تو یه ماشین مجازی سبک اجرا میکنه. به همین خاطر، عملکرد و سازگاری بهتری داره، به خصوص تو عملیات سنگین مثل کار با فایلها.
WSL 2 از تکنولوژی Hyper-V (یه سیستم مجازیسازی تو ویندوز) استفاده میکنه و به همین دلیل توصیه میشه ازش استفاده کنین، چون امکانات بیشتری داره و سریعتره.
🚀 نصب WSL
نصب WSL خیلی سادست و بسته به نسخهی ویندوزتون فرق میکنه:
تو ویندوز ۱۱:
WSL به صورت پیشفرض نصب شده، ولی باید یه توزیع لینوکس (مثل Ubuntu یا Debian) رو از Microsoft Store دانلود و نصب کنین.
تو ویندوز ۱۰:
باید WSL رو دستی نصب کنین. برای این کار، PowerShell رو با دسترسی Administrator باز کنین و دستور زیر رو اجرا کنین:
این دستور WSL رو همراه با یه توزیع پیشفرض (معمولاً Ubuntu) نصب میکنه. اگه میخواین توزیع دیگهای نصب کنین، از این دستور استفاده کنین:
مثلاً برای نصب Debian:
WSL از توزیعهای مختلفی مثل Ubuntu، Debian، Kali و Fedora پشتیبانی میکنه که میتونین هر کدوم رو که دوست دارین انتخاب کنین.
🛠 استفاده از WSL
با WSL، میتونین یه محیط توسعهی کامل لینوکس رو تو ویندوز داشته باشین. چند تا مثال از کارایی که میتونین بکنین:
دستورات لینوکس:
از دستوراتی مثل
ویرایشگرهای متنی:
میتونین از Vim، Emacs یا حتی VS Code با افزونهی WSL کار کنین.
ابزارهای توسعه: Git، Docker، Node.js و خیلی چیزای دیگه رو نصب و استفاده کنین.
سرورهای وب:
میتونین سرورهایی مثل Apache یا Nginx رو تو WSL اجرا کنین و با مرورگر ویندوز بهشون دسترسی داشته باشین.
📂 دسترسی به فایلها
یکی از ویژگیهای جذاب WSL اینه که میتونین بین ویندوز و لینوکس فایلهاتون رو به اشتراک بذارین:
از WSL به ویندوز:
فایلهای ویندوز تو مسیر
از ویندوز به WSL:
فایلهای لینوکس رو میتونین تو File Explorer ویندوز از مسیر
برای عملکرد بهتر، پیشنهاد میشه فایلهای پروژهتون رو تو فایلسیستم لینوکس (نه درایو ویندوز) نگه دارین، به خصوص اگه از WSL 2 استفاده میکنین.
🔍 نکات و ترفندها
عملکرد بهتر با WSL 2:
WSL 2 به خاطر استفاده از کرنل واقعی لینوکس و Hyper-V، تو عملیات سنگین مثل کار با فایلها خیلی بهتر عمل میکنه.
مدیریت توزیعها:
میتونین چند تا توزیع لینوکس نصب کنین و با دستور
بینشون جابهجا بشین.
بهروزرسانی WSL:
برای آپدیت کردن WSL، از این دستور استفاده کنین:
دسترسی به GPU:
WSL 2 از GPU پشتیبانی میکنه که برای کارهای ماشین لرنینگ یا گرافیکی عالیه.
محدودیتها:
WSL از systemd پشتیبانی نمیکنه، که ممکنه برای بعضی سرویسها مشکلساز باشه، ولی راهحلهای غیررسمی برای این موضوع وجود داره.
✍️ جمعبندی
Windows Subsystem for Linux (WSL) یه ابزار فوقالعادهست که به شما اجازه میده ویندوز و لینوکس رو با هم داشته باشین. چه توسعهدهنده باشین، چه فقط بخواین لینوکس رو امتحان کنین، WSL یه راه سریع و ساده برای این کاره.
➖➖➖➖➖➖➖➖➖
امروز میخوایم دربارهی یه ابزار کاربردی تو ویندوز حرف بزنیم: Windows Subsystem for Linux یا به اختصار WSL. اگه تا حالا باهاش کار نکردین، حتماً این پست رو بخونین، چون قراره کلی چیزای جدید یاد بگیرین
🧠 WSL چیه؟
Windows Subsystem for Linux (WSL) یه ویژگی تو ویندوز ۱۰ و ۱۱ هست که به شما اجازه میده یه محیط لینوکس رو مستقیماً روی ویندوز اجرا کنین. یعنی میتونین دستورات لینوکس رو اجرا کنین، فایلهای لینوکس رو مدیریت کنین و حتی برنامههای لینوکسی رو اجرا کنین، همه اینا بدون اینکه نیاز به ماشین مجازی یا دوال بوت داشته باشین. این ابزار برای توسعهدهندهها، به خصوص کسایی که با پروژههای open source کار میکنن، خیلی مفیده چون منابع کمتری نسبت به یه ماشین مجازی کامل مصرف میکنه و کار باهاش خیلی راحتتره.
📚 نسخههای WSL
WSL دو نسخه داره که هر کدوم ویژگیهای خاص خودشون رو دارن:
1️⃣ WSL 1:
این نسخه سال ۲۰۱۶ معرفی شد و یه لایهی سازگاری بود که از کرنل ویندوز برای اجرای برنامههای لینوکسی استفاده میکرد. ولی چون از کرنل لینوکس واقعی استفاده نمیکرد، بعضی وقتها محدودیتهایی داشت.
2️⃣ WSL 2:
این نسخه سال ۲۰۱۹ اومد و یه کرنل لینوکس واقعی رو تو یه ماشین مجازی سبک اجرا میکنه. به همین خاطر، عملکرد و سازگاری بهتری داره، به خصوص تو عملیات سنگین مثل کار با فایلها.
WSL 2 از تکنولوژی Hyper-V (یه سیستم مجازیسازی تو ویندوز) استفاده میکنه و به همین دلیل توصیه میشه ازش استفاده کنین، چون امکانات بیشتری داره و سریعتره.
🚀 نصب WSL
نصب WSL خیلی سادست و بسته به نسخهی ویندوزتون فرق میکنه:
تو ویندوز ۱۱:
WSL به صورت پیشفرض نصب شده، ولی باید یه توزیع لینوکس (مثل Ubuntu یا Debian) رو از Microsoft Store دانلود و نصب کنین.
تو ویندوز ۱۰:
باید WSL رو دستی نصب کنین. برای این کار، PowerShell رو با دسترسی Administrator باز کنین و دستور زیر رو اجرا کنین:
wsl --install
این دستور WSL رو همراه با یه توزیع پیشفرض (معمولاً Ubuntu) نصب میکنه. اگه میخواین توزیع دیگهای نصب کنین، از این دستور استفاده کنین:
wsl --install -d <Distribution Name>
مثلاً برای نصب Debian:
wsl --install -d Debian
WSL از توزیعهای مختلفی مثل Ubuntu، Debian، Kali و Fedora پشتیبانی میکنه که میتونین هر کدوم رو که دوست دارین انتخاب کنین.
🛠 استفاده از WSL
با WSL، میتونین یه محیط توسعهی کامل لینوکس رو تو ویندوز داشته باشین. چند تا مثال از کارایی که میتونین بکنین:
دستورات لینوکس:
از دستوراتی مثل
ls (البته تو لینوکس dir نیست، اینجا منظورم ls-مانندها بود)، grep، awk و غیره استفاده کنین.ویرایشگرهای متنی:
میتونین از Vim، Emacs یا حتی VS Code با افزونهی WSL کار کنین.
ابزارهای توسعه: Git، Docker، Node.js و خیلی چیزای دیگه رو نصب و استفاده کنین.
سرورهای وب:
میتونین سرورهایی مثل Apache یا Nginx رو تو WSL اجرا کنین و با مرورگر ویندوز بهشون دسترسی داشته باشین.
📂 دسترسی به فایلها
یکی از ویژگیهای جذاب WSL اینه که میتونین بین ویندوز و لینوکس فایلهاتون رو به اشتراک بذارین:
از WSL به ویندوز:
فایلهای ویندوز تو مسیر
/mnt/c (یا /mnt/d برای درایوهای دیگه) قابل دسترسی هستن.از ویندوز به WSL:
فایلهای لینوکس رو میتونین تو File Explorer ویندوز از مسیر
\\wsl$\<Distribution Name> ببینین.برای عملکرد بهتر، پیشنهاد میشه فایلهای پروژهتون رو تو فایلسیستم لینوکس (نه درایو ویندوز) نگه دارین، به خصوص اگه از WSL 2 استفاده میکنین.
🔍 نکات و ترفندها
عملکرد بهتر با WSL 2:
WSL 2 به خاطر استفاده از کرنل واقعی لینوکس و Hyper-V، تو عملیات سنگین مثل کار با فایلها خیلی بهتر عمل میکنه.
مدیریت توزیعها:
میتونین چند تا توزیع لینوکس نصب کنین و با دستور
wsl -d <Distribution Name>
بینشون جابهجا بشین.
بهروزرسانی WSL:
برای آپدیت کردن WSL، از این دستور استفاده کنین:
wsl --update
دسترسی به GPU:
WSL 2 از GPU پشتیبانی میکنه که برای کارهای ماشین لرنینگ یا گرافیکی عالیه.
محدودیتها:
WSL از systemd پشتیبانی نمیکنه، که ممکنه برای بعضی سرویسها مشکلساز باشه، ولی راهحلهای غیررسمی برای این موضوع وجود داره.
✍️ جمعبندی
Windows Subsystem for Linux (WSL) یه ابزار فوقالعادهست که به شما اجازه میده ویندوز و لینوکس رو با هم داشته باشین. چه توسعهدهنده باشین، چه فقط بخواین لینوکس رو امتحان کنین، WSL یه راه سریع و ساده برای این کاره.
#️⃣ #porgramming #wsl #linux #windows
➖➖➖➖➖➖➖➖➖
🥷 CHANNEL | GROUP
Forwarded from کاف
👍1😁1
❔ پروتکل OAuth چیه؟
پروتکل OAuth یک پروتکل امنیتی هست که به شما این امکان رو میده که بدون به اشتراک گذاشتن پسوردتون، به سرویسهای مختلف دسترسی پیدا کنید. 🔐
برای مثال، وقتی وارد یک سایت میشید با حساب گوگل، گیتهاب یا فیسبوک، فقط به اطلاعاتی که خودتون اجازه دادید دسترسی میده و نیازی به پسورد شما نیست. 🔐
این پروتکل بهویژه برای احراز هویت در اپلیکیشنهای موبایل و وب استفاده میشه، به طوری که به جای وارد کردن پسورد، از توکنها برای دسترسی امن به منابع استفاده میکنید. 🔒
@softwrteach
--------‐----------------
🌐💻
پروتکل OAuth یک پروتکل امنیتی هست که به شما این امکان رو میده که بدون به اشتراک گذاشتن پسوردتون، به سرویسهای مختلف دسترسی پیدا کنید. 🔐
برای مثال، وقتی وارد یک سایت میشید با حساب گوگل، گیتهاب یا فیسبوک، فقط به اطلاعاتی که خودتون اجازه دادید دسترسی میده و نیازی به پسورد شما نیست. 🔐
این پروتکل بهویژه برای احراز هویت در اپلیکیشنهای موبایل و وب استفاده میشه، به طوری که به جای وارد کردن پسورد، از توکنها برای دسترسی امن به منابع استفاده میکنید. 🔒
@softwrteach
--------‐----------------
🌐💻
👍1
Forwarded from Fara Code | برنامه نویسی (M.z)
SQL vs MySQL
وقتی بحث دیتابیس وسط میاد، خیلیا این دو تا رو(SQL ,MySQL) یکی میدونن ولی در واقع این دوتا دو چیز کاملا متفاوتن...
●خوب Sql یه زبان استاندارِ که برای مدیریت و دستکاری دیتابیس های رابطه ای استفاده میشن،در کل یعنی میتونیم رو داده ها عملیات crud رو انجام بدیم بعلاوه میتونیم اطلاعات رو بازیابی کنیم.
● ولی MySQL یه سیستم مدیریت دیتابیس که به ما اجازه عملیات crud و مدیریت داده ها رو میده.
بخوایم یه مثال بزنیم میتونیم بگیم
کهSQL مثل دستور آشپزی هستش که نحوه پخت غذا رو توضیح میده..
و MySQL یک آشپزخونس که غذارو داخلش میپزیم ..
ویژگی های SQL:
۱ یه زبان برای کار با دیتابیسهاست.
۲ به هیچ سیستم خاصی وابسته نیست.
۳ روی دیتابیسهای مختلف مثلPostgrSQL و SQL Server هم کار میکنه.
۴ فقط دستورات و قواعد دیتابیس رو تعریف میکنه.
ویژگی های MySQL:
۱ یه نرمافزار دیتابیس (DBMS) که از SQL استفاده میکن
۲ یه نوع خاص از سیستمهای مدیریت دیتابیس رابطهای (RDBMS) هست.
۳ فقط مربوط به خود MySQL هست.
۴ یه ابزار واقعی برای ذخیره و مدیریت دادههاست.
@Learrning_Python
وقتی بحث دیتابیس وسط میاد، خیلیا این دو تا رو(SQL ,MySQL) یکی میدونن ولی در واقع این دوتا دو چیز کاملا متفاوتن...
●خوب Sql یه زبان استاندارِ که برای مدیریت و دستکاری دیتابیس های رابطه ای استفاده میشن،در کل یعنی میتونیم رو داده ها عملیات crud رو انجام بدیم بعلاوه میتونیم اطلاعات رو بازیابی کنیم.
● ولی MySQL یه سیستم مدیریت دیتابیس که به ما اجازه عملیات crud و مدیریت داده ها رو میده.
بخوایم یه مثال بزنیم میتونیم بگیم
کهSQL مثل دستور آشپزی هستش که نحوه پخت غذا رو توضیح میده..
و MySQL یک آشپزخونس که غذارو داخلش میپزیم ..
ویژگی های SQL:
۱ یه زبان برای کار با دیتابیسهاست.
۲ به هیچ سیستم خاصی وابسته نیست.
۳ روی دیتابیسهای مختلف مثلPostgrSQL و SQL Server هم کار میکنه.
۴ فقط دستورات و قواعد دیتابیس رو تعریف میکنه.
ویژگی های MySQL:
۱ یه نرمافزار دیتابیس (DBMS) که از SQL استفاده میکن
۲ یه نوع خاص از سیستمهای مدیریت دیتابیس رابطهای (RDBMS) هست.
۳ فقط مربوط به خود MySQL هست.
۴ یه ابزار واقعی برای ذخیره و مدیریت دادههاست.
@Learrning_Python
👍2
Forwarded from Fara Code | برنامه نویسی (M.z)
دکوراتور ها در پایتون
تا حالا شده بخوای بدون تغییر در ساختار اصلی یه تابع، یه قابلیت جدید بهش اضافه کنی؟
مثلاً یه لاگ بگیری، زمان اجراشو حساب کنی، یا قبل از اجراش چک کنی که ورودیهاش معتبرن یا نه؟
اینجاست که دکوراتورها (Decorators) وارد میشن!
دکوراتور یه تابعی هست که یه تابع دیگه رو میگیره، پردازشهایی روش انجام میده و در نهایت یه نسخه جدید از اون تابع رو برمیگردونه و باعث افزایش خوانایی و بهینهسازی کد میشن.
🎯 چند کاربرد معروف دکوراتورها
1 ثبت لاگها: بررسی این که چه زمانی یه تابع اجرا شده
2 کنترل سطح دسترسی: چک کردن اینکه کاربر مجوز لازم داره یا نه
3 کش کردن: ذخیره نتایج برای بهینهسازی اجراهای بعدی
🔍 مثال:
اندازهگیری زمان اجرای تابع:
📌 خروجی:
🎯 چرا از دکوراتورها استفاده کنیم؟
کد رو تمیزتر و خواناتر میکنه
بدون تغییر در توابع، ویژگیهای جدید اضافه میکنیم
قابلیت استفاده مجدد از کد رو افزایش میده
تا حالا از دکوراتور ها استفاده کردید؟
#python
@Learrning_Python
تا حالا شده بخوای بدون تغییر در ساختار اصلی یه تابع، یه قابلیت جدید بهش اضافه کنی؟
مثلاً یه لاگ بگیری، زمان اجراشو حساب کنی، یا قبل از اجراش چک کنی که ورودیهاش معتبرن یا نه؟
اینجاست که دکوراتورها (Decorators) وارد میشن!
دکوراتور یه تابعی هست که یه تابع دیگه رو میگیره، پردازشهایی روش انجام میده و در نهایت یه نسخه جدید از اون تابع رو برمیگردونه و باعث افزایش خوانایی و بهینهسازی کد میشن.
🎯 چند کاربرد معروف دکوراتورها
1 ثبت لاگها: بررسی این که چه زمانی یه تابع اجرا شده
2 کنترل سطح دسترسی: چک کردن اینکه کاربر مجوز لازم داره یا نه
3 کش کردن: ذخیره نتایج برای بهینهسازی اجراهای بعدی
🔍 مثال:
اندازهگیری زمان اجرای تابع:
Copy
Edit
import time
def timer_decorator(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print(f" runtime : {end_time - start_time:.5f} sec")
return result
return wrapper
@timer_decorator
def heavy_function():
time.sleep(2)
print(" function is run")
heavy_function()
📌 خروجی:
function is run
runtime: 2.00012 sec
🎯 چرا از دکوراتورها استفاده کنیم؟
کد رو تمیزتر و خواناتر میکنه
بدون تغییر در توابع، ویژگیهای جدید اضافه میکنیم
قابلیت استفاده مجدد از کد رو افزایش میده
تا حالا از دکوراتور ها استفاده کردید؟
#python
@Learrning_Python
خووب
امروز یه مبحثک میخوایم استارتشو بزنیم که به نظرم خیلی نیاز و تقریبا هرکی که برنامه نویسی میکنه باهاش سر و کله میزنه
و قراره به صورت تخصصی از صفر براش محتوا تولید کنیم
البته بگم که این به این معنی نیس که همه مطالبو میگیم و کامل کامله...
این مطالب کلیاتی رو پوشش میده و میتونید منابع زیادی رو بعد از اون بخونید (حالا در ادامه منابعی رو خدمتتون معرفی میکنم)
قبل از شروع:
محتوا به صورت متنی است البته بعضی جاها نیاز باشه عکس و ویدیوم میگیرم
#git
امروز یه مبحثک میخوایم استارتشو بزنیم که به نظرم خیلی نیاز و تقریبا هرکی که برنامه نویسی میکنه باهاش سر و کله میزنه
و قراره به صورت تخصصی از صفر براش محتوا تولید کنیم
البته بگم که این به این معنی نیس که همه مطالبو میگیم و کامل کامله...
این مطالب کلیاتی رو پوشش میده و میتونید منابع زیادی رو بعد از اون بخونید (حالا در ادامه منابعی رو خدمتتون معرفی میکنم)
قبل از شروع:
محتوا به صورت متنی است البته بعضی جاها نیاز باشه عکس و ویدیوم میگیرم
#git
Forwarded from Python Hints
گفتم سال جدیدی یک لیستی از چیزهایی که یک
نکته مهم : من ۹۹.۹٪ وقتا فقط
۱- یک سری چیزها هست که شما باید بلد باشی ربطی به جنگو هم نداره؛ اگر میخوای پیشرفت کنی باید بتونی با اینا کار کنی:
بعضی وقتا
درحد
اگر تاحالا با
باقی موارد رو ولی کم کم یادبگیرید؛ کمی یادگیری - بعد تمرین یا استفاده توی پروژه - به چالش و مشکل خوردن - دوباره یادگیری (ادامه یادگیری) و اینکار رو تکرار کنید.
یادبگیرید هر کدوم از موارد بالا چه زمانی استفاده میشه و برای چه کاری این موضوع خیلی مهم هست؛ کی باید استفاده کنید و کی نباید استفاده کنید.
اما برای خود
استاندارد لاگ نویسی هم که درموردش قبلا یک صحبتی داشتیم اون حداقلش هست و بهترش اینه که به ابزارهای موجود وصل بشه.
یک سری چیزا هم توی خود
واسه همه اینها توی سطوح مختلف کلی ویدئو یوتیوب هست و برای مواردی هم که نیست مطمئنم به زودی درست خواهند کرد دوستان؛ ولی نکته مهمتر اینه که یادبگیرید داکیومنت هم بخونید و خودتون رو آپدیت نگه دارید.
پینوشت:
شخصا برنامهای برای ساخت آموزش روی این مباحث یا پروژهها ندارم.
Django Developer باید بلد باشه رو بهتون بدم؛ این موارد حداقل چیزهایی هست که به محض ورود به هر پروژه استاندارد Django باید بلد باشید.نکته مهم : من ۹۹.۹٪ وقتا فقط
Django Rest Framework استفاده میکنم پس توی متن هرجا گفتم Django منظورم همون DRF هست.۱- یک سری چیزها هست که شما باید بلد باشی ربطی به جنگو هم نداره؛ اگر میخوای پیشرفت کنی باید بتونی با اینا کار کنی:
Linux, PostgreSQL, Docker & Docker Compose, Redis, Nginx, Celery & Celery beatبعضی وقتا
RabbitMQ, Kafka هم نیازمندی هست؛ بسته به سطح شما به مرور زمان توی موارد بالا حرفهای تر میشید. لینوکس رو خیلیها کنار میذارند که خیلی اشتباه هست؛ ببین کل استک شما قراره بره روی docker, k8s, podman یا ... وقتی یک اتفاقی توی سیستم میوفته و لاگ سرور بهت داده میشه هم container شما لینوکس هست هم ۹۹.۹٪ سرور شما؛ اگر نتونی اون مشکل رو بازسازی کنی چطوری میخوای تست بگیری و متوجهاش بشی ؟درحد
LPIC1 هم کفایت میکنه (اگر خواستید مدرک بگیرید؛ پیشنهاد میکنم حتما برای آزمونهای redhat بخونید)اگر تاحالا با
Linux کار نکردید؛ پیشنهاد نصب و ... بهتون نمیدم؛ از wsl برای تمرین کردن آنچه که لازم هست استفاده کنید و محیط گرافیکی رو بندازید دور؛ شما روی سرور محیط گرافیکی ندارد (درست تمرین کنید).باقی موارد رو ولی کم کم یادبگیرید؛ کمی یادگیری - بعد تمرین یا استفاده توی پروژه - به چالش و مشکل خوردن - دوباره یادگیری (ادامه یادگیری) و اینکار رو تکرار کنید.
یادبگیرید هر کدوم از موارد بالا چه زمانی استفاده میشه و برای چه کاری این موضوع خیلی مهم هست؛ کی باید استفاده کنید و کی نباید استفاده کنید.
اما برای خود
Django حداقل چیزهایی که باید همزمان با Django بلد باشید؛ نشده جونیور (حتی بدون سابقه کاری) بیاد پیشم و این موارد رو بلد باشه (به فرض اینکه پایتون رو اصولی یاد گرفته) و توی مصاحبه رد بشه؛ اصلا تا حالا نداشتم واقعا میگم :pytest (basics), djagno-silk, drf-spectacular, faker, factory-boy, djangorestframework-simplejwt, django-axes, django-storageاستاندارد لاگ نویسی هم که درموردش قبلا یک صحبتی داشتیم اون حداقلش هست و بهترش اینه که به ابزارهای موجود وصل بشه.
یک سری چیزا هم توی خود
Django هست؛ مثل throttling, middleware, ... که مفاهیمی هست که روی بکند داریم و فارغ از فریمورک باید بلد باشید برای همین صحبتی راجب این موارد ندارم.واسه همه اینها توی سطوح مختلف کلی ویدئو یوتیوب هست و برای مواردی هم که نیست مطمئنم به زودی درست خواهند کرد دوستان؛ ولی نکته مهمتر اینه که یادبگیرید داکیومنت هم بخونید و خودتون رو آپدیت نگه دارید.
پینوشت:
شخصا برنامهای برای ساخت آموزش روی این مباحث یا پروژهها ندارم.
ماشین حساب شما سالم است؟
دیشب مشغول کدزدن با دوست جدیدمان جناب cursor بودم که جایی دیدم روی تست کیس خاصی کد درست کار نمیکند (یک جورهایی مساله parse کردن یک جور درخت بود). هر چه خودم تقلا کردم بفهمم چرا این طور شده نتوانستم. cursor را ندا دادم روی چنین تست کیسی درست کار نمیکنه ببین مشکل از کجاست. cursor هم شروع کرد به تقلا. به سرعت نوشت مشکل چیست و کد را عوض کرد و بعد هم شروع کرد خودش به نوشتن تست کیس. من دیگر از ماجرا پرت شده بودم و فقط شاهد تلاشهای این زبان بسته بودم که خودش تست کیس مینوشت و اجرا میکرد و گاها هم میدید روی تست کیس جواب نمیگیرد کد را تغییر میداد. چند دقیقهای تقلایش طول کشید و نهایتا گفت که great و تمام. کد با آن چیزی که من اول نوشته بودم بسیار تفاوت داشت طوری که برای فهمیدن منطقش باید از خود cursor دوباره میپرسیدم. شروع کردم چند testcase جدید را تست گرفتن و دیدم که روی همه آنها درست جواب میدهد. مساله تبدیل به یک مساله تصمیم ناپذیر شده بود. نمیتوانستم بگویم چرا درست کار میکند ولی هر چه تست کیس امتحان میکردم درست بود. فکر کردم دیدم آیا باید رها کنم؟ اگر جایی اشتباه کرده بود چه؟
ناخودآگاه یاد مثال همیشگی مقایسه LLM و ماشین حساب افتادم. فرض کنید الان یک جمع و ضرب چند رقمی را به ماشین حساب میدهیم و آن به ما جواب را میدهد. از کجا معلوم که اشتباه نکند؟ مثلا چه میدانم پالسی، سیمی، موجی روی هم بیافتند و یک رقم اشتباه شود. در این صورت آیا ما اصلا اغلب متوجه میشویم ؟!؟ کدام یک از ما نتیجه ماشین حساب را وریفای میکنیم؟ احتمالا روزهای اولی هم که ماشین حسابها اختراع شده بودند و مکانیکی تر از امروز بودند، افراد به آنها اعتماد کامل نداشتند و جواب نهاییشان را به نحوی وریفای میکردند. از جایی به بعد ولی احتمالا هم به خاطر اعتمادپذیری بیشتر و هم به خاطر این که محاسبات سنگین شده بودند دیگر هیچ کس به وریفای کردن جواب نهایی ماشین حساب فکر هم نمیکند. الغرض از نظر اعتمادپذیری بین LLMها و ماشینحسابها در لحظه فاصله زیاد است اما احتمالا روزی هم خواهد آمد که دیگر ما خروجیهای LLMها را وریفای نمیکنیم و از خود نمیپرسیم از کجا معلوم این درست بگوید؟ آن روز وضعمان شبیه به امروز است که برایمان سوال نمیشود از کجا معلوم این ماشین حساب درست محاسبه میکند؟
دیشب مشغول کدزدن با دوست جدیدمان جناب cursor بودم که جایی دیدم روی تست کیس خاصی کد درست کار نمیکند (یک جورهایی مساله parse کردن یک جور درخت بود). هر چه خودم تقلا کردم بفهمم چرا این طور شده نتوانستم. cursor را ندا دادم روی چنین تست کیسی درست کار نمیکنه ببین مشکل از کجاست. cursor هم شروع کرد به تقلا. به سرعت نوشت مشکل چیست و کد را عوض کرد و بعد هم شروع کرد خودش به نوشتن تست کیس. من دیگر از ماجرا پرت شده بودم و فقط شاهد تلاشهای این زبان بسته بودم که خودش تست کیس مینوشت و اجرا میکرد و گاها هم میدید روی تست کیس جواب نمیگیرد کد را تغییر میداد. چند دقیقهای تقلایش طول کشید و نهایتا گفت که great و تمام. کد با آن چیزی که من اول نوشته بودم بسیار تفاوت داشت طوری که برای فهمیدن منطقش باید از خود cursor دوباره میپرسیدم. شروع کردم چند testcase جدید را تست گرفتن و دیدم که روی همه آنها درست جواب میدهد. مساله تبدیل به یک مساله تصمیم ناپذیر شده بود. نمیتوانستم بگویم چرا درست کار میکند ولی هر چه تست کیس امتحان میکردم درست بود. فکر کردم دیدم آیا باید رها کنم؟ اگر جایی اشتباه کرده بود چه؟
ناخودآگاه یاد مثال همیشگی مقایسه LLM و ماشین حساب افتادم. فرض کنید الان یک جمع و ضرب چند رقمی را به ماشین حساب میدهیم و آن به ما جواب را میدهد. از کجا معلوم که اشتباه نکند؟ مثلا چه میدانم پالسی، سیمی، موجی روی هم بیافتند و یک رقم اشتباه شود. در این صورت آیا ما اصلا اغلب متوجه میشویم ؟!؟ کدام یک از ما نتیجه ماشین حساب را وریفای میکنیم؟ احتمالا روزهای اولی هم که ماشین حسابها اختراع شده بودند و مکانیکی تر از امروز بودند، افراد به آنها اعتماد کامل نداشتند و جواب نهاییشان را به نحوی وریفای میکردند. از جایی به بعد ولی احتمالا هم به خاطر اعتمادپذیری بیشتر و هم به خاطر این که محاسبات سنگین شده بودند دیگر هیچ کس به وریفای کردن جواب نهایی ماشین حساب فکر هم نمیکند. الغرض از نظر اعتمادپذیری بین LLMها و ماشینحسابها در لحظه فاصله زیاد است اما احتمالا روزی هم خواهد آمد که دیگر ما خروجیهای LLMها را وریفای نمیکنیم و از خود نمیپرسیم از کجا معلوم این درست بگوید؟ آن روز وضعمان شبیه به امروز است که برایمان سوال نمیشود از کجا معلوم این ماشین حساب درست محاسبه میکند؟
🔥1