DevTwitter | توییت برنامه نویسی
32.5K subscribers
5.5K photos
444 videos
6 files
5.42K links
توییت های برنامه نویسی و طراحی وب :)

Admin:
@dvtwi

Hashtags:
devtwitter.t.me/5

DevBooks Channel:
https://t.me/+AYbOl75CLNYxY2U0

Github:
https://github.com/DevTwitter

X:
https://x.com/devtwittir
Download Telegram
خبر مهم برای وردپرسی‌ها؛ ورود رسمی MCP به WordPress

وردپرس به‌تازگی پلاگین رسمی MCP Adapter را در مخزن WordPress.org منتشر کرده است.

تعریف MCP یک استاندارد ارتباطی بین هوش مصنوعی و وردپرس است که در آینده به AI اجازه می‌دهد با سایت وردپرسی تعامل داشته باشد؛ مثل:

- خواندن و ویرایش محتوا
- ایجاد نوشته و صفحات
- کار با اطلاعات محصولات
-️ اجرای قابلیت‌های افزونه‌ها
- انجام برخی کارهای مدیریتی با دستور هوش مصنوعی

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

نسخه رسمی MCP Adapter 0.7.0 در اکتبر ۲۰۲۶ وارد WordPress.org شده و هنوز در مرحله توسعه و آزمایشی قرار دارد.

️ فعلاً پیشنهاد نمی‌کنیم صرفاً به خاطر این خبر آن را روی سایت اصلی نصب کنید. این پلاگین بیشتر یک زیرساخت برای اتصال AI به وردپرس است و هنوز به معنی کنترل مستقیم سایت توسط ChatGPT نیست.

اما مسیر آینده وردپرس کاملاً مشخص است:
سایت‌هایی که می‌توانند با هوش مصنوعی تعامل واقعی داشته باشند = WordPress + AI

@DevTwitter | <Abbas Bahadori Pour/>
❤14👎2🔥2
چند روز پیش مارگارت همیلتون از اين دنيا رفت.
روحش در آرامش

برای خیلی‌ها او یک زن ۹۰ ساله بود که چند دهه پیش در ناسا کار می‌کرد اما خوب است بدانيم این زن کدی را نوشت که وقتی کامپیوتر آپولو ۱۱ زیر فشار داشت از نفس می‌افتاد، فهمید کدام کار مهم‌تر است و کدام را باید کنار بگذارد.
چند دقیقه مانده به فرود روی ماه، همین طرز فکر می‌توانست مرز بین فرود و شکست باشد، همیلتون فقط برای آپولو نرم‌افزار ننوشت، او کمک کرد چیزی شکل بگیرد که امروز اسمش را گذاشته‌ایم Software Engineering.

نسلی مثل او، کامپیوتر را برای لایک و فالو و وایرال‌شدن نساخت و شاید تلخ‌ترین بخش ماجرا همین باشد:
ما در دوره‌ای زندگی می‌کنیم که ارزش آدم‌ها را با تعداد فالوئر، بازدید و پولی که می‌سازند می‌سنجیم؛ نه با چیزی که به بشریت اضافه کرده‌اند.

احترام به آدم‌هایی مثل او، احترام به خودِ فناوری است.
Rest in peace, Margaret.

@DevTwitter | <Abbas Mohammadi/>
❤212🍌14👍9
پس از مدت ها انتظار...
بالاخره نسخهء Alpha 1 از نسل 6 فریمورک Bootstrap منتشر شد.

کلن کوبیدن از نو ساختن!
* نکته جالبی که در متن خبر دیدم، اعترافشون به استفاده از پیشوندها به سبک tailwind بود!
- این نسل برای نمایش حداقل به امکانات کرومیوم 130 نیازمنده.
- مولفه های محاوره ای ش از این نسل به بعد مبتنی بر TS توسعه داده خواهند شد.
- این نسل از سازوکارهای LLM-Friendly مثل skill ها پشتیبانی میکنه.

