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
خب خب آپدیت جدید جنگو اینجاست، ببینیم چه تغییراتی داشته🔥🛠
چند روز پیش (۲ آوریل) آپدیت جدید جنگو با ورژن ۵.۲ منتشر شد. این نسخه LTS هست و تا آوریل ۲۰۲۸ پشتیبانی میشه. توی این نسخه تغییرات بیشتر مربوط به زیرساخت هایی مثل دیتابیس و shell جنگو بودن. بریم بررسیشون کنیم.

1️⃣ ایمپورت خودکار مدل ها توی shell
از این نسخه به بعد وقتی وارد shell جنگو میشین مدل هاتون به صورت خودکار ایمپورت میشن. این ویژگی بهتون کمک میکنه که زمان کمتری برای ایمپورت کردن بزارین و باعث صرفه جویی در زمان میشه.

2️⃣ پشتیبانی از کلید اصلی مرکب(Composite Primary Key)

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

3️⃣ ساده تر شدن شخصی سازی BoundField
توی این نسخه میتونید کلاس BoundField رو به راحتی توی سطح پروژه یا فرم شخصی سازی کنید. با ایجاد یک کلاس که از BoundField ارث بری میکنه و اعمال تغییرات مورد نظر میتونید اون رو به فیلد های فرم هاتون اختصاص بدین.
‏BoundField همون چیزیه که وقتی توی قالب می‌نویسید form.name، پشت صحنه وظیفه داره اون فیلد رو به HTML تبدیل کنه، مقدارش رو بذاره، ارورهاش رو نشون بده و...
یجورایی رابط بین فرم و فیلد واقعی‌ توی قالبه.


4️⃣ فیلتر های Facet توی پنل ادمین
توی پنل ادمین جنگو، با فعالسازی ویژگی ModelAdmin.show_facets، میتونید تعداد آیتم های توی هر فیلتر رو ببینید. این قابلیت باعث میشه اطلاعات پنل ادمین رو راحت تر مدیریت کنید.

5️⃣ فیلد های تولید شده(Generated Fields)

با معرفی GeneratedFields، میتونید فیلد هایی تعریف کنید که مقدارشون بر اساس مقدار سایر فیلد های مدل محاسبه و ثبت میشه. این ویژگی بهتون این امکان رو میده که ستون های محاسبه شده توی دیتابیس قرار بدین.

6️⃣ مقادیر پیش فرض در سطح دیتابیس

با استفاده از پارامتر db_default توی فیلد های مدل، مقادیر پیش فرض مستقیما توسط دیتابیس اعمال میشن. این ویژگی باعث بهبود عملکرد و سازگاری بیشتر با دیتابیس های مختلف میشه.

⏺️ با استفاده از لینک زیر میتونید اطلاعات بیشتری درمورد این آپدیت کسب کنید⚡️

Django 5.2 release notes

#django #backend #python


🥷🏻 CHANNEL | GROUP
Forwarded from Ninja Learn | نینجا لرن (Denver)
سیستم مدیریت وابستگی در FastAPI
یکی از بهترین ویژگی های FastAPI، سیستم مدیریت وابستگی(Dependnecy Injection) اون هست، این سیستم باعث میشه کد ما تمیز تر، تست پذیر تر و قابل توسعه تر بشه.
بهتره برای درک بهتر این پست درمورد Dependency Injectionرو مطالعه کنید تا با پایه و اساس این مبحث آشنا بشین.

‏Depends چیه؟
این کلاس توی FastAPI، برای مدیریت وابستگی ها استفاده میشه. به زبان ساده Depends یه راهه که بتونیم بک تابع یا آبجکت رو به صورت خودکار به فانکشن های دیگه تزریق کنیم بدون اینکه دستی اونارو صدا بزنیم یا بخونیم.
با یه مثال ساده شروع میکنیم:
from fastapi import FastAPI, Depends

app = FastAPI()

def get_db():
db = "Database Connection"
try:
yield db
finally:
print("Closing DB connection")

@app.get("/items/")
def read_items(db = Depends(get_db)):
return {"db_connection": db}

