این ریپو اومده یه لیست کاملی از برنامه ها و پروژه های مرتبط با llm ها، ایجنت ها، RAG و MCP هارو یکجا جمع کرده
اگه با ai سرکار دارید حتما بدردتون میخوره
لینک ریپو
https://github.com/Shubhamsaboo/awesome-llm-apps
@DevTwitter | <ixAbolfazl />
اگه با ai سرکار دارید حتما بدردتون میخوره
لینک ریپو
https://github.com/Shubhamsaboo/awesome-llm-apps
@DevTwitter | <ixAbolfazl />
🔥16👍1
چند وقت پیش مسئولیت Refactor بخشی از یک پروژه بزرگ Next.js بهم سپرده شد. بخشی از این کار، شناسایی و حذف کدها و فایلهای بلااستفاده (Dead Code) بود کاری که توی پروژههای بزرگ معمولاً سخت، زمانبر و پرریسکه.
برای سادهتر کردن این مسیر، به ابزار knip رسیدم. ابزار قدرتمندی که فایلها، فانکشن ها و حتی dependencyهای بلااستفاده رو شناسایی میکنه.
در عمل، knip تونست بخش زیادی از dead code ها رو شناسایی کنه، اما دو نکتهی جالب و مهم برام داشت:
- اولی مربوط به component tree بود.
یکسری کامپوننتها بهعنوان dead code تشخیص داده شده بودن، در حالی که وقتی سرچ میکردم، میدیدم یه جای دیگه دارن استفاده میشن. اما وقتی کامپوننت parent رو بررسی کردم، فهمیدم اون خودش هیچجا استفاده نشده و این باعث شده بود که child رو هم dead code بدونه. این عمق تحلیل وابستگی، برام قابل توجه بود.
- دومی تشخیص ناقص بعضی dependencyها بود.
برای مثال، tailwindcss و یکی از پلاگینهاش که در فایل CSS ایمپورت شده بودن، بهعنوان unused معرفی شدن. همینطور بعضی پلاگینهای ESLint هم به اشتباه در لیست قرار گرفته بودن. این یعنی خروجی ابزار، هرچقدر هم دقیق باشه، همچنان نیاز به بررسی انسانی داره.
این تجربه باعث شد ابزارهای تحلیل ایستا (static analysis) رو جدیتر ببینم؛ نه فقط برای حذف کد، بلکه برای درک بهتر ساختار پروژه.
https://github.com/webpro-nl/knip
@DevTwitter | <Mohammad Nazari/>
برای سادهتر کردن این مسیر، به ابزار knip رسیدم. ابزار قدرتمندی که فایلها، فانکشن ها و حتی dependencyهای بلااستفاده رو شناسایی میکنه.
در عمل، knip تونست بخش زیادی از dead code ها رو شناسایی کنه، اما دو نکتهی جالب و مهم برام داشت:
- اولی مربوط به component tree بود.
یکسری کامپوننتها بهعنوان dead code تشخیص داده شده بودن، در حالی که وقتی سرچ میکردم، میدیدم یه جای دیگه دارن استفاده میشن. اما وقتی کامپوننت parent رو بررسی کردم، فهمیدم اون خودش هیچجا استفاده نشده و این باعث شده بود که child رو هم dead code بدونه. این عمق تحلیل وابستگی، برام قابل توجه بود.
- دومی تشخیص ناقص بعضی dependencyها بود.
برای مثال، tailwindcss و یکی از پلاگینهاش که در فایل CSS ایمپورت شده بودن، بهعنوان unused معرفی شدن. همینطور بعضی پلاگینهای ESLint هم به اشتباه در لیست قرار گرفته بودن. این یعنی خروجی ابزار، هرچقدر هم دقیق باشه، همچنان نیاز به بررسی انسانی داره.
این تجربه باعث شد ابزارهای تحلیل ایستا (static analysis) رو جدیتر ببینم؛ نه فقط برای حذف کد، بلکه برای درک بهتر ساختار پروژه.
https://github.com/webpro-nl/knip
@DevTwitter | <Mohammad Nazari/>
❤32👍9🔥1
همیشه نصب داکر توی ایران یه چالش بوده؛ مخصوصاً وقتی وسط یه پروژهای و با یه ارور ساده مثل
connection refused
کل کار متوقف میشه.
منم از همین مشکل خسته شدم، برای همین تصمیم گرفتم یه میرور شخصی برای Docker Registry با کمک Cloudflare Workers راه بندازم — یه راهحل ساده، سبک و قابل اعتماد، بدون نیاز به VPN یا ابزارهای عجیبغریب.
توی این ویدیو نشون دادم چطور میتونید خودتون تو چند دقیقه یه همچین میروری بالا بیارید و خیلی راحت ازش استفاده کنید.
مناسب برای وقتایی که نصب داکر یا کشیدن ایمیجها گیر میکنه.
لینک آموزش یوتیوب:
https://www.youtube.com/watch?v=nqrmKV5KtPU
لینگ گیت هاب پروژه:
https://github.com/aminesmkhani/CF-docker-mirror
@DevTwitter | <Amin Esmkhani/>
connection refused
کل کار متوقف میشه.
منم از همین مشکل خسته شدم، برای همین تصمیم گرفتم یه میرور شخصی برای Docker Registry با کمک Cloudflare Workers راه بندازم — یه راهحل ساده، سبک و قابل اعتماد، بدون نیاز به VPN یا ابزارهای عجیبغریب.
توی این ویدیو نشون دادم چطور میتونید خودتون تو چند دقیقه یه همچین میروری بالا بیارید و خیلی راحت ازش استفاده کنید.
مناسب برای وقتایی که نصب داکر یا کشیدن ایمیجها گیر میکنه.
لینک آموزش یوتیوب:
https://www.youtube.com/watch?v=nqrmKV5KtPU
لینگ گیت هاب پروژه:
https://github.com/aminesmkhani/CF-docker-mirror
@DevTwitter | <Amin Esmkhani/>
❤40👍2👎2🔥2
میدونستی میتونی یه اپلیکیشن فولاستک رو کاملاً رایگان روی Cloudflare دیپلوی کنی؟
بدون نیاز به VPS، بدون تنظیم سرور، با سرعت بالا و حتی دیتابیس داخلی! این یعنی با چند خط کد میتونی یه پروژه واقعی رو لانچ کنی.
روندش هم خیلی سادهست:
فرانتاندت رو با Cloudflare Pages میذاری (مثلاً با React، Astro یا هر فریمورک استاتیکی دیگه)
بکاندت رو با Cloudflare Workers مینویسی، یه محیط سبک و سریع برای اجرای API
و برای دیتا هم از D1 استفاده میکنی (یه دیتابیس شبیه SQLite ولی روی کلاد)
همهی اینا بدون پرداخت حتی یه ریال قابل استفادهست، مخصوصاً برای پروژههای شخصی، MVP، و حتی اپهای جدی.
مقاله اصلی رو Cloudflare اینجا گذاشته:
https://blog.cloudflare.com/full-stack-development-on-cloudflare-workers/
و اگه دنبال آموزش و پروژهمحور هستی، این چنل یوتیوب رو از دست نده:
youtube.com/@backpine
@DevTwitter | <Milad Bachari./>
بدون نیاز به VPS، بدون تنظیم سرور، با سرعت بالا و حتی دیتابیس داخلی! این یعنی با چند خط کد میتونی یه پروژه واقعی رو لانچ کنی.
روندش هم خیلی سادهست:
فرانتاندت رو با Cloudflare Pages میذاری (مثلاً با React، Astro یا هر فریمورک استاتیکی دیگه)
بکاندت رو با Cloudflare Workers مینویسی، یه محیط سبک و سریع برای اجرای API
و برای دیتا هم از D1 استفاده میکنی (یه دیتابیس شبیه SQLite ولی روی کلاد)
همهی اینا بدون پرداخت حتی یه ریال قابل استفادهست، مخصوصاً برای پروژههای شخصی، MVP، و حتی اپهای جدی.
مقاله اصلی رو Cloudflare اینجا گذاشته:
https://blog.cloudflare.com/full-stack-development-on-cloudflare-workers/
و اگه دنبال آموزش و پروژهمحور هستی، این چنل یوتیوب رو از دست نده:
youtube.com/@backpine
@DevTwitter | <Milad Bachari./>
🔥38👍9❤5👎5
یه پلیلیست خیلی خوب و کمتر شناختهشده که با تصاویر و گرافیکهای جذاب، مفاهیم پایهای مربوط به LLMها و Transformers رو خیلی روشن و قابل فهم توضیح میده.، از دستش ندید.
https://www.youtube.com/playlist?list=PLUfbC589u-FSwnqsvTHXVcgmLg8UnbIy3
@DevTwitter | <Reza Jafari/>
https://www.youtube.com/playlist?list=PLUfbC589u-FSwnqsvTHXVcgmLg8UnbIy3
@DevTwitter | <Reza Jafari/>
👍15❤5🔥1
چند وقت پیش داشتم از LLM ها برای نوشتن JWT و پیادهسازیش کمک میگرفتم و خودشون secret رو هم میساختن. به ذهنم رسید اگر یه وردلیست بسازم از سکریتهایی که LLM ها ساختن چی میشه؟ نتیجش شد فایل زیر
https://github.com/RemmyNine/wordlists
@DevTwitter | <Remmy/>
https://github.com/RemmyNine/wordlists
@DevTwitter | <Remmy/>
🔥22❤4👍2
پس از چند سال که دارم از LLM-ها در کارهای روزمره استفاده میکنم، همچنان عملکردی که نشون میدن منو شگفتزده میکنه!
اگر میخواستم تابع زیر برای محاسبه ماه جاری شمسی رو خودم بنویسم حداقل چند ساعت صرف تحقیق، کدنویسی و دیباگ میشد یا باید یه وابستگی سنگین به پروژه اضافه میکردم!
@DevTwitter | <Meysam/>
اگر میخواستم تابع زیر برای محاسبه ماه جاری شمسی رو خودم بنویسم حداقل چند ساعت صرف تحقیق، کدنویسی و دیباگ میشد یا باید یه وابستگی سنگین به پروژه اضافه میکردم!
@DevTwitter | <Meysam/>
👍47👎33❤3🔥1
ساخت شبیه ساز کنسول NES قسمت اول
بیاید با هم یه شبیه ساز برای کنسول نس درست کنیم ! خیلی وقت بود میخواستم این سری ویدیو رو شروع کنم و بالاخره تصمیمشو گرفتم. ساختن یه شبیه ساز کامل برای چنین کنسولی میتونه خیلی پیچیده و سخت باشه اما واقعا ارزششو داره :) قراره راجب پردازنده کارت صدا کارت گرافیک زبان اسمبلی و کلی چیز سطح پایین دیگه بیشتر بدونیم. تو این ویدیو با کلیات این کنسول از نظر معماری سخت افزاری بیشتر آشنا میشیم تا آماده بشیم برای توسعه پردازنده این کنسول تو ویدیو بعدی !
ساختن این محتوا قراره خیلی زمان از من بگیره و من هم همیشه محتوامو دوست داشتم رایگان بزارم اما ترجیح میدم یک روشی برای حمایت شما باشه چون میتونه یه انگیزه خیلی خوب باشه که کیفیت محتوا حفظ بشه و وقت بیشتری براش بزارم. در کل با این کار خیلی خوشحالم میکنید :)
لینک یوتیوب
https://www.youtube.com/watch?v=P6k2wbRcr2I
@DevTwitter | <Rouzbeh/>
بیاید با هم یه شبیه ساز برای کنسول نس درست کنیم ! خیلی وقت بود میخواستم این سری ویدیو رو شروع کنم و بالاخره تصمیمشو گرفتم. ساختن یه شبیه ساز کامل برای چنین کنسولی میتونه خیلی پیچیده و سخت باشه اما واقعا ارزششو داره :) قراره راجب پردازنده کارت صدا کارت گرافیک زبان اسمبلی و کلی چیز سطح پایین دیگه بیشتر بدونیم. تو این ویدیو با کلیات این کنسول از نظر معماری سخت افزاری بیشتر آشنا میشیم تا آماده بشیم برای توسعه پردازنده این کنسول تو ویدیو بعدی !
ساختن این محتوا قراره خیلی زمان از من بگیره و من هم همیشه محتوامو دوست داشتم رایگان بزارم اما ترجیح میدم یک روشی برای حمایت شما باشه چون میتونه یه انگیزه خیلی خوب باشه که کیفیت محتوا حفظ بشه و وقت بیشتری براش بزارم. در کل با این کار خیلی خوشحالم میکنید :)
لینک یوتیوب
https://www.youtube.com/watch?v=P6k2wbRcr2I
@DevTwitter | <Rouzbeh/>
🔥31❤8👍2
This media is not supported in your browser
VIEW IN TELEGRAM
دوتا مدل VLM جالب اپن سورس اومده روی وب سایت HuggingFace.
این مدلهای Multimodal از کمپانی Liquid AI به اسم LFM2-VL معروف هستند.
این مدلها متن + تصویر رو (با رزولوشن متغیر) پردازش میکنن و برای کمترین تاخیر و اجرای روی دستگاههای Edge مثل موبایل و کامپیوتر شخصی طراحی شدن.
دو نسخه منتشر شده:
- مدل ۴۵۰M → مناسب برای دستگاههای خیلی محدود
- مدل ۱.۶B → قدرتمندتر ولی همچنان سبک و بهینه
عالی برای اپلیکیشنهای واقعی که سرعت و کارایی مهمه. هم بلاگ دارند و هم google colab که میتونید راحت اجرا کنید. لوکال هم میتونید خیلی ساده اجرا کنید.
HuggingFace: https://huggingface.co/LiquidAI/LFM2-VL-1.6B
@DevTwitter | <Mehdi Allahyari/>
این مدلهای Multimodal از کمپانی Liquid AI به اسم LFM2-VL معروف هستند.
این مدلها متن + تصویر رو (با رزولوشن متغیر) پردازش میکنن و برای کمترین تاخیر و اجرای روی دستگاههای Edge مثل موبایل و کامپیوتر شخصی طراحی شدن.
دو نسخه منتشر شده:
- مدل ۴۵۰M → مناسب برای دستگاههای خیلی محدود
- مدل ۱.۶B → قدرتمندتر ولی همچنان سبک و بهینه
عالی برای اپلیکیشنهای واقعی که سرعت و کارایی مهمه. هم بلاگ دارند و هم google colab که میتونید راحت اجرا کنید. لوکال هم میتونید خیلی ساده اجرا کنید.
HuggingFace: https://huggingface.co/LiquidAI/LFM2-VL-1.6B
@DevTwitter | <Mehdi Allahyari/>
❤11👍1
یه Cli باحال به اسم doxx نوشتن که میشه فایلای Microsoft Word .docx رو تو ترمینال دید.
github.com/bgreenwell/doxx
@DevTwitter | <Mohammad/>
github.com/bgreenwell/doxx
@DevTwitter | <Mohammad/>
👍46🔥1
اگه بگم یه زبان برنامه نویسی داریم که حجم کامپایلرش کوچیک تر از 1kb باور میکنی؟
برینفاک (BrainFuck) یه زبان برنامه نویسی رمزی هستش که تو سال 1993 توسط آربن مولبر به هدف کوچکترین کامپایلر دنیا نوشته شد.
هدف مولبر رقابت با کامپایر 1024 بایتی زبان FALSE بود و کامپایلر برینفاک فقط 296 بایت فضا اشغال میکرد که البته توی نسخه بعدی این فضا به 240 بایت هم کاهش یافت!!
امروزه توی اینترنت اگر بگردید افرادی هستن که حجم کامپایلر این زبان رو با بهینه سازی الگوریتم هاش به 100 بایت هم برسونن! فکرشو بکن این کامپایلر توی ⅕ یه سکتور دیسک ذخیره میشه (یک دهم کیلوبایت)
حالا از بحث فضا که بگذریم میرسیم به خود زبان که کل دستوراتش از هشت کاراکتر ساخته میشه: + - , . <> [ ] و همونطور که از اسمش مشخصه به شدت دشواره و مغز شما رو هدف قرار میده.
داکیومنت خیلی وحشتناکی هم داره وقتی وارد سایتش میشی انگار رفتی تو دارک وب:
brainfuck.org
@DevTwitter | <Farzad Ebrahimi/>
برینفاک (BrainFuck) یه زبان برنامه نویسی رمزی هستش که تو سال 1993 توسط آربن مولبر به هدف کوچکترین کامپایلر دنیا نوشته شد.
هدف مولبر رقابت با کامپایر 1024 بایتی زبان FALSE بود و کامپایلر برینفاک فقط 296 بایت فضا اشغال میکرد که البته توی نسخه بعدی این فضا به 240 بایت هم کاهش یافت!!
امروزه توی اینترنت اگر بگردید افرادی هستن که حجم کامپایلر این زبان رو با بهینه سازی الگوریتم هاش به 100 بایت هم برسونن! فکرشو بکن این کامپایلر توی ⅕ یه سکتور دیسک ذخیره میشه (یک دهم کیلوبایت)
حالا از بحث فضا که بگذریم میرسیم به خود زبان که کل دستوراتش از هشت کاراکتر ساخته میشه: + - , . <> [ ] و همونطور که از اسمش مشخصه به شدت دشواره و مغز شما رو هدف قرار میده.
داکیومنت خیلی وحشتناکی هم داره وقتی وارد سایتش میشی انگار رفتی تو دارک وب:
brainfuck.org
@DevTwitter | <Farzad Ebrahimi/>
❤46👍8🔥6
پروژه متنباز AIRI با هدف خلق یک همدم دیجیتال طراحی شده است؛ شخصیتی مجازی که قادر به تعاملات صوتی، گفتوگو در پلتفرمهایی مانند Telegram و Discord و حتی بازی کردن عناوینی مانند Minecraft و Factorio میباشد.
https://github.com/moeru-ai/airi
@DevTwitter | <Amirio/>
https://github.com/moeru-ai/airi
@DevTwitter | <Amirio/>
👎42👍23🔥8❤1
چیزیو ساختم که ویندوز نساخت!!! CSearch
توی این ویدیو من از C++ استفاده میکنم تا فایل اکسپلورر خودمو برای ویندوز برنامه نویسی کنم و توی این مسیر شمارو با الگوریتم ها و چالش های برنامه نویسی مختلف آشنا میکنم.
https://apgy.in/yt/OIyJCTxHkpY
@DevTwitter | <Matin Afzal Asr/>
توی این ویدیو من از C++ استفاده میکنم تا فایل اکسپلورر خودمو برای ویندوز برنامه نویسی کنم و توی این مسیر شمارو با الگوریتم ها و چالش های برنامه نویسی مختلف آشنا میکنم.
https://apgy.in/yt/OIyJCTxHkpY
@DevTwitter | <Matin Afzal Asr/>
👍62❤11👎6🔥5
یه پروژه اوپن سورس ران کردم که دوست داشتم به اشتراک بزارم. هر چند ممکنه دیده نشه.
میتونید باهاش داخل شبکهتون یه سرور چت بالا بیارید. به درد سازمانها میخوره.
راه اندازیش هم با داکر فقط چند تا کامند لازم داره.
https://github.com/mohammadnt/CollabComm
@DevTwitter | <Mohammad/>
میتونید باهاش داخل شبکهتون یه سرور چت بالا بیارید. به درد سازمانها میخوره.
راه اندازیش هم با داکر فقط چند تا کامند لازم داره.
https://github.com/mohammadnt/CollabComm
@DevTwitter | <Mohammad/>
👍41🔥7👎5❤1
بچهها اگر کارت گرافیک NVIDIA دارید و میخواهید مدلهای زبانی رو بدون کوانتیزیشن یا با حداقل کوانتیزیشن اجرا کنید، این کد رو نوشتم که با Unsloth این کار رو میکنه:
https://github.com/prp-e/unsloth_inference
البته این بخشی از یه حرکت بزرگتره، ولی خب ترجیحم این بود این بخشش رو پابلیک کنم فعلا.
@DevTwitter | <Muhammadreza Haghiri/>
https://github.com/prp-e/unsloth_inference
البته این بخشی از یه حرکت بزرگتره، ولی خب ترجیحم این بود این بخشش رو پابلیک کنم فعلا.
@DevTwitter | <Muhammadreza Haghiri/>
❤15👎9👍2🔥1
تفاوت این آموزش با بقیه به کاربردی بودنشه...
توی این ویدیو یه آموزش کامل و کاربردی از Gemini CLI رو براتون آماده کردم!
از همون اول که این ابزار چیه و چطور باید نصبش کنیم شروع میکنیم، بعد میریم سراغ کارهای عملی مثل:
- ساخت و ویرایش فایلها مستقیم با Gemini CLI
- کار با Git و اتوماسیون عملیاتهای مهم
- اتصال MCP به Gemini CLI و استفاده ازش در پروژهها
این ویدیو طوری طراحی شده که چه تازهکار باشی چه حرفهای، بتونی به راحتی Gemini CLI رو یاد بگیری و توی پروژههات استفاده کنی.
https://youtu.be/0ziloyRAsq8?si=JOXayXoKljioyNCd
@DevTwitter | <Ryan Heida/>
توی این ویدیو یه آموزش کامل و کاربردی از Gemini CLI رو براتون آماده کردم!
از همون اول که این ابزار چیه و چطور باید نصبش کنیم شروع میکنیم، بعد میریم سراغ کارهای عملی مثل:
- ساخت و ویرایش فایلها مستقیم با Gemini CLI
- کار با Git و اتوماسیون عملیاتهای مهم
- اتصال MCP به Gemini CLI و استفاده ازش در پروژهها
این ویدیو طوری طراحی شده که چه تازهکار باشی چه حرفهای، بتونی به راحتی Gemini CLI رو یاد بگیری و توی پروژههات استفاده کنی.
https://youtu.be/0ziloyRAsq8?si=JOXayXoKljioyNCd
@DevTwitter | <Ryan Heida/>
👍12❤4🔥1
اگه بخواید یه هفتهنامهی برنامهنویسی بخونید، دوست دارید کدوم روز از هفته منتشر بشه؟
Anonymous Poll
17%
شمبه و بدبختیاش
5%
یکش
6%
دوش
5%
سومش
10%
چهار
29%
اون دو روزی که میریم شمال
49%
فاقد اهمیت
❤7👍2🔥2
چرا بسیاری از تیمها ORM را کنار میگذارند و سراغ SQL خام میروند؟
اخیرا در مدیوم با تعداد زیادی از مقالهها مواجه میشوم که یک پیام مشترک دارند:
«ما ORM را کنار گذاشتیم و به SQL خام مهاجرت کردیم — و دیگر برنمیگردیم.»
نکته جالب اینجاست که این تصمیمها معمولاً از سر عشق به SQL گرفته نشدهاند، بلکه از دل دردسرهای ORM زاده شدهاند.
در چند مقالهی اخیر که مطالعه کردم، تیمهای مختلفی با تکنولوژیهای مختلف (از Java + Postgres گرفته تا Go + SQLAlchemy) تجربهی مهاجرت از ORM را به اشتراک گذاشتهاند — نه فقط برای بهبود سرعت، بلکه برای بازگشت به شفافیت، کنترل و عقلانیت.
مشکل کجا بود؟ چرا ORM جوابگو نبود؟
اگرچه ORM در شروع پروژهها خیلی مفید است (خصوصاً برای CRUDهای سریع و MVPها)، اما با رشد سیستم، مشکلاتی کمکم خود را نشان میدهند:
* معضل N+1 Query
کوئریهایی که ساده به نظر میرسند، در باطن دهها یا صدها درخواست اضافه تولید میکنند.
* کدهای پیچیده اما غیرشفاف
برای کوئریهای پیچیدهتر مثل Window Function، CTE یا Join چندجدولی، باید به انواع annotationها، chainهای مبهم، یا زبانهای خاص ORM (مثل JPQL) متوسل شد — که در نهایت باز هم میرسیم به نوشتن SQL، فقط با دردسر بیشتر.
* ضعف در دیباگ و پروفایلینگ
در ORM، بهسختی میشود فهمید دقیقاً چه کوئریای به دیتابیس رفته. این یعنی دیباگِ کندیها تقریباً کورکورانه است.
* ناسازگاری با مدل واقعی دادهها
دیتابیس با row و index و join کار میکند؛ ORM با کلاس و رابطه شیگرایانه. این تطبیق، بهویژه در سیستمهای پیچیده، منجر به کدهایی میشود که بیشتر شبیه «جنگیدن با ORM» هستند.
چرا SQL خام یک تفاوت واقعی ایجاد کرد؟
بعد از مهاجرت، همه تیمها روی این دستاوردها تأکید داشتند:
* کنترل کامل
میدانیم چه کوئری نوشتهایم، چه زمانی اجرا میشود، و چگونه میتوان آن را بهینه کرد.
* شفافیت
کوئری واضح است، بدون «جادوی مخفی». این یعنی همه تیم — از جونیور تا لید — متوجه میشود چه اتفاقی میافتد.
* هماهنگی بیشتر با منطق دامنه
بهجای تعریف business logic در repository و annotation، همهچیز در لایههای مشخص خدماتی و use-case محور قرار میگیرد.
* استفاده کامل از قدرت دیتابیس
ویژگیهایی مثل Window Function، CTE، JSONB و Partial Index که در ORM اغلب یا پشتیبانی نمیشوند یا با پیچیدگی زیاد ممکناند، در SQL خام بهراحتی قابل استفادهاند.
نگهداری و مقیاسپذیری چطور مدیریت شد؟
برای جلوگیری از بینظمی، تیمها:
* کوئریها را در فایلهای جدا و نسخهدار نگه داشتند
* از template و query loaderهای سبک استفاده کردند
* روی هر کوئری تست (یا حداقل EXPLAIN) نوشتند
* قواعد ساده ولی سختگیرانهای برای امنیت (مثل پارامترگذاری) اعمال کردند
در نتیجه، برخلاف تصور اولیه، نگهداشت SQL خام هم قابل مدیریت و حتی لذتبخش شد.
کی باید ORM را کنار گذاشت؟
تجربهی مشترک تیمها نشان میدهد:
* برای پروژههای کوچک، MVPها یا پنلهای ادمین، ORM عالی است.
* اما در پروژههای دادهمحور، با ترافیک بالا، کوئریهای پیچیده و نیاز به کنترل عملکرد، ORM بهجای کمک، تبدیل به مانع میشود.
جمعبندی
بسیاری از ما با ORMها بزرگ شدهایم اما آیا هنوز ORM بهترین ابزار ماست؟ یا فقط آسانترین است؟
در دنیایی که عملکرد، شفافیت و کنترل ارزش بیشتری از سرعت اولیه دارند، شاید وقت آن است که دوباره به SQL خام یا ترکیب آن با ORm فکر کنیم — این بار با بلوغ بیشتر و ابزارهای بهتر.
@DevTwitter | <Mojtaba Banaie/>
اخیرا در مدیوم با تعداد زیادی از مقالهها مواجه میشوم که یک پیام مشترک دارند:
«ما ORM را کنار گذاشتیم و به SQL خام مهاجرت کردیم — و دیگر برنمیگردیم.»
نکته جالب اینجاست که این تصمیمها معمولاً از سر عشق به SQL گرفته نشدهاند، بلکه از دل دردسرهای ORM زاده شدهاند.
در چند مقالهی اخیر که مطالعه کردم، تیمهای مختلفی با تکنولوژیهای مختلف (از Java + Postgres گرفته تا Go + SQLAlchemy) تجربهی مهاجرت از ORM را به اشتراک گذاشتهاند — نه فقط برای بهبود سرعت، بلکه برای بازگشت به شفافیت، کنترل و عقلانیت.
مشکل کجا بود؟ چرا ORM جوابگو نبود؟
اگرچه ORM در شروع پروژهها خیلی مفید است (خصوصاً برای CRUDهای سریع و MVPها)، اما با رشد سیستم، مشکلاتی کمکم خود را نشان میدهند:
* معضل N+1 Query
کوئریهایی که ساده به نظر میرسند، در باطن دهها یا صدها درخواست اضافه تولید میکنند.
* کدهای پیچیده اما غیرشفاف
برای کوئریهای پیچیدهتر مثل Window Function، CTE یا Join چندجدولی، باید به انواع annotationها، chainهای مبهم، یا زبانهای خاص ORM (مثل JPQL) متوسل شد — که در نهایت باز هم میرسیم به نوشتن SQL، فقط با دردسر بیشتر.
* ضعف در دیباگ و پروفایلینگ
در ORM، بهسختی میشود فهمید دقیقاً چه کوئریای به دیتابیس رفته. این یعنی دیباگِ کندیها تقریباً کورکورانه است.
* ناسازگاری با مدل واقعی دادهها
دیتابیس با row و index و join کار میکند؛ ORM با کلاس و رابطه شیگرایانه. این تطبیق، بهویژه در سیستمهای پیچیده، منجر به کدهایی میشود که بیشتر شبیه «جنگیدن با ORM» هستند.
چرا SQL خام یک تفاوت واقعی ایجاد کرد؟
بعد از مهاجرت، همه تیمها روی این دستاوردها تأکید داشتند:
* کنترل کامل
میدانیم چه کوئری نوشتهایم، چه زمانی اجرا میشود، و چگونه میتوان آن را بهینه کرد.
* شفافیت
کوئری واضح است، بدون «جادوی مخفی». این یعنی همه تیم — از جونیور تا لید — متوجه میشود چه اتفاقی میافتد.
* هماهنگی بیشتر با منطق دامنه
بهجای تعریف business logic در repository و annotation، همهچیز در لایههای مشخص خدماتی و use-case محور قرار میگیرد.
* استفاده کامل از قدرت دیتابیس
ویژگیهایی مثل Window Function، CTE، JSONB و Partial Index که در ORM اغلب یا پشتیبانی نمیشوند یا با پیچیدگی زیاد ممکناند، در SQL خام بهراحتی قابل استفادهاند.
نگهداری و مقیاسپذیری چطور مدیریت شد؟
برای جلوگیری از بینظمی، تیمها:
* کوئریها را در فایلهای جدا و نسخهدار نگه داشتند
* از template و query loaderهای سبک استفاده کردند
* روی هر کوئری تست (یا حداقل EXPLAIN) نوشتند
* قواعد ساده ولی سختگیرانهای برای امنیت (مثل پارامترگذاری) اعمال کردند
در نتیجه، برخلاف تصور اولیه، نگهداشت SQL خام هم قابل مدیریت و حتی لذتبخش شد.
کی باید ORM را کنار گذاشت؟
تجربهی مشترک تیمها نشان میدهد:
* برای پروژههای کوچک، MVPها یا پنلهای ادمین، ORM عالی است.
* اما در پروژههای دادهمحور، با ترافیک بالا، کوئریهای پیچیده و نیاز به کنترل عملکرد، ORM بهجای کمک، تبدیل به مانع میشود.
جمعبندی
بسیاری از ما با ORMها بزرگ شدهایم اما آیا هنوز ORM بهترین ابزار ماست؟ یا فقط آسانترین است؟
در دنیایی که عملکرد، شفافیت و کنترل ارزش بیشتری از سرعت اولیه دارند، شاید وقت آن است که دوباره به SQL خام یا ترکیب آن با ORm فکر کنیم — این بار با بلوغ بیشتر و ابزارهای بهتر.
@DevTwitter | <Mojtaba Banaie/>
👍59👎33❤13🔥2
درحال حاضر طرح هایی که انیمیشن داشته باشن از نظر تجربه کاربری و ui ux بهتر نسبت به سایت های بی انیمیشن خیلی جلوتر هستن
سایت motion یکی از بهترین ها برای انیمیشن های فرانت اند هستش که میتونیم اون رو در JS خام - React - Vue به راحتی استفاده کنیم
و همچنین یکی از نقطه قوت های دیگه Motion هم documents قوی و راحت اون هستش که کار باهاش رو خیلی آسون میکنه
آدرس سایت: https://motion.dev/
@DevTwitter | <arvin Fa/>
سایت motion یکی از بهترین ها برای انیمیشن های فرانت اند هستش که میتونیم اون رو در JS خام - React - Vue به راحتی استفاده کنیم
و همچنین یکی از نقطه قوت های دیگه Motion هم documents قوی و راحت اون هستش که کار باهاش رو خیلی آسون میکنه
آدرس سایت: https://motion.dev/
@DevTwitter | <arvin Fa/>
❤43👍2🔥1