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
خیلی ممنون که تابه امروز کنارم بودید :)❤️

اگه نمیدونید چیه امار چنلمونه تواین مدتی که فعالیت میکنم

اینم لینک رباته برای گرفتن امار 👇
@telemetr_io_bot


🔆 CHANNEL | GROUP
17🤩1
😂😂


🔆 CHANNEL | GROUP
🤣161👍1🔥1
واقعا نفهمیدیم کی ۲۰۲۴ تموم شد هعیییییی
👍22
پست پیشنهادیتون چیه دوستان؟
(لطفا پیشنهادات مثل سری پیش خفن باشه)
🔥6
خب خب خب Django Channels چیه؟ و چرا من ازش خوشم نمیاد

قبل از اینکه با هم بریم سراغ Django Channels، یه کم درباره WebSocket بگیم که اصلاً بدونیم داریم درباره چی حرف می‌زنیم. خب، WebSocket یه پروتکل که بهت اجازه میده ارتباط دوطرفه و دائمی بین کلاینت و سرور داشته باشی. یعنی چی؟ یعنی مثلاً تو یه اپلیکیشن چت، به جای اینکه هر چند ثانیه یه بار درخواست بفرستی "چیزی جدید اومده؟"، سرور خودش هر وقت یه پیام جدید داشت، بلافاصله می‌فرسته سمتت 🚀.

حالا Django Channels چی میگه؟ 🤔
ـDjango Channels یه ابزار تو اکوسیستم Djangoئه که میاد پشتیبانی از WebSocket، پروتکل‌های real-time و کارای async رو به پروژه‌هات اضافه می‌کنه. به زبان ساده، اگه Django عادی رو یه "خیابون یک‌طرفه" فرض کنیم، Channels میاد این خیابون رو دوطرفه می‌کنه. این یعنی می‌تونی کارایی مثل:

چت real-time 💬


نوتیفیکیشن‌های فوری 🔔


استریم داده (مثل قیمت‌های ارز دیجیتال) 📈


و...

رو خیلی راحت‌تر با Django انجام بدی.

خب پس مشکلش چیه؟ چرا من ازش خوشم نمیاد؟ 🤷‍♂️

از دور که نگاه می‌کنی، Channels خیلی جذاب به نظر میاد، ولی وقتی می‌خوای باهاش کارکنی، مشکلات خودش رو نشون میده:

1⃣ پیچیدگی توی تنظیمات 😵‍💫
ـDjango همیشه به خاطر سادگی معروف بوده، ولی Channels میاد این سادگی رو خراب می‌کنه خیلی خراب میکنه. باید ASGI رو راه بندازی، Redis نصب کنی، routing یاد بگیری، و کلی تنظیمات دیگه انجام بدی. یه پروژه ساده که با Django راحت بود، یهو برات میشه یه جنگل از تنظیمات.

نکته: از Django 4.0 به بعد، پشتیبانی از ASGI مستقیم داخل هسته Django اومده، پس برای پروژه‌های ساده شاید نیاز نباشه کل پروژه رو وابسته به Channels کنی.

2⃣ وابستگی به Redis 🤦‍♂️
یکی از مشکلات بزرگ Channels اینه که برای مدیریت eventها و ارتباط‌ها حتماً نیاز به Redis داره. خب چرا؟ دلیلش اینه که Redis به‌عنوان message broker استفاده میشه تا پیام‌ها بین کلاینت‌ها و سرور مدیریت بشه. ولی اگه پروژه کوچیک باشه، این وابستگی می‌تونه دردسرساز بشه.

جایگزین: می‌تونی از RabbitMQ یا حتی راه‌حل‌های ساده‌تر مثل In-Memory Layers برای پروژه‌های سبک استفاده کنی.


3⃣ محدودیت توی scale کردن 😩
اگه پروژه کوچیک باشه، Channels بد نیست. ولی وقتی تعداد کاربران زیاد میشه و حجم درخواست‌ها بالا میره، Channels سریع از نفس می‌افته. این محدودیت بیشتر به خاطر پیچیدگی WebSocket و محدودیت‌های سرورهای تک رشته ای هست تا خود Channels. برای پروژه‌های بزرگ و real-time محور، ابزارای دیگه‌ای مثل Socket.IO یا FastAPI خیلی بهتر عمل می‌کنن.