اینجا read_items خودش مستقیم سشن دیتابیس رو نمیسازه، فقط میگه: من به یه سشن دیتابیس نیاز دارم.
‏FastAPI به صورت خودکار get_db رو صدا میزنه و نتیجه رو به db میده.

چرا این سیستم خوبه؟
وابستگی ها مدیریت شده و قابل کنترل میشن
کد تست پذیر تر میشه
ساختار پروژه ماژولار میشه
لاجیک لایه های مختلف جدا میشه و تغییرات ساده تر میشن

اگه ازش استفاده نکنیم چی؟
خب با استفاده نکردن از این ویژگی یه کمک بزرگ رو از دست میدین. به طور مثال اگه وابستگی ها تو در تو باشن شما میتونید فقط با همین ویژگی کلی به تمیزی کدتون کمک کنید.
from fastapi import Header, HTTPException, APIRouter, Depends


router = APIRouter()

def get_token(token: str = Header(...)):
return token

def get_current_user(token: str = Depends(get_token)):
user = {"username": "abolfazl", "role": "admin"}
return user

def require_admin(user: dict = Depends(get_current_user)):
if user["role"] != "admin":
raise HTTPException(status_code=403, detail="Not authorized")
return user

def list_users_service():
return [{"username": "a"}, {"username": "b"}]

@router.get("/users")
def list_users(admin_user: dict = Depends(require_admin)):
users = list_users_service()
return users

توی مثال بالا میتونید چندین لایه از وابستگی رو ببینید که به خوبی با Depends مدیریت شدن. حالا اگه این سیستم وجود نداشت چی؟
def list_users():
token = get_token()
user = get_current_user(token)
admin_user = require_admin(user)
...

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

پشت صحنه چه اتفاقی میوفته؟

‏FastAPI از بالا شروع کرد به نگاه کردن:
دید require_admin به get_current_user نیاز داره، بعد دید get_current_user هم به get_token نیاز داره، پس اول get_token اجرا شد، بعد get_current_user بعد هم require_admin. هربار خروجی یه فانکشن، ورودی فانکشن بعدی شد. درنهایت اگه مشکلی نباشه میرسیم به endpoint.

از کجا فهمید چی رو به کجا بفرسته؟

خب باید بگم که FastAPI به شدت به تایپ هینت ها وابسته است و خیلی ازشون استفاده میکنه. همین Depends هم با استفاده از تایپ هینت ها جای مقادیر رو درک میکنه. یه فانکشن توی پایین ترین لایه یه آرگومان با تایپ Header داره؟ خب Depends اون آرگومان رو توی درخواست دریافت میکنه به اون فانکشن میرسونه.

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

اما اگه فانکشنی که میخواید استفاده کنید ارتباط مستقیم با بدنه و اطلاعات ورودی از درخواست نداره و فقط برای انجام کاری یا پردازش داخلی باشه نیازی به Depends نداره. مثل ثبت نام کاربر که ممکنه دیتای خام و پردازش نشده ای از درخواست نیاز نداشته باشه و صرفا اطلاعات رو توی دیتابیس ذخیره میکنه

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

#️⃣ #fastapi #python #backend


🥷🏻 CHANNEL | GROUP
Forwarded from Ninja Learn | نینجا لرن (Denver)
خب خب خب، ‏Middleware های FastAPI🚀
خب middleware یه کد واسط بین دریافت درخواست و پاسخ دادن توی یه اپلیکیشن وبه. یعنی هر ریکوئستی که به سرور میرسه، قبل از رسیدن به route اصلی، از middleware رد میشه و همچنین هر درخواستی هم قبل از رسیدن به کلاینت از middleware عبور میکنه تا تغییر داده بشه، لاگ بشه و ...

چطور توی FastAPI ازشون استفاده کنیم؟🤔
‌‏Middleware ها توی FastAPI با دکوریتور app.middleware تعریف میشن و معمولا ساختارشون این شکلیه:
from fastapi import FastAPI, Request

app = FastAPI()

@app.middleware("http")
async def my_middleware(request: Request, call_next):
# Before reaching route
print("Before route")

# Executing View
response = await call_next(request)

# After view did its thing
print("After route")

return response

