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
خب خب خب ORM چیه ؟ 🛸

امروز می‌خوام درباره‌ی یه موضوع مهم و کاربردی تو دنیای برنامه‌نویسی حرف بزنم: ORM یا همون Object-Relational Mapping.

🧠 ORM یعنی چی؟

ORM (Object-Relational Mapping) یه تکنیک تو برنامه‌نویسیه که داده‌های دیتابیس رو به شکل اشیاء (objects) تو زبون‌های شی‌گرا مثل پایتون، جاوا یا سی‌شارپ مدیریت می‌کنه. به بیان ساده، ORM یه پل ارتباطی بین دنیای شی‌گرایی (کلاس‌ها و اشیاء) و دنیای دیتابیس‌های رابطه‌ای (جداول و ستون‌ها) می‌سازه. با ORM دیگه لازم نیست مستقیم با کوئری‌های SQL کار کنی؛ در عوض، با همون زبون برنامه‌نویسی‌ات دیتابیس رو کنترل می‌کنی.

مثلاً به جای اینکه بنویسی:
SELECT * FROM users

می‌تونی تو پایتون با Django ORM اینجوری بنویسی:
users = User.objects.all()

و همون نتیجه رو بگیری

📚 ORM چطوری کار می‌کنه؟
فرض کن تو دیتابیست یه جدول به اسم users داری که ستون‌هاش اینان:
id، name و email

تو برنامه‌ات یه کلاس به اسم User می‌سازی که پراپرتی‌هایی مثل id، name و email داره. ORM این کلاس رو به جدول users توی دیتابیس مپ (map) می‌کنه. یعنی هر شیء از کلاس User نمایانگر یه رکورد تو جدول users می‌شه.

چند تا سناریو رو با هم ببینیم:

1⃣ ذخیره کردن داده:
یه شیء از کلاس User می‌سازی، مقادیرش رو پر می‌کنی و با یه متد مثل save() ذخیره‌اش می‌کنی. ORM این کار رو به یه دستور SQL (مثل INSERT) تبدیل می‌کنه و اجرا می‌کنه.

user = User(name='علی', email='[email protected]')
user.save()


2⃣ خوندن داده:
میتونی به جای کوئری SQL، از متدهایی مثل all() یا filter() استفاده می‌کنی. ORM پشت صحنه کوئری مناسب رو می‌سازه و داده‌ها رو به شکل اشیاء برمی‌گردونه.


   # همه کاربرها
users = User.objects.all()

# فیلتر کردن
ali_users =
User.objects.filter(name='علی')


به همین سادگی ORM تمام پیچیدگی‌های کار با دیتابیس رو از دید تو مخفی می‌کنه و یه رابط کاربری راحت بهت می‌ده.

البته هر orm با orm های دیگه فرق داره هرچی یه orm بیشتر abstraction انجام داده باشه استفاده ازش راحت تر میشه
ولی توی مقیاس بالاتر همین سادگی باعث پیچیدگی میشه.
🚀 ORM برای چی به وجود اومد؟

قبل از اینکه ORMها باشن، برنامه‌نویس‌ها مستقیم با SQL کار می‌کردن. (هرچند همین الانشم توی زبان های هایی که orm مناسبی براش ساخته نشده برنامه نویسان بصورت خام کد sql میزنن مثل برنامه نویسان golang)

این چند تا مشکل داشت و داره:

کدهای طولانی:
برای هر عملیات ساده، باید یه کوئری SQL می‌نوشتی که گاهی خیلی پیچیده می‌شد.

خطای زیاد:
یه اشتباه کوچیک تو کوئری (مثل یه typo) می‌تونست ساعت‌ها وقتت رو تلف کنه.

سختی نگهداری:
اگه ساختار دیتابیست عوض می‌شد (مثلاً یه ستون اضافه یا کم می‌شد)، باید همه کوئری‌ها رو دستی تغییر می‌دادی.

تفاوت پارادایم:
‏ SQL یه زبون declarative (اعلانی) هست، ولی زبون‌هایی مثل پایتون imperative (دستوری) هستن. این یعنی برنامه‌نویس باید مدام بین دو مدل فکری جابه‌جا می‌شد.