4⃣ مشکلات performance 🚨
حتی اگه پروژه خیلی هم بزرگ نباشه، Channels برای real-time پروژه‌های سنگین خوب عمل نمی‌کنه. کارای پیچیده async و ارتباطات real-time می‌تونن سرور رو داغون کنن. البته با تنظیم درست workerها و Redis channel layers می‌تونی بخشی از این مشکلات رو کم کنی، ولی باز هم کار اضافه‌ست.

5⃣ کمبود مستندات و منابع آموزشی درست و حسابی 📚
یکی دیگه از مشکلات اینه که منابع آموزشی کامل و به‌روزی برای Channels خیلی کمه. هر وقت گیر کنی، یا باید بری توی GitHub دنبال issueها، یا دست به دامن دیگران بشی. این باعث میشه زمان زیادی صرف حل مشکلات کنی.

خب حالا راه‌حل چیه؟ 💡
اگه بخوای real-time کار کنی، اینا می‌تونن گزینه‌های بهتری باشن:

ـFastAPI: اگه دنبال سرعت، سادگی و پرفورمنس خوب هستی، FastAPI انتخاب فوق‌العاده‌ایه. با WebSocket خیلی راحت کار می‌کنه و خبری از دردسرای Channels نیست 🚀.

ـSocket.IO: این یکی برای پروژه‌های real-time شاهکاره. خیلی ابزارای متنوع داره و با Node.js هم عالی مچ میشه.


جمع‌بندی 🎯
ـDjango Channels می‌تونه برای پروژه‌های کوچیک و ساده مناسب باشه، ولی اگه بحث scale، پرفورمنس یا راحتی کار مطرح باشه، اصلاً گزینه خوبی نیست. من از پیچیدگی‌ها و محدودیت‌هاش خسته شدم و به جای اون سراغ ابزارای دیگه رفتم.
نظر تو چیه؟ Django Channels تا حالا اذیتت کرده یا ازش خوشت میاد؟ بگو ببینم چی تو ذهنت می‌گذره🧐


#programming #web #django



🔆 CHANNEL | GROUP
👍251👎1
پست بعدی یکم راجب کامپایلر صحبت کنم؟
👍23👎2
از محتوای کانال راضی هستید؟
Anonymous Poll
84%
بله 😃
8%
خیر 🫤
8%
تو کامنتا میگم 💬
6
Ninja Learn | نینجا لرن
از محتوای کانال راضی هستید؟
دوستان اگه عیبی هست بگید درستش کنم
نظراتتون خیلی ارزشمنده برام
8
درک نمیکنم چرا یه کورس خوب برای Fastapi نباید باشه 🙄
👍23🤣2
دوستان ممنون میشم شیر بکنید پستارو :) ❤️
خیلی وقت عضو جدید نداشتیم.
18🤣1
خب خب خب Sentry چیه؟ 🔍

اگه برنامه نویسی میکنی احتمالاً این سناریو برات آشناست:
کلی وقت می‌ذاری، کد می‌نویسی، تست می‌کنی، همه‌چی درست کار می‌کنه. ولی وقتی می‌دی دست کاربر، یهو یه ارور عجیب غریب میاد که اصلاً نمی‌دونی از کجا دراومده اینجاست که Sentry وارد بازی میشه.

ـSentry چیه اصلاً؟
ـSentry یه ابزار خطایاب (Error Tracking) که کمک می‌کنه باگ‌ها و خطاهای پروژه‌ت رو همون لحظه‌ای که اتفاق میفتن، پیدا کنی.
این ابزار نه‌تنها ارورها رو جمع‌آوری می‌کنه، بلکه یه گزارش دقیق و کامل ازشون می‌ده؛ از جزئیات خطا گرفته تا شرایطی که باعث شده ارور پیش بیاد.
فرض کن یه باگ تو اپلیکیشن‌ ته که اصلاً قابل پیش‌بینی نبوده. به‌جای اینکه کاربر بیاد غر بزنه یا خودت بری تو لاگ‌ها دنبال مشکل بگردی، Sentry خودش ارور رو تشخیص می‌ده و گزارشش رو مستقیم برات می‌فرسته.

چرا Sentry محبوبه؟ 🌟
1⃣ گزارش ارور دقیق و کاربردی 🛠️
وقتی یه ارور اتفاق میفته، Sentry دقیقاً بهت میگه مشکل کجاست. جزئیاتی مثل:
فایل و خط کدی که ارور داده
نوع خطا (Exception)
اطلاعات مرورگر یا دستگاه کاربر
وضعیت سرور (مثلاً رم و CPU)
حتی مراحل درخواست کاربر تا لحظه‌ای که ارور رخ داده