همونطور که توی مثال بالا دیدید، هر کدی که قبل از اجرای call_next باشه مربوط به درخواست، و هر کدی که بعد از اجرای call_next نوشته بشه مربوط به پاسخ میشه.
توی این مثال قبل از رسیدن درخواست به route اصلی، عبارت 'Before route' چاپ میشه و بعد اینکه route پردازشش با درخواست تموم شد و پاسخ آماده ی برگشت به کلاینت بود، عبارت 'After route' چاپ میشه و بعد از اون پاسخ به کلاینت میرسه.


چندتا مثال ساده برای درک کاربرداش🛠️
از چندتا مثال ساده میتونیم استفاده کنیم
لاگ گیری ساده درخواست ها:
@app.middleware("http")
async def log_requests(request: Request, call_next):
print(f"New request: {request.iss.onethod} {request.url}")
response = await call_next(request)
return response


اضافه کردن Header به پاسخ:
@app.middleware("http")
async def add_custom_header(request: Request, call_next):
response = await call_next(request)
response.headers["X-App-Version"] = "1.0.0"
return response


سنجش مدت زمان اجرای درخواست:
import time

@app.middleware("http")
async def measure_time(request: Request, call_next):
start = time.time()
response = await call_next(request)
duration = time.time() - start
response.headers["X-Process-Time"] = str(duration)
return response


چندتا نکته📎
1️⃣کلاس Middleware که از FastAPI ایمپورت شده درواقع همون کلاس Middleware توی Starlette هست و برای راحتی میتونیم از FastAPI ایمپورتش کنیم.

2️⃣اگه dependency ای داشته باشیم که با yield تعریف شدن، بخش خرجی اون ها بعد از اجرای middleware اجرا میشه.

3️⃣اگه BackgrounTask ای وجود داشته باشه، اون ها بعد از اجرای همه ی middleware ها اجرا میشن.

جمع بندی✍️
با استفاده از middleware ها میتونید درخواست و پاسخ هارو تمیز کنید، یا قبل از پردازش شدنشون توسط route کارایی که میخواین رو انجام بدین. درواقع با تعریف middleware یه تابع بین client و route اصلی قرار میدیم.

#️⃣ #fastapi #python #backend


🥷🏻 CHANNEL | GROUP
Forwarded from Ninja Learn | نینجا لرن (Denver)
خب خب خب، ‏Background Task ها توی FastAPI🚀
گاهی اوقات نیاز داریم که یه کاری بعد از ارسال پاسخ به کاربر انجام بشه. مثل ارسال ایمیل خوشامد گویی، ثبت لاگ یا آمار توی دیتابیس، پردازش فایل آپلود شده و .... توی این شرایط میتونیم از Background Task ها استفاده کنیم، اینجوری میتونیم بدون معطل کردن کاربر اون کارهارو جداگانه انجام بدیم.

استفاده از Background Task ها🛠
خب اول باید کلاس BackgroundTasks رو ایمپورت کنیم و یه پارامتر از همین نوع برای فانکشن route بنویسیم.
from fastapi import BackgroundTasks, FastAPI

app = FastAPI()


def write_notification(email: str, message=""):
with open("log.txt", mode="w") as email_file:
content = f"notification for {email}: {message}"
email_file.write(content)


@app.post("/send-notification/{email}")
async def send_notification(email: str, background_tasks: BackgroundTasks):
background_tasks.add_task(write_notification, email, message="some notification")
return {"message": "Notification sent in the background"}

حالا FastAPI میاد یه آبجکت با نوع BackgroundTasks برامون ایجاد میکنه و به اون پارامتر پاس میده.
بعد از اینکه فانکشن تسکمون رو ایجاد کردیم میتونیم با استفاده از متود ()add_task از همون پارامتر اون فانکشن رو به صف اجرا اضافه کنیم. همچنین میتونیم آرگومان های مورد نیازمون رو هم با استفاده از همین متود به تسکمون پاس بدیم.

‏Background Tasks و Dependency injection💉
‏Background Tasks به خوبی با سیستم تزریق وابستگی FastAPI سازگاره. میتونیم توی سطح های مختلف برنامه(فانکشن route، یه وابستگی و...) از Background Task استفاده کنیم.
from typing import Annotated

from fastapi import BackgroundTasks, Depends, FastAPI

app = FastAPI()


