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

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

👥 ɢʀᴏᴜᴘ: https://t.iss.one/+td1EcO_YfSphNTlk
Download Telegram
Ninja Learn | نینجا لرن pinned «یکی از اعضای کامیونیتی سایت عالی رو معرفی کرده بود که منم تصمیم گرفتم توی کانالم بهتون معرفی کنم. وبسایت CodeCrafters (لینک زیر) مجموعه‌ای از پروژه‌های برنامه‌نویسی رو ارائه می‌ده که می‌تونید با توجه به سطح مهارت فعلی‌تون، پروژه‌هایی با سختی‌های مختلف انتخاب…»
خب خب خب ورژن‌بندی اپلیکیشن‌ها چیه؟ 📌

احتمالاً توی پروژه‌ها دیدی که نسخه نرم‌افزارها یه چیزی مثل 1.2.3 هست. ولی این اعداد چه معنی‌ای دارن؟ آیا یه ورژن 1.2.3 بهتر از 1.2.2ـه؟ بیاید یه بار برای همیشه اینو ببینیم

📌 استاندارد ورژن‌بندی (Semantic Versioning - SemVer)
ساختار استاندارد ورژن‌بندی معنایی (Semantic Versioning) معمولاً این شکلیه:
X.Y.Z 

X (Major - تغییرات بزرگ)
وقتی این عدد تغییر کنه، یعنی کلی چیز عوض شده مثلاً سازگاری عقبگرد (backward compatibility) شکسته شده و ممکنه کدهای قدیمی دیگه کار نکنن یا به عبارتی BREAKING CHANGE به وجود اومده.

Y (Minor - قابلیت‌های جدید)
اگه این عدد تغییر کنه، یعنی قابلیتای جدید اضافه شده ولی همچنان سازگاری با نسخه قبلی حفظ شده.

Z (Patch - رفع باگ‌ها و بهبودها)
فقط باگ فیکس یا بهینه‌سازیای جزئی انجام شده و هیچ قابلیت جدیدی اضافه نشده.

🔹 مثال عملی از ورژن‌بندی
فرض کن داریم روی یه اپلیکیشن کار می‌کنیم:
1.0.0 → نسخه اولیه منتشر شد.
1.1.0 → یه قابلیت جدید مثل ورود با گوگل اضافه شد.
1.1.1 → یه باگ توی صفحه لاگین فیکس شد.
2.0.0ساختار دیتابیس عوض شد و نسخه‌های قبلی دیگه کار نمی‌کنن.

🔍 پس کی باید Major، Minor یا Patch رو تغییر بدیم؟
وقتی API رو تغییر دادی و ممکنه کدای قدیمی دیگه کارنکنن؟
‏Major رو ببر بالا 🚀

یه فیچر جدید اضافه کردی ولی چیزی از قبل به مشکل نمیخوره؟
‏Minor رو ببر بالا 📈

فقط یه باگ کوچیک فیکس کردی؟
‏Patch رو ببر بالا 🛠️

🔹 انواع مختلف ورژن بندی؟
گاهی وقتا می‌بینی که ورژنا این شکلیه:
🔸1.2.3-alpha → نسخه آزمایشی (قبل از انتشار اصلی)

🔸 1.2.3-beta → نسخه بتا، برای تست کاربرا
🔸 1.2.3-rc1 → نسخه Release Candidate که تقریباً آماده است

جمع‌بندی
ورژن‌بندی معنایی باعث میشه بفهمیم یه نسخه چقدر تغییر کرده و آیا آپدیتش برای ما مشکلی ایجاد می‌کنه یا نه.

#️⃣ #programming #backend



🥷 CHANNEL | GROUP
👌18👍1
🐧کانال لینوکس زون | برای عاشقان لینوکس و دنیای نرم افزار متن باز🗃

🚀 چی قراره یاد بگیریم؟
🛠 دستورات، ترفندها و آموزش‌های حرفه‌ای لینوکس

⚡️ بهینه‌سازی و مدیریت سرورهای لینوکسی

📦 معرفی ابزارها و تکنولوژی‌های متن‌باز 

🔐 امنیت، شبکه و مفاهیم کلیدی لینوکسی 

💎 اشتراک تجربه‌ها و چالش‌های واقعی دنیای لینوکس

📢 جدیدترین اخبار دنیای نرم افزار آزاد

💡 هر روز یه قدم به حرفه‌ای‌تر شدن نزدیک‌تر شو 

🎯 | Channel: @LinuxZone
💬 | Group: @LinuxZoneGap

