راز موفقیت WinRAR: چطور با دوره آزمایشی بیپایان، پول درمیاره؟
نرمافزاری که بهمون یه دوره آزمایشی ۴۰ روزه میده، ولی بعدش میتونیم تا ابد با زدن دکمه "بستن" روی پاپآپها ازش رایگان استفاده کنیم. اما نکته شگفتانگیز اینجاست که این شرکت با همین روش عجیبش تونسته سال گذشته ۲۱ میلیون دلار درآمد داشته باشه! حالا بیاید ببینیم چطور این کار رو کرده.
استراتژی منحصر به فرد WinRAR
این نرم افزار از یه مدل لایسنسینگ استفاده میکنه که همیشه اجازه دسترسی به آزمایشی دائمی اپ رو میده . تو این روش، بعد از ۴۰ روز دوره آزمایشی، نرمافزار همچنان کار میکنه و هیچ محدودیتی برای کاربرا نمیذاره. این شرکت به کاربرا اعتماد داره که خودشون برای حمایت از نرمافزار لایسنس بخرن. این استراتژی باعث شده WinRAR به یه ابزار معروف تبدیل بشه و کاربراش به ۵۰۰ میلیون نفر برسن. این روش همچنین به بازاریابی ویروسی (Viral Marketing) کمک کرده؛ کاربرایی که از نرمافزار راضین، اونو به بقیه پیشنهاد میدن و این یعنی رشد طبیعی از طریق تبلیغات دهان به دهان (Word-of-Mouth Promotion). پس یعنی در آمد winrar از طریق کاربران رندومی که اونو میخرن تامین میشه؟
جواب کوتاه: نه
جواب بلند تر:
منبع اصلی درآمد: شرکتها
در حالی که کاربرای عادی میتونن تا ابد از نسخه رایگان استفاده کنن، درآمد اصلی WinRAR از فروش به شرکتها (B2B Sales) تأمین میشه. شرکتهای بزرگ مثل آمازون یا مایکروسافت نمیتونن ریسک استفاده از نرمافزار بدون لایسنس رو بپذیرن، چون ممکنه با مشکلات قانونی یا حتی آسیب به اعتبارشون مواجه بشن. برای همین، این شرکتها ترجیح میدن لایسنس بخرن. WinRAR هم با قیمت مناسب (۳۰ دلار برای هر لایسنس) و تخفیفهای حجمی (Volume Discounts) برای خریدهای عمده، خودشو به گزینهای جذاب برای کسبوکارها تبدیل کرده. این جریان درآمدی پایدار، بدون فشار آوردن به کاربرای عادی، WinRAR رو سرپا نگه داشته. پس در اصل در آمد winrar از طریق شرکت های رندومی که اونو میخرن تامین میشه :)
تبلیغات و ترفندهای نرمافزاری
حالا WinRAR تو نسخه موبایلش از تبلیغات استفاده میکنه و کاربرا میتونن با خرید لایسنس، تبلیغات رو حذف کنن. این یه مدل رایج به اسم Freemium هست، یعنی نرمافزار به صورت رایگان ارائه میشه، ولی برای حذف محدودیتها یا تبلیغات، باید پول پرداخت بشه. از طرف دیگه، پاپآپهایی که بعد از ۴۰ روز ظاهر میشن و تمومی هم ندارن، آزاردهنده هستن. این ترفند باعث میشه بعضی کاربرا برای خلاصی از این یادآوریها، تصمیم به خرید لایسنس بگیرن.
---
مثل همیشه کنجکاو بمونید :)
🆔 @MdDaily
نرمافزاری که بهمون یه دوره آزمایشی ۴۰ روزه میده، ولی بعدش میتونیم تا ابد با زدن دکمه "بستن" روی پاپآپها ازش رایگان استفاده کنیم. اما نکته شگفتانگیز اینجاست که این شرکت با همین روش عجیبش تونسته سال گذشته ۲۱ میلیون دلار درآمد داشته باشه! حالا بیاید ببینیم چطور این کار رو کرده.
استراتژی منحصر به فرد WinRAR
این نرم افزار از یه مدل لایسنسینگ استفاده میکنه که همیشه اجازه دسترسی به آزمایشی دائمی اپ رو میده . تو این روش، بعد از ۴۰ روز دوره آزمایشی، نرمافزار همچنان کار میکنه و هیچ محدودیتی برای کاربرا نمیذاره. این شرکت به کاربرا اعتماد داره که خودشون برای حمایت از نرمافزار لایسنس بخرن. این استراتژی باعث شده WinRAR به یه ابزار معروف تبدیل بشه و کاربراش به ۵۰۰ میلیون نفر برسن. این روش همچنین به بازاریابی ویروسی (Viral Marketing) کمک کرده؛ کاربرایی که از نرمافزار راضین، اونو به بقیه پیشنهاد میدن و این یعنی رشد طبیعی از طریق تبلیغات دهان به دهان (Word-of-Mouth Promotion). پس یعنی در آمد winrar از طریق کاربران رندومی که اونو میخرن تامین میشه؟
جواب کوتاه: نه
جواب بلند تر:
منبع اصلی درآمد: شرکتها
در حالی که کاربرای عادی میتونن تا ابد از نسخه رایگان استفاده کنن، درآمد اصلی WinRAR از فروش به شرکتها (B2B Sales) تأمین میشه. شرکتهای بزرگ مثل آمازون یا مایکروسافت نمیتونن ریسک استفاده از نرمافزار بدون لایسنس رو بپذیرن، چون ممکنه با مشکلات قانونی یا حتی آسیب به اعتبارشون مواجه بشن. برای همین، این شرکتها ترجیح میدن لایسنس بخرن. WinRAR هم با قیمت مناسب (۳۰ دلار برای هر لایسنس) و تخفیفهای حجمی (Volume Discounts) برای خریدهای عمده، خودشو به گزینهای جذاب برای کسبوکارها تبدیل کرده. این جریان درآمدی پایدار، بدون فشار آوردن به کاربرای عادی، WinRAR رو سرپا نگه داشته. پس در اصل در آمد winrar از طریق شرکت های رندومی که اونو میخرن تامین میشه :)
تبلیغات و ترفندهای نرمافزاری
حالا WinRAR تو نسخه موبایلش از تبلیغات استفاده میکنه و کاربرا میتونن با خرید لایسنس، تبلیغات رو حذف کنن. این یه مدل رایج به اسم Freemium هست، یعنی نرمافزار به صورت رایگان ارائه میشه، ولی برای حذف محدودیتها یا تبلیغات، باید پول پرداخت بشه. از طرف دیگه، پاپآپهایی که بعد از ۴۰ روز ظاهر میشن و تمومی هم ندارن، آزاردهنده هستن. این ترفند باعث میشه بعضی کاربرا برای خلاصی از این یادآوریها، تصمیم به خرید لایسنس بگیرن.
---
مثل همیشه کنجکاو بمونید :)
🆔 @MdDaily
👍9❤🔥6🔥1👏1
معمولا از این کارا نمیکنم یعنی کلا نمیکنم ولی از سر کنجکاوی دیدم یکی از کانال های تلگرامی یه تبلیغی گذاشته: آموزش رایگان در آمد دلاری با هوش مصنوعی.
کنجکاو شدم ببینم دقیقا چی میخواد آموزش بده
وارد کانالش شدم یه کانال پرایوت بود که ممبر هاش از 10k بعد از یه مدت رسیدن به 34k و هر پستی هم حداکثر 5k ویو میخورد.
تا اینجا و در شروع فعالیت مدرس شروع به ارسال ویس کرد که میخوام یه چیزی بهتون آموزش بدم که ۲ هزار دلار با هوش مصنوعی توی ۳۰ روز در بیارید و فرصتیه که فقط یک بار در خونتون رو میزنه.
پ ن:
د آخه شیر پاک خورده خود سم آلتمن نمیتونه ادعا کنه open ai ماهی ۲ هزار دلار داره سود میده همش تو ضررن
بگذریم.
بعد از گذشت یک هفته به مدت ۶ شب هر شب یه ویدیو آموزشی به نام دوره ی money master میذاشت که هر ویدیویی اش هم تقریبا ۴۰ دقیقه بود
مدرس کت و شلوار پوشیده به همراه یه گوشی آیفون، روی میز دلار و در یک لوکیشن باغ
هرچه همه کلاه برادران داشتن این عزیز یکجا داشت
حدس بزنید تو این ۶ قسمت چی یاد داد؟
.
.
.
درسته، هیچی :)))
عملا هیچییی، صرفا داشت نوار خالی پر میکرد و مدام تکرار میکرد که با هوش مصنوعی می تونید برید تمام پروژه های خارجی رو از سایتای فریلنسری بگیرید و لوگو و تیزر براشون تولید کنید. نهایت دمویی هم که انجام داد این بود که رفت توی کوپایلت یه لوگو ساخت. گفت ببینید این لوگو ۲۰۰ دلار قیمتشه xD
با کمی سرچ تونستم رد پای طرف رو تو شبکه های مجازی پیدا کنم.
سال ۲۰۲۰ فعالیتشو با آموزش های کپ کاتو در آمد با موبایل شروع کرده تا رسیدیم سال ۲۰۲۴ که اول فقط ابزار هوش مصنوعی معرفی میکرده بعد از یه جایی به بعد به ذهنش زده، عه چرا رویا فروشی نکنم رو موجی که راه افتاده؟
شاید بپرسید سرنوشت دوره ی money master چیشد؟
بعد از ۶ تا ویدیو نوار خالی پر کردن و ایجاد احساس نیاز به یک استاد هوش مصنوعی گفت یه دوره میخواد بذاره به نام money maker ظرفیتش ۱۰۰ نفره به قیمت ۴ و ۸۹۰
حدس بزنید چی میشه؟
قطعا ۱۰۰ نفر پیدا میشن که این دوره رو بخرن و من میگم حتی بیشتر.
مدرس نه ببخشید رویا فروش ما چیزی حدود ۵۰۰ میلیون یعنی با دلار ۹۰ تومن تقریبا ۶ هزار دلار در میاره که بهشون یاد بده چطوری ۲ هزار دلار در بیارن
از این داستان چه درسی میتونیم بگیریم؟
برندینگ توی کار واقعا چیز مهمیه جدیش بگیرید
به قول یه سنیوریی میگفت:
سعی کنید تو کار و برندینگتون مثل پورن استار ها بشید همه دوستشون دارن
---
خلاصه که این بار علاوه بر اینکه کنجکاو بمونید از ترفند های برندینگ به شیوه ی مثبتش الهام بگیرید :)
🆔 @MdDaily
کنجکاو شدم ببینم دقیقا چی میخواد آموزش بده
وارد کانالش شدم یه کانال پرایوت بود که ممبر هاش از 10k بعد از یه مدت رسیدن به 34k و هر پستی هم حداکثر 5k ویو میخورد.
تا اینجا و در شروع فعالیت مدرس شروع به ارسال ویس کرد که میخوام یه چیزی بهتون آموزش بدم که ۲ هزار دلار با هوش مصنوعی توی ۳۰ روز در بیارید و فرصتیه که فقط یک بار در خونتون رو میزنه.
پ ن:
د آخه شیر پاک خورده خود سم آلتمن نمیتونه ادعا کنه open ai ماهی ۲ هزار دلار داره سود میده همش تو ضررن
بگذریم.
بعد از گذشت یک هفته به مدت ۶ شب هر شب یه ویدیو آموزشی به نام دوره ی money master میذاشت که هر ویدیویی اش هم تقریبا ۴۰ دقیقه بود
مدرس کت و شلوار پوشیده به همراه یه گوشی آیفون، روی میز دلار و در یک لوکیشن باغ
هرچه همه کلاه برادران داشتن این عزیز یکجا داشت
حدس بزنید تو این ۶ قسمت چی یاد داد؟
.
.
.
درسته، هیچی :)))
عملا هیچییی، صرفا داشت نوار خالی پر میکرد و مدام تکرار میکرد که با هوش مصنوعی می تونید برید تمام پروژه های خارجی رو از سایتای فریلنسری بگیرید و لوگو و تیزر براشون تولید کنید. نهایت دمویی هم که انجام داد این بود که رفت توی کوپایلت یه لوگو ساخت. گفت ببینید این لوگو ۲۰۰ دلار قیمتشه xD
با کمی سرچ تونستم رد پای طرف رو تو شبکه های مجازی پیدا کنم.
سال ۲۰۲۰ فعالیتشو با آموزش های کپ کاتو در آمد با موبایل شروع کرده تا رسیدیم سال ۲۰۲۴ که اول فقط ابزار هوش مصنوعی معرفی میکرده بعد از یه جایی به بعد به ذهنش زده، عه چرا رویا فروشی نکنم رو موجی که راه افتاده؟
شاید بپرسید سرنوشت دوره ی money master چیشد؟
بعد از ۶ تا ویدیو نوار خالی پر کردن و ایجاد احساس نیاز به یک استاد هوش مصنوعی گفت یه دوره میخواد بذاره به نام money maker ظرفیتش ۱۰۰ نفره به قیمت ۴ و ۸۹۰
حدس بزنید چی میشه؟
قطعا ۱۰۰ نفر پیدا میشن که این دوره رو بخرن و من میگم حتی بیشتر.
مدرس نه ببخشید رویا فروش ما چیزی حدود ۵۰۰ میلیون یعنی با دلار ۹۰ تومن تقریبا ۶ هزار دلار در میاره که بهشون یاد بده چطوری ۲ هزار دلار در بیارن
از این داستان چه درسی میتونیم بگیریم؟
برندینگ توی کار واقعا چیز مهمیه جدیش بگیرید
به قول یه سنیوریی میگفت:
---
خلاصه که این بار علاوه بر اینکه کنجکاو بمونید از ترفند های برندینگ به شیوه ی مثبتش الهام بگیرید :)
🆔 @MdDaily
1👍7👌3
یکی از اتفاق های خوبی که توی بازنویسی Typenoscript با Golang میوفته علاوه بر افزایش ۱۰ برابری سرعت خود تایپ اسکریپت، اینکه به زودی شاهد افزایش پرفورمنس زیادی توی تجربه ی توسعه هستیم و پروژه هایی مثل Vscode و Playwright که با تایپ اسکریپت نوشته شدن خیلی سریع تر از قبل کامپایل میشن.
https://devblogs.microsoft.com/typenoscript/typenoscript-native-port/
🆔 @MdDaily
https://devblogs.microsoft.com/typenoscript/typenoscript-native-port/
🆔 @MdDaily
👍7🔥2👌1😐1
داشتم مقاله It’s Not A.I. — Junior Developers Have Always Struggled to Code از Walter G. رو میخوندم و دیدگاه خیلی جالبی داشت به هوش مصنوعی. توی مقاله میگه :
این هوش مصنوعی نیست — دولوپرهای تازهکار همیشه با کد زدن مشکل داشتن
اخیراً هوش مصنوعی رو مقصر کدنویسی بد تازهکارها میدونن، ولی این آدم با ۲۰ سال تجربه میگه تازهکارها همیشه مشکل داشتن.
دهههاست جونیورها به استک اورفلو، آموزش آنلاین و سنیورها تکیه کردن. ابزارهای هوش مصنوعی مثل کوپایلوت، جای یادگیری عمیق رو نمیگیرن — فقط دارن چیزی رو که همیشه بخشی از فرآیند یادگیری بوده، سادهتر میکنن.
قبل از دوران هوش مصنوعی
قبل استک اورفلو، کتابای سنگین، یادداشتای ناقص و انجمنایی داشتیم که جواب گرفتن روزها طول میکشید. سال ۲۰۰۳، این روش کار بود. و بیشتر اوقات، کار راه میوفتاده. قرار نبود یه شبه بشیم برنامهنویس شماره یک دنیا، ولی قرار بود دربارهٔ الگوریتمها، ساختمانهای داده، سیستمهای عامل و یه کم هم SQL یاد بگیریم.
بعد استک اورفلو اومد — و حدس بزنید چی شد؟ همون انتقادهایی که الان به ابزارهای هوش مصنوعی میشه، به اون هم شد. میگفتن دولوپرها تنبل میشن. دانشگاهها ممنوعش کردن. مردم میگفتن مهندسها بدتر میشن، چون مجبور نیستن برای پیدا کردن جوابها اینقدر تقلا کنن.
آیا تقلا کردنِ اجباری دولوپرهای بهتری میسازه؟
شاید. سخته بگیم.
ولی نویسنده میگه — حتی با اون همه یادگیری "خالص"، من یه دولوپر افتضاح بودم و هیچکس تعجب نکرد یا ناراحت نشد. چون یادگیری همینجوریه.در محیط کار، استک اورفلو بسیار مفید بوده و نیاز به جستجو در انجمنهای قدیمی را از بین برده.
معمولاً شرکتها پروژههای ۲۰ میلیونی رو به تازهکار نمیدن.
آیا خوندن روزانهٔ استک اورفلو دولوپر بهتریش یا بدتر کرد؟. شاید جواب هر دو باشه.
ولی واقعیت اینه که جوابا معمولاً تا وقتی کار کنن، کپیپیست میشن. اکثر دولوپرها هم همین کار رو میکردن.
هدف در نهایت تسلط به یه زبان برنامهنویسی نبود. هدف این بود که لیست کارهای هفتگی رو تیک بزنن و امیدوار باشن که به اندازهٔ کافی خوب کار کردن.
نقش سنیور ها
نویسنده میگه پنج سال اول کارم، خیلی به سنیورها تکیه میکردم. نه فقط به خاطر اینکه بهتر از من کد میزدن — که قطعاً میزدن — بلکه چون این فقط یه بخش از قضیه بود.
اونا تجربه داشتن. با کد کارهایی کرده بودن که من نه توی دانشگاه ازم خواسته بودن و نه توی هیچ آموزشی. و وقتی نوبت کار واقعی میرسید، این چیزی بود که کم داشتم.
هنوز اولین باری رو یادمه که مجبور شدم از راه دور به یه سرور لینوکس لاگین کنم تا یه سری پارامترهای شبکهٔ مبهم رو برای مهاجرتِ یه وبسایت تنظیم کنم.
دو سال از شروع کارم میگذشت. من اصلاً تا حالا از راه دور به هیچی لاگین نکرده بودم. مخففهایی که مدیرم به کار میبرد، انگار یه زبان باستانی بودن. و تنها جواب من این بود: "اوکی، حله!".
خوشبختانه، یه سنیور کنارم بود. وقتی دید دو ساعته دارم توی صندلیم عرق میریزم، قدم به قدم کل فرآیند رو بهم نشون داد.
و این الگو بارها توی سالهای اول کارم تکرار شد.
در مواقع ضروری، سنیور با سرعت و توضیح کار رو انجام میداد.
خلاصه اینکه، چه از استک اورفلو استفاده کنید، چه از چتجیپیتی، کوپایلوت یا یه پست انجمن از سال ۲۰۰۱، همهشون یه چیزن. یه ابزارن برای کمک به شما که یه کاری رو انجام بدید.
یادگیری و تجربه واقعی از تکرار و راهنمایی کسی میآید که کار را انجام داده و راه رو بهتون نشون میده.
آیا هوش مصنوعی بیشتر ضرر میزنه یا کمک میکنه؟
جواب این سوال کاملاً بستگی به دولوپری داره که ازش استفاده میکنه و هدفش چیه.
همهٔ دولوپرها نمیخوان همهٔ الگوریتمهای جستجو، ساختمانهای داده یا رمزنگاریها رو حفظ کنن. خیلیها فقط میخوان چیزهای باحال بسازن، تا جایی که میتونن، و در عین حال حقوق بگیرن.
و این هم مشکلی نداره.
واقعیت اینه که هوش مصنوعی دولوپرهای بد رو بدتر نمیکنه — فقط شکافهایی رو نشون میده که همیشه وجود داشتن. یه دولوپر خوب از هوش مصنوعی به عنوان ابزاری برای تسریع یادگیری، خودکارسازی کارهای خستهکننده و بهبود کارایی استفاده میکنه. یه دولوپر بد، کورکورانه کپی و پیست میکنه، همونطور که همیشه میکرد، چه از هوش مصنوعی باشه چه از استک اورفلو.
فرق بین این دو تا چیه؟ تجربه. کنجکاوی. تمایل به یادگیری.
هوش مصنوعی جای تجربهٔ دنیای واقعی رو نمیگیره. به شما یاد نمیده که چرا یه چیزی کار میکنه یا شما رو از یه کابوس دیباگ کردنِ ساعت ۲ صبح نجات نمیده. و قطعاً جای مهندس ارشدِ کنار دستتون رو نمیگیره که بهتون نشون میده کارها واقعاً چطوری انجام میشن.
پس آیا هوش مصنوعی ضرر میزنه یا کمک میکنه؟
این به ابزار بستگی نداره. این به دولوپر بستگی داره پس مثل همیشه کنجکاو بمونید :)
🆔 @MdDaily
این هوش مصنوعی نیست — دولوپرهای تازهکار همیشه با کد زدن مشکل داشتن
اخیراً هوش مصنوعی رو مقصر کدنویسی بد تازهکارها میدونن، ولی این آدم با ۲۰ سال تجربه میگه تازهکارها همیشه مشکل داشتن.
دهههاست جونیورها به استک اورفلو، آموزش آنلاین و سنیورها تکیه کردن. ابزارهای هوش مصنوعی مثل کوپایلوت، جای یادگیری عمیق رو نمیگیرن — فقط دارن چیزی رو که همیشه بخشی از فرآیند یادگیری بوده، سادهتر میکنن.
قبل از دوران هوش مصنوعی
قبل استک اورفلو، کتابای سنگین، یادداشتای ناقص و انجمنایی داشتیم که جواب گرفتن روزها طول میکشید. سال ۲۰۰۳، این روش کار بود. و بیشتر اوقات، کار راه میوفتاده. قرار نبود یه شبه بشیم برنامهنویس شماره یک دنیا، ولی قرار بود دربارهٔ الگوریتمها، ساختمانهای داده، سیستمهای عامل و یه کم هم SQL یاد بگیریم.
بعد استک اورفلو اومد — و حدس بزنید چی شد؟ همون انتقادهایی که الان به ابزارهای هوش مصنوعی میشه، به اون هم شد. میگفتن دولوپرها تنبل میشن. دانشگاهها ممنوعش کردن. مردم میگفتن مهندسها بدتر میشن، چون مجبور نیستن برای پیدا کردن جوابها اینقدر تقلا کنن.
آیا تقلا کردنِ اجباری دولوپرهای بهتری میسازه؟
شاید. سخته بگیم.
ولی نویسنده میگه — حتی با اون همه یادگیری "خالص"، من یه دولوپر افتضاح بودم و هیچکس تعجب نکرد یا ناراحت نشد. چون یادگیری همینجوریه.در محیط کار، استک اورفلو بسیار مفید بوده و نیاز به جستجو در انجمنهای قدیمی را از بین برده.
معمولاً شرکتها پروژههای ۲۰ میلیونی رو به تازهکار نمیدن.
آیا خوندن روزانهٔ استک اورفلو دولوپر بهتریش یا بدتر کرد؟. شاید جواب هر دو باشه.
ولی واقعیت اینه که جوابا معمولاً تا وقتی کار کنن، کپیپیست میشن. اکثر دولوپرها هم همین کار رو میکردن.
هدف در نهایت تسلط به یه زبان برنامهنویسی نبود. هدف این بود که لیست کارهای هفتگی رو تیک بزنن و امیدوار باشن که به اندازهٔ کافی خوب کار کردن.
نقش سنیور ها
نویسنده میگه پنج سال اول کارم، خیلی به سنیورها تکیه میکردم. نه فقط به خاطر اینکه بهتر از من کد میزدن — که قطعاً میزدن — بلکه چون این فقط یه بخش از قضیه بود.
اونا تجربه داشتن. با کد کارهایی کرده بودن که من نه توی دانشگاه ازم خواسته بودن و نه توی هیچ آموزشی. و وقتی نوبت کار واقعی میرسید، این چیزی بود که کم داشتم.
هنوز اولین باری رو یادمه که مجبور شدم از راه دور به یه سرور لینوکس لاگین کنم تا یه سری پارامترهای شبکهٔ مبهم رو برای مهاجرتِ یه وبسایت تنظیم کنم.
دو سال از شروع کارم میگذشت. من اصلاً تا حالا از راه دور به هیچی لاگین نکرده بودم. مخففهایی که مدیرم به کار میبرد، انگار یه زبان باستانی بودن. و تنها جواب من این بود: "اوکی، حله!".
خوشبختانه، یه سنیور کنارم بود. وقتی دید دو ساعته دارم توی صندلیم عرق میریزم، قدم به قدم کل فرآیند رو بهم نشون داد.
و این الگو بارها توی سالهای اول کارم تکرار شد.
در مواقع ضروری، سنیور با سرعت و توضیح کار رو انجام میداد.
خلاصه اینکه، چه از استک اورفلو استفاده کنید، چه از چتجیپیتی، کوپایلوت یا یه پست انجمن از سال ۲۰۰۱، همهشون یه چیزن. یه ابزارن برای کمک به شما که یه کاری رو انجام بدید.
یادگیری و تجربه واقعی از تکرار و راهنمایی کسی میآید که کار را انجام داده و راه رو بهتون نشون میده.
آیا هوش مصنوعی بیشتر ضرر میزنه یا کمک میکنه؟
جواب این سوال کاملاً بستگی به دولوپری داره که ازش استفاده میکنه و هدفش چیه.
همهٔ دولوپرها نمیخوان همهٔ الگوریتمهای جستجو، ساختمانهای داده یا رمزنگاریها رو حفظ کنن. خیلیها فقط میخوان چیزهای باحال بسازن، تا جایی که میتونن، و در عین حال حقوق بگیرن.
و این هم مشکلی نداره.
واقعیت اینه که هوش مصنوعی دولوپرهای بد رو بدتر نمیکنه — فقط شکافهایی رو نشون میده که همیشه وجود داشتن. یه دولوپر خوب از هوش مصنوعی به عنوان ابزاری برای تسریع یادگیری، خودکارسازی کارهای خستهکننده و بهبود کارایی استفاده میکنه. یه دولوپر بد، کورکورانه کپی و پیست میکنه، همونطور که همیشه میکرد، چه از هوش مصنوعی باشه چه از استک اورفلو.
فرق بین این دو تا چیه؟ تجربه. کنجکاوی. تمایل به یادگیری.
هوش مصنوعی جای تجربهٔ دنیای واقعی رو نمیگیره. به شما یاد نمیده که چرا یه چیزی کار میکنه یا شما رو از یه کابوس دیباگ کردنِ ساعت ۲ صبح نجات نمیده. و قطعاً جای مهندس ارشدِ کنار دستتون رو نمیگیره که بهتون نشون میده کارها واقعاً چطوری انجام میشن.
پس آیا هوش مصنوعی ضرر میزنه یا کمک میکنه؟
این به ابزار بستگی نداره. این به دولوپر بستگی داره پس مثل همیشه کنجکاو بمونید :)
🆔 @MdDaily
👌13👍5
چیزی که ما میخواستیم تو یکی از فایل های .js به دو صورت زیر مخفی شده بود.
"client_id=f1TFyuaI8LX1Ybd1zvQRX8GpsNYcQ3Y5"
client_id:"f1TFyuaI8LX1Ybd1zvQRX8GpsNYcQ3Y5"
حالا وقتش بود که این فرایند رو اتوماتیک کنم. عید وقت خوبیه که اگه هنوز regex بلد نیستید، یاد بگیرید (وبسایت https://regexlearn.com/ و ریپو ی https://github.com/ziishaned/learn-regex که ترجمه فارسی هم داره و در نهایت ویدیوی https://www.youtube.com/watch?v=sXQxhojSdZM منابع خوبی برای یادگیری هستن).
سناریو ساده بود یه کد go بنویسم که بره محتوای soundcloud.com رو بگیره لینک های .js رو ازش استخراج کرده و شروع کنه توی فایل های جاوا اسکریپت با regex دنبال پترن client_id بگرده. می تونید کد رو از اینجا ببینید:
https://gist.github.com/mdpe-ir/709c3ca362fa0c2a30fa71e46ddd1f96
ولی بریم برای توضیح بخش های مهمش:
func fetchHTML(url string) (string, error) {
resp, err := http.Get(url)
if err != nil {
return "", fmt.Errorf("error fetching URL %s: %v", url, err)
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
return string(body), nil
}این تابع یه درخواست HTTP GET به آدرس https://soundcloud.com/ میفرسته و کل محتوای HTML صفحه رو برمیگردونه.
نکته: اینجا defer resp.Body.Close() باعث میشه بعد از تموم شدن کار، اتصال بسته بشه تا منابع سیستم آزاد بشه.
این تابع HTML رو پارس میکنه و همه تگهای <noscript> رو پیدا میکنه. دو نوع جاوااسکریپت رو جدا میکنه: لینکهای خارجی (با src) و کدهای داخلی (inline).
از پکیج golang.org/x/net/html برای پارس کردن HTML استفاده میکنه. لینکهای نسبی رو با resolveURL به آدرس کامل تبدیل میکنه و فقط فایلهایی که به .js ختم میشن رو نگه میداره.
برای هر لینک .js که پیدا شده، یه درخواست HTTP میفرسته و محتوای فایل رو میگیره.
پکیج regexp استفاده میکنه. دو الگو رو چک میکنه
برای فرمت پارامتری:
client_id=([A-Za-z0-9]{32})برای فرمت object مانند:
client_id\s*:\s*["']([A-Za-z0-9]{32})["']نکته: [A-Za-z0-9]{32} یعنی دنبال یه رشته ۳۲ کاراکتری از حروف و اعداد میگرده.
جمعبندی و نمایش نتیجه (main)
همه مراحل رو اجرا میکنه، client_idها رو جمع میکنه، تکراریها رو حذف میکنه و چاپ میکنه.
توی تست هام متوجه شدم که هر client id حدودا ۷ روز معتبره. میشه یه cron job نوشت که طی یه مدت مشخص اجرا بشه و client id رو اپدیت کنه.
بعد از اینکه client_id رو پیدا کردیم، حالا میتونیم با استفاده ازش به APIهای SoundCloud درخواست بزنیم. برای این کار، من تصمیم گرفتم یه درخواست به endpoint سرچ بزنم تا یه خواننده پیدا کنم و بعد برم لیست موزیکهاش رو بگیرم. بیایم اینو قدم به قدم پیاده کنیم.
یه API داره که میتونیم با استفاده ازش یه خواننده رو جستجو کنیم. طبق درخواستها تو Burp Suite یه endpoint سرچ چیزی شبیه اینه:
برای جستو در کاربران:
GET https://api-v2.soundcloud.com/search/users?q={query}&client_id={client_id}برای جستجوی کلی :
GET https://api-v2.soundcloud.com/search?q={query}&client_id={client_id}حالا فقط کافی بود برای گرفتن لیست موزیک های خواننده :
GET https://api-v2.soundcloud.com/users/{user_id}/tracks?client_id={client_id}به عنوان مثال این اندپوینت لیست موزیک های Safir رو بر میگردونه:
https://api-v2.soundcloud.com/users/1016216608/tracks?client_id=f1TFyuaI8LX1Ybd1zvQRX8GpsNYcQ3Y5
حالا که این کار رو کردیم، میتونیم کلاینت رو گسترش بدیم، مثلاً یه رابط کاربری ساده باهاش بسازیم یا قابلیت دانلود ترکها رو اضافه کنیم:)
---
مثل همیشه کنجکاو بمونید :)
🆔 @MdDaily
Please open Telegram to view this post
VIEW IN TELEGRAM
1👌8 8 1
سلام سلام 💖
اول از همه🎆 🎆 🎆 🎆 🎆 . سالی پر از اتفاقات خوب و پر از Notification's واریزی💸 و از همه مهم تر حال خوب و سلامتی به همراه باگ 🪲 های کمتر براتون آرزو میکنم :)
امیدوارم وقتی آخر سال ۱۴۰۴ رسید به لیست کار هاتون که نگاه می کنید همه ی هدف هاتون رو تیک زده باشید✅
تقریبا سه سال پیش بود که یه گروهی شیش نفره با دوستام داشتیم و خب هنوزم داریم و توی گروه مقالاتی که میخوندم و برام جالب بود رو مینوشتم بعد گفتم خب چرا براش یه کانال نزنم و عمومی ترش نکنم ؟ روزی که این کانال رو با هدف انتشار چیزایی که بلدم و میخونم زدم (۵ آذر ۱۴۰۱) اولین عضو های کانال بچه های همون گروه بودن و الان به لطف شما عزیزان و در کنارتون خانوادمون روز به روز بزرگتر شده و از همتون ممنونم❤️
پ ن :
دوستان از چند روز قبل تذکر دادن با ۴۰۴ شوخی نکنم. منم گفتم حله با ۴۰۳ شوخی میکنم. توی ۴۰۳ همه چیز forbidden، پارتنر پیدا نکردم، ۴۰۴ هم که باهاش شوخی نمیکنیم ایشالا همین جمع ۴۰۵ .
ارادتمند شما
ماهان
---
امسال بیشتر از پارسال کنجکاو باشید :)
🆔 @MdDaily
اول از همه
امیدوارم وقتی آخر سال ۱۴۰۴ رسید به لیست کار هاتون که نگاه می کنید همه ی هدف هاتون رو تیک زده باشید
تقریبا سه سال پیش بود که یه گروهی شیش نفره با دوستام داشتیم و خب هنوزم داریم و توی گروه مقالاتی که میخوندم و برام جالب بود رو مینوشتم بعد گفتم خب چرا براش یه کانال نزنم و عمومی ترش نکنم ؟ روزی که این کانال رو با هدف انتشار چیزایی که بلدم و میخونم زدم (۵ آذر ۱۴۰۱) اولین عضو های کانال بچه های همون گروه بودن و الان به لطف شما عزیزان و در کنارتون خانوادمون روز به روز بزرگتر شده و از همتون ممنونم
پ ن :
دوستان از چند روز قبل تذکر دادن با ۴۰۴ شوخی نکنم. منم گفتم حله با ۴۰۳ شوخی میکنم. توی ۴۰۳ همه چیز forbidden، پارتنر پیدا نکردم، ۴۰۴ هم که باهاش شوخی نمیکنیم ایشالا همین جمع ۴۰۵ .
ارادتمند شما
ماهان
---
امسال بیشتر از پارسال کنجکاو باشید :)
🆔 @MdDaily
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10 9 2
بعد از اینکه از سفر برگشتیم ما بودیم و کلی دنگی که باید حساب میشد، هرکی یه جا را حساب کرده بود، یه سری جاها هزینه ها ریز میشدن و احتمال خطای محسابه ی دستیش زیاد بود، پس سریع copilot رو باز کردم و دنگی رو ساختم .
تقسیم دنگ رو براتون انجام میده، خروجی اکسل ریز هزینه ها رو هم بهتون میده و میگه کی چه قدر باید به کی پرداخت کنه.
با js خام نوشته شده ، کد پروژه پیچیده نیست ولی کار سختیو راحت کرد :)
👩💻 سورس کد پروژه:
https://github.com/mdpe-ir/dongy
👩💻 نسخه ی دیپلوی شده:
https://dongy.mddaily.ir/
🆔 @MdDaily
تقسیم دنگ رو براتون انجام میده، خروجی اکسل ریز هزینه ها رو هم بهتون میده و میگه کی چه قدر باید به کی پرداخت کنه.
با js خام نوشته شده ، کد پروژه پیچیده نیست ولی کار سختیو راحت کرد :)
https://github.com/mdpe-ir/dongy
https://dongy.mddaily.ir/
ایده های باحالی میشه روش پیاده کرد و تبدیلش کرد به PWA ولی خب فعلا داره کار میکنه.
🆔 @MdDaily
Please open Telegram to view this post
VIEW IN TELEGRAM
👌16 3👎2🔥1
Forwarded from Abrha
در کانال ابرها عضو شوید:
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣7👍2
گنوم 48 با نام “Bengaluru” عرضه شده و این یکی از بزرگترین آپدیت های این میزکار دوس داشتنی حساب میشه.
تقریبا توی این چندین سالی که گنو لینوکس رو با میزکار گنوم به عنوان os اصلیم داشتم. توی این نسخه ی گنوم علاوه بر کلی فیچر باحالی که اضافه شده مثل:
- اعلانهای مرتبتر: اعلانها حالا بهصورت گروهی نمایش داده میشن و مدیریتشون سادهتر شده.
- عملکرد بهتر: با dynamic triple buffering، انیمیشنها روون و مصرف منابع کمتر شده و شاهد تجربه ی کاربری روون تری توی سیستم های ضعیف تر هستیم و همچنین لود پوشهها توی Files تا ۵ برابر سریعتره!
- ویرایشگر تصویر جدید: برش، چرخش و زوم هوشمند به نمایشگر تصاویر اضافه شده.
- فونتهای تازه: فونت قبلی Cantarell با Adwaita Sans جایگزین شده.
- سلامت باتری: گزینه جدید برای محدود کردن شارژ به ۸۰٪ و افزایش عمر باتری.
- پخشکننده جدید صوتی: اپلیکیشن مینیمال برای پخش فایلهای صوتی با کنترل سرعت.
- تقویم هوشمند: پشتیبانی از منطقه زمانی برای رویدادها.
- و بالاخره پشتیبانی از HDR (High Dynamic Range): شروع پشتیبانی از نمایشگرهای HDR .
✔️ ولی جذاب ترین بخش این آپدیت اضافه شدن سلامت دیجیتال یا همون Digital Wellbeing به تنظیمات هست. (تصویر توی پست)
این قابلیت طراحی شده تا به کاربرا کمک کنه عادتهای سالمی موقع کار با کامپیوتر داشته باشن. شامل:
میزان استفاده از صفحه نمایش: میتونید ببینید هر روز چقدر پای صفحه نمایش وقت میگذرونید و این مقدار رو با روزها و هفتههای قبل مقایسه کنید.
محدودیت زمانی صفحه نمایش: میتونید برای کل زمانی که هر روز از صفحه نمایش استفاده میکنید، یه سقف تعیین کنید. وقتی به این محدودیت زمانی رسیدید، یه اعلان بهتون نشون داده میشه و یه گزینه هم وجود داره که صفحه رو سیاه و سفید میکنه.
یادآور استراحت: میتونید برای خودتون یادآور تنظیم کنید تا طبق توصیههای استاندارد بهداشتی، مرتب به چشمهاتون استراحت بدید و کمی هم بلند شید و حرکت کنید.
---
💡 مثل همیشه کنجکاو بمونید :)
🆔 @MdDaily
تقریبا توی این چندین سالی که گنو لینوکس رو با میزکار گنوم به عنوان os اصلیم داشتم. توی این نسخه ی گنوم علاوه بر کلی فیچر باحالی که اضافه شده مثل:
- اعلانهای مرتبتر: اعلانها حالا بهصورت گروهی نمایش داده میشن و مدیریتشون سادهتر شده.
- عملکرد بهتر: با dynamic triple buffering، انیمیشنها روون و مصرف منابع کمتر شده و شاهد تجربه ی کاربری روون تری توی سیستم های ضعیف تر هستیم و همچنین لود پوشهها توی Files تا ۵ برابر سریعتره!
- ویرایشگر تصویر جدید: برش، چرخش و زوم هوشمند به نمایشگر تصاویر اضافه شده.
- فونتهای تازه: فونت قبلی Cantarell با Adwaita Sans جایگزین شده.
- سلامت باتری: گزینه جدید برای محدود کردن شارژ به ۸۰٪ و افزایش عمر باتری.
- پخشکننده جدید صوتی: اپلیکیشن مینیمال برای پخش فایلهای صوتی با کنترل سرعت.
- تقویم هوشمند: پشتیبانی از منطقه زمانی برای رویدادها.
- و بالاخره پشتیبانی از HDR (High Dynamic Range): شروع پشتیبانی از نمایشگرهای HDR .
این قابلیت طراحی شده تا به کاربرا کمک کنه عادتهای سالمی موقع کار با کامپیوتر داشته باشن. شامل:
میزان استفاده از صفحه نمایش: میتونید ببینید هر روز چقدر پای صفحه نمایش وقت میگذرونید و این مقدار رو با روزها و هفتههای قبل مقایسه کنید.
محدودیت زمانی صفحه نمایش: میتونید برای کل زمانی که هر روز از صفحه نمایش استفاده میکنید، یه سقف تعیین کنید. وقتی به این محدودیت زمانی رسیدید، یه اعلان بهتون نشون داده میشه و یه گزینه هم وجود داره که صفحه رو سیاه و سفید میکنه.
یادآور استراحت: میتونید برای خودتون یادآور تنظیم کنید تا طبق توصیههای استاندارد بهداشتی، مرتب به چشمهاتون استراحت بدید و کمی هم بلند شید و حرکت کنید.
---
🆔 @MdDaily
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👍3 2🐳1🤣1
چند وقتی بود میخواستم راجب موضوعاتی بنویسم که به دلیل محدودیت های پست های تلگرامی امکانش نبود و باید به صورت وبلاگ نوشته میشد. قبلا یک وبلاگ ایستا و اپن سورس با استفاده از Hugo ایجاد کرده بودم که میتونید از طریق این لینک :
🌐 https://mddaily.web.app
به پست های منتشر شده در این وبلاگ دسترسی پیدا کنید.
ولی یه مشکلی وجود داشت و اونم مدیریت وبلاگ استاتیک بود ، برای همین تصمیم گرفتم تا از نسخه ی بعدی وبلاگ کانال رو نمایی کنم و تشکر میکنم از تیم خوب kubarcloud🟢 که اسپانسر زیر ساخت شدند.
اولین پست وبلاگ با عنوان "یادگیری Big O یک بار برای همیشه" منتشر شده که توی پست بعدی معرفیش میکنم :)
🌐 https://mddaily.ir/
---
💡 مثل همیشه کنجکاو بمونید :)
🆔 @MdDaily
به پست های منتشر شده در این وبلاگ دسترسی پیدا کنید.
ولی یه مشکلی وجود داشت و اونم مدیریت وبلاگ استاتیک بود ، برای همین تصمیم گرفتم تا از نسخه ی بعدی وبلاگ کانال رو نمایی کنم و تشکر میکنم از تیم خوب kubarcloud
اولین پست وبلاگ با عنوان "یادگیری Big O یک بار برای همیشه" منتشر شده که توی پست بعدی معرفیش میکنم :)
---
🆔 @MdDaily
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥1🐳1
یادگیری Big O یک بار برای همیشه
توی این پست حالت های مختلفی از Big O به همراه کد نمونه بررسی شدن. از ساده ترین حالت یعنی O(n) شروع میکنیم و قدم به قدم تا حالت های پیجیده تری مثل O(n log n) رو بررسی میکنیم.
لینک کامل مقاله در وبلاگ Mddaily:
🔗 https://mddaily.ir/یادگیری-big-o-یک-بار-برای-همیشه/
---
💡 مثل همیشه کنجکاو بمونید :)
🆔 @MdDaily
کاور پست با GPT تولید شده :)
توی این پست حالت های مختلفی از Big O به همراه کد نمونه بررسی شدن. از ساده ترین حالت یعنی O(n) شروع میکنیم و قدم به قدم تا حالت های پیجیده تری مثل O(n log n) رو بررسی میکنیم.
پیچیدگی زمانی Big O چیه؟
توی علم کامپیوتر، از علامتگذاری Big O استفاده میشه تا الگوریتمها رو بر اساس اینکه زمان اجرا یا میزان حافظه مورد نیازشون با بزرگتر شدن ورودی چطوری زیاد میشه، دستهبندی کنن. یا به عبارت دیگه، یه راهیه برای اینکه تحلیل کنیم چقدر زمان میبره تا الگوریتم ما با بزرگتر شدن ورودی اجرا بشه. منظور از ‘O’ کل عملیاته، و ‘n’ هم ورودی.
بیاین چند تا مثال رو ببینیم تا قضیه روشنتر بشه.
حالت O(n)
شاید سادهترین مثالی که بشه فهمید، همون O(n) باشه، جایی که نرخ رشد خطیه.
یه آرایه نامرتب n رو در نظر بگیرین، یه تابعی بنویسین که بزرگترین مقدار رو برگردو...
لینک کامل مقاله در وبلاگ Mddaily:
---
🆔 @MdDaily
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5 3✍1🆒1 1
این یه روش فکر جدیده برای ساختن نرمافزار با کمک هوش مصنوعی. این اصطلاح رو آندری کارپاتی (Andrej Karpathy) ساخته و «وایب کدینگ» رو اینجوری توصیف میکنه: «خودت رو بسپر به حس و حالت، پذیرای رشد نمایی باش، و اصلاً یادت بره که کدی هم وجود داره».
اما خود Andrej Karpathy کیه؟
رزومه ی کامل و پروژه هاشو میتونید از وبسایت خودش karpathy.ai ببینید ولی به طور خلاصه جزو موسس ها و بخش تحقیقاتی OpenAI بوده بعد به عنوان مدیر ارشد هوش مصنوعی میره تسلا و بعد از چند سال مجدد بر میگرده به OpenAI.
کارپاتی از یه دستیار کدنویسی هوش مصنوعی استفاده میکنه و فلسفهاش اینه که «همه چیز رو قبول کن». اون فرض میکنه که این دستیار هوش مصنوعی، نرمافزاری که داره میسازه رو هم مینویسه و هم مشکلاتش رو حل میکنه.
با اینکه این روش کدنویسی خیلی وسوسهانگیزه، ولی آیا با توجه به محدودیتهای فعلی مدلهای زبانی بزرگ (LLM) و این اوضاعی که همهچیز داره تغییر میکنه، نتیجهاش به اندازه کافی دقیق هست؟ میشه با وایب کدینگ یه اپلیکیشن کامل رو بدون مشکل بالا آورد؟ میشه ازش خواست که تستها رو هم بنویسه؟ با ناهماهنگیها توی طراحی چیکار میکنه؟ این فقط یه چیز زودگذره (فَد fad) یا یه استراتژی بلندمدت واقعیه که برنامهنویسها باید یاد بگیرن و ازش استفاده کنن؟
اکه علاقه داشتید:
https://x.com/karpathy/status/1886192184808149383
https://www.youtube.com/watch?v=Tw18-4U7mts
https://dev.to/erikch/what-i-learned-vibe-coding-30em
---
🆔 @MdDaily
Please open Telegram to view this post
VIEW IN TELEGRAM
قسمت اول
داشتم رایتاپ I Thought It Was a Safe Deploy… Until Checkout Disappeared رو میخوندم نکات جالبی توش داشت. طرف مسئول بخش payments بوده. شروع میکنه به استقرار نسخه ی جدید. تست ها گرفته شده بوده و روی محیط Dev همه چی اوکی به نظر میرسید. همه چیز آروم بوده تا اینکه Slack اشون پر شده بود از پیام های: «صفحه چکاوت لود نمیشه.»، «صفحه سفیده هیچی نمیاد.» ، «اپل پِی (Apple Pay) کار نمیکنه.».
این یعنی قطعی کل فرایند پرداخت. نویسنده میگفت با اینکه قبلا راجب outage یا همون از کار افتادن ها خونده بوده ولی این اولین تجربش بوده و از همه بدتر توی محیط پروداکشن اتفاق افتاده بوده. اون لحظه هایی که آدرنالین زده بالا، سعی میکنی خودت رو آروم نشون بدی ولی مغزت داره از فکر و خیال و استرس میترکه.
دقیقا چیشده بود؟
بخش payments از اون جاهاست که وقتی همه چی مرتب و درست کار میکنه، خیلی ساکت و آروم اون پشتصحنه به کارش ادامه میده... اما وای به روزی که یه جای کارش بلنگه و یه چیزی خراب بشه؛ اونوقته که تبدیل به یه هرج و مرج میشه.
چند وقت پیش SDK مربوط به Apple Pay رو آپدیت کرده بودند چون نسخهای که داشتن استفاده میکردن، دیگه توسط خود تیم اپل پشتیبانی نمیشد و منسوخ شده بود. نسخهی جدید هم یه سری تغییرات توی API contract داشت—که بیشترش مربوط به این بود که موقع شروع کار و مقداردهی اولیه ورودیها چطوری باید بهش داده بشن. اینا هم تغییرات لازم رو انجام داده بودن، همه چی رو روی محیط توسعه تست شده بود و به نظر میرسید همه چی ردیفه. یه مدت میگذره و میبینن هشدار های تعداد خطاهای مربوط به Apple Pay یهو خیلی بالا رفته. فهمیدن که اون SDK آپدیتشده، به یه تابع خاص وابسته بود که توی بعضی از مرورگرهای قدیمیتر پشتیبانی نمیشد. نتیجهاش این بود که همون اولِ فرآیند پرداخت، یه خطای زمان اجرا اتفاق میافتاد؛ یعنی انقدر زود این خطا رخ میداد که کلاً کل تجربهی چکاوت رو از کار مینداخت. نه دیگه خبری از Apple Pay بود. نه هیچ روش پرداخت دیگهای کار میکرد. فقط یه صفحهی سفیدِ خالی جلو چشم کاربر بود.
⚠️ اول از همه: با دیباگ کردن شروع نکنید!
قبل از اینکه وارد جزئیات بشیم، یه درس خیلی مهم هست:
چون وقتی پای کد شما وسطه، مغزتون اتوماتیک میره تو این فاز که:
«خب، باگ کجاست؟ چی خراب شده؟ باید زود پیداش کنم و درستش کنم.»
ولی نکته اینجاست: دیباگ کردن زمانبره.
و در تمام مدتی که شما دارین لاگها رو زیر و رو میکنین و فرضیههای مختلف رو تست میکنین، کاربرهای واقعی اون بیرون گیر افتادن و نمیتونن کارشون رو انجام بدن.
درآمد شرکت داره کم میشه و از همه مهمتر، کاربرها دارن یه تجربهی خیلی بد رو از سر میگذرونن.
مگه اینکه دقیقاً بدونین مشکل چیه و صددرصد مطمئن باشین که راه حلش امنه و میشه خیلی سریع دیپلویاش کرد، وگرنه بهترین و عاقلانهترین کار اینه:
کامیتی که باعث مشکل شده رو برگردونین عقب (Revert). کد قبلی رو دوباره دیپلوی کنین (Redeploy). اوضاع رو پایدار کنین.
شاید این کار خیلی قهرمانانه به نظر نرسه، ولی این مسئولانهترین و درستترین کاریه که در اون لحظه میتونین انجام بدین.هدف اصلی تو اون شرایط این نیست که زیر فشار و استرس دیباگ کنین. هدف اینه که جلوی ضرر بیشتر رو بگیرین بعدش، وقتی بحران تموم شد، اون موقع با خیال راحت وقت دارین که برین و دقیق بفهمین که واقعاً چی خراب شده بود.
این ها هم دقیقا همین کارو کردن اون کامیت مشکلساز رو رولبک کردن و اون صفحهی سفید خالی غیبش زد. بخش چکاوت دوباره برگشت سر جاش. کاربرا دوباره میتونستن پرداختهاشون رو انجام بدن. حالا وقشته که کشف کرد دلیلش چی بود. شروع کردن به بررسی لاگها، تست کردن مرورگرها، و تلاش برای بازتولید مشکل تو یه محیط کنترلشده...
—-
⬅️ ادامه در قسمت بعدی
💡 تا قسمت بعدی مثل همیشه کنجکاو بمونید :)
🆔 @MdDaily
داشتم رایتاپ I Thought It Was a Safe Deploy… Until Checkout Disappeared رو میخوندم نکات جالبی توش داشت. طرف مسئول بخش payments بوده. شروع میکنه به استقرار نسخه ی جدید. تست ها گرفته شده بوده و روی محیط Dev همه چی اوکی به نظر میرسید. همه چیز آروم بوده تا اینکه Slack اشون پر شده بود از پیام های: «صفحه چکاوت لود نمیشه.»، «صفحه سفیده هیچی نمیاد.» ، «اپل پِی (Apple Pay) کار نمیکنه.».
این یعنی قطعی کل فرایند پرداخت. نویسنده میگفت با اینکه قبلا راجب outage یا همون از کار افتادن ها خونده بوده ولی این اولین تجربش بوده و از همه بدتر توی محیط پروداکشن اتفاق افتاده بوده. اون لحظه هایی که آدرنالین زده بالا، سعی میکنی خودت رو آروم نشون بدی ولی مغزت داره از فکر و خیال و استرس میترکه.
دقیقا چیشده بود؟
بخش payments از اون جاهاست که وقتی همه چی مرتب و درست کار میکنه، خیلی ساکت و آروم اون پشتصحنه به کارش ادامه میده... اما وای به روزی که یه جای کارش بلنگه و یه چیزی خراب بشه؛ اونوقته که تبدیل به یه هرج و مرج میشه.
چند وقت پیش SDK مربوط به Apple Pay رو آپدیت کرده بودند چون نسخهای که داشتن استفاده میکردن، دیگه توسط خود تیم اپل پشتیبانی نمیشد و منسوخ شده بود. نسخهی جدید هم یه سری تغییرات توی API contract داشت—که بیشترش مربوط به این بود که موقع شروع کار و مقداردهی اولیه ورودیها چطوری باید بهش داده بشن. اینا هم تغییرات لازم رو انجام داده بودن، همه چی رو روی محیط توسعه تست شده بود و به نظر میرسید همه چی ردیفه. یه مدت میگذره و میبینن هشدار های تعداد خطاهای مربوط به Apple Pay یهو خیلی بالا رفته. فهمیدن که اون SDK آپدیتشده، به یه تابع خاص وابسته بود که توی بعضی از مرورگرهای قدیمیتر پشتیبانی نمیشد. نتیجهاش این بود که همون اولِ فرآیند پرداخت، یه خطای زمان اجرا اتفاق میافتاد؛ یعنی انقدر زود این خطا رخ میداد که کلاً کل تجربهی چکاوت رو از کار مینداخت. نه دیگه خبری از Apple Pay بود. نه هیچ روش پرداخت دیگهای کار میکرد. فقط یه صفحهی سفیدِ خالی جلو چشم کاربر بود.
⚠️ اول از همه: با دیباگ کردن شروع نکنید!
قبل از اینکه وارد جزئیات بشیم، یه درس خیلی مهم هست:
وقتی با یه مشکل جدی و قطعی (outage) تو محیط پروداکشن روبرو میشین، اولین غریزهتون نباید این باشه که بپرین سراغ دیباگ کردن.
چون وقتی پای کد شما وسطه، مغزتون اتوماتیک میره تو این فاز که:
«خب، باگ کجاست؟ چی خراب شده؟ باید زود پیداش کنم و درستش کنم.»
ولی نکته اینجاست: دیباگ کردن زمانبره.
و در تمام مدتی که شما دارین لاگها رو زیر و رو میکنین و فرضیههای مختلف رو تست میکنین، کاربرهای واقعی اون بیرون گیر افتادن و نمیتونن کارشون رو انجام بدن.
درآمد شرکت داره کم میشه و از همه مهمتر، کاربرها دارن یه تجربهی خیلی بد رو از سر میگذرونن.
مگه اینکه دقیقاً بدونین مشکل چیه و صددرصد مطمئن باشین که راه حلش امنه و میشه خیلی سریع دیپلویاش کرد، وگرنه بهترین و عاقلانهترین کار اینه:
کامیتی که باعث مشکل شده رو برگردونین عقب (Revert). کد قبلی رو دوباره دیپلوی کنین (Redeploy). اوضاع رو پایدار کنین.
شاید این کار خیلی قهرمانانه به نظر نرسه، ولی این مسئولانهترین و درستترین کاریه که در اون لحظه میتونین انجام بدین.هدف اصلی تو اون شرایط این نیست که زیر فشار و استرس دیباگ کنین. هدف اینه که جلوی ضرر بیشتر رو بگیرین بعدش، وقتی بحران تموم شد، اون موقع با خیال راحت وقت دارین که برین و دقیق بفهمین که واقعاً چی خراب شده بود.
این ها هم دقیقا همین کارو کردن اون کامیت مشکلساز رو رولبک کردن و اون صفحهی سفید خالی غیبش زد. بخش چکاوت دوباره برگشت سر جاش. کاربرا دوباره میتونستن پرداختهاشون رو انجام بدن. حالا وقشته که کشف کرد دلیلش چی بود. شروع کردن به بررسی لاگها، تست کردن مرورگرها، و تلاش برای بازتولید مشکل تو یه محیط کنترلشده...
—-
🆔 @MdDaily
Please open Telegram to view this post
VIEW IN TELEGRAM
Md Daily
قسمت اول داشتم رایتاپ I Thought It Was a Safe Deploy… Until Checkout Disappeared رو میخوندم نکات جالبی توش داشت. طرف مسئول بخش payments بوده. شروع میکنه به استقرار نسخه ی جدید. تست ها گرفته شده بوده و روی محیط Dev همه چی اوکی به نظر میرسید. همه چیز آروم…
قسمت دوم (پایانی)
بعد از تلاش برای باز تولید مشکل هیچ پیغام خطا یا کرش واضحی وجود نداشته. stack trace مشخصی هم روی صفحه دیده نمیشده. فقط سکوت محض تا لحظه پیدا شدن یه خطای runtime error که از لایههای عمیق اون SDK آپدیتشدهی Apple Pay سرچشمه میگرفت.داشته سعی میکرده از یه method خاص استفاده کنه که توی محیط بعضی از مرورگرهای قدیمیتر اصلاً پشتیبانی نمیشده. نکتش اینجاس که Apple Pay فقط روی سافاری کار میکنه پس این خطا فقط روی نسخه های قدیمی سافاری خودشو نشون میداده. SDK موقع بالا اومدن و مقداردهی اولیه از یه تابع استفاده می کرده که باعث کرش میشده. نه فقط برای خود Apple Pay، بلکه برای همه چی! از همون باگهای موذی که موقع توسعه از زیر دست در میره و دیده نمیشه.
فقط درست کردن باگ مهم نیست؛ بحث سرِ قبول مسئولیت کاره
خب، باگ پیدا و کد هم به نسخه قبل برگردونده شده بود ولی خب کار اینجا تموم نمیشه. چون یه مهندس خوب بودن، فقط به این نیست که مشکل کاربر رو موقتاً حل کنی.مسئولیت اصلی اونجاست که یه قدم میری عقب و از خودت میپرسی:
- این خرابی و قطعی، واقعاً چه معنی و تجربهای برای کاربر داشت؟
- این قطعی چقدر برای کل کسبوکار هزینه برداشت؟
- آیا میشد این مشکل رو زودتر تشخیصش داد؟
- ممکنه دوباره همچین اتفاقی بیفته؟
ما اینجا نیستیم که فقط مثل ربات به آلارمها واکنش نشون بدیم و کدها رو سرسری وصلهپینه کنیم و ما کدنویسهایی نیستیم که بشه مثل ChatGPT بهمون پرامپت داد و انتظار داشت مشکل غیب بشه. اینجاییم که عمیق فکر کنیم، مسئولیت کامل نتایج کارهامون رو به عهده بگیریم و فعالانه جلوی آسیبهای آینده رو بگیریم.
پس برای مستند کردن چه چیز هایی رو میتونیم بنویسیم؟
- چی رو تغییر داده بودیم
- اصلاً چرا تغییرش داده بودیم
- چی و کجا خراب شد
- چطور شد که این مشکل از زیر دست تیم QA در رفت و دیده نشد
- چه چیزهایی توی monitoring ما از قلم افتاده بود که زودتر نفهمیدیم
این کار رو نه به خاطر اینکه کسی خواسته انجام بدیم، بلکه به این دلیل انجام بدیم که شاید خودِ آینده (یا یکی از همتیمیهای آینده) به مشکل مشابهی بر بخوره و اونها بتونن خیلی سریعتر به جواب و راه حل برسن.
این قطعی و اوتایج ها فقط بهمون یاد نمیده که چی اشتباه شده بود یا کجای کار میلنگید. باعث میشه از خودمون بپرسیم: اگه دوباره همچین اتفاقی بیفته، این بار چه کارهایی رو متفاوت انجام میدیم؟
جمعبندی و حرف آخر
راستش هیچکس به آدم نمیگه اولین باری که یه مشکل جدی و یه «آتیشسوزی» تو محیط پروداکشن درست میکنی، دقیقاً چه حسی داره. فوقالعاده پراسترسه و بله، گاهی وقتا هم واقعاً تقصیر کدیه که شما نوشتین.
ولی خب، آدم یاد میگیره.
یاد میگیری که «قبول کردن کامل مسئولیت» واقعاً یعنی چی.
یاد میگیری که چطور یه قدم بری عقبتر و دید وسیعتری پیدا کنی (zoom out کنی)؛ دیگه فقط به این فکر نکنی که «چی خراب شد؟»، بلکه بری سراغ اینکه «این خرابی روی چه کسایی تأثیر گذاشت؟».
یاد میگیری که یه مهندس خوب بودن، به معنی نوشتن کدِ بیعیبونقص و عالی نیست؛ بلکه به اینه که چطور بحران رو مدیریت میکنی، وقتی که اوضاع اصلاً خوب و عالی نیست.
یه چکلیست برای وقتی که این اتفاق برای شما میفته:
- سریع نپرین سراغ دیباگ کردن: اگه مشکل جدیه و روی کاربرها تأثیر مستقیم گذاشته، اولین قدم اینه که کد رو برگردونین به نسخهی قبلی. بعدش با خیال راحتتر برین دنبال دلیل مشکل بگردین.
- زود و شفاف اطلاعرسانی کنین: حتی یه پیام کوتاه مثل «دوستان دارم بررسی میکنم» توی کانالهای ارتباطی خیلی تأثیر مثبتی داره و به آروم شدن فضا کمک میکنه.
- سعی کنین مشکل رو توی محیطهای کنترلشده و ایزوله باز تولید کنین: یعنی دقیقاً با همون شرایطی که مشکل پیش اومده (مثلاً همون مرورگر، همون نسخه و ...).
- لاگها، درخواستهای شبکه، و نحوهی مدیریت خطاها رو با دقت چک کنین: هیچوقت فرض نکنین که اگه مشکلی باشه، حتماً سیستم با سر و صدای زیاد کرش میکنه و سریع متوجه میشین! گاهی مشکلات خیلی بیسر و صدا اتفاق میافتن.
- آستانهی هشدارهای سیستم پایش و مانیتورینگ رو دوباره یه نگاهی بندازین: آیا واقعاً جوری تنظیم شدن که خرابیهای کوچیک، نامحسوس یا تدریجی رو هم زود تشخیص بدن؟
- اتفاقی که افتاده رو با زبون ساده و واضح مستند کنین: این کار رو فقط برای بقیه اعضای تیم انجام ندین، بلکه برای خودتون در آینده هم انجام بدین. حافظه یاری نمیکنه!
- به تأثیر مشکل روی کسبوکار (business impact) فکر کنین: حدوداً چند تا کاربر تحت تأثیر قرار گرفتن؟ و این مشکل برای چه مدت زمانی ادامه داشت؟
- اگه در حین بررسی، به الگوها یا نکتههای کلیدی رسیدین، حتماً یادداشتشون کنین: این نکتهها برای بحران بعدی فوقالعاده ارزشمندن.
—-
💡 مثل همیشه کنجکاو بمونید :)
🆔 @MdDaily
بعد از تلاش برای باز تولید مشکل هیچ پیغام خطا یا کرش واضحی وجود نداشته. stack trace مشخصی هم روی صفحه دیده نمیشده. فقط سکوت محض تا لحظه پیدا شدن یه خطای runtime error که از لایههای عمیق اون SDK آپدیتشدهی Apple Pay سرچشمه میگرفت.داشته سعی میکرده از یه method خاص استفاده کنه که توی محیط بعضی از مرورگرهای قدیمیتر اصلاً پشتیبانی نمیشده. نکتش اینجاس که Apple Pay فقط روی سافاری کار میکنه پس این خطا فقط روی نسخه های قدیمی سافاری خودشو نشون میداده. SDK موقع بالا اومدن و مقداردهی اولیه از یه تابع استفاده می کرده که باعث کرش میشده. نه فقط برای خود Apple Pay، بلکه برای همه چی! از همون باگهای موذی که موقع توسعه از زیر دست در میره و دیده نمیشه.
فقط درست کردن باگ مهم نیست؛ بحث سرِ قبول مسئولیت کاره
خب، باگ پیدا و کد هم به نسخه قبل برگردونده شده بود ولی خب کار اینجا تموم نمیشه. چون یه مهندس خوب بودن، فقط به این نیست که مشکل کاربر رو موقتاً حل کنی.مسئولیت اصلی اونجاست که یه قدم میری عقب و از خودت میپرسی:
- این خرابی و قطعی، واقعاً چه معنی و تجربهای برای کاربر داشت؟
- این قطعی چقدر برای کل کسبوکار هزینه برداشت؟
- آیا میشد این مشکل رو زودتر تشخیصش داد؟
- ممکنه دوباره همچین اتفاقی بیفته؟
ما اینجا نیستیم که فقط مثل ربات به آلارمها واکنش نشون بدیم و کدها رو سرسری وصلهپینه کنیم و ما کدنویسهایی نیستیم که بشه مثل ChatGPT بهمون پرامپت داد و انتظار داشت مشکل غیب بشه. اینجاییم که عمیق فکر کنیم، مسئولیت کامل نتایج کارهامون رو به عهده بگیریم و فعالانه جلوی آسیبهای آینده رو بگیریم.
پس برای مستند کردن چه چیز هایی رو میتونیم بنویسیم؟
- چی رو تغییر داده بودیم
- اصلاً چرا تغییرش داده بودیم
- چی و کجا خراب شد
- چطور شد که این مشکل از زیر دست تیم QA در رفت و دیده نشد
- چه چیزهایی توی monitoring ما از قلم افتاده بود که زودتر نفهمیدیم
این کار رو نه به خاطر اینکه کسی خواسته انجام بدیم، بلکه به این دلیل انجام بدیم که شاید خودِ آینده (یا یکی از همتیمیهای آینده) به مشکل مشابهی بر بخوره و اونها بتونن خیلی سریعتر به جواب و راه حل برسن.
این قطعی و اوتایج ها فقط بهمون یاد نمیده که چی اشتباه شده بود یا کجای کار میلنگید. باعث میشه از خودمون بپرسیم: اگه دوباره همچین اتفاقی بیفته، این بار چه کارهایی رو متفاوت انجام میدیم؟
جمعبندی و حرف آخر
راستش هیچکس به آدم نمیگه اولین باری که یه مشکل جدی و یه «آتیشسوزی» تو محیط پروداکشن درست میکنی، دقیقاً چه حسی داره. فوقالعاده پراسترسه و بله، گاهی وقتا هم واقعاً تقصیر کدیه که شما نوشتین.
ولی خب، آدم یاد میگیره.
یاد میگیری که «قبول کردن کامل مسئولیت» واقعاً یعنی چی.
یاد میگیری که چطور یه قدم بری عقبتر و دید وسیعتری پیدا کنی (zoom out کنی)؛ دیگه فقط به این فکر نکنی که «چی خراب شد؟»، بلکه بری سراغ اینکه «این خرابی روی چه کسایی تأثیر گذاشت؟».
یاد میگیری که یه مهندس خوب بودن، به معنی نوشتن کدِ بیعیبونقص و عالی نیست؛ بلکه به اینه که چطور بحران رو مدیریت میکنی، وقتی که اوضاع اصلاً خوب و عالی نیست.
یه چکلیست برای وقتی که این اتفاق برای شما میفته:
- سریع نپرین سراغ دیباگ کردن: اگه مشکل جدیه و روی کاربرها تأثیر مستقیم گذاشته، اولین قدم اینه که کد رو برگردونین به نسخهی قبلی. بعدش با خیال راحتتر برین دنبال دلیل مشکل بگردین.
- زود و شفاف اطلاعرسانی کنین: حتی یه پیام کوتاه مثل «دوستان دارم بررسی میکنم» توی کانالهای ارتباطی خیلی تأثیر مثبتی داره و به آروم شدن فضا کمک میکنه.
- سعی کنین مشکل رو توی محیطهای کنترلشده و ایزوله باز تولید کنین: یعنی دقیقاً با همون شرایطی که مشکل پیش اومده (مثلاً همون مرورگر، همون نسخه و ...).
- لاگها، درخواستهای شبکه، و نحوهی مدیریت خطاها رو با دقت چک کنین: هیچوقت فرض نکنین که اگه مشکلی باشه، حتماً سیستم با سر و صدای زیاد کرش میکنه و سریع متوجه میشین! گاهی مشکلات خیلی بیسر و صدا اتفاق میافتن.
- آستانهی هشدارهای سیستم پایش و مانیتورینگ رو دوباره یه نگاهی بندازین: آیا واقعاً جوری تنظیم شدن که خرابیهای کوچیک، نامحسوس یا تدریجی رو هم زود تشخیص بدن؟
- اتفاقی که افتاده رو با زبون ساده و واضح مستند کنین: این کار رو فقط برای بقیه اعضای تیم انجام ندین، بلکه برای خودتون در آینده هم انجام بدین. حافظه یاری نمیکنه!
- به تأثیر مشکل روی کسبوکار (business impact) فکر کنین: حدوداً چند تا کاربر تحت تأثیر قرار گرفتن؟ و این مشکل برای چه مدت زمانی ادامه داشت؟
- اگه در حین بررسی، به الگوها یا نکتههای کلیدی رسیدین، حتماً یادداشتشون کنین: این نکتهها برای بحران بعدی فوقالعاده ارزشمندن.
—-
🆔 @MdDaily
Please open Telegram to view this post
VIEW IN TELEGRAM
شرکت OpenAI میگه هر بار به chatgpt میگید لطفا یا ازش تشکر میکنید براشون میلیون ها دلار هزینه داره.
پ ن:
وا کاری نداره که فقط کافیه این خط کدو اضافه کنند:
میلیون ها دلار صرفه جویی شد،
بعدا از من تشکر کنید :)
🆔 @MdDaily
پ ن:
وا کاری نداره که فقط کافیه این خط کدو اضافه کنند:
if (prompt.toLower() == “thank you”) return “You’re welcome”
میلیون ها دلار صرفه جویی شد،
بعدا از من تشکر کنید :)
🆔 @MdDaily
🤣29👍4😁1🐳1 1 1
داشتم یه ویدیو تو یوتیوب تحت عنوان What Happens When a Program Calls Sleeps میدیدم که خیلی جالب بود اگه تا حالا از تابع sleep توی برنامهنویسی استفاده کردید، شاید براتون سوال شده که چرا اسمش «sleep» هست و نه مثلاً «wait» یا «delay»؟ این ویدیو یه سفر جذاب به پشت صحنهی این تابع سادهست که پر از نکات سختافزاری و نرمافزاریه. این تابع تقریباً توی همه زبانهای برنامهنویسی هست (تو جاوااسکریپت داستانش فرق داره).
اولین چیزی که ویدیو بهش میپردازه، اینه که تابع sleep چطور توی دنیای واقعی کار میکنه. میره سراغ سختافزار و نشون میده که چطور با استفاده از فلیپفلاپها (یه جور مدار الکترونیکی که مثل سلولهای حافظه کار میکنن) میشه یه تایمر ساخت.
این تایمرها توی سیپییو مثل یه ساعت شنی دیجیتال عمل میکنن: یه عدد اولیه میگیرن و با هر تیک ساعت، شمارش معکوس میکنن تا به صفر برسن. وقتی یه برنامه sleep رو صدا میزنه، سیستمعامل با یه system call این تایمر رو تنظیم میکنه و وقتی تایمر به صفر رسید، با یه interrupt برنامه رو بیدار میکنه.
ولی یه چالش بزرگ وجود داره: تعداد تایمرهای سختافزاری توی یه چیپ محدوده. مثلاً اگه فقط دو تا تایمر داشته باشیم و سه تا برنامه بخوان sleep کنن، یکی باید منتظر بمونه! اینجا نرمافزار وارد بازی میشه. ویدیو توضیح میده که چطور سیستمعامل با یه تکنیک هوشمندانه، فقط با یه تایمر میتونه چندین برنامه رو مدیریت کنه. برنامههایی که sleep صدا میزنن، توی یه «صف خواب» میرن و سیستمعامل با یه تایمر و یه سری محاسبات، مطمئن میشه که هر کدوم سر وقت بیدار بشن.
بعدش، ویدیو یه روش قدیمیتر به اسم busy waiting رو بررسی میکنه که توی اون، برنامه با یه حلقهی بیفایده، پردازنده رو مشغول نگه میداشت تا زمان بگذره. این روش نه تنها دقت پایینی داره (چون به سرعت پردازنده و نوع دستورات بستگی داره)، بلکه کلی از منابع سیستم رو هدر میده و حتی میتونه سیستم رو قفل کنه! خوشبختانه، سیستمعاملهای مدرن با استفاده از برنامهریزی پردازنده (CPU scheduling) این مشکل رو حل کردن. وقتی برنامه sleep رو صدا میزنه، عملاً به سیستمعامل میگه: «من برای یه مدت نمیخوام پردازنده رو اشغال کنم، بذار بقیه کار کنن.»
یه نکتهی جالب دیگه اینه که دقت sleep همیشه ۱۰۰٪ نیست. چون بعد از بیدار شدن، برنامه میره توی صف آماده و اگه سیستم شلوغ باشه، ممکنه یه کم بیشتر منتظر بمونه. برای همین، وقتی از sleep استفاده میکنید، زمان دادهشده یه حداقل تضمینشدهست، نه یه عدد دقیق. این موضوع توی سیستمهای عمومی (غیر real-time) کاملاً عادیه و ویدیو خیلی خوب توضیح میده که چرا نباید انتظار دقت میکروثانیهای داشته باشیم.
در نهایت، ویدیو به این میرسه که چرا اسم این تابع «sleep» هست. «wait» میتونه گنگ باشه و به هر نوع انتظاری اشاره کنه (مثل busy waiting)، ولی «sleep» یعنی برنامه کاملاً غیرفعال میشه، منابع رو آزاد میکنه و مثل وقتی که ما میخوابیم، منتظر میمونه تا بیدار بشه. این اسم حسابی به ماهیت این تابع میخوره!
اگه کنجکاو شدید که جزئیات بیشتری دربارهی این موضوع بدونید، این ویدیو پر از توضیحات باحال و انیمیشنهای جذابه که مفاهیم پیچیده رو ساده میکنه. حتماً یه سر بزنید و خودتون ببینید:
📹 https://www.youtube.com/watch?v=e5g8eYKEhMw
—-
💡 مثل همیشه کنجکاو بمونید :)
🆔 @MdDaily
اولین چیزی که ویدیو بهش میپردازه، اینه که تابع sleep چطور توی دنیای واقعی کار میکنه. میره سراغ سختافزار و نشون میده که چطور با استفاده از فلیپفلاپها (یه جور مدار الکترونیکی که مثل سلولهای حافظه کار میکنن) میشه یه تایمر ساخت.
این تایمرها توی سیپییو مثل یه ساعت شنی دیجیتال عمل میکنن: یه عدد اولیه میگیرن و با هر تیک ساعت، شمارش معکوس میکنن تا به صفر برسن. وقتی یه برنامه sleep رو صدا میزنه، سیستمعامل با یه system call این تایمر رو تنظیم میکنه و وقتی تایمر به صفر رسید، با یه interrupt برنامه رو بیدار میکنه.
ولی یه چالش بزرگ وجود داره: تعداد تایمرهای سختافزاری توی یه چیپ محدوده. مثلاً اگه فقط دو تا تایمر داشته باشیم و سه تا برنامه بخوان sleep کنن، یکی باید منتظر بمونه! اینجا نرمافزار وارد بازی میشه. ویدیو توضیح میده که چطور سیستمعامل با یه تکنیک هوشمندانه، فقط با یه تایمر میتونه چندین برنامه رو مدیریت کنه. برنامههایی که sleep صدا میزنن، توی یه «صف خواب» میرن و سیستمعامل با یه تایمر و یه سری محاسبات، مطمئن میشه که هر کدوم سر وقت بیدار بشن.
بعدش، ویدیو یه روش قدیمیتر به اسم busy waiting رو بررسی میکنه که توی اون، برنامه با یه حلقهی بیفایده، پردازنده رو مشغول نگه میداشت تا زمان بگذره. این روش نه تنها دقت پایینی داره (چون به سرعت پردازنده و نوع دستورات بستگی داره)، بلکه کلی از منابع سیستم رو هدر میده و حتی میتونه سیستم رو قفل کنه! خوشبختانه، سیستمعاملهای مدرن با استفاده از برنامهریزی پردازنده (CPU scheduling) این مشکل رو حل کردن. وقتی برنامه sleep رو صدا میزنه، عملاً به سیستمعامل میگه: «من برای یه مدت نمیخوام پردازنده رو اشغال کنم، بذار بقیه کار کنن.»
یه نکتهی جالب دیگه اینه که دقت sleep همیشه ۱۰۰٪ نیست. چون بعد از بیدار شدن، برنامه میره توی صف آماده و اگه سیستم شلوغ باشه، ممکنه یه کم بیشتر منتظر بمونه. برای همین، وقتی از sleep استفاده میکنید، زمان دادهشده یه حداقل تضمینشدهست، نه یه عدد دقیق. این موضوع توی سیستمهای عمومی (غیر real-time) کاملاً عادیه و ویدیو خیلی خوب توضیح میده که چرا نباید انتظار دقت میکروثانیهای داشته باشیم.
در نهایت، ویدیو به این میرسه که چرا اسم این تابع «sleep» هست. «wait» میتونه گنگ باشه و به هر نوع انتظاری اشاره کنه (مثل busy waiting)، ولی «sleep» یعنی برنامه کاملاً غیرفعال میشه، منابع رو آزاد میکنه و مثل وقتی که ما میخوابیم، منتظر میمونه تا بیدار بشه. این اسم حسابی به ماهیت این تابع میخوره!
اگه کنجکاو شدید که جزئیات بیشتری دربارهی این موضوع بدونید، این ویدیو پر از توضیحات باحال و انیمیشنهای جذابه که مفاهیم پیچیده رو ساده میکنه. حتماً یه سر بزنید و خودتون ببینید:
—-
🆔 @MdDaily
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
What Happens When a Program Calls Sleeps?
Use code coredumped at the link below to get an exclusive 60% off an annual Incogni plan:
https://incogni.com/coredumped
Join CodeCrafters and learn by creating your own: Redis, Git, Http server, Interpreter, Grep... in your favorite programming language:…
https://incogni.com/coredumped
Join CodeCrafters and learn by creating your own: Redis, Git, Http server, Interpreter, Grep... in your favorite programming language:…
👍12🐳2👏1🙏1🆒1 1 1
در حال گشتزنی توی ❤️ ردیت به پروژهی GoXray برخوردم. با توجه به اینکه Nekoray دیگه بهروزرسانی نمیشه و توی لینوکس برای تونل کردن کل سیستم مشکل داشتم، این پروژه با پیادهسازی کامل قابلیتهای XRay تو Go این مشکل رو برطرف کرده. هم نسخهی GUI داره که با Fyne توسعه داده شده، هم نسخهی CLI که اگه دنبال یه ابزار سبک و سریع هستید، به نظرم گزینهی عالیایه. برای لینوکس و مک هم نسخههای مخصوص داره.
گیت هاب پروژه:
👩💻 https://github.com/goxray
برای استفاده از نسخه ی CLI اش توی لینوکس فقط کافیه اخرین نسخه رو از https://github.com/goxray/tun/releases بگیرید و بعد:
1- اول دسترسی اجرا به فایلش بدید:
و برای اتصال :
و برای قطع اتصال هم فقط CTRL+C رو بزنید :)
—-
💡 مثل همیشه کنجکاو بمونید :)
🆔 @MdDaily
گیت هاب پروژه:
برای استفاده از نسخه ی CLI اش توی لینوکس فقط کافیه اخرین نسخه رو از https://github.com/goxray/tun/releases بگیرید و بعد:
1- اول دسترسی اجرا به فایلش بدید:
chmod +x goxray_cli_linux_amd64
و برای اتصال :
sudo ./goxray_cli_linux_amd64 "YOUR CONFIG"
و برای قطع اتصال هم فقط CTRL+C رو بزنید :)
—-
🆔 @MdDaily
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍3❤🔥2 2🐳1
چند وقت پیش یه خبری ترند شد که یه نفر اومده بود توی فایل PDF بازی DOOM و گنو لینوکس رو اجرا کرده بود و جادی هم توی این پست https://news.1rj.ru/str/jadivarlog/250 بهش پرداخت. حالا یه نفر اومده یه پروژهٔ پروف آف کانپست زده که نشون بده چطوری یه مدل زبانی بزرگ کامل رو فقط و فقط توی یه فایل PDF میشه اجرا کرد.
این پروژه از Emnoscripten استفاده میکنه تا llama.cpp رو به asm.js کامپایل کنه. بعدش این کد asm.js رو با یه روش قدیمی تزریق جاوااسکریپت به PDF، توی فایل PDF اجرا میکنه با استفاده از قابلیت اجرای جاوااسکریپت در PDFها (که اول برای تکمیل خودکار فرمها بود). با این روش و با جاسازی (embedding) کل فایل LLM به صورت base64 توی PDF، موفق شده کاری کنه که inference مدل LLM فقط با داشتن یه فایل PDF ممکن بشه.
نکات مهم:
فقط مدلهای GGUF پشتیبانی میشن.
مدلهای Q8 سریعتر اجرا میشن.
مدلهای کوچکتر (مثلاً 135M پارامتر) عملکرد بهتری دارند (حدود ۵ ثانیه برای هر توکن).
👩💻 ریپوی پروژه:
https://github.com/evanzhoudev/llm.pdf
📹 ویدیوی یوتیوب:
https://www.youtube.com/watch?v=4cBom2lAx-g&feature=youtu.be
🌐 دمو:
https://evanzhoudev.github.io/llm.pdf/
—-
💡 مثل همیشه کنجکاو بمونید :)
🆔 @MdDaily
این پروژه از Emnoscripten استفاده میکنه تا llama.cpp رو به asm.js کامپایل کنه. بعدش این کد asm.js رو با یه روش قدیمی تزریق جاوااسکریپت به PDF، توی فایل PDF اجرا میکنه با استفاده از قابلیت اجرای جاوااسکریپت در PDFها (که اول برای تکمیل خودکار فرمها بود). با این روش و با جاسازی (embedding) کل فایل LLM به صورت base64 توی PDF، موفق شده کاری کنه که inference مدل LLM فقط با داشتن یه فایل PDF ممکن بشه.
نکات مهم:
فقط مدلهای GGUF پشتیبانی میشن.
مدلهای Q8 سریعتر اجرا میشن.
مدلهای کوچکتر (مثلاً 135M پارامتر) عملکرد بهتری دارند (حدود ۵ ثانیه برای هر توکن).
https://github.com/evanzhoudev/llm.pdf
https://www.youtube.com/watch?v=4cBom2lAx-g&feature=youtu.be
https://evanzhoudev.github.io/llm.pdf/
—-
🆔 @MdDaily
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7 5🆒2🐳1