بر اساس مستنداتش:
- تعدادی مولفه جدید داره...
- نام تعدادی از مولفه های قدیمش تغییر داده شده...
- بالاخره DatePicker و OTP Input بومی بهش اضافه کردن!
* نحوه استفاده از CSS Class هاش تا حدودی تغییر کرده!
- پوسته بصری ش شبیه نسل یک شده ولی بصورت تخت، نه 3 بُعدی...
- افکت های گرافیکی ش خیلی بهتر شده...
- انیمیشن و ترانزیشن بهش اضافه شده!

خبر در بلاگ رسمی:
https://blog.getbootstrap.com/2026/10/08/bootstrap-6-alpha/
فهرست تغییرات: هنوز ارائه نشده
سایت رسمی:
https://getbootstrap.com/
مستندات رسمی:
https://getbootstrap.com/docs/6.0/getting-started/install/

پ.ن.
* صرفا در رابطه با layout و grid.
- معتقدم نسل برگ ریزونیه!

@DevTwitter | <Arash Laylazi/>
🍌25👍13👎1
با یه پارادوکسی مواجه هستیم که خیلی مهمه درست درکش کنیم.

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

حالا تو توییتر dax و DHH این چند روز یه حرفی زدن که خیلی باهاش موافقم: دیگه لازم نیست برای کار با AI یه setup پیچیده و عجیب بچینی. مدل‌ها خودشون خیلی خوب شدن.

تا چند ماه پیش خودم رو خیلی درگیر setupهای پیچیده می‌کردم. کلی skill، کلی MCP، فایل‌های rule چند صفحه‌ای و غیره...
علت اصلیش این بود که مدل‌های اون موقع ضعیف بودن، یا بهتره بگم حواس‌پرت بودن...
مثلا یادش می‌رفت چی گفتیم، یه چیزی می‌نوشتیم که یادش بمونه. یا به یه سری چیزای بدیهی دقت نمی‌کرد و باید rule سفت و سخت براش می‌نوشتی که درست کار کنه.
الان مدل‌ها هنوز بی‌نقص نیستن، ولی این مشکلا رو خیلی کمتر دارن و بیشتر اون setupها دیگه لازم نیست.

ولی یه چیزی هست که به نظرم همچنان مهمه. مدل هر چقدر هم باهوش باشه، پروژه شما رو نمی‌شناسه. نمی‌دونه چرا فلان کار رو تو تیمتون این‌طوری انجام می‌دید، یا اون قانون عجیب بیزینسی که شفاهیه و هیچ‌جا داکیومنت نشده از کجا اومده. این چیزا رو باید یه جا براش بنویسید. این دیگه «جبران ضعف مدل» نیست، اطلاعاتیه که هیچ‌جای دیگه پیداش نمی‌کنه.
در واقع بزرگ‌ترین ضعف بیزینس‌ها الان «حجم خیلی زیاد contextهای شفاهیه» که هیچ‌جا نوشته نشده جز ناخودآگاه آدم‌ها، و تا این حل نشه ایجنت‌ها بهره‌وری کافی نخواهند داشت.
برای همین مهم‌ترین کاری که معمولا می‌کنم اینه که نیازمندی رو کامل و شفاف کنم، هم از نظر بیزینسی هم فنی.

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

یه نکته مهم دیگه هم اینه که درک عمیق مسائل high level مهندسی نرم‌افزار، که اگه از ابعاد مختلف جمعشون کنی خیلی زیادن، همچنان تو کیفیت خروجی ایجنت‌ها تعیین‌کننده‌ست. ابزار ساده‌تر شده، ولی هنوز باید بدونی داری چی می‌سازی. پس از نظر من بالا بردن دانش مهندسی نرم‌افزار خیلی مهمه.

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

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

و وقتی دید فنی و محصولی داری، همه‌ش می‌خوای تو کار ایجنت دخالت کنی و کم‌کم می‌ری سمت وسواس و micromanage کردن.

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

https://x.com/dhh/status/2107823432205484040

@DevTwitter | <Hossein Nazari/>
👍16❤5🍌4
ابزار M3E Canvas یه ابزار رایگان و Open Source که داخل مرورگر صفحه‌های Material 3 رو می‌سازی، به هم وصلشون می‌کنی، Flow رو تست می‌کنی و آخرش خودش یه Prompt آماده می‌ده که می‌تونی مستقیم بدی به Claude Code، Codex، Gemini CLI یا Cursor تا برات پیاده‌ کنی
GitHub:
https://github.com/lnkiai/m3e-canvas

