Ninja Learn | نینجا لرن
1.26K subscribers
95 photos
36 videos
11 files
306 links
یادگیری برنامه نویسی به سبک نینجا 🥷
اینجا چیزایی یاد میگیری که فقط نینجاهای وب‌ بلدن 🤫

📄 Send me post: https://t.iss.one/NoronChat_bot?start=sec-fdggghgebe

👥 ɢʀᴏᴜᴘ: https://t.iss.one/+td1EcO_YfSphNTlk
Download Telegram
یه پکیج پایتونی براتون اماده کردم فکرکنم خوشتون بیاد 🌚
🥰63🔥2
💎 مدل MVCC در دیتابیس Postgres 💎


‏postgres یه سری ابزارای قوی داره برای اینکه توسعه‌دهنده‌ها بتونن دسترسی همزمان به داده‌ها رو مدیریت کنن. این سیستم به صورت داخلی از یه مدل به اسم MVCC استفاده می‌کنه (که مخفف Multiversion Concurrency Control هست) تا سازگاری داده‌ها رو حفظ کنه. به این معنی که هر دستور SQL یه نمای کلی از داده‌ها رو می‌بینه (مثل یه نسخه از دیتابیس)، انگار که داده‌ها مال یه زمان قبلی هستن و ربطی به حالت فعلی داده‌ها ندارن. اینطوری باعث می‌شه که تو یه شرایط همزمانی، وقتی چند دستور دارن رو داده‌ها کار می‌کنن، نسخه‌های مختلفی از داده دیده بشه و تضادی بینشون پیش نیاد و هر سشن تو دیتابیس مستقل بمونه. MVCC با نداشتن قفل‌های پیچیده، پرفورمنس سیستم رو برای محیط‌هایی که چندین کاربر همزمان دارن استفاده می‌کنن بالا می‌بره و جلوی ازدحام قفل‌ها رو می‌گیره.

مزیت اصلی MVCC نسبت به روش‌های قفل‌گذاری اینه که وقتی داده‌ها برای خوندن قفل می‌شن، این قفل‌ها با قفل‌هایی که برای نوشتن داده‌ها لازمه تداخل ندارن. یعنی وقتی یه کاربر داره داده رو می‌خونه، جلوی نوشتن داده توسط کاربر دیگه رو نمی‌گیره و برعکس. پستگرس حتی وقتی شدیدترین حالت ایزوله‌سازی تراکنش رو فعال می‌کنه، باز هم این تضمین رو با یه روش به اسم SSI (Serializable Snapshot Isolation) نگه می‌داره.

پستگرس ابزارهای قفل‌گذاری در سطح جدول و سطر هم داره که برای اپلیکیشن‌هایی مناسبه که لزوماً نیاز به ایزوله‌سازی کامل ندارن و ترجیح می‌دن خودشون نقاط حساس رو کنترل کنن. البته استفاده درست از MVCC معمولاً از قفل‌گذاری بهتر جواب می‌ده و سرعت بیشتری داره. به علاوه، قفل‌های مشورتی هم هستن که برنامه‌ها می‌تونن برای مدیریت قفل‌ها استفاده کنن و این قفل‌ها محدود به یه تراکنش خاص نیستن.
🔥71
احتمالا همتون توی پروژه هاتون که نیاز به درگاه پرداخت داشتید کلی سرش ازیت شدید (مخصوصا سر merchant_id) و میخواستید دیگه سرتون رو بزنید به دیوار

حالا چرا اینارو میگم؟

من یه پکیج توسعه دادم برای حل همین مشکل 😁

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

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

لینک ریپو

لینک پکیج

@ninja_learn_ir
211🔥65
🎢 برنامه‌نویسی Async

شاید زیاد به گوشت خورده باشه: Async Programming، ولی خب، دقیقاً یعنی چی؟ 🤔 بیایید با هم ببینیم چجوری می‌شه باهاش پروژه‌هامونو بهتر و سریع‌تر توسعه بدیم.