⚡️ بزن بریم دنیای لینوکس رو کشف کنیم 🐧🚀
4
روز مهندس مبارک شما نینجاها 🥷❤️
❤‍🔥20
This media is not supported in your browser
VIEW IN TELEGRAM
❤‍🔥4
خب خب خب ارایه ها

تو پست قبلی گفتیم که آرایه یه ساختمان داده‌ی خطی هست که داده‌ها رو پشت سر هم توی حافظه نگه می‌داره. حالا یه حالت دیگه هم داریم که به‌جای خود داده، آدرس (پوینتر) داده ذخیره می‌شه، که بهش لیست پیوندی می‌گیم و توی پست‌های بعدی بهش می‌پردازیم.

چطوری یه آرایه بسازیم؟ 🤔
تو بیشتر زبان‌های برنامه‌نویسی، آرایه‌ها باید نوع داده‌ی یکسانی داشته باشن و معمولا موقع تعریف، نوع داده‌شون مشخص می‌شه. اما تو پایتون این محدودیت وجود نداره و می‌تونیم آرایه‌ای کاملا داینامیک بسازیم:
my_array = [] # آرایه خالی در پایتون 

مثال از C/C++:
int my_array[4]; // آرایه‌ای از ۴ عدد صحیح 

در واقع، لیست‌های پایتون جایگزینی برای آرایه‌ها هستن ولی برای راحتی، بهشون آرایه می‌گیم.

چطور به داده‌های آرایه دسترسی داشته باشیم؟ 👀
در بیشتر زبان‌ها این کار خودکار هندل می‌شه و می‌تونیم به کمک ایندکس داده‌ی موردنظرمون رو بخونیم:
my_array = [1, 2, 3]
print(my_array[2]) # خروجی: 3

ولی به‌طور کلی، آدرس یک عنصر در حافظه این‌جوری حساب می‌شه:
Loc = (سایز هر عنصر × ایندکس) + آدرس شروع آرایه

چطور مقدار آرایه رو تغییر بدیم؟ 🔄

🔹 اضافه کردن مقدار جدید:
my_array.append(4) # اضافه کردن مقدار ۴ به آخر آرایه 

🔹 حذف مقدار خاصی از آرایه:
del my_array[2] # حذف مقدار سوم آرایه

🔹 تغییر مقدار یک خانه:
my_array[0] = 6 # مقدار اولین عنصر رو ۶ می‌کنیم 

سرعت اجرای عملیات‌ها

🔹 خواندن یک مقدار از آرایه:
دسترسی به آرایه‌ها با توجه به فرمول بالا O(1) یعنی ثابت هست، چون مستقیماً به آدرسش توی حافظه دسترسی داریم و با تغییر تعداد داده ها هیج تغییری ایجاد نمیشه.

🔹 اضافه و حذف کردن مقدار:
اگر مقدار رو به آخر آرایه اضافه یا حذف کنیم → O(1)
ولی اگر بخوایم مقدار رو از وسط یا اول آرایه حذف کنیم یا جابه‌جا کنیم، باید همه‌ی مقدارهای بعدی هم جابجا شن که وابسته به تعداد ایتم هامون هست و هر چی بیشتر باشه سرعت پایینتری داریم → O(n)

جمع‌بندی
آرایه یه ساختار داده‌ی خطی برای ذخیره داده‌های مشابهه.
خواندن داده از آرایه خیلی سریع انجام می‌شه.
اضافه/حذف مقدار زمان‌بر هست، مخصوصا اگر تعداد داده‌ها زیاد باشه.
آرایه حافظه‌ی از پیش تخصیص داده‌شده داره، پس ممکنه فضای اضافی هدر بره.
توی پست‌های بعدی میریم سراغ ساختارهای دیگه مثل لیست پیوندی.

#️⃣ #programming #software



🥷 CHANNEL | GROUP
👍112
چرا میگن بگیم "گنو/لینوکس" و نگیم "لینوکس"؟

با یه پست جدید در خدمتتونیم 😊
یکی از صحبت‌هایی که همیشه بین حرفه‌ای و تازه‌کارا شکل می‌گیره اینه که نباید بگیم

