Md Daily – Telegram
Md Daily
725 subscribers
239 photos
15 videos
21 files
283 links
راجب مقالات و مستندات فنی یا غیر فنی که میخونم و علایقم اینجا مینویسم :)


گروه کانال: https://news.1rj.ru/str/MdDailyGap

کورس ها: https://news.1rj.ru/str/MdDaily/395

وبلاگ: https://mddaily.ir
Download Telegram
Forwarded from Python Hints
این موضوع واقعاً گرد ناامیدی نیست، یک نیم‌نگاه به آمار اخراج‌ها یا لیست مشاغلی که دیگه نیروی جونیور نمی‌گیرند بندازید (البته بعضی‌ها زدن جونیور ولی دقت کنید لیست مهارت‌ها رو ببینید.)

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

این‌ها تسک‌های جونیور بود و سنیور نهایتاً review می‌کرد؛ الان تمام اینکارهارو یک الگوریتم هوش مصنوعی می‌کنه، سنیور در لحظه مسئله رو می‌شکنه و از AI می‌پرسه کد رو تحویل می‌گیره و کپی و تمام ...
همین مسیر رو ادامه میده و در نهایت حالات مختلف تست نویسی که به ذهنش میرسه رو هم دونه دونه از AI می‌خواد بنویسه بازم دابل چک می‌شه و تمام.

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

حالا شما بیا به من بگو من جونیور هستم، جنگو و جنگو رست و پستگرس رو بلدم.
اولین سوالاتی که توی ذهن من میاد:
سلری چطور ؟ کار با redis چی ؟ تست نویسی چطور ؟ پروفایلینگ چی میشه پس ؟ لاگ نویسی خوب چی ؟ (دوتا پست قبلتر یک مشکل رو مثال زدم و قدیما یک آموزش گذاشتم) و ...

اگر شما نتونی اینکارها رو انجام بدی و نشناسی؛ خب تمام مدل‌های AI از شما بهتر کد می‌زنند و وقت کمتری هم میگیره اگر قرار باشه من هی برم سراغش و بهش بگم چیکار کنه و چطوری بزن و ...


دو گروه اینجا بهشون بر میخوره (توی آمار‌های مختلف هم همین رو نشون داده؛ به دیتاهای آمریکای شمالی نگاه کنید) :

۱- پکیج فروش‌ها: دیگه پکیجی که فقط جنگو یاد بده بدون پروژه‌ای که استاندارد باشه بی‌ارزش می‌شه و کاسبی خراب (این نیروها استخدام نمی‌شوند و کمتر کسی سراغ این آموزش‌ها میره)

۲- افرادی که شغل برنامه‌نویسی رو برای راحتی استفاده کردند؛ جدی میگم بسیار شنیدم که می‌گن بابا کار شما که چیزی نیست ۸ ساعت پشت کامپیوتر می‌شینی بعدم میری خونه ۱۲ ساعت عشق و حال و پارتی و ....

والا ما یک مهمونی هم میخوایم بریم باید ۷ روز قبل خبر داشته باشیم که بتونیم اون ۴-۵ ساعت مهمونی رو توی ۷ روز جبران کنیم تسک عقب افتاده نداشته باشیم.

چرا اینارو مجدداً اینجا می‌گم:

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

برای همین بجای اینکه بگم آقای X خانم Y بیاید برنامه‌نویسی یاد بگیرید ماهی ۲۰۰ میلیون درآمد دارید (دیدی اینو میگه بعد پکیج آموزشی ۳۰۰ هزارتومنی میذاره) میگم این مسیر سختی‌هاش زیاد شده، دیگه فقط با سینتکس یاد گرفتن نمی‌تونید شغل پیدا کنید، کسی که الان شروع می‌کنه از صفر حداقل ۲ سال وقت می‌ذاره. اگر قرار نیست جدی بگیرید برنامه‌نویسی رو پیشنهاد می‌کنم برید دنبال کار مورد علاقتون.

مکانیک - برق کار - آشپز - باریستا و ... همگی مشاغل کاملاً قابل احترام هست و توی ۲ سال وقتی علاقه‌ هم باشه قطعاً موفق تر خواهید بود.