ORM اومد که این مشکلات رو حل کنه:

سادگی:
کار با دیتابیس مثل کار با اشیاء تو زبون خودت می‌شه.

امنیت:
‏ORMها معمولاً جلوی حملاتی مثل SQL Injection رو می‌گیرن.

انعطاف‌پذیری:
می‌تونی دیتابیس رو عوض کنی (مثلاً از MySQL بری به PostgreSQL) بدون اینکه کل کدت رو تغییر بدی.

سرعت توسعه:
چون کوئری‌نویسی کمتر می‌شه، وقت بیشتری برای منطق اصلی برنامه‌ات داری.

جمع‌بندی
ORM یه ابزار باحال و قدرتمنده که کار با دیتابیس رو برای برنامه‌نویس‌ها راحت‌تر، سریع‌تر و امن‌تر می‌کنه. با ORM دیگه لازم نیست با SQL خام کلنجار بری و می‌تونی با همون زبون برنامه‌نویسی‌ات همه‌چیز رو مدیریت کنی.

#️⃣ #database #sql #orm


🥷 CHANNEL | GROUP
14👍4
Fantastic
🤩19🔥2👍1
مقاله بعدی درمورد داکرایز کردن پروژه توی fastapi هست
(اگه ایده ای هم برای مقالات دارید خوشحال میشم بشنوم)
🔥17👍4
فردا کتاب boost your djangoDx رو میزارم :)
پیشاپیش عیدتون مبارک ❤️
🔥27
Boost Your Django DX (Adam Johnson) (Z-Library)-2.pdf
21.7 MB
اینم کتاب Boost your DjangoDX
امید وارم لذت ببرید :) ❤️

#️⃣ #book


🥷 CHANNEL | GROUP
18🔥3
کوکی‌کاتر خودمو زدم

میتونید با fastapi-cookiecutters یه پروژه FastAPI تمیز و آماده بسازین. و دیتابیس، Docker، هر چی بخوای اضافه می‌کنه

از PyPI میتونید دانلود کنید:

pip install fastapi-cookiecutters


تست کنین و بگین چطوره🚀

#️⃣ #package


🥷 CHANNEL | GROUP
👍10👎1🔥1
فرآیند بوت شدن سیستم های لینوکسی 🚀
خب توی این پست فرآیند بوت شدن سیستم هایی که از لینوکس استفاده میکنن رو بررسی میکنیم.

1️⃣ فاز اولیه: اجرا شدن فریمور (BIOS/UEFI)
وقتی دکمه‌ی پاور رو می‌زنی، اولین چیزی که اجرا می‌شه، BIOS (تو سیستم‌های قدیمی‌تر) یا UEFI (تو سیستم‌های جدید) هست. این قسمت سخت‌افزار رو بررسی می‌کنه و مطمئن می‌شه که قطعات اصلی (مثل رم، پردازنده و دیسک‌ها) درست کار می‌کنن.

تست اولیه: این مرحله به اسم POST (Power-On Self Test) شناخته می‌شه و اگه مشکلی باشه، مثلاً رم خراب باشه، معمولاً با یه سری بوق یا پیام خطا هشدار می‌ده.

پیدا کردن بوت لودر: بعد از تست سخت‌افزار، BIOS/UEFI دنبال دیسک قابل بوت می‌گرده (مثل SSD یا USB) و بوت‌لودر رو اجرا می‌کنه.

2️⃣ بوت‌لودر (GRUB یا systemd-boot)
بعد از اینکه دیسک بوت پیدا شد، بوت‌لودر (معمولاً GRUB) اجرا می‌شه. بوت‌لودر یه برنامه‌ی کوچیکه که وظیفه‌ی لود کردن کرنل لینوکس رو داره.

انتخاب سیستم‌عامل:
اگه چند تا سیستم‌عامل نصب کرده باشی (مثلاً لینوکس و ویندوز)، اینجا می‌تونی انتخاب کنی که کدوم یکی بوت بشه.

