Dev Perfects
40 subscribers
9.23K photos
1.26K videos
468 files
13K links
بخوام خیلی خلاصه بگم
این کانال میاد مطالب کانالای خفن تو حوزه تکنولوژی و برنامه نویسی رو جمع میکنه

پست پین رو بخونید
https://t.iss.one/dev_perfects/455


ارتباط:
https://t.iss.one/HidenChat_Bot?start=936082426
Download Telegram
Forwarded from Ninja Learn | نینجا لرن (Denver)
خب خب خب، بهترین فریمورک ها برای توسعه مایکروسرویس🕸
تو دنیای امروز که اپلیکیشن‌ها پیچیده‌تر شدن و نیاز به مقیاس‌پذیری، توسعه سریع و قابلیت نگهداری بالا بیشتر از قبل حس می‌شه، معماری مایکروسرویس (Microservices) به یکی از محبوب‌ترین انتخاب‌ها برای توسعه نرم‌افزارهای مدرن تبدیل شده.
اما انتخاب فریمورک مناسب برای پیاده‌سازی مایکروسرویس‌ها خیلی مهمه؛ چون مستقیماً روی سرعت توسعه، پرفورمنس، ساختار پروژه و حتی تجربه‌ی تیم تأثیر می‌ذاره.

‏Spring Boot (Java)
☕️
یکی از محبوب‌ترین انتخاب‌ها برای توسعه سرویس‌های بزرگ و سازمانی. این فریمورک با ترکیب قدرت Java و اکوسیستم Spring، ساخت سرویس‌های مستقل، مقیاس‌پذیر و امن رو آسون می‌کنه.
از نقاط قوتش می‌شه به پشتیبانی گسترده از ابزارهای Enterprise، جامعه‌ی کاربری بسیار بزرگ، مستندات کامل و یکپارچگی فوق‌العاده با Spring Cloud اشاره کرد.

‏FastAPI (Python)
⚡️
فریمورکی مدرن و سبک برای ساخت APIهای سریع و خوانا با زبان پایتون. طراحی‌شده بر پایه ASGI و Starlette و به‌شدت روی سرعت و خوانایی تمرکز داره. از مزایای مهمش می‌تونیم به سرعت بالا، پشتیبانی عالی از Async Programming، مستندسازی خودکار با Swagger و ReDoc، استفاده از type hinting و هماهنگی کامل با استانداردهای OpenAPI اشاره کنیم.