در نهایت، این متن باید به شمایی که برنامه‌نویسی رو انتخاب کردید انگیزه بده که برنامه‌نویسی رو جدی بگیرید و از وقت اینستاگرام و پارتی و ... بزنید و روی تخصص تمرکز کنید.
اگر نه که رشته یا تخصص رو اشتباه انتخاب کردید.
🔥5👍4👏1👌1
#میم

قبل و بعد یادگیری برنامه نویسی:

🆔 @MdDaily
🤣15👍6😁2🔥1
به طور کلی System Design چیه؟

طراحی سیستم یا System Design، فرآیند برنامه‌ریزی و ایجاد ساختاری برای یک سیستم نرم‌افزاری یا سخت‌افزاریه که بتونه نیازهای مشخصی رو برآورده کنه. این فرآیند شامل تعیین معماری سیستم، اجزا، نحوه‌ی ارتباط بین اون‌ها و تکنولوژی‌های مورد استفاده است.

چرا باید System Design رو یاد بگیریم؟

1. حل مسائل پیچیده: در پروژه‌های بزرگ، طراحی سیستم کمک می‌کنه تا با تقسیم مسئله به بخش‌های کوچکتر، راه‌حل‌های مؤثرتری پیدا کنیم.

2. بهینه‌سازی منابع: طراحی مناسب سیستم باعث می‌شه از منابعی مثل زمان، هزینه و نیروی انسانی بهینه استفاده کنیم.

3. مقیاس‌پذیری: با طراحی درست، سیستم می‌تونه با افزایش کاربران یا داده‌ها به‌خوبی سازگار بشه.

4. ارتباط بهتر تیمی: طراحی شفاف سیستم، فهم مشترکی بین اعضای تیم ایجاد می‌کنه و همکاری رو بهبود می‌ده.

5. آمادگی برای مصاحبه‌های شغلی: بسیاری از شرکت‌ها در مصاحبه‌ها سوالاتی درباره‌ی طراحی سیستم می‌پرسن.

اما System Design شامل چه مؤلفه‌هایی میشه؟

1. معماری سیستم (System Architecture): ساختار کلی سیستم و نحوه‌ی تعامل اجزا با هم.

2. مقیاس‌پذیری (Scalability): توانایی سیستم در مدیریت افزایش بار کاری و تعداد کاربران.

3. توازن بار (Load Balancing): توزیع متعادل ترافیک بین سرورها برای جلوگیری از بارگذاری بیش از حد.

4. ذخیره‌سازی داده‌ها (Data Storage): انتخاب نوع پایگاه داده و طراحی ساختار داده‌ها.

5. کشینگ (Caching): ذخیره‌سازی موقت داده‌ها برای افزایش سرعت دسترسی.

6. مدیریت تراکنش‌ها (Transaction Management): اطمینان از اجرای صحیح و کامل تراکنش‌ها.

7. امنیت (Security): حفاظت از داده‌ها و سیستم در برابر تهدیدات.

8. مانیتورینگ و لاگینگ (Monitoring and Logging): نظارت بر عملکرد سیستم و ثبت رویدادها.

9. پشتیبان‌گیری و بازیابی (Backup and Recovery): تدوین راهکارهایی برای حفظ و بازیابی داده‌ها در صورت بروز مشکل.

10. تست و ارزیابی (Testing and Evaluation): انجام تست‌های مختلف برای اطمینان از عملکرد بهینه سیستم.

توی منابع یادگیری سیستم دیزاین:

برای آشنایی با مفاهیم و مقدمات ویدیوی یک ساعت Learn System Design از freecodecamp:
🔗 https://www.freecodecamp.org/news/learn-system-design-principles/

مستندات متنی و رودمپ ها :

🔗 https://www.karanpratapsingh.com/courses/system-design

🔗 https://www.geeksforgeeks.org/complete-roadmap-to-learn-system-design/

خبر نامه ها و وبلاگ ها :

🔗 https://www.quastor.org/

🔗 https://blog.quastor.org/

🔗 https://blog.bytebytego.com/
کانال های یوتیوب:

🔗 https://www.youtube.com/ByteByteGo

🔗 https://www.youtube.com/c/SystemDesignInterview

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


---

مثل همیشه کنجکاو بمونید :)

