اون کدی که روزی صد بار داری بهش لعنت میفرستی... "اشتباه فنی" نیست. "پلن مهاجرت" نفر قبلی بوده!
دیروز با یکی از دوستام صحبت میکردم. حسابی کلافه بود.
میگفت توی یه شرکت جمعوجور کار میکنه که کل ترافیکشون به زور به ۵۰۰ تا ریکوئست در روز میرسه. (پروژهای که روی یه هاست اشتراکی هم مثل ساعت کار میکرد).
ولی الان چی زیر دستشه؟ یه کلاف سردرگم از Microservices، Kafka برای مسیجینگ، GraphQL برای دو تا کوئری ساده، و دیتابیسهای NoSQL که اصلاً نیازی بهشون نبود.
پرسیدم: "چرا؟! کی همچین معماری سنگینی رو برای یه پروژه به این کوچیکی چیده؟"
خندید و گفت: "تیملید قبلی. میخواست رزومهش رو برای آمازون و گوگل قوی کنه. نیاز داشت این کلمات کلیدی (Keywords) رو توی رزومهش داشته باشه تا بتونه ویزا بگیره. الان اون کاناداست و داره حقوق دلاری میگیره..."
"...و ما موندیم و سیستمی که هر جاش رو دست میزنیم، از سه جای دیگه میپکه."
بدتر از اون؟ مدیرای مجموعه هنوز فکر میکنن اون معماری شاهکاره! با خودشون میگن: "فلانی که اینو نوشت الان تو شرکتای بزرگ خارجیه؛ پس حتما کارش درست بوده و ما بلد نیستیم نگهش داریم!"
به این پدیده میگن Resume-Driven Development (RDD). یا به زبون سادهتر: "توسعهی مبتنی بر شوآف".
یعنی انتخاب تکنولوژی نه بر اساس نیاز پروژه یا سود شرکت، بلکه بر اساس جذابیت رزومه برای شغل بعدی.
نتیجهش چیه؟ اون برنامهنویس قبلی شرکت، پلنش رو اجرا کرد و رفت.
و تو؟ تو دیگه یه توسعهدهنده نیستی. تو شدی کسی که تاوان جاهطلبیهای نفر قبلی رو میده. تو داری شببیداری میکشی تا تکنولوژیای رو زنده نگه داری که فقط برای کلاس گذاشتن به پروژه اضافه شده.
@DevTwitter | <Hossein Moradi/>
دیروز با یکی از دوستام صحبت میکردم. حسابی کلافه بود.
میگفت توی یه شرکت جمعوجور کار میکنه که کل ترافیکشون به زور به ۵۰۰ تا ریکوئست در روز میرسه. (پروژهای که روی یه هاست اشتراکی هم مثل ساعت کار میکرد).
ولی الان چی زیر دستشه؟ یه کلاف سردرگم از Microservices، Kafka برای مسیجینگ، GraphQL برای دو تا کوئری ساده، و دیتابیسهای NoSQL که اصلاً نیازی بهشون نبود.
پرسیدم: "چرا؟! کی همچین معماری سنگینی رو برای یه پروژه به این کوچیکی چیده؟"
خندید و گفت: "تیملید قبلی. میخواست رزومهش رو برای آمازون و گوگل قوی کنه. نیاز داشت این کلمات کلیدی (Keywords) رو توی رزومهش داشته باشه تا بتونه ویزا بگیره. الان اون کاناداست و داره حقوق دلاری میگیره..."
"...و ما موندیم و سیستمی که هر جاش رو دست میزنیم، از سه جای دیگه میپکه."
بدتر از اون؟ مدیرای مجموعه هنوز فکر میکنن اون معماری شاهکاره! با خودشون میگن: "فلانی که اینو نوشت الان تو شرکتای بزرگ خارجیه؛ پس حتما کارش درست بوده و ما بلد نیستیم نگهش داریم!"
به این پدیده میگن Resume-Driven Development (RDD). یا به زبون سادهتر: "توسعهی مبتنی بر شوآف".
یعنی انتخاب تکنولوژی نه بر اساس نیاز پروژه یا سود شرکت، بلکه بر اساس جذابیت رزومه برای شغل بعدی.
نتیجهش چیه؟ اون برنامهنویس قبلی شرکت، پلنش رو اجرا کرد و رفت.
و تو؟ تو دیگه یه توسعهدهنده نیستی. تو شدی کسی که تاوان جاهطلبیهای نفر قبلی رو میده. تو داری شببیداری میکشی تا تکنولوژیای رو زنده نگه داری که فقط برای کلاس گذاشتن به پروژه اضافه شده.
@DevTwitter | <Hossein Moradi/>
1👍135❤16🍌13👎3
یه آموزش خوب برای ساخت بازی سوپرماریو با آنریل 5
https://www.youtube.com/watch?v=STCK4nx7waE
https://www.youtube.com/watch?v=wuldH8ODnmc
@DevTwitter
https://www.youtube.com/watch?v=STCK4nx7waE
https://www.youtube.com/watch?v=wuldH8ODnmc
@DevTwitter
👍16🔥2
همیشه برای بهتر شدنِ عملکرد، کد رو بازنویسی میکردم، کوئریها رو بهینه میکردم و کش اضافه میکردم، ولی با این حال گاهی نتیجه مطلوب رو نمیگرفتم.
بعد که با چرخهی حیات یک درخواست در لاراول آشنا شدم، متوجه شدم که در واقع با هر درخواستی که سمت اپلیکیشن ما میاد، یکبار برنامه از صفر بوت میشه.
به فکر چاره برای این موضوع افتاده بودم که اینجا با پکیج Laravel Octane آشنا شدم.
با Laravel Octane اپلیکیشن یکبار بوت میشه و سپس در حافظه نگه داشته میشه؛
در ادامه، با استفاده از server handlerهایی مثل Swoole، RoadRunner یا FrankenPHP، درخواستها توسط workerهای بلندمدت پردازش میشن و دیگه لازم نیست هر بار فریمورک از صفر بالا بیاد.
نتیجه، کاهش چشمگیرِ زمانِ پاسخ و افزایش توان پردازشیه.
نکتهٔ مهم:
این معماری «stateful» هست — یعنی چیزهایی که در حافظه نگه داشته میشن بین درخواستها باقی میمونن.
پس باید حواسمون باشه به متغیرهای سراسری، singletonها و connectionهای باز تا رفتار غیرمنتظره نداشته باشیم.
نکتهٔ جالب اینجاست که استفاده از این پکیج هم خیلی آسونه!
کافیه با دستور سادهی زیر نصبش کنی:
composer require laravel/octane
و بعد، یکی از server handlerها مثل swoole یا roadrunner رو انتخاب و نصب کنی.
برای اجرا در لوکال هم فقط کافیه بنویسی:
php artisan octane:start
اگر از Docker استفاده میکنی، میتونی handler مورد نظرت (مثلاً RoadRunner) رو داخل کانتینر نصب کنی و با تنظیم:
CMD ["php", "artisan", "octane:start", "--server=roadrunner"]
طبق تجربهی خیلی از توسعهدهندهها و تستهای رسمی، Octane میتونه سرعت اجرای برنامه رو چند برابر افزایش بده.
در پروژهای که خودم روش کار میکردم، بعد از راهاندازی Octane، زمان پاسخدهی برخی درخواستها تا چند ثانیه کمتر شد بدون اینکه نیازی به تغییر خاصی در منطق یا کد برنامه باشه.
همین باعث شد عملکرد کلی API واقعاً روانتر و سریعتر به نظر بیاد.
بهنظرم Octane یکی از اون ابزارهاییه که اگر پروژهت پرترافیکه یا با درخواستهای زیاد و سنگین سر و کار داری، حتماً ارزش امتحان کردن رو داره.
@DevTwitter | <Ehsan Zanjani/>
بعد که با چرخهی حیات یک درخواست در لاراول آشنا شدم، متوجه شدم که در واقع با هر درخواستی که سمت اپلیکیشن ما میاد، یکبار برنامه از صفر بوت میشه.
به فکر چاره برای این موضوع افتاده بودم که اینجا با پکیج Laravel Octane آشنا شدم.
با Laravel Octane اپلیکیشن یکبار بوت میشه و سپس در حافظه نگه داشته میشه؛
در ادامه، با استفاده از server handlerهایی مثل Swoole، RoadRunner یا FrankenPHP، درخواستها توسط workerهای بلندمدت پردازش میشن و دیگه لازم نیست هر بار فریمورک از صفر بالا بیاد.
نتیجه، کاهش چشمگیرِ زمانِ پاسخ و افزایش توان پردازشیه.
نکتهٔ مهم:
این معماری «stateful» هست — یعنی چیزهایی که در حافظه نگه داشته میشن بین درخواستها باقی میمونن.
پس باید حواسمون باشه به متغیرهای سراسری، singletonها و connectionهای باز تا رفتار غیرمنتظره نداشته باشیم.
نکتهٔ جالب اینجاست که استفاده از این پکیج هم خیلی آسونه!
کافیه با دستور سادهی زیر نصبش کنی:
composer require laravel/octane
و بعد، یکی از server handlerها مثل swoole یا roadrunner رو انتخاب و نصب کنی.
برای اجرا در لوکال هم فقط کافیه بنویسی:
php artisan octane:start
اگر از Docker استفاده میکنی، میتونی handler مورد نظرت (مثلاً RoadRunner) رو داخل کانتینر نصب کنی و با تنظیم:
CMD ["php", "artisan", "octane:start", "--server=roadrunner"]
طبق تجربهی خیلی از توسعهدهندهها و تستهای رسمی، Octane میتونه سرعت اجرای برنامه رو چند برابر افزایش بده.
در پروژهای که خودم روش کار میکردم، بعد از راهاندازی Octane، زمان پاسخدهی برخی درخواستها تا چند ثانیه کمتر شد بدون اینکه نیازی به تغییر خاصی در منطق یا کد برنامه باشه.
همین باعث شد عملکرد کلی API واقعاً روانتر و سریعتر به نظر بیاد.
بهنظرم Octane یکی از اون ابزارهاییه که اگر پروژهت پرترافیکه یا با درخواستهای زیاد و سنگین سر و کار داری، حتماً ارزش امتحان کردن رو داره.
@DevTwitter | <Ehsan Zanjani/>
❤27👍5🍌5🔥1
#کدبوک
یک مرجع جامع و قابلاعتماد برای شروع مدیریت سیستمهای لینوکسی:
- پوشش مفاهیم اصلی مدیریت کاربران، سرویسها و شبکه
- آشنایی با تنظیمات امنیتی، نظارت و عیبیابی
- معرفی ابزارهای کلیدی لینوکس برای مدیریت روزمره
- مناسب برای مبتدیهایی که میخوان مهارتهای ادمینی حرفهای کسب کنن
* فایل PDF این کتاب رو میتونید از کانال DevBooks که لینکش توی بیو هست دانلود کنید.
@DevTwitter
یک مرجع جامع و قابلاعتماد برای شروع مدیریت سیستمهای لینوکسی:
- پوشش مفاهیم اصلی مدیریت کاربران، سرویسها و شبکه
- آشنایی با تنظیمات امنیتی، نظارت و عیبیابی
- معرفی ابزارهای کلیدی لینوکس برای مدیریت روزمره
- مناسب برای مبتدیهایی که میخوان مهارتهای ادمینی حرفهای کسب کنن
* فایل PDF این کتاب رو میتونید از کانال DevBooks که لینکش توی بیو هست دانلود کنید.
@DevTwitter
❤17👍2🔥1
مدل opus 4.5 دیروز اومد. بینظیره. بهترین مدل دنیا برای coding با اختلاف زیاد.
یک اتفاق مهم دیگه اینکه Anthropic برای اولین بار قیمت بهترین مدل خودش رو به یک سوم تا یک پنجم قیمت قبلی کاهش داده!!
هر میلیون اینپوت از ۲۵ دلار شده ۵ دلار و هر میلیون output هم از ۷۵ دلار شده ۱۵ دلار!
@DevTwitter | <Amin Anvary/>
یک اتفاق مهم دیگه اینکه Anthropic برای اولین بار قیمت بهترین مدل خودش رو به یک سوم تا یک پنجم قیمت قبلی کاهش داده!!
هر میلیون اینپوت از ۲۵ دلار شده ۵ دلار و هر میلیون output هم از ۷۵ دلار شده ۱۵ دلار!
@DevTwitter | <Amin Anvary/>
❤45👍6🍌3👎2
ترجمه فارسی کتاب The Linux Command Line بالاخره کامل شد. این پروژه یک فورک از ریپوی اصلی بود و من همراه با یکی از دوستانم روی تکمیل ترجمه و ویرایش نهایی کار کردیم.
این کتاب یکی از منابع معتبر برای یادگیری ترمینال و دستورهای لینوکس بهصورت کاربردی و قدمبهقدم است.
نسخه کامل ترجمه، بهصورت رایگان و متنباز از طریق لینک زیر در دسترس است:
https://github.com/hheydarian/TLCL-Persian
اگر این پروژه براتون مفید بود، خوشحال میشم با استار دادن، ازش حمایت کنید.
@DevTwitter | <Hamed/>
این کتاب یکی از منابع معتبر برای یادگیری ترمینال و دستورهای لینوکس بهصورت کاربردی و قدمبهقدم است.
نسخه کامل ترجمه، بهصورت رایگان و متنباز از طریق لینک زیر در دسترس است:
https://github.com/hheydarian/TLCL-Persian
اگر این پروژه براتون مفید بود، خوشحال میشم با استار دادن، ازش حمایت کنید.
@DevTwitter | <Hamed/>
❤49👎8👍6🔥4
>Linux is C
>Git is C
>Python interpreter (CPython) is C
>Ruby interpreter (MRI) is C
>PostgreSQL is C
>SQLite is C
>Redis is C
>MySQL is C++
>MongoDB is C++
>Unreal Engine is C++
>Chrome is C++
>Firefox is C++
>Windows kernel is C
>macOS kernel (XNU) is C
>Photoshop is C++
>VMware is C++
>TensorFlow (Core) is C++
-still, you are not convinced to learn C and C++
@DevTwitter
>Git is C
>Python interpreter (CPython) is C
>Ruby interpreter (MRI) is C
>PostgreSQL is C
>SQLite is C
>Redis is C
>MySQL is C++
>MongoDB is C++
>Unreal Engine is C++
>Chrome is C++
>Firefox is C++
>Windows kernel is C
>macOS kernel (XNU) is C
>Photoshop is C++
>VMware is C++
>TensorFlow (Core) is C++
-still, you are not convinced to learn C and C++
@DevTwitter
🍌64❤44👍16🔥6
هوش مصنوعی واقعا زندگیمو راحت تر کرده. با Claude توی چند دیقه یه بات تلگرامی برای خودم ساختم تا سلکشن درست کردن از آلبوما رو خیلی سریع تر کنم. میخواستم خودم بنویسمش خیلی الکی کلی از تایمم میرفت. به حد کافی این همه سال بات ساختم، الان وقت استفاده از ابزاره
https://github.com/zmn-hamid/telegram-selection-maker-bot
@DevTwitter | <Kyrovert/>
https://github.com/zmn-hamid/telegram-selection-maker-bot
@DevTwitter | <Kyrovert/>
🍌52❤19👍3👎1
بعد از اومدن Claude Opus 4.5 روی http://v0.app یکم تستش کنم و ببینم چطوریه، واقعیتش نتایجی که بهم داد خیلی بهتر از چیزی بود که از مدل های خیلی قوی قبلی دیده بودم، انگار یه مدل دادن فقط برای Programming، این نتایج تست های 1 ساعت اخیر من هست. لینکهارو میذارم، واقعا عالیه!
همه اینا فقط با یک پاراگراف 4-5 خطی انجام شده بدون هیچ توضیح اضافه یا اصلاح و بهبود، One-Shot در اولین پرامپت. البته اینا لندینگ پیج هستن ولی در کل برای کمتر از 10 دقیقه کار خیلی خوب و تمیز در اومدن.
مثلا این لینک لندینگ lord of the rings:
https://v0.app/chat/lord-of-the-rings-landing-page-oBpcDgX48O6?ref=NU4L05
@DevTwitter | <Max Shahdoost/>
همه اینا فقط با یک پاراگراف 4-5 خطی انجام شده بدون هیچ توضیح اضافه یا اصلاح و بهبود، One-Shot در اولین پرامپت. البته اینا لندینگ پیج هستن ولی در کل برای کمتر از 10 دقیقه کار خیلی خوب و تمیز در اومدن.
مثلا این لینک لندینگ lord of the rings:
https://v0.app/chat/lord-of-the-rings-landing-page-oBpcDgX48O6?ref=NU4L05
@DevTwitter | <Max Shahdoost/>
👍19❤8🔥4🍌4
سورس کدی که این روزا دارم میخونم: بسیار تمیز و زیبا نوشته شده، سی++ مدرن کمتر توش استفاده شده چون سال ۲۰۰۷ شروع به نوشتنش کردن و اون موقع چیزی به اسم سی++ مدرن نداشتیم
https://github.com/godotengine/godot
@DevTwitter | <Abolfazl/>
https://github.com/godotengine/godot
@DevTwitter | <Abolfazl/>
👍23👎4❤1🔥1
وقتی ChatGPT منتشر شد خیلیها باور داشتند دوره گوگل به پایان میرسه اما در عمل برعکس شده
گوگل داره برنده هوش مصنوعی میشه تنها شرکتی که کل زنجیره هوش مصنوعی از تولید تراشه تا دیتاسنتر، مدلهای LLM و ... دارد و درآمد و سودش هم از خدمات ابری به سرعت رو به رشد است
@DevTwitter | <Masoud Majidi/>
گوگل داره برنده هوش مصنوعی میشه تنها شرکتی که کل زنجیره هوش مصنوعی از تولید تراشه تا دیتاسنتر، مدلهای LLM و ... دارد و درآمد و سودش هم از خدمات ابری به سرعت رو به رشد است
@DevTwitter | <Masoud Majidi/>
👍62🔥14❤5👎2
با توجه به اینکه این روزها موضوع TOON بهشدت مورد توجه قرار گرفته، تصمیم گرفتم یک کتابخانه برای Spring Boot که ابجکت های Java را به TOON (Token-Oriented Object Notation) تبدیل میکنه بنویسم، قالبی فشرده و سازگار با LLMها که میتواند مصرف توکن را در مقایسه با JSON حدود ۳۰ تا ۶۰ درصد کاهش دهد.
این کتابخانه مبتنی بر annotation است، با انواع مختلف داده بهصورت دقیق و صحیح کار میکند و به همراه Spring Auto-Configuration ارائه شده تا بتوان آن را بدون تغییرات عمده به پروژههای موجود اضافه کرد.
اگر با LLMها سروکار دارید و قصد دارید بدون تغییر در مدل دامنهی خود، اندازهی پرامپت و هزینههای مرتبط را کاهش دهید، پیشنهاد میکنم حتماً اون رو بررسی کنید.
https://github.com/Jamalianpour/toon-spring-boot
@DevTwitter | <Mohammad/>
این کتابخانه مبتنی بر annotation است، با انواع مختلف داده بهصورت دقیق و صحیح کار میکند و به همراه Spring Auto-Configuration ارائه شده تا بتوان آن را بدون تغییرات عمده به پروژههای موجود اضافه کرد.
اگر با LLMها سروکار دارید و قصد دارید بدون تغییر در مدل دامنهی خود، اندازهی پرامپت و هزینههای مرتبط را کاهش دهید، پیشنهاد میکنم حتماً اون رو بررسی کنید.
https://github.com/Jamalianpour/toon-spring-boot
@DevTwitter | <Mohammad/>
❤17👍3👎2🔥1
یک دایرکتوری خفن و کامل ، شامل صد ها لینک Ai های کاربردی ، نظم دهی شده با توجه به کاربرد و نوع استفاده
شامل چتباتها، تولید تصویر، ویدیو، صدا، کدنویسی و ابزارهای کاربردی.
https://github.com/xPOURY4/AI-Links
برای مشاهده انلاین هم میتونید به این لینک برید
https://xpoury4.github.io/AI-Links/
@DevTwitter | <POURYA/>
شامل چتباتها، تولید تصویر، ویدیو، صدا، کدنویسی و ابزارهای کاربردی.
https://github.com/xPOURY4/AI-Links
برای مشاهده انلاین هم میتونید به این لینک برید
https://xpoury4.github.io/AI-Links/
@DevTwitter | <POURYA/>
❤23👍4🍌3👎1
یه تلهی بزرگ که پروژهها و اغلب برنامهنویسهای بکند توش میوفتن، اینه که برای حل یه مشکل، سعی میکنن یه مشکل جدید ایجاد کنن.
دیتابیس همیشه Source of Truth هستش، و اضافه کردن لایهی کش، میتونه بعضی مواقع ریسک stale شدن دیتا رو ایجاد کنه. چون مثلا ممکنه در لحظهی آپدیت کش، ردیس خطا بده و ...
به نظر من کش زمانی باید به پروژه اضافه بشه که سیستم، زیر بار دیگه جوابگوی تعداد ریکوئستها نباشه و latency به اندازهی خوبی بالا رفته باشه. اندازهگیری این تاخیر هم، یه عدد ثابت نداره. باید در یک بازهی زمانی محاسبه بشه.
اگه احساس بر اینه که کوئریها سنگین هستن و باید کش اضافه بشه، میتونه چند تا احتمال وجود داشته باشه:
۱- نورمالیزیشن درست انجام نشده
۲- دومین درست تعریف نشده
۳- کوئریها بهینه نیستند (ممکنه بجای گرفتن لیستی از رکوردها، یکی یکی واکشی میشن)
@DevTwitter | <آرش | Arash/>
دیتابیس همیشه Source of Truth هستش، و اضافه کردن لایهی کش، میتونه بعضی مواقع ریسک stale شدن دیتا رو ایجاد کنه. چون مثلا ممکنه در لحظهی آپدیت کش، ردیس خطا بده و ...
به نظر من کش زمانی باید به پروژه اضافه بشه که سیستم، زیر بار دیگه جوابگوی تعداد ریکوئستها نباشه و latency به اندازهی خوبی بالا رفته باشه. اندازهگیری این تاخیر هم، یه عدد ثابت نداره. باید در یک بازهی زمانی محاسبه بشه.
اگه احساس بر اینه که کوئریها سنگین هستن و باید کش اضافه بشه، میتونه چند تا احتمال وجود داشته باشه:
۱- نورمالیزیشن درست انجام نشده
۲- دومین درست تعریف نشده
۳- کوئریها بهینه نیستند (ممکنه بجای گرفتن لیستی از رکوردها، یکی یکی واکشی میشن)
@DevTwitter | <آرش | Arash/>
👍36❤7🔥2🍌2
This media is not supported in your browser
VIEW IN TELEGRAM
اگه از AI coding agent ها در سیکل تولید نرم افزار/ چرخه توسعه نرمافزار استفاده میکنید که بعید میدونم نکنید حتما این ۲۰ صفحه pdf از کمپانی OpenAI را بخونید. که یک سری راهکارهای عملی نشون میده برای اینکه رهبرای مهندسی بتونن همین امروز استارت ساختن تیمها و پروسههای AI-native رو بزنن.
Link: https://cdn.openai.com/business-guides-and-resources/building-an-ai-native-engineering-team.pdf
@DevTwitter | <Mehdi Allahyari/>
Link: https://cdn.openai.com/business-guides-and-resources/building-an-ai-native-engineering-team.pdf
@DevTwitter | <Mehdi Allahyari/>
👍8❤4