‏ASP‌.‌‌‌‌NET Core (C#)
🧱
انتخاب حرفه‌ای برای توسعه‌دهندگان دات‌نت، مخصوصاً در پروژه‌هایی که از زیرساخت‌های Microsoft استفاده می‌کنن. این فریمورک کاملاً cross-platform هست و روی لینوکس هم عملکرد بالایی داره. پرفورمنس عالی، امنیت بالا، پشتیبانی از WebSocket، gRPC و امکانات کامل برای تولید و دیپلوی مایکروسرویس‌ها از مزایای مهمشه.

‏Go-Kit (Go)
🦾
فریمورکی ساختارمند برای توسعه سرویس‌های حرفه‌ای با زبان Go. برخلاف فریمورک‌های سبک‌تر مثل Gin، این ابزار مناسب تیم‌هایی هست که دنبال معماری تمیز، قابلیت تست بالا، جداسازی concerns و مقیاس‌پذیری بالا هستن. پشتیبانی از transportهای مختلف (HTTP، gRPC و...)، logging، tracing و monitoring باعث شده انتخاب خوبی برای سیستم‌هایی با ترافیک بالا باشه.

جمع بندی
✍️
انتخاب فریمورک مناسب برای مایکروسرویس به زبان برنامه‌نویسی، تجربه‌ی تیم، نوع پروژه و زیرساخت فنی بستگی داره. اگر به یک اکوسیستم پایدار و کامل نیاز دارید، Spring Boot یا ASP.‌NET Core می‌تونن بهترین انتخاب باشن. اما اگر هدف شما سرعت، سادگی و توسعه سریع‌تره، FastAPI یا Go-Kit می‌تونن عملکرد بسیار خوبی داشته باشن.
#️⃣ #programming #backend


🥷🏻 CHANNEL | GROUP
Forwarded from Ninja Learn | نینجا لرن (Denver)
خب خب خب، بهترین زبان های برنامه نویسی برای Cloud Programming☁️💻
خب برنامه نویسی ابری یعنی توسعه ی نرم افزارهایی که روی سرویس های ابری مثل AWS, Google Cloud, Azureو... اجرا میشن. توی این فضا مقیاس پذیری، سرعت اجرا، امنیت و پشتیبانی از ابزارهای ابری حرف اول رو میزنن.

‏Python
🐍
به خاطر سادگی و سرعت توسعه، یکی از محبوب‌ترین زبان‌ها برای Cloud محسوب می‌شه. توی پروژه‌های مربوط به اتوماسیون، DevOps و مخصوصاً یادگیری ماشین رو سرویس‌های ابری مثل AWS یا Google Cloud خیلی خوب جواب می‌ده. اما به خاطر سرعت پایین و محدودیت در پردازش‌های سنگین (مثل real-time) برای پروژه‌های بزرگ انتخاب اول نیست.

‏Go
🚀
زبانیه که دقیقاً برای همین کار ساخته شده. سریع، کم‌مصرف و با پشتیبانی قوی از concurrency، Go گزینه‌ای ایده‌آل برای میکروسرویس‌ها، زیرساخت‌های cloud-native و سرویس‌هایی با بار بالا محسوب می‌شه. البته نسبت به پایتون ساده نیست و فضای توسعه‌ش خشک‌تره.

‏JavaScript (Node.js)
🪩
وقتی با جاوااسکریپت آشنایی داشته باشین، استفاده از Node.js تو Cloud مخصوصاً برای ساخت API و سرورهای سبک یا سرویس‌های Serverless خیلی راحته. سرعت توسعه بالاست و پشتیبانی از async بودن ذاتی خیلی به درد می‌خوره. ولی برای پردازش‌های سنگین یا مدیریت منابع در حد enterprise، محدودیت داره.

‏Java
☕️
با وجود قدیمی بودن، هنوزم تو شرکت‌های بزرگ برای ساخت سرویس‌های پایدار و مقیاس‌پذیر استفاده می‌شه. ابزارهایی مثل Spring Boot و Spring Cloud تو فضای ابری خیلی پرکاربردن. قدرت و امنیتش عالیه، ولی کدنویسیش verbose و سنگین‌تر از زبان‌های مدرن‌تره.

‏Rust
🦀
زبانیه که سرعت و امنیت رو همزمان داره. برای سیستم‌هایی که performance یا امنیت حافظه خیلی مهمه، انتخاب خوبیه. تو پروژه‌های زیرساختی یا اپ‌هایی که مصرف منابع براشون مهمه، Rust حرف نداره. البته یادگیریش سخته و جامعه‌ی توسعه‌دهنده‌هاش هنوز به بزرگی بقیه نیست.

جمع بندی
✍️
در نهایت، انتخاب زبان برای Cloud Programming بستگی به نوع پروژه‌ داره؛ اگه دنبال توسعه سریع و ساده‌ هستین، Python و Node.js انتخابای خوبی‌ان. برای سیستم‌های سریع و مقیاس‌پذیر Go می‌درخشه، Java برای اپ‌های پایدار سازمانی مناسبه، و Rust برای پروژه‌هایی با نیاز بالا به performance و امنیت انتخاب آینده‌محوره. مهم اینه بدونین چی می‌خواین و ابزار مناسب همون رو انتخاب کنین.
#️⃣ #programming #backend


🥷🏻 CHANNEL | GROUP
Forwarded from Ninja Learn | نینجا لرن (Mohammad)
یکی از چالش‌هایی که خیلی از برنامه‌نویس‌ها باهاش روبه‌رو می‌شن، اینه که بعد از یه مدت طولانی دوری از کدنویسی، حس می‌کنن مهارت‌هاشون زنگ زده انگار یه جورایی انگشتاشون دیگه با کیبورد غریبه شده و مفاهیم برنامه‌نویسی تو ذهنشون غبار گرفته. اما نگران نباشین این پست برای شماست که می‌خواین دوباره به اوج برگردین و مهارت‌های کدنویسی‌تون رو مثل قبل کنید. بیاین با هم یه نقشه راه بکشیم که چطور می‌تونیم مهارت‌هامون رو بازیابی کنیم و دوباره تو دنیای کد به اوج برگردیم🚀

🧠 چرا مهارت‌ها زنگ می‌زنن؟

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

ابزارها و فریم‌ورک‌هایی که قبلاً باهاشون راحت بودین، حالا گیج‌کننده به نظر میان.

اعتماد به نفس کدنویسی‌تون یه کم افت کرده.


اینا همه عادی‌ان مغز ما مثل عضله‌ست؛ اگه یه مدت تمرین نکنه، یه کم تنبل می‌شه، ولی با یه برنامه درست می‌تونین دوباره رو فرم بیاین.

📚 نقشه راه برای بازیابی مهارت‌ها


1⃣ از پایه‌ها شروع کنین 🏗️

چرا؟ مفاهیم پایه‌ای مثل متغیرها، توابع، و حلقه‌ها ستون هر زبان برنامه‌نویسی‌ان. مرور اینا ذهنتون رو گرم می‌کنه.
یه پروژه ساده مثل یه ماشین‌حساب یا یه برنامه To-Do List با زبانی که قبلاً بلد بودین بنویسین.

2⃣ یه پروژه کوچیک و باحال انتخاب کنین 🎯
چرا؟ پروژه‌های کوچیک اعتماد به نفس رو برمی‌گردونن و کمک می‌کنن حس کنین دوباره تو بازی هستین.
یه چیزی بسازین که بهش علاقه دارین، مثلاً یه اسکریپت پایتون برای خودکار کردن یه کار روزمره یا یه صفحه وب ساده با HTML/CSS.

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

3⃣ ابزارها و تکنولوژی‌ها رو مرور کنین 🛠️
چرا؟ اگه مدت زیادی از فریم‌ورک‌ها (مثل Django یا React) دور بودین، ممکنه آپدیت‌هاشون غافلگیرتون کنه.
مستندات رسمی (مثل docs.djangoproject.com) یا یه دوره کوتاه تو Udemy یا Pluralsight بگیرین. فقط یه بخش رو مرور کنین، نه کلش

نکته: نیازی نیست همه‌چیز رو از صفر یاد بگیرین؛ فقط تغییرات جدید رو چک کنین.

4⃣ با حل مسائل تمرین کنین 🧩
چرا؟ حل مسائل الگوریتمی ذهنتون رو قوی می‌کنه و کمک می‌کنه منطق کدنویسی‌تون برگرده.
تو سایت‌هایی مثل HackerRank، Codewars یا LeetCode سوال‌های سطح آسان تا متوسط رو حل کنین. روزی ۱-۲ تا کافیه.
ترفند: یه دفترچه یادداشت داشته باشین و راه‌حل‌ها رو توضیح بدین تا بهتر جا بیفته.

5⃣ کد دیگران رو بخونین 📖
چرا؟ خوندن کدهای باکیفیت بهتون یادآوری می‌کنه که کد تمیز چطور نوشته می‌شه.
پروژه‌های متن‌باز تو GitHub (مثل پروژه‌های پایتون یا جاوااسکریپت) رو بررسی کنین. سعی کنین بفهمین چرا یه تابع خاص یا ساختار خاص استفاده شده.

6⃣ با یه پروژه واقعی برگردین تو رینگ 💪
چرا؟ پروژه‌های واقعی شما رو مجبور می‌کنن همه‌چیز رو کنار هم بذارین: کدنویسی، دیباگ، تست، و کار با ابزارها.
یه اپلیکیشن ساده بسازین، مثلاً یه وبسایت شخصی یا یه API با FastAPI. حتی می‌تونین تو پروژه‌های متن‌باز مشارکت کنین.
نکته: از چیزایی که قبلاً بلد بودین شروع کنین تا اعتماد به نفس‌تون برگرده.

7⃣ با بقیه گپ بزنین 👥
چرا؟ حرف زدن با برنامه‌نویس‌های دیگه بهتون انگیزه می‌ده و ایده‌های جدید می‌آره.
تو گروه‌های تلگرامی، دیسکورد یا انجمن‌های مثل Stack Overflow فعال بشین. حتی یه سوال ساده بپرسین یا جواب بدین.

🔍 نکات طلایی برای برگشتن به اوج

صبور باشین: مثل دوچرخه‌سواریه؛ یه کم طول می‌کشه تا دوباره تعادل پیدا کنین.
روزی یه کم: لازم نیست روزی ۸ ساعت کد بزنین. حتی ۳۰ دقیقه تمرین روزانه معجزه می‌کنه.
لذت ببرین: یه پروژه انتخاب کنین که بهش علاقه دارین تا انگیزه‌تون بالا بمونه.

جمع‌بندی

دوری از کدنویسی یه اتفاق عادیه و اصلاً به این معنی نیست که مهارت‌هاتون غیبشون زده با یه برنامه ساده، مثل مرور پایه‌ها، حل مسائل و ساخت پروژه‌های کوچیک، می‌تونین دوباره همون برنامه‌نویس قبراق و سرحال بشین.

#️⃣ #programming #backend

 
🥷🏻 CHANNEL | GROUP
Forwarded from Ninja Learn | نینجا لرن (Mohammad)
یکی از چالش‌هایی که خیلی از برنامه‌نویس‌ها باهاش روبه‌رو می‌شن، اینه که بعد از یه مدت طولانی دوری از کدنویسی، حس می‌کنن مهارت‌هاشون زنگ زده انگار یه جورایی انگشتاشون دیگه با کیبورد غریبه شده و مفاهیم برنامه‌نویسی تو ذهنشون غبار گرفته. اما نگران نباشین این پست برای شماست که می‌خواین دوباره به اوج برگردین و مهارت‌های کدنویسی‌تون رو مثل قبل کنید. بیاین با هم یه نقشه راه بکشیم که چطور می‌تونیم مهارت‌هامون رو بازیابی کنیم و دوباره تو دنیای کد به اوج برگردیم🚀

🧠 چرا مهارت‌ها زنگ می‌زنن؟

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

ابزارها و فریم‌ورک‌هایی که قبلاً باهاشون راحت بودین، حالا گیج‌کننده به نظر میان.

اعتماد به نفس کدنویسی‌تون یه کم افت کرده.


اینا همه عادی‌ان مغز ما مثل عضله‌ست؛ اگه یه مدت تمرین نکنه، یه کم تنبل می‌شه، ولی با یه برنامه درست می‌تونین دوباره رو فرم بیاین.

📚 نقشه راه برای بازیابی مهارت‌ها


1⃣ از پایه‌ها شروع کنین 🏗️

چرا؟ مفاهیم پایه‌ای مثل متغیرها، توابع، و حلقه‌ها ستون هر زبان برنامه‌نویسی‌ان. مرور اینا ذهنتون رو گرم می‌کنه.
یه پروژه ساده مثل یه ماشین‌حساب یا یه برنامه To-Do List با زبانی که قبلاً بلد بودین بنویسین.

2⃣ یه پروژه کوچیک و باحال انتخاب کنین 🎯
چرا؟ پروژه‌های کوچیک اعتماد به نفس رو برمی‌گردونن و کمک می‌کنن حس کنین دوباره تو بازی هستین.
یه چیزی بسازین که بهش علاقه دارین، مثلاً یه اسکریپت پایتون برای خودکار کردن یه کار روزمره یا یه صفحه وب ساده با HTML/CSS.

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

3⃣ ابزارها و تکنولوژی‌ها رو مرور کنین 🛠️
چرا؟ اگه مدت زیادی از فریم‌ورک‌ها (مثل Django یا React) دور بودین، ممکنه آپدیت‌هاشون غافلگیرتون کنه.
مستندات رسمی (مثل docs.djangoproject.com) یا یه دوره کوتاه تو Udemy یا Pluralsight بگیرین. فقط یه بخش رو مرور کنین، نه کلش

نکته: نیازی نیست همه‌چیز رو از صفر یاد بگیرین؛ فقط تغییرات جدید رو چک کنین.

4⃣ با حل مسائل تمرین کنین 🧩
چرا؟ حل مسائل الگوریتمی ذهنتون رو قوی می‌کنه و کمک می‌کنه منطق کدنویسی‌تون برگرده.
تو سایت‌هایی مثل HackerRank، Codewars یا LeetCode سوال‌های سطح آسان تا متوسط رو حل کنین. روزی ۱-۲ تا کافیه.
ترفند: یه دفترچه یادداشت داشته باشین و راه‌حل‌ها رو توضیح بدین تا بهتر جا بیفته.

5⃣ کد دیگران رو بخونین 📖
چرا؟ خوندن کدهای باکیفیت بهتون یادآوری می‌کنه که کد تمیز چطور نوشته می‌شه.
پروژه‌های متن‌باز تو GitHub (مثل پروژه‌های پایتون یا جاوااسکریپت) رو بررسی کنین. سعی کنین بفهمین چرا یه تابع خاص یا ساختار خاص استفاده شده.

6⃣ با یه پروژه واقعی برگردین تو رینگ 💪
چرا؟ پروژه‌های واقعی شما رو مجبور می‌کنن همه‌چیز رو کنار هم بذارین: کدنویسی، دیباگ، تست، و کار با ابزارها.
یه اپلیکیشن ساده بسازین، مثلاً یه وبسایت شخصی یا یه API با FastAPI. حتی می‌تونین تو پروژه‌های متن‌باز مشارکت کنین.
نکته: از چیزایی که قبلاً بلد بودین شروع کنین تا اعتماد به نفس‌تون برگرده.

7⃣ با بقیه گپ بزنین 👥
چرا؟ حرف زدن با برنامه‌نویس‌های دیگه بهتون انگیزه می‌ده و ایده‌های جدید می‌آره.
تو گروه‌های تلگرامی، دیسکورد یا انجمن‌های مثل Stack Overflow فعال بشین. حتی یه سوال ساده بپرسین یا جواب بدین.

🔍 نکات طلایی برای برگشتن به اوج

صبور باشین: مثل دوچرخه‌سواریه؛ یه کم طول می‌کشه تا دوباره تعادل پیدا کنین.
روزی یه کم: لازم نیست روزی ۸ ساعت کد بزنین. حتی ۳۰ دقیقه تمرین روزانه معجزه می‌کنه.
لذت ببرین: یه پروژه انتخاب کنین که بهش علاقه دارین تا انگیزه‌تون بالا بمونه.

جمع‌بندی

دوری از کدنویسی یه اتفاق عادیه و اصلاً به این معنی نیست که مهارت‌هاتون غیبشون زده با یه برنامه ساده، مثل مرور پایه‌ها، حل مسائل و ساخت پروژه‌های کوچیک، می‌تونین دوباره همون برنامه‌نویس قبراق و سرحال بشین.

#️⃣ #programming #backend

 
🥷🏻 CHANNEL | GROUP
Forwarded from Ninja Learn | نینجا لرن (Mohammad)
6⃣ پخش و پیش‌نمایش (Playback) 🎬
با ابزار ffplay می‌تونین فایل‌های چندرسانه‌ای رو پخش کنین.
مثال: پخش یه ویدیو:

  ffplay video.mp4

چرا کاربردیه؟ ffplay یه پخش‌کننده ساده‌ست که برای تست سریع فایل‌ها یا بررسی خروجی‌ها عالیه.

7⃣ بررسی اطلاعات فایل (Probing) 🔍
با ffprobe می‌تونین اطلاعات دقیق یه فایل (مثل کدک، بیت‌ریت، رزولوشن) رو ببینین.
مثال:

  ffprobe -show_streams input.mp4

چرا کاربردیه؟ برای عیب‌یابی یا آماده‌سازی فایل‌ها قبل از پردازش، این ابزار مثل یه میکروسکوپ عمل می‌کنه.

8⃣ پشتیبانی از شتاب‌دهنده‌های سخت‌افزاری
‏ FFmpeg می‌تونه از GPU (مثل NVIDIA NVENC/NVDEC، VAAPI، یا OpenCL) برای سرعت بخشیدن به کدگذاری و دیکد استفاده کنه.
مثال: کدگذاری با NVENC:

  ffmpeg -i input.mp4 -c:v h264_nvenc output.mp4

چرا کاربردیه؟ این قابلیت باعث می‌شه عملیات سنگین مثل کدگذاری 4K خیلی سریع‌تر انجام بشه.

9⃣ کار با دستگاه‌های ورودی 🖥️
می‌تونین از دستگاه‌های ورودی مثل وب‌کم یا کارت کپچر مستقیماً داده بگیرین.
مثال: ضبط از وب‌کم:

  ffmpeg -i /dev/video0 output.mp4

چرا کاربردیه؟ برای ضبط زنده یا استریمینگ از سخت‌افزارهای مختلف عالیه.

🔟 فیلترهای پیشرفته 🎨
‏FFmpeg کلی فیلتر برای ویرایش ویدیو و صدا داره، مثل تغییر روشنایی، تنظیم سرعت پخش، یا اضافه کردن افکت.
مثال: اضافه کردن متن به ویدیو:

  ffmpeg -i input.mp4 -vf drawtext="text='سلام دنیا':x=20:y=20:fontsize=24" output.mp4

چرا کاربردیه؟ این فیلترها انعطاف زیادی بهتون می‌دن تا بدون نرم‌افزارهای گرافیکی، تغییرات پیچیده‌ای اعمال کنین.

جمع‌بندی

‏FFmpeg مثل یه جعبه‌ابزار جادوییه که هر کاری تو دنیای چندرسانه‌ای بخواین، می‌تونه انجام بده. از تبدیل فرمت و کدگذاری گرفته تا استریمینگ، ویرایش، و حتی کار با سخت‌افزارهای خاص، این ابزار همه‌فن‌حریفه.

#️⃣ #programming #backend

 
🥷🏻 CHANNEL | GROUP
Forwarded from Ninja Learn | نینجا لرن (Mohammad)
سام علیک و از این حرفا Github Actions 🎬

حتماً اسم GitHub Actions به گوشتون خورده این ابزار می‌تونه خیلی از کارهای تکراری و روتین پروژه‌تون رو خودکار کنه، بدون اینکه لازم باشه خودتون دست به کار بشین. از بررسی کدهای کامیت‌شده تا اجرای تست‌ها و دیپلوی خودکار، همه‌چیز رو می‌سپارین بهش و خیالتون راحته تو این پست قراره حسابی راجب GitHub Actions حرف بزنیم، ببینیم این ابزار چیه، چه کارایی می‌تونه بکنه و چرا باید یه پای ثابت تو هر رپوی برنامه‌نویسی باشه.

🧠اول از همه GitHub Actions چیه؟

GitHub Actions یه پلتفرم اتوماسیونه که مستقیم تو GitHub ادغام شده و بهتون اجازه می‌ده workflow خودکار برای پروژه‌هاتون بسازین. این ابزار برای CI/CD (ادغام مداوم و تحویل/استقرار مداوم) (همیشه انگلیسی رو به معادل فارسی ترجیح میدم) طراحی شده، ولی فقط به این محدود نیست، می‌تونه هر کاری از تست کد و دیپلوی اپلیکیشن تا مدیریت مسائل (issues) و حتی ارسال نوتیفیکیشن رو خودکار کنه. به زبان ساده، GitHub Actions مثل یه رباته که با یه سری دستور (نوشته‌شده با YAML) بهش می‌گین چیکار کنه.

این ابزار از سال ۲۰۱۸ توسط GitHub معرفی شد و حالا یکی از محبوب‌ترین ابزارهای اتوماسیون تو اکوسیستم توسعه نرم‌افزاره، چون هم قدرتمنده، هم انعطاف‌پذیره و هم با خود GitHub جوش خورده.

📚 قابلیت‌های کلیدی GitHub Actions

1⃣CI/CD (ادغام و تحویل مداوم) 🛠️
می‌تونین پایپ لاین‌هایی بسازین که کدتون رو به‌صورت خودکار بیلد، تست و دیپلوی کنه.

مثال:
هر بار که یه تغییر (push) تو شاخه main می‌کنین، کد بیلد بشه، تست‌ها اجرا بشن و اگه همه‌چیز اوکی بود، به سرور production دیپلوی بشه.

name: CI Pipeline
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: Install dependencies
run: pip install -r requirements.txt
- name: Run tests
run: pytest


2⃣ اتوماسیون وظایف مختلف ⚙️
فراتر از CI/CD، می‌تونین هر کار تکراری رو خودکار کنین، مثل اضافه کردن لیبل به issues یا ارسال نوتیف به اسلک.

مثال:
وقتی یه issue جدید باز می‌شه، به‌صورت خودکار لیبل "triage" بهش اضافه بشه:

name: Auto Label Issues
on:
issues:
types: [opened]
jobs:
label:
runs-on: ubuntu-latest
steps:
- uses: actions/github-script@v6
with:
script: |
github.rest.issues.addLabels({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
labels: ['triage']
})


3⃣ پشتیبانی از چند پلتفرم 🖥️
‏GitHub Actions روی ماشین‌های مجازی لینوکس، ویندوز و مک اجرا می‌شه. حتی می‌تونین self-hosted runners (ماشین‌های خودتون) رو استفاده کنین.

مثال: تست کد روی نسخه‌های مختلف پایتون و سیستم‌عامل‌ها با یه matrix workflow:

name: Test on Multiple Platforms
on: [push]
jobs:
test:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
python-version: ['3.8', '3.9', '3.10']
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Run tests
run: pytest


4⃣ اکشن‌های آماده و Marketplace 🛒
یه عالمه اکشن آماده تو GitHub Marketplace وجود داره که می‌تونین مستقیم تو ورک‌فلاتون استفاده کنین.

مثال: اکشن برای ارسال نوتیفیکیشن به اسلک یا دیپلوی به AWS.

- name: Notify Slack
uses: slackapi/[email protected]
with:
slack-bot-token: ${{ secrets.SLACK_BOT_TOKEN }}
channel-id: 'my-channel'
text: 'New deployment completed!'



جمع‌بندی
‏GitHub Actions یه ابزار قدرتمند و انعطاف‌پذیره که می‌تونه پروژه‌هاتون رو از یه مجموعه کد ساده به یه سیستم خودکار و حرفه‌ای تبدیل کنه. از CI/CD و تست چندپلتفرمی گرفته تا اتوماسیون کارهای روزمره مثل ارسال اعلان یا مدیریت مسائل، این ابزار همه‌چیز رو تو یه پکیج بهتون می‌ده. فقط کافیه یه فایل YAML بسازین.

اگه خواستین بیشتر درمودش صحبت بکنم و نکات حرفه ای تری بگم با ریکشن و شیر این پست رو حمایت کنید 😊❤️

#️⃣ #web #programming

 
🥷🏻 CHANNEL | GROUP
Forwarded from Ninja Learn | نینجا لرن (Mohammad)
چرا Async تو کار با دیتابیس همیشه کار امد نیست؟ 🧵

یه باور رایج بین برنامه‌نویس ها اینه که استفاده از Async (برنامه‌نویسی ناهمزمان) تو همه‌چیز معجزه می‌کنه، مخصوصاً وقتی با دیتابیس کار می‌کنین. اما می‌دونستید که Async زدن کد برای کار با دیتابیس همیشه اون تأثیر که فکر می‌کنید رو نداره؟ تو این پست قراره ببینیم چرا.

🧠 چرا Async تو دیتابیس تأثیر کمی داره؟

وقتی با دیتابیس کار می‌کنین (مثل PostgreSQL، MySQL یا MongoDB)، عملیات‌ها مثل خوندن (SELECT)، نوشتن (INSERT) یا آپدیت کردن معمولاً CPU-bound هستن، نه I/O-bound. حالا این یعنی چی؟

CPU-bound:
یعنی گلوگاه اصلی تو عملیات، پردازش CPUئه. مثلاً وقتی یه کوئری SQL اجرا می‌کنی، دیتابیس باید کارایی مثل پارس کردن کوئری، بهینه‌سازی پلن، پردازش داده‌ها و مرتب‌سازی رو انجام بده. اینا همشون به CPU وابسته‌ان.

I/O-bound:
یعنی گلوگاه اصلی منتظر موندن برای ورودی/خروجی (مثل خوندن از دیسک یا شبکه). Async تو این سناریوها خوب عمل میکنه چون می‌تونه CPU رو آزاد کنه تا وقتی منتظر I/O هستیم، کارهای دیگه انجام بده.

دیتابیس‌ها معمولاً تو محیط‌های خودشون بهینه شدن که عملیات CPU-bound رو سریع انجام بدن (مثل استفاده از ایندکس‌ها یا کش). برای همین، وقتی از یه کلاینت (مثل یه برنامه پایتون) به دیتابیس وصل می‌شین، بیشتر زمان صرف پردازش کوئری تو خود دیتابیسه، نه منتظر شبکه یا دیسک. حالا Async (مثل async/await تو پایتون) اینجا کمک زیادی نمی‌کنه، چون CPU داره کار اصلی رو انجام می‌ده و چیزی برای "منتظر موندن" وجود نداره.

مثال ساده:
فرض کنین یه کوئری سنگین مثل این تو PostgreSQL دارین:
SELECT * FROM orders WHERE total > 1000 ORDER BY created_at;

این کوئری CPU دیتابیس رو حسابی درگیر می‌کنه (برای فیلتر کردن و مرتب‌سازی). حالا اگه تو پایتون اینو با یه کلاینت sync (مثل psycopg2) یا async (مثل asyncpg) اجرا کنین، تفاوت سرعت خیلی کمه، چون گلوگاه اصلی تو خود دیتابیسه، نه تو کلاینت.

📚 چرا Async همیشه مفید نیست؟

وقتی از یه کلاینت Async استفاده می‌کنین (مثل asyncpg یا motor برای MongoDB)، انتظار دارین عملیات دیتابیس سریع‌تر بشه چون می‌تونه همزمان کارهای دیگه رو انجام بده. اما چندتا دلیل باعث می‌شه این تأثیر کم باشه:

1⃣ گلوگاه تو دیتابیسه:
همون‌طور که گفتم، بیشتر عملیات دیتابیس CPU-bound هستن. Async فقط می‌تونه I/O شبکه رو مدیریت کنه (مثل زمان ارسال کوئری یا گرفتن نتیجه)، ولی این بخش معمولاً کسری از کل زمانه.

2⃣Overhead خود Async: استفاده از async/await یه مقدار سربار (overhead) به کد اضافه می‌کنه. اگه عملیات دیتابیستون سریع باشه (مثلاً چند میلی‌ثانیه)، این سربار ممکنه حتی باعث شه Async کندتر بشه.

3⃣ مدیریت اتصالات:
دیتابیس‌ها معمولاً تعداد اتصالات همزمان (connection pool) رو محدود می‌کنن. حتی با Async، اگه تعداد کوئری‌ها زیاد باشه، ممکنه منتظر اتصال بمونین.

🔍 کی Async به کار میاد؟

هرچند Async تو اکثر عملیات دیتابیس تأثیر زیادی نداره، تو یه سری سناریوها می‌تونه خوب عمل کنه:

1⃣ دیتابیس‌های توزیع‌شده:
تو دیتابیس‌های NoSQL مثل MongoDB یا Cassandra که عملیات شبکه‌ای (مثل اتصال به نودهای مختلف) زمان‌بره، Async می‌تونه کمک کنه کلاینت همزمان چند درخواست رو مدیریت کنه.

2⃣ عملیات I/O-heavy:
اگه دیتابیستون روی یه سرور دور باشه یا شبکه کند باشه، Async می‌تونه زمان انتظار برای اتصال و انتقال داده رو بهتر مدیریت کنه.

3⃣ چندین درخواست همزمان:
اگه برنامه‌تون نیاز داره چند کوئری رو به‌صورت موازی اجرا کنه (مثل یه API که باید از چند جدول داده جمع کنه)، Async می‌تونه این درخواست‌ها رو همزمان مدیریت کنه.

4⃣ دیتابیس‌های خاص:
بعضی دیتابیس‌ها مثل CockroachDB یا Redis که برای عملیات سریع و توزیع‌شده طراحی شدن، با کلاینت‌های Async بهتر کار می‌کنن.

جمع‌بندی
اینکه بگیم Async تو کار با دیتابیس معجزه می‌کنه یه کم زیاده‌رویه چون بیشتر عملیات دیتابیس CPU-bound هستن، استفاده از کلاینت‌های Async مثل asyncpg یا motor معمولاً تأثیر چشمگیری روی پرفورمنس نداره. اما تو سناریوهای خاص مثل دیتابیس‌های توزیع‌شده، عملیات شبکه‌محور یا درخواست‌های موازی، Async می‌تونه مفید باشه. پس قبل از اینکه همه‌چیز رو Async کنین، نوع عملیات‌تون رو بررسی کنین و ببینین کجا واقعاً به کارتون میاد.

#️⃣ #web #programming #db

 
🥷🏻 CHANNEL | GROUP
Forwarded from Ninja Learn | نینجا لرن (Mohammad)
این داستان ‏Query Planning 😯

احتمالا با دیتابیس هایی مثل PostgreSQL یا MySQL کوئری زدین، اگه دقت کرده باشید این کوری ها چه ساده باشن چه پیچیده سریع اجرا میشن، دلیلشم تو یه فرایند جالب به اسم Query Planning هست.
تو این پست قراره ببینیم چیه، چطور کار می‌کنه.

🧠 Query Planning چیه؟

Query Planning (یا برنامه‌ریزی کوئری) فرایندی تو دیتابیس‌های رابطه‌ایه که توش دیتابیس تصمیم می‌گیره بهترین راه برای اجرای یه کوئری SQL چیه. وقتی یه کوئری مثل SELECT * FROM users WHERE age > 30
می‌نویسین، دیتابیس نمی‌ره مستقیم اجرا کنه؛ اول یه نقشه می‌کشه که چطور داده‌ها رو پیدا کنه، فیلتر کنه و برگردونه. این نقشه که بهش Query Plan یا Execution Plan می‌گن، مثل یه GPSه که به دیتابیس می‌گه از کدوم مسیر بره تا سریع‌تر به مقصد برسه.

هدف اصلیش بهینه‌سازی پرفورمنس با کم کردن زمان اجرا، مصرف CPU، حافظه و I/O (خوندن/نوشتن دیسک). دیتابیس این کار رو با تحلیل ساختار کوئری، آمار جدول‌ها و ایندکس‌ها انجام می‌ده.

📚 Query Planning چطور کار می‌کنه؟

دیتابیس‌ها (مثل PostgreSQL، MySQL، SQL Server) یه بخش به اسم Query Optimizer دارن که مسئول ساختن پلن بهینه‌ست. بیاین قدم‌به‌قدم ببینیم چی به چیه:

1⃣ پارس کردن کوئری (Parsing)
دیتابیس اول کوئری رو بررسی می‌کنه تا مطمئن شه درست نوشته شده (از نظر گرامری و معنایی). مثلاً چک می‌کنه جدول users وجود داره یا نه.
خروجی این مرحله یه درخت نحوی (parse tree)ه که ساختار کوئری رو نشون می‌ده.

2⃣ بازنویسی کوئری (Rewriting)
تو این مرحله، دیتابیس کوئری رو ساده‌تر یا بهینه‌تر می‌کنه، بدون اینکه نتیجه‌ش تغییر کنه. مثلاً:
  تبدیل ساب کوری ها به جوین‌ها.
  حذف شرط‌های اضافی (مثل WHERE TRUE).
تو PostgreSQL، این کار توسط Query Rewriter انجام می‌شه.

3⃣ تولید پلن‌های ممکن (Plan Generation)
حالا Query Optimizer کلی پلن ممکن برای اجرای کوئری می‌سازه. مثلاً برای یه کوئری ساده:

  SELECT * FROM users WHERE age > 30;
 

  ممکنه این گزینه‌ها بررسی شه:

  ‏Sequential Scan:
کل جدول رو خط‌به‌خط بخونه.

  ‏Index Scan:
از ایندکس روی ستون age استفاده کنه.

  ‏Bitmap Scan:
ترکیبی از ایندکس و اسکن.

برای کوئری‌های پیچیده (با جوین، گروه‌بندی و غیره)، تعداد پلن‌ها می‌تونه به هزارتا برسه

4️⃣ تخمین هزینه (Cost Estimation)
دیتابیس برای هر پلن یه هزینه (cost) تخمین می‌زنه. این هزینه یه عدد خیالیه که شامل:

  مصرف CPU (برای مقایسه‌ها، مرتب‌سازی و غیره).

  ‏I/O (خوندن از دیسک یا کش).

شبکه (اگه دیتابیس توزیع‌شده باشه).

دیتابیس از آمار جدول‌ها (مثل تعداد ردیف‌ها، توزیع داده‌ها) و ساختار ایندکس‌ها برای این تخمین استفاده می‌کنه.
مثلاً تو PostgreSQL، دستور ANALYZE این آمار رو به‌روز می‌کنه.

5️⃣ انتخاب بهترین پلن
‏Optimizer پلنی رو انتخاب می‌کنه که کمترین هزینه رو داره. این پلن می‌شه Execution Plan و برای اجرا به Executor فرستاده می‌شه.
تو بعضی دیتابیس‌ها (مثل Oracle)، می‌تونین از hints استفاده کنین تا Optimizer رو به یه پلن خاص هدایت کنین.

6️⃣ اجرا و بازخورد
بعد از اجرا، دیتابیس ممکنه بازخورد بگیره (مثلاً آمار واقعی تعداد ردیف‌ها) و پلن‌های بعدی رو بهتر کنه.

🛠 چرا Query Planning مهمه؟

‏Query Planning مثل مغز دیتابیسه و مستقیم روی پرفورمنس تأثیر می‌ذاره:

سرعت: یه پلن خوب می‌تونه یه کوئری رو از چند دقیقه به چند میلی‌ثانیه برسونه.

مصرف منابع: پلن بد می‌تونه CPU و دیسک رو بیخودی درگیر کنه و سرور رو خفه کنه.

مقیاس‌پذیری: تو دیتابیس‌های بزرگ با میلیون‌ها ردیف، یه پلن بهینه فرق بین موفقیت و فاجعه‌ست.

تجربه کاربر: اگه API‌تون به یه دیتابیس کند وصل باشه، کاربراتون فرار می‌کنن

🔍 مشکلات رایج تو Query Planning

آمار قدیمی: اگه آمار جدول‌ها به‌روز نباشه، Optimizer ممکنه پلن بد انتخاب کنه.

کوئری‌های پیچیده: جوین‌های چندگانه یا شرط‌های مبهم می‌تونن Optimizer رو گیج کنن.

عدم ایندکس: بدون ایندکس، دیتابیس مجبوره کل جدول رو اسکن کنه.

دیتابیس‌های توزیع‌شده:
تو دیتابیس‌هایی مثل CockroachDB، شبکه هم به معادله اضافه می‌شه و پلن‌ها پیچیده‌تر می‌شن.

جمع‌بندی

Query Planning مثل یه شطرنج‌باز حرفه‌ایه که تو دیتابیس تصمیم می‌گیره بهترین حرکت چیه. با تحلیل کوئری، آمار جدول‌ها و ایندکس‌ها، یه پلن بهینه می‌سازه که می‌تونه سرعت و کارایی پروژه‌تون رو زیر و رو کنه.

#️⃣ #web #programming #db

 
🥷🏻 CHANNEL | GROUP