بارگذاری کرنل:
بعد از انتخاب سیستم‌عامل (یا بعد از چند ثانیه اگه گزینه‌ای انتخاب نشه)، بوت‌لودر کرنل لینوکس (فایل vmlinuz) رو بارگذاری می‌کنه.

3️⃣ بارگذاری کرنل و initramfs
اینجا کرنل لینوکس اجرا می‌شه و شروع به کنترل سخت‌افزار می‌کنه. اما چون هنوز فایل‌سیستم اصلی (Root) بارگذاری نشده، یه چیز به اسم initramfs وارد ماجرا می‌شه.

‏initramfs چیه؟
یه فایل موقتی که شامل درایورها و ابزارهای اولیه برای شناسایی و اتصال فایل‌سیستم اصلیه. به کرنل کمک می‌کنه که بتونه پارتیشن‌های دیسک رو بشناسه و مونت کنه.

4️⃣ مونت شدن روت و اجرای systemd
بعد از اینکه کرنل تونست به فایل‌سیستم اصلی دسترسی پیدا کنه، حالا سیستم آماده‌ی راه‌اندازی سرویس‌ها و بقیه‌ی چیزهاست.

ورود systemd:
تو اکثر توزیع‌های مدرن لینوکس، systemd اجرا می‌شه و وظیفه‌ی مدیریت سرویس‌ها و فرآیندهای سیستم رو به عهده داره.

راه‌اندازی سطح سیستم:
اینجا کلی سرویس اجرا می‌شن، مثل:
مدیریت شبکه (NetworkManager یا systemd-networkd)

مدیریت لاگ‌ها (journald)

راه‌اندازی محیط گرافیکی (GDM، SDDM یا LightDM)


5️⃣ نمایش صفحه‌ی لاگین
در نهایت، بعد از اینکه همه سرویس‌های لازم اجرا شدن، یه ترمینال لاگین (TTY) یا محیط گرافیکی دسکتاپ (مثل KDE Plasma یا GNOME) نمایش داده می‌شه و می‌تونی با یوزرنیم و پسورد وارد سیستم بشی.

جمع‌بندی:
1.‏ BIOS/UEFI اجرا می‌شه و سخت‌افزار رو بررسی می‌کنه.
2. بوت‌لودر (GRUB) کرنل لینوکس رو لود می‌کنه.
3. کرنل و initramfs فایل‌سیستم رو راه‌اندازی می‌کنن.
4.‏ systemd مدیریت سرویس‌ها رو انجام می‌ده.
5. صفحه‌ی لاگین نمایش داده می‌شه و سیستم آماده‌ی استفاده‌ست!

#️⃣ #linux #boot #kernel


🐧 CHANNEL | GROUP
👍10🔥1
Forwarded from Revisto/Tech (Revisto)
سلام سلام. من پروژه‌ای رو شروع کردم برای ترجمه‌ی آزاد مستندات و داکیومنت‌های رسمی پایتون به فارسی.
اگر این مسیر براتون جذابه و دوست دارید مشارکت کنید خیلی خوشحال میشم و ما نیاز داریم به این کامیونیتی برای ادامه و گسترش مستندات پایتون به فارسی.


اسم ما و مخزن پایتون به فارسی روی بخش ترجمه‌ی devguide پایتون هم هست و من کارهای لازم رو برای به رسمیت شناخته شدن فعالیتمون کردم و الان نیاز به کمک شما داره.

طبق مستندات وقتی صفحه‌‌های tutorial‍, bugs, library/functions صددرصد ترجمه بشن میتونیم درخواست بدیم تا ترجمه‌مون بخشی از docs.python.org و عمومی بشه.
کاری که من کردم اینه که یک دور این صفحات رو با Google Translate ترجمه کردم و الان فقط نیاز دارن که هر بخش بازبینی (review) بشه.

ترجمه هم در سایت Transifex اتفاق میفته که توی ویدیو خیلی دقیق‌تر گفتم چجوری میشه شروعش کرد.