def write_log(message: str):
with open("log.txt", mode="a") as log:
log.write(message)


def get_query(background_tasks: BackgroundTasks, q: str | None = None):
if q:
message = f"found query: {q}\n"
background_tasks.add_task(write_log, message)
return q


@app.post("/send-notification/{email}")
async def send_notification(
email: str, background_tasks: BackgroundTasks, q: Annotated[str, Depends(get_query)]
):
message = f"message to {email}\n"
background_tasks.add_task(write_log, message)
return {"message": "Message sent"}

توی این مثال بعد از اینکه پاسخ به کلاینت ارسال شد، یه تسک میاد ایمیل کاربر رو توی فایل log.txt مینویسه. اگه یه کوئری پارامتر هم به API ارسال بشه یه تسک دیگه اون رو هم توی فایل مینویسه.

نکته مهم⚠️
این ابزار فقط برای کارهای سبک وسریع مناسبه. مثل همین لاگ نوشتن، ارسال ایمیل یا پردازش های خیلی کوچیک و سبک. برای کارهای سنگین تر مثل پردازش تصویر بهتره که از سیستم هایی مثل Celery استفاده بشه.

جمع بندی✍️
‏Background Task یه ابزار ساده ولی کاربردیه. میتونه توی پروژه هایی که تسک های سنگینی ندارن از Celery بی نیازتون کنه و کارهارو بعد از پاسخ دهی به صورت غیرهمزمان انجام بده.

#️⃣ #fastapi #python #backend


🥷🏻 CHANNEL | GROUP
Forwarded from LearnPOV | لرن پی او وی (Mohammad hossein)
چی میشه وقتی یه ریکوئست به سرور میاد؟

تا حالا واست سوال شده وقتی کاربر دکمه «ثبت‌نام» رو می‌زنه، دقیقاً چی تو پشت صحنه اتفاق می‌افته؟ بریم قدم‌به‌قدم ببینیم چه خبره

1⃣ کاربر درخواست می‌فرسته
کاربر فرم ثبت‌نامو پر می‌کنه و روی دکمه ثبت نام می‌زنه. مرورگر یه درخواست (Request) به آدرس /api/signup می‌فرسته، همراه با اطلاعاتی مثل ایمیل و پسورد.


2⃣ سرور درخواستو می‌گیره
اون درخواست می‌رسه به سرور.
اینجا یه چیز به اسم کنترلر هست که مسئول گرفتن درخواست‌هاست. (کنترلر یعنی همون جایی که درخواست‌ها وارد می‌شن و به بخش‌های بعدی پاس داده می‌شن.)


3⃣ درخواست می‌ره به سرویس
کنترلر درخواستو می‌فرسته به یه بخش به اسم سرویس. سرویس اونجاست که منطق اصلی اجرا می‌شه. چک می‌کنه ایمیل تکراری نباشه، پسورد رو هش می‌کنه و آماده ذخیره می‌شه.


4⃣ ارتباط با دیتابیس
سرویس یه دستور می‌فرسته به دیتابیس. «این کاربر جدیدو ذخیره کن!». دیتابیس هم اطلاعاتو ذخیره می‌کنه.


😀 پاسخ به مرورگر
حالا سرور یه جواب برمی‌گردونه. یه پیام موفقیت (مثلاً 201 Created) یا یه توکن برای ورود. مرورگر هم نتیجه رو می‌گیره و همه چی تموم می‌شه.


البته که داستان به همین سادگی ها نیست و چیزی فراتر از اینه، ولی و من سعی کردم تا حد ممکن این فرآیند رو ساده تر توضیح بدم تا برای همه افراد قابل فهم باشه😄

#️⃣ #backend #api


جمع‌بندی 📌
بک‌اند فقط چندتا روت نوشتن نیست.

بک‌اند یعنی بفهمی دقیقاً چه اتفاقی بین درخواست کاربر و پاسخ سرور می‌افته.

و این چرخه، قلب تپنده‌ی هر اپلیکیشنه.


🧑‍💻 @CoolyCode
Please open Telegram to view this post
VIEW IN 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 Gopher Academy
🔵 عنوان مقاله
explains more, including why this matters.