حالا Async چیه؟ 🤔
تصور کن یه کافه پر سر و صدا داری؛ مشتری‌ها میان، سفارش می‌دن، می‌شینن و منتظر آماده شدن سفارش می‌مونن. حالا فرض کن فقط یه کارمند داری که باید یکی‌یکی سفارش بگیره و هرکدوم آماده شد، بده دست مشتری. 😴 اما اگه از Async کمک بگیری، این کارمند می‌تونه همه سفارش‌ها رو پشت سر هم بگیره و هربار که یه سفارش آماده شد، همونو تحویل بده. بدون اینکه لازم باشه به مشتری بگه "منتظر بمون"

حالا Async چجوری کار می‌کنه؟
برنامه‌نویسی Async بهت اجازه می‌ده که تسک‌ها رو همزمان اجرا کنی. مثلا موقع درخواست به یه سرور خارجی (API)، می‌تونی به برنامه بگی به جای منتظر موندن، همزمان یه کار دیگه هم انجام بده.

کجا به درد می‌خوره؟
▶️ API Calling:
وقتی داری اطلاعات می‌گیری، منتظر نمی‌مونی، یه تسک دیگه اجرا می‌کنی. 🚀

▶️ File Handling:
خوندن و نوشتن فایل‌های بزرگ بدون توقف کد. 📂

▶️ Web Scraping:
همزمان چندین صفحه رو بررسی می‌کنی.

یه مثال ساده از Async با Python و Js🐍

فرض کن یه فانکشن می‌خوایم بنویسیم که ۲ ثانیه بخوابه و بعد یه متن چاپ کنه. حالا ببین فرق sync و async چیه:

import asyncio

# Sync
def print_sync():
print("Starting Sync...")
time.sleep(2)
print("Done Sync!")

# Async
async def print_async():
print("Starting Async...")
await asyncio.sleep(2)
print("Done Async!")

# اجرا
asyncio.run(print_async())

حالا Js :
// Sync
function printSync() {
console.log("Starting Sync...");
sleep(2000); // این تابع sleep فقط برای شبیه‌سازیه
console.log("Done Sync!");
}

function sleep(ms) {
const start = Date.now();
while (Date.now() - start < ms) {}
}

// Async
async function printAsync() {
console.log("Starting Async...");
await new Promise(resolve => setTimeout(resolve, 2000));
console.log("Done Async!");
}

// اجرا
printAsync();



امید وارم مفید بوده باشه :)

#async #sync #backend


@ninja_learn_ir
🔥16👍2🍾1
پست فردا چی باشه دوستان؟ خودم نظرم رو معرفی pydantic هست

اگه چیزی مد نظرتون هست کامنت کنید
👍14👎2
معرفی Pydantic 🧩

ـPydantic یه کتابخونه خفنه برای پایتون که بهت اجازه می‌ده راحت و دقیق داده‌هات رو اعتبارسنجی (validation) و تایپ کنی. اگه توی پروژه‌های بزرگ کار می‌کنی، Pydantic خیلی کمکت می‌کنه چون بهت کمک می‌کنه داده‌ها رو تمیز و بی‌نقص نگه داری.


چرا Pydantic؟ 🔍

فرض کن می‌خوای داده‌های کاربر رو توی یه اپلیکیشن بگیری، اما مطمئن نیستی که داده‌ها دقیقا همونی هستن که می‌خوای. ممکنه کاربر یه مقدار اشتباه وارد کنه، یه فیلد رو جا بندازه، یا نوع داده رو اشتباه بزنه. با Pydantic، می‌تونی مطمئن باشی که همه چیز درست وارد شده و اگه چیزی اشتباه بود، خیلی راحت یه ارور می‌گیری و جلوش رو می‌گیری.


چطور کار می‌کنه؟ 🔨

ـPydantic با استفاده از مدل‌ها کار می‌کنه. مدل‌ها همون کلاس‌های پایتون هستن که به کمکشون می‌تونی ساختار داده رو تعریف کنی. بیاید با یه مثال شروع کنیم:

from pydantic import BaseModel