لینک ویدیو در یوتیوب
لینک مخزن گیتهاب ترجمه
لینک دیسکورد ترجمه فارسی

@RevistoTech
🔥8👍2
Revisto/Tech
Photo
ریا نباشه منم دارم داکیومنت FastAPI رو ترجمه میکنم 😁✌️ ( اگه وقت کنم توی این پروژه هم مشارکت می‌کنم)
18🔥5
خب خب خب Alembic 🧪

مروز می‌خوام درباره یه ابزار کاربردی تو دنیای پایتون حرف بزنم: Alembic اگه با دیتابیس کار می‌کنین و دنبال یه راه ساده برای مدیریت تغییراتش هستین، این پست برای شماست. بیاین با هم ببینیم Alembic چیه، چطوری کار می‌کنه و چرا باید ازش استفاده کنین.

🧠 Alembic چیه؟

Alembic یه ابزار متن‌باز (open-source) برای مدیریت مهاجرت‌های دیتابیس (database migrations) تو پایتونه. این ابزار بیشتر با SQLAlchemy (یه ORM معروف) جفت‌وجوره و بهتون کمک می‌کنه تغییرات ساختاری دیتابیستون رو (مثل اضافه کردن جدول، تغییر ستون یا حذف فیلد) به صورت خودکار و منظم مدیریت کنین. به جای اینکه دستی کوئری‌های SQL بنویسین و دیتابیس رو عوض کنین، Alembic این کار رو براتون ساده و خودکار می‌کنه.

فکر کنین یه جدول جدید به پروژه‌تون اضافه کردین یا یه ستون رو تغییر دادین؛ Alembic این تغییرات رو به یه فایل مهاجرت (migration script) تبدیل می‌کنه که می‌تونین هر وقت خواستین اعمالش کنین یا حتی برگردونین (rollback).

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

‏Alembic مثل یه مدیر پروژه برای دیتابیستونه. بیاین قدم‌به‌قدم ببینیم چطوری کار می‌کنه:

1⃣ نصب و راه‌اندازی:
اول با
pip install alembic

نصبش می‌کنین. بعد با دستور
alembic init نام اختیاری

یه پوشه برای تنظیماتش می‌سازین (معمولاً به اسم alembic).

2⃣ ساخت Migration:
وقتی مدل‌های SQLAlchemy‌تون رو تغییر می‌دین (مثلاً یه ستون به کلاس اضافه می‌کنین)، با دستور زیر Alembic تغییرات رو تشخیص می‌ده و یه اسکریپت Migration می‌سازه:

   alembic revision --autogenerate -m "اضافه کردن ستون جدید"

این اسکریپت دو تا تابع داره:
**‏upgrade()** برای اعمال تغییرات و

**‏downgrade()** ‏برای برگردوندنش.


3⃣ اعمال migration:
با دستور زیر تغییرات رو روی دیتابیس اعمال می‌کنین:

   alembic upgrade head


اگه بخواین برگردین به نسخه قبلی:

   alembic downgrade -1


4⃣ مدیریت نسخه‌ها:
‏ Alembic یه جدول به اسم alembic_version تو دیتابیستون می‌سازه و نسخه فعلی رو اونجا نگه می‌داره تا همیشه بدونین کجای کار هستین.

🚀 چرا Alembic به وجود اومد؟
قبل از ابزارهایی مثل Alembic، اگه می‌خواستین دیتابیستون رو تغییر بدین، باید خودتون کوئری‌های SQL می‌نوشتین و دستی اجرا می‌کردین. این چندتا مشکل داشت:

خطا:
یه اشتباه کوچیک تو کوئری می‌تونست دیتابیس رو به هم بریزه.

پیچیدگی:
تو پروژه‌های تیمی، هماهنگ کردن تغییرات دیتابیس بین اعضا سخت بود.

بازگشت پذیری:
اگه یه تغییر اشتباه می‌کردین، برگردوندنش یه کابوس بود.


Alembic اومد که:

اتوماسیون:
تغییرات رو خودکار تشخیص بده و اسکریپت
بسازه.