@DevTwitter | <خانم_زاده/>
👎2💔2🍌1
Forwarded from DevTwitter Ads.
🔥 دسترسی سریع به ChatGPT و Claude با بهترین قیمت 💡
⏱️ تحویل و راه‌اندازی فوری زیر ۵ ساعت! ⚡️

🛒 وب‌سایت:
🌐 Rahboom.com

👨‍💻 خرید از ادمین:
👤 @rahboom1
🍌13👎4
خیلی جالبه یه مدل ۲۷ میلیاردی فقط تقریبا ۶ گیگ فضا نیاز دارد. اخیرا با پروژه 𝗣𝗿𝗶𝘀𝗺𝗠𝗟 آشنا شدم. یه مدلی به نام Ternary Bonsai 2 27B است که بر پایه مدل qwen3.8 27 B است. ولی جالبی قضیه اینه که وزن های مدل از وزن‌های سه‌گانه {۱+، ۰، ۱-} به همراه مقیاس‌بندی گروهی FP16 استفاده می‌کند که منجر به ۱٫۷۶ بیت موثر به ازای هر weight میشود. این معماری قبلا هم در معماری مدل BitNet b1.58 2B4T که ماکروسافت ارائه کرده است اجرا شده است. context window این مدل 262K و از ورودی های تصویر هم پشتیبانی می کند.

با ابزار llmfit بررسی کردم که مدل qwen 27B و Q3_K_M حدود ۹۰ درصد از gpu ۵۰۷۰ ti را اشتغال میکنه ولی این مدل با kv cache 32,768 تنها حدود 10.5 گیگ را اشغال کرده است. مدل را با llama.cpp سرو کردم و نرخ تقریبا ۸۰ توکن بر ثانیه داده است. فارسی هم پشتبانی میکنه و در کد زنی هم میتونید ازش استفاده کنید.
هسته اصلی این استارتاپ ایرانی و اساتید دانشگاه های برتر آمریکا هستند.

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

لینک ها:
بلاگ مدل Bonsai 2 27B:
https://prismml.com/news/bonsai-2-27b

مدل BitNet b1.58 2B4T ماکروسافت
https://huggingface.co/microsoft/bitnet-b1.58-2B-4T


@DevTwitter | <Ehsan Rahnama/>
❤14🔥6🍌3
یه نکته ساده ولی مهم درباره Cookie که خیلی‌ها هنوز قاطی می‌کنن

حالت HttpOnly یعنی JavaScript دیگه نمی‌تونه به Cookie دسترسی داشته باشه؛ پس مثلا توی حملات XSS، دزدیدن JWT سخت‌تر میشه.

حالت Secure یعنی Cookie فقط روی HTTPS ارسال میشه.

این دوتا یکی نیستن و حتی می‌تونن همزمان فعال باشن.

حالا اگه Cookie از نوع HttpOnly باشه و توی React یا Angular بخوایم بفهمیم کاربر لاگین هست یا نه، معمولا خودمون Cookie رو نمی‌خونیم؛ یه API مثل auth/status از بک‌اند می‌گیریم و بر اساس جوابش Protected Route و Componentها رو مدیریت می‌کنیم.

@DevTwitter | <Nastaran Mohammadi/>
👍20🍌6❤5
Forwarded from DevTwitter Ads.
🇨🇦 کانادا یا اروپا 🇪🇺؟ کدوم مسیر برای تو شدنی‌تره؟

وبینار رایگان « مهاجرت تحصیلی»
با امیر (از کانادا)، علیرضا (از ایتالیا) و عرفان، مدیر ابرادین

✅ آموزش صفر تا صد: انتخاب مقصد، پذیرش، هزینه، فاند و اقامت
✅ بررسی آنلاین شانس مهاجرت تحصیلی روی رزومه‌ی شرکت‌کننده‌ها
✅ پرسش و پاسخ مستقیم

🗓 شنبه ۲۵ مهر، ساعت ۱۹

⚠️ ظرفیت بررسی رزومه محدوده؛ اولویت با کساییه که زودتر ثبت‌نام می‌کنن.

ثبت‌نام رایگان 👇