لینوکس بلکه باید بگیم گنو/لینوکس.
خب چرا؟
بیاید برگردیم به 1983، زمانی که گنو (GNU) به عنوان یه پروژه اوپن سورس توسط ریچارد استالمن ایجاد شد. هدف اصلیشونم ساخت سیستم عاملی بود که سورس کد مشخص داشته باشه همچنین متن باز، آزاد، سریع و ایمنی باشه.
پروژه گنو شروع کرد به ساختن بخش‌های مختلف سیستم عامل، و خیلی از ابزارها و چیزای مهمی که هنوز بسیار بسیار مهم هستن، مثلا GCC، Bash، emacs، coreutils
اینایی که گفتیم چنتا نمونه از چیزایی بودن که پروژه گنو ساخت.
مثلا coreutils کامندها و دستورات بیسیکی کار با فایل‌ها رو شامل میشه. کامند ls و cp و rm و ... از همین coreutils هستن.
خلاصه که خیلی چیزا ساختن، ولی همچنان یه مشکلی بود...
کرنل که عملا هسته سیستم عامل بود رو نداشتن و کرنل‌های موجود رو هم استفاده نکردن به دلایل دیگه.

میرسیم به 1991، یه دانشجوی فنلاندی به اسم لینوس توروالدز میاد و یه کرنل میسازه و توجه پروژه گنو جمع میشه به این کرنل، یه کرنل اوپن سورس و رایگان که همین قضیه هم باعث میشه جای خالی کرنل توسظ لینوکس پر بشه.

وایسا ببینم، مگه لینوکس سیستم عامل نبود؟
خب باید بگم نه :)))
لینوکس در اصل یه کرنله.

در نهایت ابزارهای گنو و کرنل لینوکس ترکیب میشن و گنو/لینوکس متولد میشه.
با ترکیب این دوتا، اولین توزیع گنو/لینوکسی به وجود میاد تو سال 1993 و اسمشم میشه Slackware
احتمالا خیلیا نمیشناسنش ولی یه نام آشنا در همین زمان به وجود میاد که قطعا میدونم میشناسید :)

و دبیان متولد میشه 😄
پس اگر بگیم لینوکس، عملا داریم بخش عظیمی از سیستم عامل رو که گنو تشکیل میده رو زیر سوال میبریم و بیخیال زحماتش میشیم.
یه سوال دیگه هم پیش میاد:

چرا گنو خودش کرنل ننوشت؟
در اصل گنو هم یه کرنل داره!!
یه میکرو کرنل به اسم Mach که فانکشنالیتی‌های اصلی و هسته رو انجام میده و hurd هم در اصل چیزای high level تر رو انجام میده.

اما خب باید بگم که اگه پشت گوشتون رو دیدید کرنل کامل hurd رو هم خواهید دید 😁
حدود 30 ساله که داره توسعه پیدا میکنه و هنوزم بدرد استفاده نمیخوره و جای کار داره.
و این بود داستان توسعه لینوکس، گنو، و قضیه نامگذاری گنو/لینوکس که بهش پرداختیم.

امیدوارم روز و شب خوبی داشته باشید
با یه قلب خوشگل خوشحالمون کن 🫡❤️

#⃣#gnome #linux



🐧 CHANNEL | GROUP
14👍5👌1
عید نزدیکه و منم میخوام بهتون یه عیدی خفن بدم
بنظرتون چیه ؟ (اونایی مه بهشون گفتم هیچی نگن) 🤫
14
Ninja Learn | نینجا لرن
عید نزدیکه و منم میخوام بهتون یه عیدی خفن بدم بنظرتون چیه ؟ (اونایی مه بهشون گفتم هیچی نگن) 🤫
بزار بگم
قراره کتاب
Boost your DjangoDX


که ادام جانسون نوشته رو براتون بزارم 😁

پ.ن: رایگانشو هیچ جای وب مجاز پیدا نمیکنید 😬
👍26❤‍🔥82👎1🔥1👏1👌1
خب خب خب SMTP چیه؟ 📩

امروز می‌خوام درباره‌ی یه چیز خیلی مهم تو دنیای وب حرف بزنم: SMTP یا همون Simple Mail Transfer Protocol. شاید تا حالا اسمش رو شنیده باشین، ولی دقیقا چیه و چطور کار می‌کنه؟

📨 ‏SMTP چیه؟
‏SMTP یه پروتکل استاندارده که مسئول ارسال ایمیل‌ ها‌هست. اگه ایمیل رو مثل یه نامه در نظر بگیریم، SMTP همون پیک‌پستی‌ایه که نامه‌ت رو از صندوق تو به مقصد می‌رسونه.
این پروتکل تعیین می‌کنه که ایمیل از کجا بیاد، کجا بره و چجوری به درستی تحویل داده بشه.

🛠 چجوری کار می‌کنه؟
وقتی یه ایمیل می‌فرستی، پشت صحنه این اتفاقات میفته:
1️⃣ اتصال به سرور:
کلاینت ایمیل (مثل Gmail یا Outlook) به یه سرور SMTP متصل می‌شه تا ایمیل رو ارسال کنه.