نسخه بندی:
تاریخچه تغییرات رو نگه داره و بتونه عقب و
جلو بره.

هماهنگی:
تو تیم‌ها همه بتونن با یه سیستم مشخص کار کنن.


🛠 یه مثال ساده

فرض کنین یه مدل Sqlalchemy دارین
from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)

حالا می‌خواین یه ستون email اضافه کنین:

class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
email = Column(String)

با دستور
 alembic revision --autogenerate -m "add email"

‏Alembic یه فایل می‌سازه که تغییرات رو اعمال می‌کنه بعد با
 alembic upgrade head 

دیتابیستون آپدیت می‌شه. به همین راحتی 😎

جمع‌بندی
Alembic یه ابزار قدرتمند و باحاله که مدیریت Migrations های دیتابیس رو تو پایتون به یه تجربه لذت‌بخش تبدیل می‌کنه. با Alembic دیگه لازم نیست نگران کوئری‌های خام یا هماهنگی تیمی باشین؛ همه‌چیز خودکار و منظمه. اگه با SQLAlchemy کار می‌کنین، حتماً یه امتحانش کنین و ببینین چقدر زندگی‌تون رو راحت می‌کنه.

#️⃣ #db #alembic #sqlalchemy


🥷 CHANNEL | GROUP
🔥11👍31
This media is not supported in your browser
VIEW IN TELEGRAM
سال نو مبارک:) ❤️

امید وارم سال ۱۴۰۴ پر از شادی و خبرای خوب برای همگیمون باشه
❤‍🔥201🔥1
مغزم gc نداره دچار مموری لیک شده
🤣16
This media is not supported in your browser
VIEW IN TELEGRAM
خب خب خب NoSQL 🚀
امروز می‌خوام درباره یه موضوع جذاب تو دنیای دیتابیس‌ها باهاتون حرف بزنم NoSQL اگه دنبال یه راه‌حل برای مدیریت داده‌های بزرگ، انعطاف‌پذیر و سریع هستین، Nosql گزینه خیلی خوبیه. بیاین با هم ببینیم NoSQL چیه.


🧠 ‏NoSQL چیه؟
NoSQL (که مخفف "Not Only SQL" هست) یه دسته از دیتابیس‌های غیررابطه‌ایه که برعکس دیتابیس‌های سنتی رابطه‌ای (مثل MySQL یا PostgreSQL) از ساختار جدول و اسکیما (schema) ثابت استفاده نمی‌کنه (schema less). این دیتابیس‌ها برای مدیریت داده‌های بدون ساختار (unstructured)، نیمه‌ساختار (semi-structured) یا ساختاریافته (structured) طراحی شدن و بهتون انعطاف‌پذیری و مقیاس‌پذیری بالایی می‌دن.

به زبان ساده، NoSQL اومد که بگه "داده‌هات هر شکلی که هستن، من مدیریتشون می‌کنم 😎"


📚 انواع NoSQL
‏NoSQL چند مدل اصلی داره که هر کدوم برای یه نوع داده و کاربرد خاص بهینه شدن:

1️⃣Key-Value (کلید-مقدار):
ساده‌ترین نوعه، مثل یه دیکشنری بزرگ. یه کلید می‌دی، یه مقدار می‌گیری
مثال: Redis، DynamoDB


2️⃣‏ Document (سندی):
داده‌ها رو به صورت داکیومنت (مثل JSON یا XML) ذخیره می‌کنه. هر داکیومنت می‌تونه ساختار متفاوتی داشته باشه.
مثال: MongoDB، CouchDB

3️⃣‌‏ Column-Family (ستونی):
داده‌ها رو تو ستون‌ها ذخیره می‌کنه و برای دیتاهای بزرگ و تحلیلی عالیه.
مثال: Cassandra، ScyllaDB

4️⃣Graph:
داده‌ها رو به صورت گراف (node) و یال (edge) ذخیره می‌کنه، مناسب روابط پیچیده هست.
مثال: Neo4j، ArangoDB


چرا NoSQL به وجود اومد؟
🚀