2⃣ پشتیبانی از پلتفرم‌های مختلف 📱
هرچی فکرش رو بکنی، Sentry ساپورتش میکنه.
Backend: Python (جنگو، فلاسک و ...)، Node.js
Frontend: React، Vue.js
Mobile: اندروید و iOS
DevOps: Docker، Kubernetes


3⃣ دسته‌بندی ارورها 🗂️
وقتی تعداد ارورها زیاد بشه، Sentry اونا رو گروه‌بندی می‌کنه. مثلاً یه باگ اگه صد بار اتفاق بیفته، همشون رو زیر یه گزارش می‌ذاره که بتونی راحت مدیریت کنی.

4⃣ هشدار و نوتیفیکیشن 🔔

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


5⃣ـ Release Tracking 🚀
یه قابلیت جالبش اینه که می‌تونی ارورها رو به نسخه‌های پروژت وصل کنی و بفهمی کدوم تغییرات باعث مشکل شده.


6⃣ـPerformance Monitoring
علاوه بر ارورها، می‌تونی بفهمی اپلیکیشن کجاها کنده.


چطور از Sentry استفاده کنیم؟
ثبت‌نام کن:
تو سایت Sentry.io یه اکانت بساز. نسخه رایگانش برای شروع کافیه.

نصب کن:
ـSDK مخصوص زبان پروژه‌ت رو نصب کن. مثلاً برای Django این دستور کافیه:
 pip install sentry-sdk 

تنظیمش کن:
با چند خط کد ساده Sentry رو به پروژه وصل کن:
import sentry_sdk
sentry_sdk.init(
dsn="لینک DSN که Sentry می‌ده",
traces_sample_rate=1.0
)

ارورها رو مدیریت کن:
حالا هر اروری اتفاق بیفته، مستقیم تو داشبورد Sentry میره.

چند نکته مهم:
نسخه رایگان Sentry محدودیت داره (مثلاً تعداد ارورهای ماهانه). برای پروژه‌های بزرگ باید پلن‌های پولیش رو بگیری.
می‌تونی از مستندات رسمی کمک بگیری تا تنظیمات حرفه‌ای‌تر انجام بدی.

جمع‌بندی
اگه می‌خوای ارورهای پروژه‌ت رو حرفه‌ای مدیریت کنی و حتی قبل از اینکه کاربر بفهمه، خودت رفعشون کنی، Sentry بهترین انتخابه. هم راحت نصب میشه، هم کلی قابلیت خفن داره.
تا حالا از Sentry استفاده کردی؟ نظرت چیه؟ 👀

#programming #python #sentry



🔆 CHANNEL | GROUP
17
میخوام شروع کنم درمورد golang هم پست بزارم
👍50👎33🔥32🤣1
Ninja Learn | نینجا لرن
میخوام شروع کنم درمورد golang هم پست بزارم
چرا ؟
ـGo که خیلی خوبه 🤔
اونایی که گفتن نه دوست دارم دلیلشون رو بدونم
2👎1
Ninja Learn | نینجا لرن
میخوام شروع کنم درمورد golang هم پست بزارم
نسبت به راعی اکثریت عمل میکنم
اگه 👎
درمورد همون پایتون و اینا پست میزارم
اگه 👍
درمورد go هم پست میزارم

(روی این پست ریکشن نزنید روی همون پستی که ریپلای زدم ریکشن بزنید)
👍36👎11👌2
سال نو شد
کریسمس رو به مسیحی های کانال تبریک میگم 😂❤️
🤣18👍7👎3🔥3
خب خب خب پکیج fmt در go

این پکیج (fmt) یکی از پراستفاده‌ترین و مهم‌ترین ابزارهای Go هست که برای کار با ورودی و خروجی‌ها استفاده میشه. بیاین ببینیم چطور کار می‌کنه.

توابع پرکاربرد fmt 🛠️
پکیج fmt یه سری توابع داره که هر کدوم برای هدف خاصی طراحی شدن. مهم‌ترینشون رو اینجا لیست کردم:

1⃣ Print و Println
برای چاپ اطلاعات روی کنسول:
ـPrint: متن‌ها رو بدون فاصله چاپ می‌کنه.

ـPrintln: بین متن‌ها فاصله می‌ذاره و یه خط جدید اضافه می‌کنه.