https://eseminar.tv/wb183938
👎8🍌6
خطرناک ترین عاشقانه ی تاریخ
وقتی «دوستت دارم» به یک حمله سایبری جهانی تبدیل شد

4 می سال 2000، در گوشه و کنار دنیا، هزاران نفر ایمیلی دریافت کردند که هیچ نشانی از یک حمله سایبری نداشت.
نه تهدیدی در کار بود. نه خبری از درخواست پول.
فقط سه کلمه در عنوان ایمیل به چشم می خورد:
I LOVE YOU

بعضی ها از سر کنجکاوی بازش کردند. بعضی ها هم چون ایمیل از طرف کسی براشون اومده بود که می شناختند.
اما هیچکدام نمی دانستند با باز کردن آن نامه ماجرا به آلوده شدن کامپیوتر خودشان ختم نمی شود. بلکه قرار بود ناخواسته حمله ای جهانی رو گسترش دهند.
چه کسی از روی کنجکاوی یک نامه ی عاشقانه رو باز نمی کند؟
اما پشت اون فایل، خبری از نامه عاشقانه نبود. یک Worm پنهان شده بود.

به محض اجرای فایل، بد افزار شروع به تغییر و تخریب بعضی فایل های سیستم می کرد.
اما خطر اصلی تازه از اینجا شروع می شد:
که Worm، به دفترچه ایمیل قربانی دسترسی پیدا می کرد و خودش را برای مخاطبان قربانی می فرستاد. یعنی کسی که ایمیل جدید رو دریافت می کرد. معمولا فرستنده رو می شناخت.
و همین اعتماد، به موتور انتشار این حمله تبدیل شد.
یک نفر فایل رو باز می کرد.
بعد ده ها نفر ایمیل دریافت می کردند.
و اون ها هم فایل رو باز می کردند.
طولی نکشید که شبکه های سازمانی در سراسر دنیا درگیر شدند و میلیون ها کامپیوتر تحت تاثیر قرار گرفتند.

رد این ماجرا به فیلیپین رسید. جایی که نام دانشجویی به اسم Onel de Guzman با ساخت این Worm گره خورد.
رسیدیم به عجیب ترین بخش داستان:
با وجود خسارت های گسترده و سطح بین المللی، نبود قوانین مناسب در فیلیپین آن زمان باعث شد پرونده به محکومیت کیفری او منجر نشود.

بد افزار ILOVEYOU برای آلوده کردن میلیون ها سیستم نیاز به شکستن هیچ رمز عبوری نداشت. از چیزی استفاده کرد که هیچ آنتی ویروس پیشرفته ای هم نمی توانست به سادگی تشخیصش بده.
"اعتماد" و "عشق"

@DevTwitter | <Arnik Sasanian/>
❤47🔥9🍌4
فقط با یه دستور ساده

npx farsiui@latest add mcp-builder

اسکیل رسمی MCP Builder که Anthropic منتشر کرده به پروژه‌تون اضافه می‌شه
حالا با Claude، Cursor یا Codex حتی Open Code می‌تونید سرور MCP پروژه‌تون رو مطابق استانداردهای Anthropic بسازید.

https://farsiui.ir/

@DevTwitter | <JooD/>
❤12👍3🍌2
Forwarded from DevTwitter Ads.
💥 همیشه مشکل شما در استفاده از نرم‌افزار هلو، با یک سؤال ساده حل نمی‌شود!

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


🔻 کافی است درخواستتان را با پشتیبانی هلو مطرح کنید تا مسیر رسیدگی به آن پیگیری شود.

☎️ 021-23067 (داخلی 1)

👈 چت آنلاین در وب‌سایت هلو یا مای هلو
Please open Telegram to view this post
VIEW IN TELEGRAM
👎3🍌1
کلود کد حالا می‌تونه هیگزفیلد رو به یک استودیوی تولید ویدئوی هوش مصنوعی تبدیل کنه که فقط یک نفر برای اداره‌اش کافیه.

کافیه این ۱۹ مهارت (Skill) رو نصب کنی، کلود کد رو به هیگزفیلد وصل کنی و بعد به کلود بگی چه چیزی می‌خوای بسازی.