دیتابیس‌های رابطه‌ای (RDBMS) برای سال‌ها پادشاه بودن، ولی با رشد تکنولوژی و داده‌ها، مشکلاتی پیش اومد:

حجم داده‌ها: وب، اپلیکیشن‌های موبایل و IoT حجم داده‌ها رو به شکل انفجاری زیاد کردن و RDBMSها تو مقیاس بزرگ کند شدن.
ساختار ثابت: جدول‌های RDBMS نیاز به اسکیما دارن و تغییرشون سخت بود، ولی داده‌های امروزی انعطاف‌پذیر و متنوع شدن.
مقیاس‌پذیری عمودی: RDBMSها فقط با ارتقای سخت‌افزار (vertical scaling) بزرگ می‌شن، که گرون و محدوده.
سرعت: تو اپلیکیشن‌های بلادرنگ (مثل چت یا بازی آنلاین)، تاخیر RDBMS جواب نمی‌داد.

‏NoSQL اومد که:
مقیاس‌پذیری افقی:
با اضافه کردن سرورهای بیشتر (horizontal scaling) بزرگ بشه.
انعطاف‌پذیری:
بدون نیاز به اسکیما، هر نوع داده‌ای رو مدیریت کنه.
سرعت:
برای عملیات سریع و بلادرنگ بهینه بشه.


🔍 مزایا و معایب NoSQL
مزایا:
مقیاس‌پذیری: به راحتی با اضافه کردن نود (node) بزرگ می‌شه.
انعطاف‌پذیری: برای داده‌های متنوع و بدون ساختار عالیه.
سرعت: تو عملیات سنگین و بلادرنگ حرف نداره.
توزیع‌شده: به صورت ذاتی برای سیستم‌های توزیع‌شده طراحی شده.

معایب:
عدم تطابق کامل (Consistency): تو بعضی مدل‌ها (مثل BASE به جای ACID)، ممکنه داده‌ها لحظه‌ای ناسازگار باشن.
یادگیری: هر نوع NoSQL دستورات خاص خودش رو داره و یادگیریش زمان میبره.
کمبود تراکنش پیچیده: برای عملیات پیچیده مثل تراکنش‌های بانکی، RDBMS هنوز بهتره.


🎯 کجا از NoSQL استفاده کنیم؟

اپلیکیشن‌های وب و موبایل: برای ذخیره داده‌های کاربرها (مثل پروفایل‌ها).
داده‌های بلادرنگ: چت، اعلان‌ها، بازی‌های آنلاین.
داده‌های بزرگ: تحلیل لاگ‌ها، IoT، سری‌های زمانی.
پروژه‌های مقیاس‌پذیر: وقتی نمی‌دونی داده‌هات چقدر قراره رشد کنن.

جمع‌بندی ✍️
NoSQL یه انقلاب تو دنیای دیتابیس‌ها بود که برای دنیای مدرن و داده‌محور امروز طراحی شده. با انعطاف‌پذیری، سرعت و مقیاس‌پذیریش، یه انتخاب خوب برای پروژه‌هاییه که نمی‌خوان تو چارچوب‌های سفت و سخت RDBMS گیر کنن. از MongoDB برای اپلیکیشن‌های وب گرفته تا ScyllaDB برای داده‌های بلادرنگ، NoSQL برای هر نیازی یه جواب داره.

#️⃣ #db #nosql


🥷 CHANNEL | GROUP
👍105❤‍🔥1🔥1👌1
این داداشمون میگه ۸ تا از سریع ترین زبان های برنامه نویسی اینان
و پایتون از سه تای پایینیش سریع تره :))))))))

#️⃣ #wtf


🥷 CHANNEL | GROUP
🤣30👍1
Damn

#️⃣ #wtf


🥷 CHANNEL | GROUP
🤣33👍1
توی این مقاله درمورد اصول نامگذاری کامیت ها صحبت میکنم :]

ممنون میشم با لایک و کامنت حمایت کنید ❤️

لینک مقاله

#️⃣ #refrence


🥷 CHANNEL | GROUP
🔥15💔1