fmt.Print("Hello") fmt.Print("World") fmt.Println("Hello") fmt.Println("World") 

Output:
HelloWorld 
Hello
World

2⃣ Printf
برای چاپ با فرمت خاص:
name := "Ali"
age := 20 fmt.Printf(
"Name: %s,
Age: %d\n",
name, age
)

Output:
Name: Ali, Age: 20 

3⃣ Sprintf
مثل Printf عمل می‌کنه، ولی خروجی رو به جای چاپ، به صورت رشته برمی‌گردونه:

name := "Ali"
greeting := fmt.Sprintf(
"Hello,
%s!",
name
)
fmt.Println(greeting)

Output:
Hello, Ali! 

4⃣ Fprintf
اطلاعات رو به جای کنسول، به فایل یا هر io.Writer دیگه‌ای می‌فرسته:
file, _ := os.Create("output.txt")  
fmt.Fprintf(file, "Hello, %s!", "File")

5⃣ Scan و Scanf
برای گرفتن ورودی از کاربر:
ـScan: ورودی ساده رو می‌خونه.

ـScanf: ورودی رو با فرمت مشخص می‌خونه.


var name string  
fmt.Println("Enter your name:")
fmt.Scanln(&name)
fmt.Println("Your name is:", name)

var age int
fmt.Println("Enter your age:")
fmt.Scanf("%d", &age)
fmt.Println("Your age is:", age)

Output (Example input: "Ali", "20"):
Enter your name:
Your name is: Ali
Enter your age:
Your age is: 20

پشت پرده fmt: چطور کار می‌کنه؟ 🧐
حالا که با توابع آشنا شدی، بد نیست بدونی fmt پشت صحنه چطور داده‌ها رو مدیریت می‌کنه.

1⃣ استفاده از Interfaces
ـfmt از دو اینترفیس مهم استفاده می‌کنه:

ـStringer:
اگه struct این اینترفیس رو پیاده‌سازی کرده باشه، متد String() برای چاپ خروجی فراخوانی میشه.
ـError:
برای ارورها، متد Error() فراخوانی میشه.


مثال:
type Person struct {  
Name string
Age int
}

func (p Person) String() string {
return fmt.Sprintf("Name: %s, Age: %d", p.Name, p.Age)
}

func main() {
person := Person{"Ali", 20}
fmt.Println(person)
}

Output:
Name: Ali, Age: 20

2⃣ـ Reflection
پکیج fmt از پکیج reflect استفاده می‌کنه تا نوع داده‌ها رو در زمان اجرا بررسی کنه. یعنی وقتی %v یا سایر placeholders رو استفاده می‌کنی، fmt می‌تونه بفهمه چه نوع داده‌ای داری و چطور باید چاپش کنه.
x := 42  
fmt.Printf("Type: %T, Value: %v\n", x, x)

Output:
Type: int, Value: 42 

فرمت‌دهی داده‌ها با fmt 🎨
پکیج fmt قابلیت‌های فرمت‌دهی خیلی خوبی داره که بیشتر اوقات به کار میان:
اعداد
%d: عدد صحیح

%f: عدد اعشاری

%.2f: عدد اعشاری با 2 رقم اعشار

%b: نمایش در مبنای 2

%x: نمایش در مبنای 16


num := 42  
pi := 3.14159
fmt.Printf("Decimal: %d, Binary: %b, Hex: %x, Pi: %.2f\n", num, num, num, pi)

Output:
Decimal: 42, Binary: 101010, Hex: 2a, Pi: 3.14

رشته‌ها
%s: نمایش رشته

%q: رشته با کوتیشن

%+v: struct با نام فیلدها

%v: مقدار خام


type Person struct {  
Name string
Age int
}
p := Person{"Ali", 20}
fmt.Printf("Raw: %v, With Fields: %+v\n", p, p)

Output:
Raw: {Ali 20}, With Fields: {Name:Ali Age:20}

منطق (Boolean)
%t: مقدار True یا False رو چاپ می‌کنه.


isGoAwesome := true  
fmt.Printf("Is Go awesome? %t\n", isGoAwesome)

Output:
Is Go awesome? true 

جمع‌بندی
پکیج fmt یکی از ابزارهای قدرتمند Go هست که با توابع ساده و قابلیت‌های فرمت‌دهی پیشرفته، کار برنامه‌نویسا رو راحت کرده.

#programming #go



🔆 CHANNEL | GROUP
👍15👎91