2️⃣ دستورات ارسال می‌شن:

دستوراتی مثل HELO (یا EHLO) اجرا می‌شن تا ارتباط برقرار بشه. بعد، MAIL FROM و RCPT TO مشخص می‌کنن ایمیل از کجا اومده و قراره به کجا بره.

3️⃣ متن ایمیل ارسال می‌شه:
با دستور DATA، متن و جزئیات ایمیل به سرور فرستاده می‌شه. درست مثل وقتی که نامه‌ت رو به پیک‌پست تحویل می‌دی.


4️⃣ تأیید و پایان ارتباط:
بعد از ارسال، سرور یه تأییدیه می‌فرسته و ارتباط قطع می‌شه. این یعنی ایمیل با موفقیت ارسال شده.


🔒 نکات مهم درباره‌ی SMTP
🔹 استاندارد جهانی:
تقریباً همه‌ی سرویس‌های ایمیل از SMTP استفاده می‌کنن، پس یه پروتکل مشترکه.


🔹 امنیت بالا:
بیشتر سرورها از TLS/SSL استفاده می‌کنن تا ایمیل‌ها رمزنگاری بشن و کسی نتونه تو مسیر ارسال، اطلاعات رو بدزده.


🔹 دستورات مهم:
‏HELO, MAIL FROM, RCPT TO, DATA از دستورات کلیدی SMTP هستن که تو پروسه‌ی ارسال اجرا می‌شن.


🔹 احراز هویت SMTP AUTH:
بیشتر سرورها برای جلوگیری از سوءاستفاده، قبل از ارسال ایمیل، ازت می‌خوان که لاگین کنی. این باعث می‌شه اسپمرها نتونن از سرور سوءاستفاده کنن.
🎯 چرا SMTP مهمه؟
ما وقتی یه ایمیل می‌فرستیم، معمولا حواسمون به این نیست که چجوری ارسال می‌شه. اما پشت پرده، SMTP داره حسابی کار می‌کنه تا مطمئن بشه ایمیل سالم و بدون مشکل می‌رسه. بدون این پروتکل، ارسال ایمیل کلی دردسر داشت و ممکن بود پیام‌ها گم بشن یا به درستی تحویل داده نشن.

جمع‌بندی
‏SMTP همون پیک‌پست دیجیتاله که ایمیل‌های ما رو جابه‌جا می‌کنه. با یه سری دستورات استاندارد و نکات امنیتی مثل TLS/SSL و SMTP AUTH، ایمیل‌ها رو با امنیت و اطمینان کامل ارسال می‌کنه.

#️⃣ #programming #web #backend



🥷 CHANNEL | GROUP
10👍2🔥1👌1
توزیع های لینوکس اگه دانش آموز/آدم بودن:

#⃣ #meme #arch #ubuntu



🐧 CHANNEL | GROUP
🤣81👌1
بزودی لینوکس یوزر میشم 🌚🤟
🤩12👍1
راستی مایک گروهم داریم که توش فعالیم و میتونید هر سوالی دارید یا درمورد هرچی که میخواید رو مطرح کنید. 😁

گروه 👇
https://t.iss.one/programming_city_ir
4
🟢 خب دوستان فایل‌های تکراری یکی از مشکلاتیه که خیلی از ما باهاش مواجهیم. این فایل‌ها نه‌تنها فضای اضافی می‌گیرن، بلکه سیستم رو شلوغ و نامرتب می‌کنن.
مثال فایل‌های تکراری مثل venv یا node_modules که چندین بار کپی شدن و فضای هارد رو اشغال کردن. (برای خودم نیم گیگ فضا اشغال کرده بود)


ما برای حل مشکل یه اسکریپت ساده نوشتیم که فایل‌های تکراری رو پیدا میکنه، اون‌ها رو حذف میکنه و به جای هر کدوم یه symlink (لینک نمادین) ایجاد میکنه تا ساختار فایل ها حفظ بشه و مشکلی توی اجرای برنامه ها نباشه

به عنوان ارگومنت یه path دریافت میکنه (اگر ندادی محل اجرای اسکریپت رو در نظر میگیره) و تمام زیر فولدر هارو برای فایل تکراری اسکن میکنه

🔗 این اسکریپت رو از این لینک میتونی دانلود کنی

💬 هر نظر و سوال یا بهبود کد مدنظرته باهامون به اشتراک بزار 😊


#️⃣ #script #suggest



🐧 CHANNEL | GROUP
👍7
پست بعدی ؟ 🧐
3
خب خب خب 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