class User(BaseModel):
id: int
name: str
email: str
age: int = 18 # مقدار پیش‌فرض

user_data = {
"id": 1,
"name": "Ali",
"email": "[email protected]"
}

user = User(**user_data)
print(user)

اینجا یه مدل به نام User تعریف کردیم که شامل id، name، email و age هست. اگه فیلدی رو اشتباه بدیم یا از نوعی غیر از نوع مشخص‌شده استفاده کنیم، Pydantic خطا می‌ده.


بررسی Validation در Pydantic 🛠️

ـPydantic بهت این امکان رو می‌ده که خیلی راحت داده‌ها رو اعتبارسنجی کنی. مثلا اگه بخوای مطمئن بشی که email به فرمت درستی وارد شده، Pydantic خودش اینو هندل می‌کنه و نیازی نیست دستی بررسی کنی. بیاین یه مثال دیگه رو ببینیم:

from pydantic import BaseModel, EmailStr, PositiveInt

class User(BaseModel):
id: PositiveInt
name: str
email: EmailStr
age: int = 18

try:
user = User(id=-1, name="Ali", email="ali@bad-email", age=22)
except ValueError as e:
print("خطا:", e)

اینجا PositiveInt و EmailStr رو استفاده کردیم که به طور خودکار id باید مثبت باشه و email هم باید فرمت درستی داشته باشه. این یعنی خیلی راحت می‌تونی داده‌ها رو کنترل کنی و از ورود داده‌های اشتباه جلوگیری کنی.

مدل‌های تو در تو (Nested Models) 🧬

اگه داده‌هات پیچیده‌ترن و شامل چند مدل می‌شن، می‌تونی مدل‌های تو در تو بسازی. مثلا:

from typing import List
from pydantic import BaseModel

class Address(BaseModel):
street: str
city: str

class User(BaseModel):
id: int
name: str
addresses: List[Address]

user_data = {
"id": 1,
"name": "Ali",
"addresses": [
{"street": "خیابون اول", "city": "تهران"},
{"street": "خیابون دوم", "city": "مشهد"}
]
}

user = User(**user_data)
print(user)

جمع‌بندی 🎯

فهمیدیم Pydantic یه ابزار قوی برای مدیریت و اعتبارسنجی داده‌هاست که به‌ویژه تو پروژه‌های بزرگ و APIها خیلی کمک می‌کنه. می‌تونی مدل‌های پیچیده بسازی، داده‌ها رو اعتبارسنجی کنی، و با استفاده از تایپ‌های قوی پایتون، کد تمیزتر و قابل خوانا تر بکنی.


امید وارم مفید بوده باشه :)

#python #pydantic #programing



@ninja_learn_ir
👍83👌2🔥1
از این به بعد هرروز میخوام یه نکته و توصیه برنامه نویسی بهتون بکنم 🌚

🔆 CHANNEL | GROUP
19👍6
توصیه اول:

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

#توصیه

🔆 CHANNEL | GROUP
👌25👍3
This media is not supported in your browser
VIEW IN TELEGRAM
#programing #algorithm


این ویدیو الگوریتم‌های مختلف Sorting رو به تصویر می‌کشه و نشون میده چطور هر کدوم عملیات مرتب‌سازی رو انجام میدن.
واقعا دیدنیه 🌚

🔆 CHANNEL | GROUP
👍54👏2👌1
توصیه امروز

وقتی چیزی رو به کسی یاد میدی درواقع خودت بیشتر یاد میگیری

#توصیه

🔆 CHANNEL | GROUP
👍203
هشتک #توصیه اضافه شد برای پستایی که بهتون توصیه های خوب خوب میکنم 😁
👏122😍2👍1
توصیه امروز:

هیچوقت دیر نیست

#توصیه

🔆 CHANNEL | GROUP
👍152
#خبر

پایتون داره میترکونه 🐍
هم توی وب هم توی هوش مصنوعی هم توی چیزای دیگه واقعا خیلی اینده امید وار کننده ای داره این لعنتی

🔆 CHANNEL | GROUP
🏆17👍75👎2