🟢 خلاصه مقاله:
آخرین شماره Golang Weekly مقاله‌ای دارد که یک موضوع به‌روز در اکوسیستم Go را با زمینه‌سازی روشن و کاربردی شرح می‌دهد: چرا اکنون مهم است، چه مزایا و ملاحظاتی دارد و چه بده‌بستان‌هایی پیشِ‌روست. با توضیح‌های فشرده و مثال‌های قابل اتکا، الگوهای مناسب تولید، خطاهای رایج و مسیرهای مهاجرت برای سرویس‌ها و کتابخانه‌ها را نشان می‌دهد. همچنین به پیامدهای معمول چنین تغییراتی بر modules، مدیریت وابستگی، CI، راهبرد تست، بنچ‌مارک و پروفایلینگ می‌پردازد و راهکارهایی برای کاهش ریسک و سازگاری پیشنهاد می‌کند. در پایان، اثر آن بر جامعه و تیم‌ها را جمع‌بندی کرده و منابع تکمیلی برای مطالعه بیش‌تر معرفی می‌کند؛ نکاتی عملی، چه برای بک‌اند‌های پُرترافیک و چه برای CLIهای کوچک.

#Go #Golang #GolangWeekly #SoftwareEngineering #Backend #DevOps #Performance #Concurrency

🟣لینک مقاله:
https://golangweekly.com/link/174442/web


👑 @gopher_academy
تا حالا کلی مطالب خفن و کاربردی تو کانال NinjaLearn براتون آماده کردیم و الان صدها مطلب مختلف و جذاب داریم.

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

این شما و این لیست دسته‌بندی‌های کانال🔻:

🦫 #go: آموزش‌ها و نکات کاربردی زبان گو

💻 #programming: مطالب برنامه نویسی

🐍 #python: ترفندها و نکات پایتونی

🦄 #django: مطالب فریم‌ورک جنگو

⚡️ #fastapi: مطالب فریم ورک فست

🌐 #web: مطالب مرتبط به وب

📡 #network: مطالب مرتبط به شبکه

🗂️ #db: معرفی و نکات دیتابیس

🔖 #reference: معرفی مقاله و ویدیو

📢 #notif: اطلاع رسانی ها

#question: سوالات جالب در برنامه نویسی

🎊 #event: رویداد هایی که معرفی کردیم

🎬 #movie: معرفی فیلم و سریال

📚 #book: معرفی کتاب‌های تخصصی

🤖 #AI: مطالب مرتبط به هوش مصنوعی

📊 #ml: مطالب مرتبط به یادگیری ماشین

🛠️ #backend: آموزش‌ها و ترفندهای بک‌اند

🔒 #security: نکات امنیتی

#devops: مطالب مرتبط به دواپس

📺 #YouTube: ویدیوهای چنل یوتیوب ما

🌏 #geo: تکنولوژی های جغرافیایی


هر کدوم از این هشتگ‌ها برای یه موضوع خاص طراحی شده تا شما به راحتی بتونید محتوای مورد نظرتون رو پیدا کنید. دیگه لازم نیست کلی تو کانال بگردید 😊

اگه موضوع جدیدی به مطالب کانال اضافه بشه، حتماً تو این لیست قرار می‌گیره


راستی میتونید بنر کانال رو برای دوستاتون هم بفرستید تا اونا هم به جمع ما بپیوندن و از این مطالب مفید استفاده کنن 😉

NinjaLearn Banner 🥷🤝


#category



🔆 CHANNEL | GROUP
Forwarded from Gopher Academy
🔵 عنوان مقاله
the Cup o'Go podcast

🟢 خلاصه مقاله:
آخرین شماره Golang Weekly پادکست Cup o'Go را برجسته کرده و آن را به‌عنوان همراهی صوتی و به‌روز برای پیگیری روندها و مباحث مهم دنیای Go معرفی می‌کند. این پادکست با مرور خبرها، نکات عملی و گفت‌وگو درباره ویژگی‌های زبان، ابزارها و الگوهای عملکرد، به توسعه‌دهندگان در سطوح مختلف کمک می‌کند تا بدون صرف زمان زیاد، در جریان تغییرات اکوسیستم Go بمانند و از محتوای کیوریت‌شده Golang Weekly یک مکمل کاربردی بسازند.