دستور "/ugc-hot-girl" رو اجرا کن تا خودش کاراکتر رو بسازه، تصاویر موردنیاز رو تولید کنه و ویدئوی نهایی رو با مدل سیدنس (Seedance) برات بسازه.

کلود از طریق پلی‌رایت (Playwright) هیگزفیلد رو کنترل می‌کنه. تو فقط خروجی رو بررسی می‌کنی و هرجا لازم باشه، تغییرات موردنظرت رو می‌گی.

این روش برای وقتیه که می‌خوای بدون صرف ساعت‌ها وقت برای انجام دستی تمام مراحل، تبلیغات ویدئویی به سبک UGC برای برندها بسازی.

حتی می‌تونی همین فرایند رو به یک سرویس تبدیل کنی و محتوای نهایی رو به مشتری‌ها بفروشی.

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

https://github.com/AKCodez/higgsfield-claude-skills

@DevTwitter | <Yarad/>
🍌11❤5
یه سایت خوب برای یادگیری System Design و low-Level Design که در این روزهای‌ AIای چیز با ارزشی محسوب میشه:

https://hellointerview.com

@DevTwitter | <Mahdi MirMohamadi/>
❤13
Forwarded from DevTwitter Ads.
✅ اگه برنامه نویس هستی این کانالو از دست نده!

امید زاهدی یکی از بزرگ ترین برنامه نویس ها در ایرانه که پروژه هاش توسط خبرگزاری ها و کانالی معروفی منتشر شده, با عضویت داخل کانالشون میتونید مطالب جالبی درمورد برنامه نویسی یاد بگیرید و از فرصت های شغلی جدید بهرمند بشید.

لینک کانالشون:👇
https://t.me/+PGc3d7D-yjA2NzBk
https://t.me/+PGc3d7D-yjA2NzBk

✅ همچنین میتونید جهت مشاوره برای شروع یادگیری برنامه نویسی بهشون مراجعه کنید: @Anony_muos
🍌50🔥4👎2
بیست تا ریپوی گیت‌هاب که مستقیم Opus 5.5 رو به یه ماشین ساخت ویدیو تبدیل می‌کنه.

ابزارهای مخصوص Opus 5.5

۱. این یکی تک‌تک فریم‌ها رو خودش چک می‌کنه و صدا رو هم داخل کد می‌نویسه.
https://github.com/whaleyxbt/claude-motion

۲. این یکی با HTML، Playwright و ffmpeg کار می‌کنه و به ریموشن نیازی نداره.
https://github.com/howseen-ai/claude-motion-design

۳. این یکی سیزده تا اسکیل برای ساخت ویدیوی شروع داره.
https://github.com/charlie947/motion-graphics-skills

۴. با یه جمله، ادیتور Remotion می‌سازه؛ زیرنویس و موسیقی پس‌زمینه هم همراهشه.
https://github.com/haidrrrry/claude-remotion-skill

۵. این یکی کتابخونه اصول انیمیشن و حرکت دوربینه.
https://github.com/t3knobox/klik-anim-skill-creation

۶. این یکی تیزر تبلیغاتی با ریتم صدوبیست ضرب در دقیقه می‌سازه.
https://github.com/Sunwood-ai-labs/hyperframes-motion-reel-skill

۷. این یکی ویدیوی کامل معرفی محصول می‌سازه، با نریشن و رنگ‌بندی.
https://github.com/AbubakrChan/product-launch-motion

۸. این یکی از یه فایل، ویدیوی کوتاه درمیاره و همون وسط کار، استوری‌بورد هم می‌کشه.
https://github.com/cth9191/animate

۹. این یکی زمان‌بندی، رنگ، چیدمان متن، لوگو و ریموشن رو پوشش می‌ده.
https://github.com/iart-ai/motion-design-skills

۱۰. این یکی چهارده تا اسکیل داره به‌علاوه چهارصدوشش کارت متریال انیمیشن.
https://github.com/nateherkai/hyperframes-student-kit

[ موتورهای رندر ]

۱۱. این یکی HTML رو مستقیم به MP4 تبدیل می‌کنه و از همه بیشتر نصبش می‌کنن.
https://github.com/heygen-com/hyperframes