🆔 @MdDaily
👍4🔥3👏1
This media is not supported in your browser
VIEW IN TELEGRAM
با معرفی شدن Claude 3.7 Sonnet به گیت هاب کوپایلت هم اضافه شد ولی به نظر فعلا برای مشترکین pro فعال شده‌.

🆔 @MdDaily
👍1
راز موفقیت WinRAR: چطور با دوره آزمایشی بی‌پایان، پول درمیاره؟

نرم‌افزاری که بهمون یه دوره آزمایشی ۴۰ روزه میده، ولی بعدش می‌تونیم تا ابد با زدن دکمه "بستن" روی پاپ‌آپ‌ها ازش رایگان استفاده کنیم. اما نکته شگفت‌انگیز اینجاست که این شرکت با همین روش عجیبش تونسته سال گذشته ۲۱ میلیون دلار درآمد داشته باشه! حالا بیاید ببینیم چطور این کار رو کرده.

استراتژی منحصر به فرد 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
1👍7👌3
یکی از اتفاق های خوبی که توی بازنویسی Typenoscript با Golang میوفته علاوه بر افزایش ۱۰ برابری سرعت خود تایپ اسکریپت، اینکه به زودی شاهد افزایش پرفورمنس زیادی توی تجربه ی توسعه هستیم و پروژه هایی مثل Vscode و Playwright که با تایپ اسکریپت نوشته شدن خیلی سریع تر از قبل کامپایل میشن.

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
👌13👍5
وای به حال روزی که سرورای سرویس پزشک و مشاور اسنپم دیگه healthy نباشن :)

🆔 @MdDaily
🤣73😁11
🎶 میخواستم برای فان و بدون استفاده از AI و یا راهنمایی های موجود یه کلاینت SoundCloud با 🚀 بنویسم. پس Burp Suite عزیز رو باز کردم و شروع کردم به دیدن رکوئست هایی که داره ارسال و دریافت میشه. خبر خوب این بود که همه چیز به صورت api کار میکرد و نیازی به استفاده از چیزی مثل selenium نبود ولی توی تمام درخواست هایی که نیاز به احراز هویت داشت یه چیزی مشترک بود و اون چیزی نبود جز client_id. ولی یه نکته ای وجود داشت. توی هیچ کدوم از درخواست هایی که دریافت میشد چیزی نبود که بره client_id رو بگیره، پس احتمال دادم که client_id توی یکی از فایل های ,js مخفی شده. شروع کردم به باز کردن تک تک لینک های .js ای که توی html لود شده ی صفحه ی soundcloud.com وجود داشتن و بوم :)

چیزی که ما میخواستیم تو یکی از فایل های .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

ولی بریم برای توضیح بخش های مهمش:

✔️ تابع fetchHTML:

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() باعث می‌شه بعد از تموم شدن کار، اتصال بسته بشه تا منابع سیستم آزاد بشه.

✔️ استخراج لینک‌ها و کدهای جاوااسکریپت (extractJSSources)

این تابع HTML رو پارس می‌کنه و همه تگ‌های <noscript> رو پیدا می‌کنه. دو نوع جاوااسکریپت رو جدا می‌کنه: لینک‌های خارجی (با src) و کدهای داخلی (inline).
از پکیج golang.org/x/net/html برای پارس کردن HTML استفاده می‌کنه. لینک‌های نسبی رو با resolveURL به آدرس کامل تبدیل می‌کنه و فقط فایل‌هایی که به .js ختم می‌شن رو نگه می‌داره.

✔️ گرفتن محتوای فایل‌های جاوااسکریپت (fetchJSContent)

برای هر لینک .js که پیدا شده، یه درخواست HTTP می‌فرسته و محتوای فایل رو می‌گیره.

✔️ و در نهایت جستجوی client_id با Regex برای (findClientIDs)

پکیج 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👌881
سلام سلام 💖

اول از همه 🎆🎆🎆🎆🎆. سالی پر از اتفاقات خوب و پر از Notification's واریزی💸 و از همه مهم تر حال خوب و سلامتی به همراه باگ 🪲 های کمتر براتون آرزو میکنم :)

امیدوارم وقتی آخر سال ۱۴۰۴ رسید به لیست کار هاتون که نگاه می کنید همه ی هدف هاتون رو تیک زده باشید

