راستی مایک گروهم داریم که توش فعالیم و میتونید هر سوالی دارید یا درمورد هرچی که میخواید رو مطرح کنید. 😁
گروه 👇
https://t.iss.one/programming_city_ir
گروه 👇
https://t.iss.one/programming_city_ir
Telegram
Programmers City 🌆
گروه نینجا لرن🥷
🌐 channel link : https://t.iss.one/ninja_learn_ir
👥 Group link: https://t.iss.one/+td1EcO_YfSphNTlk
⚠️ Rules: https://t.iss.one/programmers_city_rules
🌐 channel link : https://t.iss.one/ninja_learn_ir
👥 Group link: https://t.iss.one/+td1EcO_YfSphNTlk
⚠️ Rules: https://t.iss.one/programmers_city_rules
❤4
Forwarded from Linux Zone | لینوکس زون
🟢 خب دوستان فایلهای تکراری یکی از مشکلاتیه که خیلی از ما باهاش مواجهیم. این فایلها نهتنها فضای اضافی میگیرن، بلکه سیستم رو شلوغ و نامرتب میکنن.
ما برای حل مشکل یه اسکریپت ساده نوشتیم که فایلهای تکراری رو پیدا میکنه، اونها رو حذف میکنه و به جای هر کدوم یه symlink (لینک نمادین) ایجاد میکنه تا ساختار فایل ها حفظ بشه و مشکلی توی اجرای برنامه ها نباشه
به عنوان ارگومنت یه path دریافت میکنه (اگر ندادی محل اجرای اسکریپت رو در نظر میگیره) و تمام زیر فولدر هارو برای فایل تکراری اسکن میکنه
🔗 این اسکریپت رو از این لینک میتونی دانلود کنی
💬 هر نظر و سوال یا بهبود کد مدنظرته باهامون به اشتراک بزار 😊
➖➖➖➖➖➖➖➖➖➖
مثال فایلهای تکراری مثل venv یا node_modules که چندین بار کپی شدن و فضای هارد رو اشغال کردن. (برای خودم نیم گیگ فضا اشغال کرده بود)
ما برای حل مشکل یه اسکریپت ساده نوشتیم که فایلهای تکراری رو پیدا میکنه، اونها رو حذف میکنه و به جای هر کدوم یه symlink (لینک نمادین) ایجاد میکنه تا ساختار فایل ها حفظ بشه و مشکلی توی اجرای برنامه ها نباشه
به عنوان ارگومنت یه path دریافت میکنه (اگر ندادی محل اجرای اسکریپت رو در نظر میگیره) و تمام زیر فولدر هارو برای فایل تکراری اسکن میکنه
🔗 این اسکریپت رو از این لینک میتونی دانلود کنی
💬 هر نظر و سوال یا بهبود کد مدنظرته باهامون به اشتراک بزار 😊
#️⃣ #script #suggest
➖➖➖➖➖➖➖➖➖➖
🐧 CHANNEL | GROUP
👍7
خب خب خب WSO Web Shell چیه؟ 🕵️♂️
امروز میخوام دربارهی یه چیز خطرناک و مهم تو دنیای وب حرف بزنم: WSO Web Shell. شاید اسمش رو شنیده باشی، ولی دقیقا چیه و چرا باید حواست بهش باشه؟ بیا با هم ببینیم!
📡 WSO Web Shell چیه؟
WSO Web Shell یه اسکریپت کوچیکه (معمولا با PHP نوشته میشه) که هکرها مثل یه در مخفی روی سرور سایتت میذارن. وقتی این اسکریپت اونجاست، هکر میتونه هر وقت دلش خواست از راه در برگرده، دستور بده، فایل آپلود کنه یا حتی کل سایتت رو به هم بریزه. انگار یه کلید سایتتو دستش داره که هر موقع بخواد در سایتت رو باز میکنه.
🛠 چجوری کار میکنه؟
پشت صحنه این ماجرا اینجوری پیش میره:
1️⃣ نقطه ورود:
هکرها دنبال یه راه نفوذ میگردن. مثلا اگه سایتت یه بخش آپلود فایل داره (مثل عکس پروفایل) و درست امن نشده(درواقع درست اعتبار سنجی نشده)، به جای عکس، این اسکریپت رو آپلود میکنن. یا از باگهایی مثل SQL Injection و XSS سوءاستفاده میکنن تا این فایل رو روی سرورت بذارن.
2️⃣ دسترسی مخفی:
بعد از آپلود، فقط کافیه هکر یه آدرس خاص مثل
رو تو مرورگر بزنه.
یه صفحه ساده باز میشه که بهش اجازه میده دستوراتش رو اجرا کنه.
3️⃣ کنترل کامل:
حالا هکر میتونه فایلات رو ببینه، تغییر بده، اطلاعاتت رو بدزده یا حتی سایتت رو قفل کنه. مثل اینه که کلید خونهت رو به یه غریبه داده باشی و اون تو خونت هرکاری بکنه.
🔒 نکات مهم دربارهی WSO Web Shell
🔹 کوچیک ولی خطرناک:
این اسکریپت خیلی سادهست، ولی چون دسترسی کامل به سرور میده، یه تهدید بزرگه.
🔹 تشخیص سخت:
چون شبیه فایلای معمولی PHP سایت میمونه، پیدا کردنش کار آسونی نیست مگه اینکه دنبالش بگردی.
🔹 استفاده همیشگی:
هکرا اینو میذارن که هر وقت خواستن برگردن، بدون دردسر دوباره وارد بشن.
🎯 چطور جلوشو بگیری؟
برای اینکه سایتت از دست این در مخفی در امان بمونه، این کارا رو بکن:
آپدیت نگه دار:
رمز قوی:
فایلها رو چک کن:
فایروال وب (WAF):
کدنویسی امن:
✍ جمعبندی
WSO Web Shell همون در پشتی مخفیه که هکرا تو سرورت کار میذارن تا هر وقت دلشون خواست برگردن و خرابکاری کنن. ولی با یه کم دقت، آپدیت نگه داشتن سایت و رعایت نکات امنیتی، میتونی جلوی این دردسر رو بگیری.
➖➖➖➖➖➖➖➖➖
امروز میخوام دربارهی یه چیز خطرناک و مهم تو دنیای وب حرف بزنم: WSO Web Shell. شاید اسمش رو شنیده باشی، ولی دقیقا چیه و چرا باید حواست بهش باشه؟ بیا با هم ببینیم!
📡 WSO Web Shell چیه؟
WSO Web Shell یه اسکریپت کوچیکه (معمولا با PHP نوشته میشه) که هکرها مثل یه در مخفی روی سرور سایتت میذارن. وقتی این اسکریپت اونجاست، هکر میتونه هر وقت دلش خواست از راه در برگرده، دستور بده، فایل آپلود کنه یا حتی کل سایتت رو به هم بریزه. انگار یه کلید سایتتو دستش داره که هر موقع بخواد در سایتت رو باز میکنه.
🛠 چجوری کار میکنه؟
پشت صحنه این ماجرا اینجوری پیش میره:
1️⃣ نقطه ورود:
هکرها دنبال یه راه نفوذ میگردن. مثلا اگه سایتت یه بخش آپلود فایل داره (مثل عکس پروفایل) و درست امن نشده(درواقع درست اعتبار سنجی نشده)، به جای عکس، این اسکریپت رو آپلود میکنن. یا از باگهایی مثل SQL Injection و XSS سوءاستفاده میکنن تا این فایل رو روی سرورت بذارن.
2️⃣ دسترسی مخفی:
بعد از آپلود، فقط کافیه هکر یه آدرس خاص مثل
www.siteto.com/uploads/wso.php
رو تو مرورگر بزنه.
یه صفحه ساده باز میشه که بهش اجازه میده دستوراتش رو اجرا کنه.
3️⃣ کنترل کامل:
حالا هکر میتونه فایلات رو ببینه، تغییر بده، اطلاعاتت رو بدزده یا حتی سایتت رو قفل کنه. مثل اینه که کلید خونهت رو به یه غریبه داده باشی و اون تو خونت هرکاری بکنه.
🔒 نکات مهم دربارهی WSO Web Shell
🔹 کوچیک ولی خطرناک:
این اسکریپت خیلی سادهست، ولی چون دسترسی کامل به سرور میده، یه تهدید بزرگه.
🔹 تشخیص سخت:
چون شبیه فایلای معمولی PHP سایت میمونه، پیدا کردنش کار آسونی نیست مگه اینکه دنبالش بگردی.
🔹 استفاده همیشگی:
هکرا اینو میذارن که هر وقت خواستن برگردن، بدون دردسر دوباره وارد بشن.
🎯 چطور جلوشو بگیری؟
برای اینکه سایتت از دست این در مخفی در امان بمونه، این کارا رو بکن:
آپدیت نگه دار:
سیستم مدیریت محتوا (مثل وردپرس)، پلاگینها و قالبت رو همیشه بهروز کن. این آپدیتها باگها رو میبندن.
رمز قوی:
رمزهای پیچیده بذار و احراز هویت دو مرحلهای رو فعال کن.
فایلها رو چک کن:
هر چند وقت یه بار سرورت رو نگاه کن، ببین فایل مشکوکی مثل wso.php
اونجا نیست.
فایروال وب (WAF):
این ابزار ترافیک مشکوک رو قبل از رسیدن به سرورت بلاک میکنه.
کدنویسی امن:
اگه خودت کد میزنی، ورودی کاربرا رو حسابی فیلتر کن تا چیزی که نباید، وارد نشه.
✍ جمعبندی
WSO Web Shell همون در پشتی مخفیه که هکرا تو سرورت کار میذارن تا هر وقت دلشون خواست برگردن و خرابکاری کنن. ولی با یه کم دقت، آپدیت نگه داشتن سایت و رعایت نکات امنیتی، میتونی جلوی این دردسر رو بگیری.
#️⃣ #security #backend
➖➖➖➖➖➖➖➖➖
🥷 CHANNEL | GROUP
👍5❤🔥1🔥1👌1
فقط برنامه نویسا درکش میکنن :)
https://youtu.be/EFmxPMdBqmU?si=dkT-Ry9K_-5m8DxY
➖➖➖➖➖➖➖➖➖
https://youtu.be/EFmxPMdBqmU?si=dkT-Ry9K_-5m8DxY
#️⃣ #video
➖➖➖➖➖➖➖➖➖
🥷 CHANNEL | GROUP
👍6
خب خب خب Design Patterns 🏗
امروز میخوایم دربارهی Design Patterns یا الگوهای طراحی تو برنامهنویسی صحبت کنیم. این موضوع خیلی مهمه و توی دنیای نرمافزار به شما کمک میکنه که کدهاتون رو بهتر، تمیزتر و قابلنگهداریتر بنویسین. توی این پست تعریف میکنیم که این الگوها چی هستن، چه انواعی دارن و ...
🧠 Design Patterns چیه؟
Design Patterns یا الگوهای طراحی، راهحلهای استاندارد و امتحانشدهای هستن برای مشکلات رایجی که تو طراحی نرمافزار بهشون برمیخوریم. این الگوها مثل یه نقشهی راهن که به شما نشون میدن چطور یه مسئلهی خاص رو به بهترین شکل ممکن حل کنین. این مفهوم اولین بار تو کتاب معروف Gang of Four یا GoF
معرفی شد. این کتاب سال ۱۹۹۴ منتشر شد و هنوزم یه منبع معتبر و مرجع به حساب میاد.
این الگوها از یک زبون خاص مستقل هستن، یعنی میتونین تو هر زبانی مثل پایتون، جاوا یا سی++ ازشون استفاده کنین. ما اینجا با پایتون مثال میزنیم تا ساده و قابلفهم باشه.
📚 انواع Design Patterns
طبق دستهبندی Gang of Four، الگوهای طراحی به سه دستهی اصلی تقسیم میشن:
1⃣ Creational Patterns (الگوهای ساختاری):
این الگوها با نحوهی ساختن اشیاء (Objects) سر و کار دارن و به شما کمک میکنن که اشیاء رو به روشهای انعطافپذیر و بهینه بسازین.
2⃣ Structural Patterns (الگوهای ساختاری):
این الگوها دربارهی سازماندهی و ارتباط بین کلاسها و اشیاء هستن تا ساختار کِدتون منظمتر بشه.
3⃣ Behavioral Patterns (الگوهای رفتاری):
این الگوها روی تعاملات و مسئولیتهای بین اشیاء تمرکز دارن و باعث میشن ارتباط بین بخشهای مختلف برنامهتون بهتر بشه.
حالا بریم سراغ یه مثال پایتونی از هر دسته تا دقیق ببینین چطور کار میکنن.
1️⃣ Creational Pattern: Singleton (تکتون)
الگوی Singleton مطمئن میشه که از یه کلاس فقط یه نمونه (Instance) ساخته بشه و همهجای برنامه به همون یه نمونه دسترسی داشته باشن.
مثال:
فرض کنین میخواین یه سیستم لاگ داشته باشین که فقط یه شیء ازش وجود داشته باشه:
توی متد
چون
خروجی
2️⃣ Structural Pattern: Adapter (آداپتور)
الگوی Adapter مثل یه پل عمل میکنه که دو کلاس با رابطهای (Interface) متفاوت رو به هم وصل میکنه.
مثال:
فرض کنین یه کلاس قدیمی به اسم
کلاس OldPrinter یه متد قدیمی داره به اسم print_text.
کلاس PrinterAdapter یه نمونه از OldPrinter رو میگیره و متد print رو به print_text وصل میکنه.
حالا سیستم جدیدتون میتونه با adapter.print() کار کنه، بدون اینکه OldPrinter رو تغییر بدین.
ادامه, پست بعد
امروز میخوایم دربارهی Design Patterns یا الگوهای طراحی تو برنامهنویسی صحبت کنیم. این موضوع خیلی مهمه و توی دنیای نرمافزار به شما کمک میکنه که کدهاتون رو بهتر، تمیزتر و قابلنگهداریتر بنویسین. توی این پست تعریف میکنیم که این الگوها چی هستن، چه انواعی دارن و ...
🧠 Design Patterns چیه؟
Design Patterns یا الگوهای طراحی، راهحلهای استاندارد و امتحانشدهای هستن برای مشکلات رایجی که تو طراحی نرمافزار بهشون برمیخوریم. این الگوها مثل یه نقشهی راهن که به شما نشون میدن چطور یه مسئلهی خاص رو به بهترین شکل ممکن حل کنین. این مفهوم اولین بار تو کتاب معروف Gang of Four یا GoF
معرفی شد. این کتاب سال ۱۹۹۴ منتشر شد و هنوزم یه منبع معتبر و مرجع به حساب میاد.
این الگوها از یک زبون خاص مستقل هستن، یعنی میتونین تو هر زبانی مثل پایتون، جاوا یا سی++ ازشون استفاده کنین. ما اینجا با پایتون مثال میزنیم تا ساده و قابلفهم باشه.
📚 انواع Design Patterns
طبق دستهبندی Gang of Four، الگوهای طراحی به سه دستهی اصلی تقسیم میشن:
1⃣ Creational Patterns (الگوهای ساختاری):
این الگوها با نحوهی ساختن اشیاء (Objects) سر و کار دارن و به شما کمک میکنن که اشیاء رو به روشهای انعطافپذیر و بهینه بسازین.
2⃣ Structural Patterns (الگوهای ساختاری):
این الگوها دربارهی سازماندهی و ارتباط بین کلاسها و اشیاء هستن تا ساختار کِدتون منظمتر بشه.
3⃣ Behavioral Patterns (الگوهای رفتاری):
این الگوها روی تعاملات و مسئولیتهای بین اشیاء تمرکز دارن و باعث میشن ارتباط بین بخشهای مختلف برنامهتون بهتر بشه.
حالا بریم سراغ یه مثال پایتونی از هر دسته تا دقیق ببینین چطور کار میکنن.
1️⃣ Creational Pattern: Singleton (تکتون)
الگوی Singleton مطمئن میشه که از یه کلاس فقط یه نمونه (Instance) ساخته بشه و همهجای برنامه به همون یه نمونه دسترسی داشته باشن.
مثال:
فرض کنین میخواین یه سیستم لاگ داشته باشین که فقط یه شیء ازش وجود داشته باشه:
class SingletonLogger:
# متغیر استاتیک برای ذخیرهی نمونه
_instance = None
# بازنویسی متد __new__ برای کنترل ساخت نمونه
def __new__(cls):
if cls._instance is None:
cls._instance = super().__new__(cls)
return cls._instance
def log(self, message):
print(f"Log: {message}")
# تست کردن
logger1 = SingletonLogger()
logger2 = SingletonLogger()
# چک میکنیم که آیا هر دو متغیر به یه شیء اشاره میکنن
print(logger1 is logger2) # خروجی: True
logger1.log("سلام دنیا") # خروجی: Log: سلام دنیا
logger2.log("تست دوم") # خروجی: Log: تست دوم
توی متد
new
چک میکنیم که آیا _instance
قبلاً ساخته شده یا نه. اگه نشده باشه، یه نمونه جدید میسازیم.چون
logger1
و logger2
به یه شیء اشاره میکنن، هر تغییری که با یکی بدین، روی اون یکی هم اعمال میشه.خروجی
True
نشون میده که فقط یه نمونه از SingletonLogger وجود داره.2️⃣ Structural Pattern: Adapter (آداپتور)
الگوی Adapter مثل یه پل عمل میکنه که دو کلاس با رابطهای (Interface) متفاوت رو به هم وصل میکنه.
مثال:
فرض کنین یه کلاس قدیمی به اسم
OldPrinter
دارین که متد print_text داره، ولی سیستم جدیدتون از متد print پشتیبانی میکنه:# کلاس قدیمی
class OldPrinter:
def print_text(self, text):
print(f"Old Printer: {text}")
# آداپتور
class PrinterAdapter:
def __init__(self, old_printer):
self.old_printer = old_printer
def print(self, text):
self.old_printer.print_text(text)
# تست کردن
old_printer = OldPrinter()
adapter = PrinterAdapter(old_printer)
adapter.print("سلام از سیستم جدید") # خروجی: Old Printer: سلام از سیستم جدید
کلاس OldPrinter یه متد قدیمی داره به اسم print_text.
کلاس PrinterAdapter یه نمونه از OldPrinter رو میگیره و متد print رو به print_text وصل میکنه.
حالا سیستم جدیدتون میتونه با adapter.print() کار کنه، بدون اینکه OldPrinter رو تغییر بدین.
3️⃣
Behavioral Pattern: Observer (ناظر)
الگوی Observer یه رابطهی یکبهچند بین اشیاء تعریف میکنه. یه شیء اصلی (Subject) وقتی وضعیتش تغییر میکنه، بهطور خودکار به همهی ناظرها (Observers) خبر میده
مثال:
فرض کنین یه سیستم اعلان دارین که وقتی پیام جدید میاد، همهی کاربرها باخبر بشن:ادامه, پست بعد
❤8👍2
class Subject:
def __init__(self):
self._observers = [] # لیست ناظرها
def attach(self, observer):
self._observers.append(observer)
def notify(self, message):
for observer in self._observers:
observer.update(message)
class Observer:
def __init__(self, name):
self.name = name
def update(self, message):
print(f"{self.name} received: {message}")
# تست کردن
subject = Subject()
observer1 = Observer("کاربر ۱")
observer2 = Observer("کاربر ۲")
subject.attach(observer1)
subject.attach(observer2)
subject.notify("پیام جدید اومد!")
Subject لیستی از ناظرها رو نگه میداره و با attach میتونین ناظر جدید اضافه کنین.وقتی notify صدا زده میشه، متد update همهی ناظرها اجرا میشه و پیام رو دریافت میکنن.
این الگو باعث میشه ارتباط بین اشیاء پویا و منعطف باشه.
🔍 چرا Design Patterns مهم هستن؟
کد تمیزتر:
با استفاده از الگوها، کدتون ساختارمند و قابلفهمتر میشه.
نگهداری آسونتر:
چون از راهحلهای استاندارد استفاده میکنین، بعداً تغییر دادن یا گسترش کد راحتتره.
ارتباط بهتر:
برنامهنویسها با اسم الگوها میتونن سریع منظور همدیگه رو بفهمن.
بهینهسازی زمان:
به جای اختراع دوبارهی چرخ، از راهحلهای تستشده استفاده میکنین.
✍ جمعبندی
Design Patterns مثل یه جعبهابزار برای برنامهنویسها هستن. این الگوها فقط یه بخش کوچیک از دنیای بزرگ Design Patterns هستن و تو کتاب Gang of Four، ۲۳ الگوی مختلف معرفی شده که هر کدوم کاربرد خاص خودشون رو دارن.
#️⃣ #programming #software
➖➖➖➖➖➖➖➖➖
🥷 CHANNEL | GROUP
❤7
دوستان توی X (توئیتر سابق) اکانت باز کردم و احتمالا اونجاهم پست بزارم
دوست داشتید میتونید فالو داشته باشید که اگه پست گذاشتم استفاده کنید.
لینک اکانت:👇
https://x.com/mohammad_stdout?t=cU6VCDqEQhyU2SO5AtqkGw&s=09
➖➖➖➖➖➖➖➖➖
دوست داشتید میتونید فالو داشته باشید که اگه پست گذاشتم استفاده کنید.
لینک اکانت:👇
https://x.com/mohammad_stdout?t=cU6VCDqEQhyU2SO5AtqkGw&s=09
#️⃣ #link
➖➖➖➖➖➖➖➖➖
🥷 CHANNEL | GROUP
👍9👎2
خب خب خب WebSocket در Fastapi 🌀
امروز میخوام دربارهی یه موضوع باحال و کاربردی تو دنیای وب حرف بزنم: پیادهسازی WebSocket در FastAPI اگه دنبال ساخت اپلیکیشنهای realtime مثل چت، داشبوردهای زنده یا بازیهای آنلاین هستین، این پست براتون خیلی مفیده. پس با من همراه باشین تا با هم یاد بگیریم WebSocket چیه و چطور میتونیم تو FastAPI ازش استفاده کنیم.
🧠 WebSocket چیه و چرا مهمه؟
WebSocket یه پروتکل ارتباطیه که به کلاینت (مثل مرورگر) و سرور اجازه میده یه ارتباط دوطرفه و همیشگی داشته باشن. برعکس HTTP که فقط یه درخواست میفرستی و یه پاسخ میگیری، WebSocket این امکان رو میده که هر دو طرف هر وقت خواستن پیام بفرستن و بگیرن، بدون اینکه نیاز باشه کلاینت مدام درخواست بفرسته. این برای اپلیکیشنهایی که نیاز به آپدیتهای زنده دارن، مثل چت رومها، اعلانهای realtime یا بازیهای آنلاین، عالیه
🚀 FastAPI و WebSocket
FastAPI یه فریمورک وب مدرن و سریع برای پایتونه. یکی از قابلیتهای باحالش هم پشتیبانی از WebSocketه. FastAPI از Starlette استفاده میکنه (یه فریمورک ASGI سبک و قدرتمند)، و همین باعث میشه بتونیم به راحتی WebSocket رو پیادهسازی کنیم.
🛠 چطوری WebSocket رو تو FastAPI پیادهسازی کنیم؟
برای شروع، باید از کلاس
تو این کد:
به این میگن یه Echo Server ساده هر چی کلاینت بفرسته، سرور عینشو برمیگردونه.
📡 یه مثال پیشرفتهتر: چت روم با WebSocket
حالا بیاین یه چیز باحالتر بسازیم، مثلاً یه چت روم که چندتا کلاینت بتونن بهش وصل بشن و پیامهاشون رو به هم بفرستن. برای این کار، باید اتصالهای فعال رو مدیریت کنیم. یه کلاس به اسم ConnectionManager
اینجا چی داریم؟
ConnectionManager یه کلاسه که اتصالهای فعال رو تو یه لیست نگه میداره.
وقتی کلاینت وصل میشه، به لیست اضافه میشه (connect) و وقتی قطع میشه، حذف میشه (disconnect).
send_personal_message به یه کلاینت خاص پیام میفرسته.
broadcast به همه کلاینتهای وصلشده پیام رو میفرسته.
تو endpoint، پیام کلاینت رو میگیریم، به خودش یه جواب شخصی میدیم و به بقیه هم broadcast میکنیم.
جمعبندی ✍
WebSocket تو FastAPI به شما این امکان رو میده که اپلیکیشنهای realtime و جذاب بسازین. از چت رومها گرفته تا داشبوردهای زنده و بازیهای آنلاین.
خب اینم از این امید وارم مفید بوده باشه :]
➖➖➖➖➖➖➖➖➖
امروز میخوام دربارهی یه موضوع باحال و کاربردی تو دنیای وب حرف بزنم: پیادهسازی WebSocket در FastAPI اگه دنبال ساخت اپلیکیشنهای realtime مثل چت، داشبوردهای زنده یا بازیهای آنلاین هستین، این پست براتون خیلی مفیده. پس با من همراه باشین تا با هم یاد بگیریم WebSocket چیه و چطور میتونیم تو FastAPI ازش استفاده کنیم.
🧠 WebSocket چیه و چرا مهمه؟
WebSocket یه پروتکل ارتباطیه که به کلاینت (مثل مرورگر) و سرور اجازه میده یه ارتباط دوطرفه و همیشگی داشته باشن. برعکس HTTP که فقط یه درخواست میفرستی و یه پاسخ میگیری، WebSocket این امکان رو میده که هر دو طرف هر وقت خواستن پیام بفرستن و بگیرن، بدون اینکه نیاز باشه کلاینت مدام درخواست بفرسته. این برای اپلیکیشنهایی که نیاز به آپدیتهای زنده دارن، مثل چت رومها، اعلانهای realtime یا بازیهای آنلاین، عالیه
🚀 FastAPI و WebSocket
FastAPI یه فریمورک وب مدرن و سریع برای پایتونه. یکی از قابلیتهای باحالش هم پشتیبانی از WebSocketه. FastAPI از Starlette استفاده میکنه (یه فریمورک ASGI سبک و قدرتمند)، و همین باعث میشه بتونیم به راحتی WebSocket رو پیادهسازی کنیم.
🛠 چطوری WebSocket رو تو FastAPI پیادهسازی کنیم؟
برای شروع، باید از کلاس
WebSocket
تو FastAPI استفاده کنیم. بیاین با یه مثال ساده شروع کنیم:from fastapi import FastAPI, WebSocket
app = FastAPI()
@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
await websocket.accept()
while True:
data = await websocket.receive_text()
await websocket.send_text(f"پیامت این بود: {data}")
تو این کد:
یه endpoint به اسم /ws
ساختیم.
وقتی کلاینت بهش وصل میشه، سرور با accept()
ارتباط رو قبول میکنه.
بعدش تو یه حلقه پیامهای کلاینت رو میگیره و همونو برمیگردونه.
به این میگن یه Echo Server ساده هر چی کلاینت بفرسته، سرور عینشو برمیگردونه.
📡 یه مثال پیشرفتهتر: چت روم با WebSocket
حالا بیاین یه چیز باحالتر بسازیم، مثلاً یه چت روم که چندتا کلاینت بتونن بهش وصل بشن و پیامهاشون رو به هم بفرستن. برای این کار، باید اتصالهای فعال رو مدیریت کنیم. یه کلاس به اسم ConnectionManager
میسازیم که لیست اتصالها رو نگه داره و بتونیم بهشون پیام بفرستیم یا به همه
broadcast کنیم.
from fastapi import FastAPI, WebSocket
from typing import List
app = FastAPI()
class ConnectionManager:
def __init__(self):
self.active_connections: List[WebSocket] = []
async def connect(self, websocket: WebSocket):
await websocket.accept()
self.active_connections.append(websocket)
def disconnect(self, websocket: WebSocket):
self.active_connections.remove(websocket)
async def send_personal_message(self, message: str, websocket: WebSocket):
await websocket.send_text(message)
async def broadcast(self, message: str):
for connection in self.active_connections:
await connection.send_text(message)
manager = ConnectionManager()
@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
await manager.connect(websocket)
try:
while True:
data = await websocket.receive_text()
await manager.send_personal_message(f"تو نوشتی: {data}", websocket)
await manager.broadcast(f"یکی گفت: {data}")
except Exception as e:
print(f"خطا: {e}")
finally:
manager.disconnect(websocket)
اینجا چی داریم؟
ConnectionManager یه کلاسه که اتصالهای فعال رو تو یه لیست نگه میداره.
وقتی کلاینت وصل میشه، به لیست اضافه میشه (connect) و وقتی قطع میشه، حذف میشه (disconnect).
send_personal_message به یه کلاینت خاص پیام میفرسته.
broadcast به همه کلاینتهای وصلشده پیام رو میفرسته.
تو endpoint، پیام کلاینت رو میگیریم، به خودش یه جواب شخصی میدیم و به بقیه هم broadcast میکنیم.
جمعبندی ✍
WebSocket تو FastAPI به شما این امکان رو میده که اپلیکیشنهای realtime و جذاب بسازین. از چت رومها گرفته تا داشبوردهای زنده و بازیهای آنلاین.
خب اینم از این امید وارم مفید بوده باشه :]
#️⃣ #fastapi #backend #python
➖➖➖➖➖➖➖➖➖
🥷 CHANNEL | GROUP
👍11👌5❤3🔥2👏1🤩1
Forwarded from Linux Zone | لینوکس زون
This media is not supported in your browser
VIEW IN TELEGRAM
⚙️کاربرهای سیستم عامل های مختلف:
تجربه ی کار با سیستم عامل های دیگه مثل BSD رو داشتین؟🤔
➖➖➖➖➖➖➖➖➖➖
تجربه ی کار با سیستم عامل های دیگه مثل BSD رو داشتین؟🤔
#️⃣ #linux #bsd #meme
➖➖➖➖➖➖➖➖➖➖
🐧 CHANNEL | GROUP
🤣8
Ninja Learn | نینجا لرن
دوستان کدوم پلتفرم ها رو برای گذاشتن مقاله پیشنهاد میدید؟
احتمالا مقاله هم بزارم
بیشتر راجب تکنولوژی های بروزه که محتوای زیادی براشون نیست.
بیشتر راجب تکنولوژی های بروزه که محتوای زیادی براشون نیست.
👍7👎1
خب خب خب آشنایی با Windows Subsystem for Linux (WSL) 🐧
امروز میخوایم دربارهی یه ابزار کاربردی تو ویندوز حرف بزنیم: Windows Subsystem for Linux یا به اختصار WSL. اگه تا حالا باهاش کار نکردین، حتماً این پست رو بخونین، چون قراره کلی چیزای جدید یاد بگیرین
🧠 WSL چیه؟
Windows Subsystem for Linux (WSL) یه ویژگی تو ویندوز ۱۰ و ۱۱ هست که به شما اجازه میده یه محیط لینوکس رو مستقیماً روی ویندوز اجرا کنین. یعنی میتونین دستورات لینوکس رو اجرا کنین، فایلهای لینوکس رو مدیریت کنین و حتی برنامههای لینوکسی رو اجرا کنین، همه اینا بدون اینکه نیاز به ماشین مجازی یا دوال بوت داشته باشین. این ابزار برای توسعهدهندهها، به خصوص کسایی که با پروژههای open source کار میکنن، خیلی مفیده چون منابع کمتری نسبت به یه ماشین مجازی کامل مصرف میکنه و کار باهاش خیلی راحتتره.
📚 نسخههای WSL
WSL دو نسخه داره که هر کدوم ویژگیهای خاص خودشون رو دارن:
1️⃣ WSL 1:
این نسخه سال ۲۰۱۶ معرفی شد و یه لایهی سازگاری بود که از کرنل ویندوز برای اجرای برنامههای لینوکسی استفاده میکرد. ولی چون از کرنل لینوکس واقعی استفاده نمیکرد، بعضی وقتها محدودیتهایی داشت.
2️⃣ WSL 2:
این نسخه سال ۲۰۱۹ اومد و یه کرنل لینوکس واقعی رو تو یه ماشین مجازی سبک اجرا میکنه. به همین خاطر، عملکرد و سازگاری بهتری داره، به خصوص تو عملیات سنگین مثل کار با فایلها.
WSL 2 از تکنولوژی Hyper-V (یه سیستم مجازیسازی تو ویندوز) استفاده میکنه و به همین دلیل توصیه میشه ازش استفاده کنین، چون امکانات بیشتری داره و سریعتره.
🚀 نصب WSL
نصب WSL خیلی سادست و بسته به نسخهی ویندوزتون فرق میکنه:
تو ویندوز ۱۱:
WSL به صورت پیشفرض نصب شده، ولی باید یه توزیع لینوکس (مثل Ubuntu یا Debian) رو از Microsoft Store دانلود و نصب کنین.
تو ویندوز ۱۰:
باید WSL رو دستی نصب کنین. برای این کار، PowerShell رو با دسترسی Administrator باز کنین و دستور زیر رو اجرا کنین:
این دستور WSL رو همراه با یه توزیع پیشفرض (معمولاً Ubuntu) نصب میکنه. اگه میخواین توزیع دیگهای نصب کنین، از این دستور استفاده کنین:
مثلاً برای نصب Debian:
WSL از توزیعهای مختلفی مثل Ubuntu، Debian، Kali و Fedora پشتیبانی میکنه که میتونین هر کدوم رو که دوست دارین انتخاب کنین.
🛠 استفاده از WSL
با WSL، میتونین یه محیط توسعهی کامل لینوکس رو تو ویندوز داشته باشین. چند تا مثال از کارایی که میتونین بکنین:
دستورات لینوکس:
از دستوراتی مثل
ویرایشگرهای متنی:
میتونین از Vim، Emacs یا حتی VS Code با افزونهی WSL کار کنین.
ابزارهای توسعه: Git، Docker، Node.js و خیلی چیزای دیگه رو نصب و استفاده کنین.
سرورهای وب:
میتونین سرورهایی مثل Apache یا Nginx رو تو WSL اجرا کنین و با مرورگر ویندوز بهشون دسترسی داشته باشین.
📂 دسترسی به فایلها
یکی از ویژگیهای جذاب WSL اینه که میتونین بین ویندوز و لینوکس فایلهاتون رو به اشتراک بذارین:
از WSL به ویندوز:
فایلهای ویندوز تو مسیر
از ویندوز به WSL:
فایلهای لینوکس رو میتونین تو File Explorer ویندوز از مسیر
برای عملکرد بهتر، پیشنهاد میشه فایلهای پروژهتون رو تو فایلسیستم لینوکس (نه درایو ویندوز) نگه دارین، به خصوص اگه از WSL 2 استفاده میکنین.
🔍 نکات و ترفندها
عملکرد بهتر با WSL 2:
WSL 2 به خاطر استفاده از کرنل واقعی لینوکس و Hyper-V، تو عملیات سنگین مثل کار با فایلها خیلی بهتر عمل میکنه.
مدیریت توزیعها:
میتونین چند تا توزیع لینوکس نصب کنین و با دستور
بینشون جابهجا بشین.
بهروزرسانی WSL:
برای آپدیت کردن WSL، از این دستور استفاده کنین:
دسترسی به GPU:
WSL 2 از GPU پشتیبانی میکنه که برای کارهای ماشین لرنینگ یا گرافیکی عالیه.
محدودیتها:
WSL از systemd پشتیبانی نمیکنه، که ممکنه برای بعضی سرویسها مشکلساز باشه، ولی راهحلهای غیررسمی برای این موضوع وجود داره.
✍️ جمعبندی
Windows Subsystem for Linux (WSL) یه ابزار فوقالعادهست که به شما اجازه میده ویندوز و لینوکس رو با هم داشته باشین. چه توسعهدهنده باشین، چه فقط بخواین لینوکس رو امتحان کنین، WSL یه راه سریع و ساده برای این کاره.
➖➖➖➖➖➖➖➖➖
امروز میخوایم دربارهی یه ابزار کاربردی تو ویندوز حرف بزنیم: Windows Subsystem for Linux یا به اختصار WSL. اگه تا حالا باهاش کار نکردین، حتماً این پست رو بخونین، چون قراره کلی چیزای جدید یاد بگیرین
🧠 WSL چیه؟
Windows Subsystem for Linux (WSL) یه ویژگی تو ویندوز ۱۰ و ۱۱ هست که به شما اجازه میده یه محیط لینوکس رو مستقیماً روی ویندوز اجرا کنین. یعنی میتونین دستورات لینوکس رو اجرا کنین، فایلهای لینوکس رو مدیریت کنین و حتی برنامههای لینوکسی رو اجرا کنین، همه اینا بدون اینکه نیاز به ماشین مجازی یا دوال بوت داشته باشین. این ابزار برای توسعهدهندهها، به خصوص کسایی که با پروژههای open source کار میکنن، خیلی مفیده چون منابع کمتری نسبت به یه ماشین مجازی کامل مصرف میکنه و کار باهاش خیلی راحتتره.
📚 نسخههای WSL
WSL دو نسخه داره که هر کدوم ویژگیهای خاص خودشون رو دارن:
1️⃣ WSL 1:
این نسخه سال ۲۰۱۶ معرفی شد و یه لایهی سازگاری بود که از کرنل ویندوز برای اجرای برنامههای لینوکسی استفاده میکرد. ولی چون از کرنل لینوکس واقعی استفاده نمیکرد، بعضی وقتها محدودیتهایی داشت.
2️⃣ WSL 2:
این نسخه سال ۲۰۱۹ اومد و یه کرنل لینوکس واقعی رو تو یه ماشین مجازی سبک اجرا میکنه. به همین خاطر، عملکرد و سازگاری بهتری داره، به خصوص تو عملیات سنگین مثل کار با فایلها.
WSL 2 از تکنولوژی Hyper-V (یه سیستم مجازیسازی تو ویندوز) استفاده میکنه و به همین دلیل توصیه میشه ازش استفاده کنین، چون امکانات بیشتری داره و سریعتره.
🚀 نصب WSL
نصب WSL خیلی سادست و بسته به نسخهی ویندوزتون فرق میکنه:
تو ویندوز ۱۱:
WSL به صورت پیشفرض نصب شده، ولی باید یه توزیع لینوکس (مثل Ubuntu یا Debian) رو از Microsoft Store دانلود و نصب کنین.
تو ویندوز ۱۰:
باید WSL رو دستی نصب کنین. برای این کار، PowerShell رو با دسترسی Administrator باز کنین و دستور زیر رو اجرا کنین:
wsl --install
این دستور WSL رو همراه با یه توزیع پیشفرض (معمولاً Ubuntu) نصب میکنه. اگه میخواین توزیع دیگهای نصب کنین، از این دستور استفاده کنین:
wsl --install -d <Distribution Name>
مثلاً برای نصب Debian:
wsl --install -d Debian
WSL از توزیعهای مختلفی مثل Ubuntu، Debian، Kali و Fedora پشتیبانی میکنه که میتونین هر کدوم رو که دوست دارین انتخاب کنین.
🛠 استفاده از WSL
با WSL، میتونین یه محیط توسعهی کامل لینوکس رو تو ویندوز داشته باشین. چند تا مثال از کارایی که میتونین بکنین:
دستورات لینوکس:
از دستوراتی مثل
ls
(البته تو لینوکس dir
نیست، اینجا منظورم ls
-مانندها بود)، grep
،
awk
و غیره استفاده کنین.ویرایشگرهای متنی:
میتونین از Vim، Emacs یا حتی VS Code با افزونهی WSL کار کنین.
ابزارهای توسعه: Git، Docker، Node.js و خیلی چیزای دیگه رو نصب و استفاده کنین.
سرورهای وب:
میتونین سرورهایی مثل Apache یا Nginx رو تو WSL اجرا کنین و با مرورگر ویندوز بهشون دسترسی داشته باشین.
📂 دسترسی به فایلها
یکی از ویژگیهای جذاب WSL اینه که میتونین بین ویندوز و لینوکس فایلهاتون رو به اشتراک بذارین:
از WSL به ویندوز:
فایلهای ویندوز تو مسیر
/mnt/c
(یا /mnt/d
برای درایوهای دیگه) قابل دسترسی هستن.از ویندوز به WSL:
فایلهای لینوکس رو میتونین تو File Explorer ویندوز از مسیر
\\wsl$\<Distribution Name>
ببینین.برای عملکرد بهتر، پیشنهاد میشه فایلهای پروژهتون رو تو فایلسیستم لینوکس (نه درایو ویندوز) نگه دارین، به خصوص اگه از WSL 2 استفاده میکنین.
🔍 نکات و ترفندها
عملکرد بهتر با WSL 2:
WSL 2 به خاطر استفاده از کرنل واقعی لینوکس و Hyper-V، تو عملیات سنگین مثل کار با فایلها خیلی بهتر عمل میکنه.
مدیریت توزیعها:
میتونین چند تا توزیع لینوکس نصب کنین و با دستور
wsl -d <Distribution Name>
بینشون جابهجا بشین.
بهروزرسانی WSL:
برای آپدیت کردن WSL، از این دستور استفاده کنین:
wsl --update
دسترسی به GPU:
WSL 2 از GPU پشتیبانی میکنه که برای کارهای ماشین لرنینگ یا گرافیکی عالیه.
محدودیتها:
WSL از systemd پشتیبانی نمیکنه، که ممکنه برای بعضی سرویسها مشکلساز باشه، ولی راهحلهای غیررسمی برای این موضوع وجود داره.
✍️ جمعبندی
Windows Subsystem for Linux (WSL) یه ابزار فوقالعادهست که به شما اجازه میده ویندوز و لینوکس رو با هم داشته باشین. چه توسعهدهنده باشین، چه فقط بخواین لینوکس رو امتحان کنین، WSL یه راه سریع و ساده برای این کاره.
#️⃣ #porgramming #wsl #linux #windows
➖➖➖➖➖➖➖➖➖
🥷 CHANNEL | GROUP
👍10❤2❤🔥1👌1
خب خب خب
اولین مقاله من که توی سایت medium پابلیش شد
(نسخه فارسیشم احتمالا یا تو خود مدیوم یا توی ویرگول میزارم)
خیلی خلاصه بخوام بگم
امید وارم مفید واقع بشه 😊
(اگه مشکلی دیدید یا پیشنهادی داشتید میتونید توی کامنتای خود مقاله بهم بگید)
🔗 لینک مقاله
و از این لینک هم میتونید مطالعه کنید
➖➖➖➖➖➖➖➖➖
اولین مقاله من که توی سایت medium پابلیش شد
(نسخه فارسیشم احتمالا یا تو خود مدیوم یا توی ویرگول میزارم)
خیلی خلاصه بخوام بگم
یه بست پرکتیسه برای ساختار فایل بندی پروژتون
امید وارم مفید واقع بشه 😊
(اگه مشکلی دیدید یا پیشنهادی داشتید میتونید توی کامنتای خود مقاله بهم بگید)
🔗 لینک مقاله
و از این لینک هم میتونید مطالعه کنید
#️⃣ #refrence
➖➖➖➖➖➖➖➖➖
🥷 CHANNEL | GROUP
Medium
Structuring a FastAPI Project: Best Practices
FastAPI is a powerful and efficient web framework for building APIs with Python. However, as projects grow, organizing the code properly…
🤩14🔥7❤4👏3❤🔥1👍1👌1
Ninja Learn | نینجا لرن
خب خب خب اولین مقاله من که توی سایت medium پابلیش شد (نسخه فارسیشم احتمالا یا تو خود مدیوم یا توی ویرگول میزارم) خیلی خلاصه بخوام بگم یه بست پرکتیسه برای ساختار فایل بندی پروژتون امید وارم مفید واقع بشه 😊 (اگه مشکلی دیدید یا پیشنهادی داشتید میتونید توی…
موقت:
متاسفانه پلتفرم فارسی مناسبی برای مقالات توی این سبکی پیدا نکردم :)
احتمالا مقالات بصورت انگلیسی کلا منتشر شه مگر اینکه پلتفرم خوبی پیدا کنم
متاسفانه پلتفرم فارسی مناسبی برای مقالات توی این سبکی پیدا نکردم :)
احتمالا مقالات بصورت انگلیسی کلا منتشر شه مگر اینکه پلتفرم خوبی پیدا کنم
👍8💔2🤣1
Ninja Learn | نینجا لرن pinned «خب خب خب اولین مقاله من که توی سایت medium پابلیش شد (نسخه فارسیشم احتمالا یا تو خود مدیوم یا توی ویرگول میزارم) خیلی خلاصه بخوام بگم یه بست پرکتیسه برای ساختار فایل بندی پروژتون امید وارم مفید واقع بشه 😊 (اگه مشکلی دیدید یا پیشنهادی داشتید میتونید توی…»
خب سلام دوستان 👋
هرکسی که میخواد توی پروژه های اوپن سورس Diramid (تیم توسعه نرم افزار های اوپن سورس) شرکت کنه
میتونه عضو این گروه بشه
https://t.iss.one/+WpLLMkght6w1ZDU0
برای هر پروژه یک تاپیک زده شده.
و توجه داشته باشید این گروه جای چت و گپ زدن نیست.
قبل از عضو شدن اگر مطمئن هستید که میخواید کمک کنید عضو بشید.
با تشکر از همه ی شما عزیزان ❤️
هرکسی که میخواد توی پروژه های اوپن سورس Diramid (تیم توسعه نرم افزار های اوپن سورس) شرکت کنه
میتونه عضو این گروه بشه
https://t.iss.one/+WpLLMkght6w1ZDU0
برای هر پروژه یک تاپیک زده شده.
و توجه داشته باشید این گروه جای چت و گپ زدن نیست.
قبل از عضو شدن اگر مطمئن هستید که میخواید کمک کنید عضو بشید.
با تشکر از همه ی شما عزیزان ❤️
🥷 CHANNEL | GROUP
Telegram
Diramid
Mohammad invites you to join this group on Telegram.
👍7