۱۲. این یکی ویدیو رو با REACT می‌نویسه.
https://github.com/remotion-dev/remotion

۱۳. این یکی کتابخونه رسمی اسکیل‌های REMOTION.
https://github.com/remotion-dev/skills

۱۴. این یکی تایم‌لاین HYPERFRAMES رو راه می‌ندازه.
https://github.com/greensock/GSAP

[ اکوسیستم کنارش ]

۱۵. این یکی اصول کلی انیمیشنه.
https://github.com/LottieFiles/motion-design-skill

۱۶. این یکی نقشه اسکیل‌های GSAP، Remotion، lottie و Rive.
https://github.com/frankxai/awesome-motion-design-agent-skills

۱۷. این یکی مستقیم از روی متن، متریال انیمیشن درمیاره.
https://github.com/Barty-Bart/motion-graphics

۱۸. این یکی برای انیمیشن داخل صفحه وبه.
https://github.com/199-biotechnologies/motion-dev-animations-skill

۱۹. این یکی نسخه جدید Framer Motion.
https://github.com/motiondivision/motion

۲۰. این یکی برای وقتیه که به‌جای MP4، خروجی lottie می‌خوای.
https://github.com/airbnb/lottie-web

روند کار همین‌قدر ساده‌ست: Opus کد می‌نویسه، کتابخونه اسکیل ریتم و دوربین رو تنظیم می‌کنه، موتور هم MP4 رو تحویل می‌ده.

قبل از نصب هر ریپو یه نگاه بنداز و برای بعد ذخیره کن.

@DevTwitter | <Yarad/>
❤11🔥4🍌1
داکر قرار بود مشکل معروفِ «روی سیستم من کار می‌کنه!» رو حل کنه؛
اما این بار داستان برعکس شد!
چند روز پیش می‌خواستم نسخه جدید برنامه‌ای که نوشته بودیم رو روی Docker راه‌اندازی کنم که با یک مشکل عجیب مواجه شدیم!
برنامه روی دو سیستم مختلف بدون هیچ مشکلی اجرا می‌شد؛
ولی وقتی همون برنامه رو داخل Docker اجرا کردیم، همه‌چیز به هم ریخت.
اول log شروع برنامه مدام تکرار می‌شد.
بعد RAM کم‌کم پر شد.
سرور Restart شد.
کانتینر دوباره بالا اومد…
و دوباره همون اتفاق تکرار شد!
کد تغییر نکرده بود.
سرور هم همون سرور بود.
تنها چیزی که تغییر کرده بود، نحوه‌ی بسته‌بندی و اجرای برنامه بود.
بعد از بررسی مشخص شد مشکل از ترکیب: Python multiprocessing + spawn + اجرای برنامه به‌صورت executable بود.
وقتی از spawn استفاده می‌کنید، هر Process جدید، برنامه رو از ابتدا اجرا می‌کنه.
در یک Python Script معمولی، این رفتار قابل مدیریته؛ اما وقتی برنامه به‌صورت frozen/executable اجرا می‌شه، اگه نقطه‌ی ورود Processها درست مدیریت نشده باشه، هر Worker ممکنه دوباره کل برنامه رو اجرا کنه.
یعنی چیزی شبیه این:
Process → Process → Process → RAM → Restart
و بعد دوباره از اول!
راه‌حل؟
جواب فقط یک خط کد است:
multiprocessing.freeze_support()
این تجربه یک نکته‌ی مهم برای من داشت
داکر تفاوت‌های محیط اجرا رو کمتر می‌کنه، اما تفاوت‌های مربوط به نحوه‌ی بسته‌بندی و اجرای کد رو از بین نمی‌بره.
پس اگه برنامه‌ای به‌صورت Python Script درست کار می‌کنه ولی بعد از تبدیل شدن به Binary یا اجرای داخل Docker رفتار عجیبی داره، فقط سراغ Docker و تنظیمات سرور نرید؛
نحوه‌ی ایجاد Processها و نقطه‌ی شروع برنامه رو هم بررسی کنید.
گاهی مشکل یک معماری پیچیده نیست…
بلکه فقط یک خط کده که داره RAM سرور رو به آتش می‌کشه.

@DevTwitter | <Sara Sabaghan/>
👍26❤11👎4