تقریبا سه سال پیش بود که یه گروهی شیش نفره با دوستام داشتیم و خب هنوزم داریم و توی گروه مقالاتی که میخوندم و برام جالب بود رو مینوشتم بعد گفتم خب چرا براش یه کانال نزنم و عمومی ترش نکنم ؟ روزی که این کانال رو با هدف انتشار چیزایی که بلدم و میخونم زدم (۵ آذر ۱۴۰۱) اولین عضو های کانال بچه های همون گروه بودن و الان به لطف شما عزیزان و در کنارتون خانوادمون روز به روز بزرگتر شده و از همتون ممنونم ❤️

پ ن :
دوستان از چند روز قبل تذکر دادن با ۴۰۴ شوخی نکنم. منم گفتم حله با ۴۰۳ شوخی میکنم. توی ۴۰۳ همه چیز forbidden، پارتنر پیدا نکردم، ۴۰۴ هم که باهاش شوخی نمیکنیم ایشالا همین جمع ۴۰۵ .


ارادتمند شما
ماهان

---

امسال بیشتر از پارسال کنجکاو باشید :)

🆔 @MdDaily
Please open Telegram to view this post
VIEW IN TELEGRAM
1092
بعد از اینکه از سفر برگشتیم ما بودیم و کلی دنگی که باید حساب میشد، هرکی یه جا را حساب کرده بود، یه سری جاها هزینه ها ریز میشدن و احتمال خطای محسابه ی دستیش زیاد بود، پس سریع copilot رو باز کردم و دنگی رو ساختم .

تقسیم دنگ رو براتون انجام میده، خروجی اکسل ریز هزینه ها رو هم بهتون میده و میگه کی چه قدر باید به کی پرداخت کنه.

با js خام نوشته شده ، کد پروژه پیچیده نیست ولی کار سختیو راحت کرد :)

👩‍💻 سورس کد پروژه:

https://github.com/mdpe-ir/dongy

👩‍💻 نسخه ی دیپلوی شده:

https://dongy.mddaily.ir/


ایده های باحالی میشه روش پیاده کرد و تبدیلش کرد به PWA ولی خب فعلا داره کار میکنه.


🆔 @MdDaily
Please open Telegram to view this post
VIEW IN TELEGRAM
👌163👎2🔥1
Forwarded from Abrha
⭕️ سیزدهمین صبحانه کاری ابرها تهران

🔥 قهوه، صبحانه، ارائه و گفتگوی کاری در کنار متخصصین

🎤 ارائه‌ تجربه محور توسط مصطفی افزونی



👇👇👇
🔗 abrh.ir/enjoy 🔗
👆👆👆


در کانال ابرها عضو شوید: ✌️

📣@abrhacom
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
Please open Telegram to view this post
VIEW IN TELEGRAM
9👍32🐳1🤣1
چند وقتی بود میخواستم راجب موضوعاتی بنویسم که به دلیل محدودیت های پست های تلگرامی امکانش نبود و باید به صورت وبلاگ نوشته میشد. قبلا یک وبلاگ ایستا و اپن سورس با استفاده از Hugo ایجاد کرده بودم که میتونید از طریق این لینک :

🌐 https://mddaily.web.app

به پست های منتشر شده در این وبلاگ دسترسی پیدا کنید.

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

اولین پست وبلاگ با عنوان "یادگیری Big O یک بار برای همیشه" منتشر شده که توی پست بعدی معرفیش میکنم :)

🌐 https://mddaily.ir/
---

💡 مثل همیشه کنجکاو بمونید :)

🆔 @MdDaily
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥1🐳1
یادگیری Big O یک بار برای همیشه

کاور پست با GPT تولید شده :)


توی این پست حالت های مختلفی از Big O به همراه کد نمونه بررسی شدن. از ساده ترین حالت یعنی O(n) شروع میکنیم و قدم به قدم تا حالت های پیجیده تری مثل O(n log n) رو بررسی میکنیم.