#Golang #GoDevelopers #GolangWeekly #CupOGo #Podcast #SoftwareEngineering #Backend #OpenSource

🟣لینک مقاله:
https://golangweekly.com/link/175631/web


👑 @gopher_academy
Forwarded from Golden Code (علی 🇨🇴)
در نسخه‌ی جدید PHP 8.5 تابع filter_var() یه قابلیت کاربردیه تازه داره:

FILTER_THROW_ON_FAILURE

تا قبل ازین اگه اعتبارسنجی دیتا (مثلا ایمیل نامعتبر) fail میشد،
تابع فقط مقدار false برمیگردوند و باید دستی بررسیش میکردی.

اما حالا بااین گزینه، بجای برگردوندنه false، یک Exception پرتاب (throw) میشه 👇🏾

try {
$email = filter_var('not-an-email', FILTER_VALIDATE_EMAIL, FILTER_FLAG_THROW_ON_FAILURE);
}
catch (ValueError $e)
{
echo "ایمیل نامعتبر است!";
}

مزایاش؟

کد تمیزتر ، خطایابی سریع‌تر ، هماهنگی بهتر با Exception Handling در پروژه‌های مدرن PHP

#php #backend

@GoldenCodeir 🔥

(به منبع و مثالش دقت کنید 👇🏾)
https://x.com/AshAllenDesign/status/1983537236403794361?t=IIrUtS60L_j-Rl6cHxtwlg&s=19
Forwarded from Gopher Academy
🔵 عنوان مقاله
switch Statements in Go

🟢 خلاصه مقاله:
این مطلب از Golang Weekly به‌صورت عملی سراغ عبارت‌های switch در Go می‌رود و نشان می‌دهد چگونه می‌توان به‌جای زنجیره‌های if/else طولانی، کدی خواناتر نوشت. ابتدا نحو و قواعد ارزیابی switch، استفاده از چند مقدار در یک case، نقش default، و این نکته که در Go سقوط خودکار بین caseها وجود ندارد و فقط با fallthrough فعال می‌شود، توضیح داده می‌شود. سپس فرم بدون تگِ switch { ... } برای نگارش نگهبان‌های منطقیِ مرتب معرفی می‌شود.

بخش بعدی به type switch اختصاص دارد: وقتی با interface سروکار دارید، switch روی v.(type) اجازه می‌دهد بر اساس نوع واقعی تصمیم بگیرید، از nil به‌درستی عبور کنید و محدوده متغیرها در سربرگ switch و داخل caseها را مدیریت کنید. مقاله الگوهای کاربردی مثل مسیردهی بر اساس روش HTTP، دسته‌بندی خطاها برحسب نوع، شاخه‌بندی زمان‌محور و استفاده از ثابت‌ها را مرور می‌کند و در کنار آن به نکات سبک و کارایی اشاره دارد. جمع‌بندی این است که با رعایت چند قاعده ساده و پرهیز از دام‌های متداول، switch در Go ابزاری شفاف، قابل نگهداری و گاه سریع‌تر از شرط‌های زنجیره‌ای خواهد بود.

#Go #Golang #GolangWeekly #switch #TypeSwitch #GoTips #Programming #Backend

🟣لینک مقاله:
https://golangweekly.com/link/176626/web


👑 @gopher_academy
Forwarded from Gopher Academy
🔵 عنوان مقاله
go-rest-api-example: Template for an Enterprise-Ready REST API Microservice

🟢 خلاصه مقاله:
پروژه go-rest-api-example یک قالب آماده برای ساخت Microserviceهای REST API در سطح Enterprise است. این Boilerplate با هدف راه‌اندازی سریع و استاندارد یک سرویس تولیدی ارائه شده و با نگه‌داری منظم به‌روز می‌شود. نسخه این هفته با Go 1 یکپارچه شده تا با ابزارها و جریان‌های کاری فعلی سازگار باشد و پایه‌ای پایدار برای توسعه فراهم کند.

#Go #Golang #RESTAPI #Microservices #Boilerplate #Backend #API #SoftwareEngineering

🟣لینک مقاله:
https://golangweekly.com/link/176914/web


👑 @gopher_academy