پیچیدگی زمانی Big O چیه؟
توی علم کامپیوتر، از علامت‌گذاری Big O استفاده می‌شه تا الگوریتم‌ها رو بر اساس اینکه زمان اجرا یا میزان حافظه مورد نیازشون با بزرگ‌تر شدن ورودی چطوری زیاد می‌شه، دسته‌بندی کنن. یا به عبارت دیگه، یه راهیه برای اینکه تحلیل کنیم چقدر زمان می‌بره تا الگوریتم ما با بزرگ‌تر شدن ورودی اجرا بشه. منظور از ‘O’ کل عملیاته، و ‘n’ هم ورودی.

بیاین چند تا مثال رو ببینیم تا قضیه روشن‌تر بشه.

حالت O(n)
شاید ساده‌ترین مثالی که بشه فهمید، همون O(n) باشه، جایی که نرخ رشد خطیه.

یه آرایه نامرتب n رو در نظر بگیرین، یه تابعی بنویسین که بزرگترین مقدار رو برگردو...



لینک کامل مقاله در وبلاگ Mddaily:

🔗 https://mddaily.ir/یادگیری-big-o-یک-بار-برای-همیشه/

---

💡 مثل همیشه کنجکاو بمونید :)

🆔 @MdDaily
Please open Telegram to view this post
VIEW IN TELEGRAM
👍531🆒11
کاری بسیار پسندیده از شهرداری اصفهان برای کودکان :)


🆔 @MdDaily
🤣1843🐳1
🤔 شاید جا های مختلفی مثل ویدیو های یوتیوب Vibe Coding رو دیده باشید ولی Vibe Coding چیه؟

این یه روش فکر جدیده برای ساختن نرم‌افزار با کمک هوش مصنوعی. این اصطلاح رو آندری کارپاتی (Andrej Karpathy) ساخته و «وایب کدینگ» رو اینجوری توصیف می‌کنه: «خودت رو بسپر به حس و حالت، پذیرای رشد نمایی باش، و اصلاً یادت بره که کدی هم وجود داره».

اما خود Andrej Karpathy کیه؟

رزومه ی کامل و پروژه هاشو میتونید از وبسایت خودش karpathy.ai ببینید ولی به طور خلاصه جزو موسس ها و بخش تحقیقاتی OpenAI بوده بعد به عنوان مدیر ارشد هوش مصنوعی میره تسلا و بعد از چند سال مجدد بر میگرده به OpenAI.

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

با اینکه این روش کدنویسی خیلی وسوسه‌انگیزه، ولی آیا با توجه به محدودیت‌های فعلی مدل‌های زبانی بزرگ (LLM) و این اوضاعی که همه‌چیز داره تغییر می‌کنه، نتیجه‌اش به اندازه کافی دقیق هست؟ می‌شه با وایب کدینگ یه اپلیکیشن کامل رو بدون مشکل بالا آورد؟ می‌شه ازش خواست که تست‌ها رو هم بنویسه؟ با ناهماهنگی‌ها توی طراحی چیکار می‌کنه؟ این فقط یه چیز زودگذره (فَد fad) یا یه استراتژی بلندمدت واقعیه که برنامه‌نویس‌ها باید یاد بگیرن و ازش استفاده کنن؟

اکه علاقه داشتید:

📱 پست Andrej در X:

https://x.com/karpathy/status/1886192184808149383

📱 ویدیوی یوتیوب Fireship:

https://www.youtube.com/watch?v=Tw18-4U7mts

🌐 مقاله What I Learned from Vibe Coding:

https://dev.to/erikch/what-i-learned-vibe-coding-30em


---

💡 مثل همیشه کنجکاو بمونید :)

🆔 @MdDaily
Please open Telegram to view this post
VIEW IN TELEGRAM
62🐳11
قسمت اول

داشتم رایتاپ 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
10👍1🐳1
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
Please open Telegram to view this post
VIEW IN TELEGRAM
9❤‍🔥3👍21🔥1🐳1😨11
شرکت OpenAI میگه هر بار به chatgpt میگید لطفا یا ازش تشکر میکنید براشون میلیون ها دلار هزینه داره.

پ ن:

وا کاری نداره که فقط کافیه این خط کدو اضافه کنند:


if (prompt.toLower() == “thank you”) return “You’re welcome”

میلیون ها دلار صرفه جویی شد،
بعدا از من تشکر کنید :)

🆔 @MdDaily
🤣29👍4😁1🐳111