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
💎 پروتوتایپ در JavaScript 💎

امروز میخوایم درمورد پورتوتایپ در js صحبت کنیم 😁
قبل از اینکه به اصل مطلب بپردازیم، بیایید چند مفهوم اولیه رو مرور کنیم تا درک بهتری از پروتوتایپ داشته باشیم:

🗳 شیء (Object):
در جاوا اسکریپت همه چیز یک شیء است. شیء مجموعه‌ای از ویژگی‌ها (properties) و رفتارها (methods) است.


🔨تابع سازنده (Constructor):
یک تابع خاص است که برای ایجاد اشیاء جدید استفاده میشه.


🗂پروتوتایپ (Prototype):
یک شیء است که به عنوان الگو برای ایجاد اشیاء دیگه عمل میکنه. هر شیء در جاوا اسکریپت یک پروتوتایپ داره که میتونه به اون ارث برسد.
پروتوتایپ چیه و چه کاربردی داره؟
پروتوتایپ در واقع یک شیء هست که پراپرتی و اکشن مشترک بین چندین شیء رو تعریف میکنه. وقتی یک شیء جدید ایجاد می‌کنیم، این شیء به طور خودکار به پروتوتایپ دیگه ای متصل میشه و میتونه از پراپرتی ها و اکشن های اون استفاده کنه.

چرا از پروتوتایپ استفاده می‌کنیم؟

1⃣ کاهش کد تکراری:
با تعریف پراپرتی ها و اکشنا در پروتوتایپ، نیازی نیست اون هارو در هر شیء به صورت جداگونه تعریف کنیم.


2⃣ افزایش قابلیت استفاده مجدد از کد:
پروتوتایپ‌ها باعث می‌شوند کد ما قابل انعطاف‌تر و قابل استفاده مجدد در بخش‌های مختلف برنامه باشه.


3⃣ درک بهتر مفهوم وراثت:
پروتوتایپ‌ها مفهوم وراثت را در جاوا اسکریپت پیاده‌سازی می‌کنند.



⚫️ مثال 1: ایجاد یک شیء Person
function Person(name, age) {
  this.name = name;
  this.age = age;
}

Person.prototype.sayHello = function() {
  console.log(`Hello, my name is ${this.name}`);  

};

const person1 = new Person('علی',  
30);
person1.sayHello(); // خروجی: Hello, my name is علی

توی این مثال، ما یک تابع سازنده به نام Person تعریف کردیم که برای ایجاد اشیاء از تایپ شخص استفاده میشه. بعد، یک متد به نام sayHello به پروتوتایپ این تابع اضافه کردیم. هر شیئی که با استفاده از این تابع سازنده ایجاد شه، میتونه از متد sayHello استفاده کند.

⚫️ مثال 2: ایجاد یک شیء Student که از Person ارث بری می‌کند
function Student(name, age, grade) {
  Person.call(this, name, age); // فراخوانی سازنده والد
  this.grade = grade;
}

Student.prototype = Object.create(Person.prototype);
Student.prototype.constructor = Student;

const student1 = new Student('حسن', 20, 'A');
student1.sayHello(); // خروجی: Hello, my name is حسن
console.log(student1.grade); // خروجی: A

توی این مثال، ما یک تابع سازنده جدید به نام Student تعریف کردیم که از Person ارث بری میکنه. با استفاده از Object.create، پروتوتایپ Student رو به پروتوتایپ Person متصل کردیم.
به این ترتیب، اشیاء از نوع Student میتونند از همه ویژگی‌ها و رفتارهای Person استفاده کنند.

🔗 زنجیره پروتوتایپ
هر شیء در جاوا اسکریپت یک زنجیره پروتوتایپ داره. وقتی به یک پراپرتی یا متد در یک شیء دسترسی پیدا می‌کنیم، جاوااسکریپت اول اون رو توی خود شیء جستجو میکنه. اگه پیدا نشد، به پروتوتایپ اون شیء مراجعه میکنه و این روند تا زمانی ادامه پیدا میکنه که پراپرتی یا متد پیدا شه یا به اخر زنجیره برسیم.

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

ممنون میشم اگه خوشت اومد ریکشن بزنی و فالو کنی :)

#جاوا_اسکریپت #پروتوتایپ #شیء_گرایی #برنامه_نویسی


@ninja_learn_ir
👍6🔥52
دوستان تو اینستا کوسشن باکس گذاشتیم هر سوالی که دارید میتونید بپرسید 😁

لینک استوری 👇
https://www.instagram.com/stories/ninjalearn_/3437329649504437805?utm_source=ig_story_item_share&igsh=Z25ibG1wM2p6dXc2


@ninja_learn_ir
🔥21👍1😍1
سلام رفقا 👋

یه ترفند خیلی خفن پایتونی توی آخرین پست اینستامون بهتون یاد دادیم که هیچ جا پیدا نمیکنید

https://www.instagram.com/reel/C-0LIyGScSL/?igsh=Ynl4Y25ub2dldGZv
👍31😁1
Ninja Learn | نینجا لرن pinned «سلام رفقا 👋 یه ترفند خیلی خفن پایتونی توی آخرین پست اینستامون بهتون یاد دادیم که هیچ جا پیدا نمیکنید https://www.instagram.com/reel/C-0LIyGScSL/?igsh=Ynl4Y25ub2dldGZv»
دوستان ممنون میشم با لایک و فالو کردن از ما حمایت کنید :) ❤️

@ninja_learn_ir
41
Forwarded from Python BackendHub (Mani)
بحث خوبی شد تو گروه, یکی پرسید که JIT چیه و چی کار میکنه دقیقا. ‌سعی میکنم خیلی ساده توضیح بدم که قابل درک باشه برای همه.

وقتی یه اسکریپت پایتونی رو ران می‌کنی، یه سری فایل با پسوند .pyc تو پوشه‌ی pycache ساخته میشه. اینا بایت کد هستن. بایت کد چیه؟ یه low level representation از کدی که نوشتی. بایت کد platform independent هست یعنی مهم نیست رو چی داری رانش میکنی. اما این بایت کد برای CPU قابل فهم نیست. CPU فقط ماشین کد رو می‌فهمه، یعنی همون باینری صفر و یک. پس وقتی بایت کد تولید میشه، PVM (Python Virtual Machine) میاد و بایت کد رو به ماشین کد تفسیر می‌کنه تا CPU بتونه اجراش کنه.

حالا JIT چیه؟ تبدیل بایت کد به ماشین کد زمان و منابع مصرف می‌کنه. JIT توی ران‌تایم این تبدیل رو انجام میده و ماشین کد رو توی حافظه نگه می‌داره تا دفعات بعدی که همون کد اجرا میشه، دوباره نیاز به تبدیل نباشه. اینکار رو فقط برای بخش‌هایی از کد که زیاد اجرا میشن (بهشون میگن hot loop) انجام میده. چرا؟ چون خوده ذخیره کردن این دیتا پرهزینست و مموری اشغال میکنه پس کل کد رو نمیاد اینکارو کنه. یعنی JIT Engine نگاه می‌کنه ببینه این بخش از کد اونقدری داره اجرا میشه که ارزش داشته باشه ماشین کدش رو نگه داره یا نه.

چرا کد پایتون مستقیم کد ماشین نمیشه؟ دلیلش اینه که PVM و Python runtime environment داره تو پایتون کارای دیگه‌ای هم میکنه تو ران تایم مثل مدیریت حافظه، لود کردن ماژول‌ها و پکیج‌ها و... این باعث میشه که پایتون انعطاف‌پذیر و راحت باشه، ولی خب به قیمت افت عملکرد در مقایسه با زبان های کامپایلری مثل C.


@PyBackendHub
👍6😍31
Forwarded from Python BackendHub (Mani)
۳ خط اخر رو یکم باز میکنم حس میکنم کافی توضیح ندادم (این پست دیگه خیلی ربطی به JIT نداره). راجب اینکه چرا پایتون نمیتونه به راحتی از قبل تبدیل به ماشین کد شه.

یک مثال خیلی ساده بزنم شما تو پایتون میتونید یک سورس پایتونی از اینترنت دانلود کنید, و بعد از تابع eval() استفاده کنید که درجا رانش کنه! چطور این کد میتونه تبدیل به کد ماشینی بشه با یک کامپایل مستقیما؟ موقع کامپایل هنوز مشخص نیست چی قراره دانلود شه و ران شه! این اولین خاصیت پایتونه تو انعطاف پذیریش.

دومین خاصیش داینامیک تایپ بودنشه. شما یک فانکشن دارین foo(a,b,c). اگه شما تایپ ورودی این فانکشن رو نمیدونید, نمیتونید کامپایلش کنید. ولی اگه بدونید ممکنه چه تایپ هایی باشن, میتونید برای هر combination یک نسخه متفاوت کمپایل کنید. برای همینه که زبونای statically typed راحت کمپایل میشن به کد ماشین.

این دو خصوصیت باعث میشه پایتون نتونه به راحتی مستقیم تبدیل به ماشین کد بشه. پروژه هایی هستش که اینکارو میکنن ولی با static analysis و تکنیک های دیگه با لیمیتشن های خیلی زیاد. کلا زبون های داینامیک تایپ خیلی سخت از قبل میتونن تبدیل به ماشین کد بشن‌(اگه نگم غیر ممکن) ولی زبونای استتیک تایپ خیلی راحت تر اینکارو انجام میدن.

@PyBackendHub
👍4😍31
دوستان لطفاً از این رباتا به هیچ عنوان استفاده نکنید تمام اطلاعاتتون خیلی راحت میتونه بیفته دست دیگران و خودتون میدونید چه کارایی میتونن بااین اطلاعات بکنن 😮‍💨

@ninja_learn_ir
🤯51
💎 مفهوم DNS 💎

امروز می‌خوام در مورد یه موضوع مهم و جالب به اسم DNS براتون بگم و توضیح بدم که چطور این سیستم باعث میشه وقتی یه آدرس مثل google.com رو تو مرورگر تایپ می‌کنین، به صفحه درست هدایت بشین.

حالا DNS چیه؟
به زبان ساده، DNS
که مخفف Domain Name System هست، مثل یه دفترچه تلفن برای اینترنت عمل می‌کنه.
شما وقتی می‌خواین به یه سایت سر بزنین، اسم سایت رو وارد می‌کنین، مثل google.com، ولی کامپیوترها با اسم‌های دامنه کار نمی‌کنن؛ اونا فقط آدرس‌های IP رو می‌فهمن که یه سری عددن مثل 192.168.1.1.
حالا اینجاست که DNS وارد عمل میشه و این نام دامنه رو به آدرس IP متناظر باهاش تبدیل می‌کنه.

چطور کار می‌کنه؟
وقتی شما یه آدرس وب رو توی مرورگر وارد می‌کنین، مرورگر اول از DNS می‌پرسه که «این نام دامنه به کدوم آدرس IP وصل میشه؟». DNS هم میره میگرده و آدرس IP رو پیدا می‌کنه و به مرورگر برمی‌گردونه. بعد مرورگر می‌دونه که باید به کدوم سرور وصل بشه تا سایت مورد نظر شما رو باز کنه.

حالا بریم ببینیم DNS دقیقاً چیه و چطور کار می‌کنه؟
همون‌طور که گفتم، DNS مثل دفترچه تلفن اینترنتی عمل می‌کنه. ولی بذارین یه ذره فنی‌تر بشیم.

وقتی شما یه آدرس وب، مثل www.example.com رو توی مرورگر وارد می‌کنین، این فرآیند پشت صحنه اتفاق می‌افته:

1️⃣ کاربر دامنه رو وارد می‌کنه:
شما آدرس www.example.com رو وارد می‌کنین.


2️⃣ مرورگر اول کش محلی رو چک می‌کنه:
مرورگر بررسی می‌کنه ببینه آیا قبلاً این سایت رو باز کردین و آدرس IP رو تو حافظه موقت (کش) ذخیره کرده یا نه. این کار باعث میشه سریع‌تر به سایت دسترسی پیدا کنین.

3️⃣ سوال از سیستم عامل:
اگه مرورگر نتونه IP رو توی کش خودش پیدا کنه، از سیستم عامل دستگاه میپرسه که آیا تو کش خودش داره یا نه. سیستم عامل هم ممکنه توی کش DNS خودش آدرس IP رو ذخیره کرده باشه.

4️⃣ سوال از روتر:
اگه سیستم عامل نتونه IP رو پیدا کنه، درخواست به روتر خونگی یا مودم شما میره. روتر هم ممکنه یه کش کوچیک داشته باشه.

5️⃣ ارتباط با DNS سرور:
اگه هیچ کدوم از این مراحل به نتیجه نرسه، درخواست به سمت سرور DNS که توسط ارائه‌دهنده اینترنت (ISP) شما تعیین شده ارسال میشه.

6️⃣ تحلیل نام دامنه:
سرور DNS اول از همه، دامنه سطح بالا (Top-Level Domain یا TLD)
مثل .com رو بررسی می‌کنه. هر دامنه‌ای یک Name Server داره که مسئول مدیریت اون دامنه است. برای مثال، Name Server برای .com همه دامنه‌هایی که به .com ختم می‌شن رو مدیریت می‌کنه.

7️⃣ بررسی Name Server:
سرور DNS آدرس Name Server دامنه شما (در اینجا example.com) رو از سرور TLD می‌گیره و درخواست رو به اون می‌فرسته.

8️⃣ برگشت آدرس IP:
حالا Name Server دامنه example.com آدرس IP مربوطه رو به DNS سرور برمی‌گردونه و DNS سرور هم اونو به مرورگر شما ارسال می‌کنه.

9️⃣ اتصال به وب‌سرور:
حالا مرورگر شما آدرس IP رو داره و می‌تونه به وب‌سرور مربوطه متصل بشه و صفحه وب رو دریافت کنه.


🌐 انواع رکوردهای DNS
حالا که با فرآیند تبدیل نام دامنه به آدرس IP آشنا شدیم، بذارین یه نگاهی هم به انواع رکوردهای DNS بندازیم:

1️⃣ A Record  :
این رایج‌ترین نوع رکورده که نام دامنه رو به یک آدرس IP نسخه 4 (IPv4) متصل می‌کنه.


2️⃣ AAAA Record :
این رکورد مثل A Record هست، ولی برای آدرس‌های IP نسخه 6 (IPv6) استفاده میشه.


3️⃣ CNAME Record :
این رکورد یه نام دامنه رو به یه نام دامنه دیگه هدایت می‌کنه. مثلاً می‌تونین www.example.com رو به example.com ریدایرکت کنین.


4️⃣ MX Record :
این رکورد برای سرویس‌های ایمیل استفاده میشه و مشخص می‌کنه که ایمیل‌های مربوط به یک دامنه باید به کدوم سرور ارسال بشه.

5️⃣ TXT Record :

این رکورد برای ذخیره اطلاعات متنی استفاده میشه. یکی از کاربردهای رایجش تأیید مالکیت دامنه برای سرویس‌هایی مثل گوگل و مایکروسافت هست.
🤔 حالا DNS Cache و چرا بعضی وقتی به مشکل می‌خوریم؟
خب DNS Cache همون حافظه موقتیه که باعث میشه درخواست‌های DNS سریع‌تر انجام بشن. ولی بعضی وقت‌ها این کش‌ها قدیمی می‌شن و ممکنه وقتی یه سایت جابجا میشه، هنوز به آدرس قدیمی اشاره کنن. اینجاست که باید کش DNS رو پاک کرد تا مشکل حل بشه.

🛡 امنیت و DNS
یکی از نکات مهم در مورد DNS، امنیت اونه. متاسفانه، DNS می‌تونه هدف حملات مختلفی مثل DNS Spoofing یا DNS Hijacking قرار بگیره.
در این حملات، هکرها می‌تونن ترافیک شما رو به یه سایت جعلی هدایت کنن. برای مقابله با این نوع حملات، سرویس‌هایی مثل DNSSEC (DNS Security Extensions) به کار میرن که درخواست‌ها و پاسخ‌های DNS رو با امضاهای دیجیتال (Digital signature) ایمن می‌کنن.


ادامه در پست بعدی 👇
7👌3👍1
🔬 مثال واقعی
فرض کنین می‌خواین به سایت amazon.com برین:

1️⃣مرورگر شما اول به سرور DNS مراجعه می‌کنه.

2️⃣سرور DNS بررسی می‌کنه که amazon.com رو به کدوم آدرس IP باید متصل کنه.

3️⃣آدرس IP رو به مرورگر برمی‌گردونه.

4️⃣مرورگر شما به اون آدرس IP متصل میشه و سایت آمازون رو لود می‌کنه.

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

جمع‌بندی
فهمیدیم DNS واقعاً مثل یه جادو عمل می‌کنه که کاربرها بدون اینکه نیازی به حفظ کردن آدرس‌های پیچیده داشته باشن، می‌تونن به راحتی به سایت‌ها دسترسی پیدا کنن. این سیستم پیچیده با یه سری قوانین و پروتکل‌های خاص کار می‌کنه که باعث میشه وب به شکلی که ما می‌شناسیم، وجود داشته باشه.

امیدوارم این توضیحات کامل‌ بوده باشه و تونسته باشم مفهوم DNS رو براتون روشن کنم. اگه هنوز سوالی دارین یا چیزی براتون مبهمه، حتماً بپرسین 😄

واینکه ممنون میشم اگه خوشت اومد با ریکشن زدن و فالو کردن حمایت کنی:)

#DNS #web #backend


@ninja_learn_ir
15😁1
پست جدید اینستامون راجب nodejs 🔥

https://www.instagram.com/p/C-2wPwmMBte/?igsh=MWhwMWVra3ppdTk1dg==
😁21👍1🤩1
کیفیت پستارو دوست دارید؟ 🤔
اگه پیشنهادی دارید توی کامنتا بگید 👇
Anonymous Poll
73%
عالیه 😀
22%
معمولیه 😐
0%
خوب نیست 😑
4%
اصلا خوب نیست 😬
👍41👾1
بنظرتون متن پستا کوتاه تر باشه یا همین خوبه؟🤔
Anonymous Poll
26%
کوتاه تر باشه
74%
همین خوبه
5😁1
Ninja Learn | نینجا لرن pinned «بنظرتون متن پستا کوتاه تر باشه یا همین خوبه؟🤔»
❤‍🔥1
💎 همه چیز در مورد حمله Brute Force 💎

امروز میخوام یه کم درباره یکی از خطرناک‌ترین روش‌های هک که توی دنیای وب خیلی رایجه صحبت کنم: حمله Brute Force! 😱

حالا Brute Force چیه؟ 🤔
حمله Brute Force یا همون "حمله بی‌رحمانه" 😅، یه روش ساده ولی مؤثر برای شکستن پسوردها و دسترسی به اطلاعاته. تو این روش، هکر میاد و تموم ترکیب‌های ممکن از کاراکترها رو برای یه پسورد امتحان می‌کنه تا بالاخره بتونه پسورد درست رو پیدا کنه. فکر کن یه قفل داشته باشی که هر دفعه یه عدد بهش اضافه کنی تا بالاخره باز بشه؛ Brute Force هم دقیقاً همینه.

چرا Brute Force خطرناکه؟ ⚠️
خب، بذارید راحت بهتون بگم: Brute Force اگه درست اجرا بشه، می‌تونه تقریباً هر پسوردی رو بشکنه! 😳
البته این کار ممکنه زمان‌بر باشه، ولی با قدرت پردازش کامپیوترهای امروزی، این زمان خیلی کم شده. فرض کن یکی بیاد و پسورد اکانت تو رو توی یه سایت با این روش حدس بزنه. عجب فاجعه ای 😣

روش‌های جلوگیری از Brute Force 👊
حالا که فهمیدیم این حمله چقدر خطرناکه، بیایم ببینیم چجوری می‌شه جلوی اون رو گرفت:

استفاده از پسوردهای پیچیده و طولانی 🛡️:
هرچی پسوردت پیچیده‌تر و طولانی‌تر باشه، هکر برای حدس زدنش بیشتر به دردسر می‌افته. پسوردی مثل "123456" رو ولش کن و یه چیز پیچیده‌تر مثل "P@ssw0rd123!" انتخاب کن.

فعال‌سازی محدودیت تلاش برای ورود 🚫:
بیشتر سایت‌ها امکان محدود کردن تعداد تلاش‌های ناموفق برای ورود رو دارن. مثلاً اگه کسی 5 بار اشتباه بزنه، دسترسیش به مدت چند دقیقه یا بیشتر قطع بشه. این کار سرعت حمله رو خیلی کم می‌کنه.


استفاده از CAPTCHA 🧩:
حتماً توی سایت‌ها دیدی که یه سری حروف و عدد بهت نشون می‌ده و ازت می‌خواد اونا رو وارد کنی؟ این کار برای جلوگیری از حمله‌های اتوماتیک Brute Force خیلی مؤثره.


احراز هویت دو مرحله‌ای (2FA) 🔑:
با فعال کردن 2FA، حتی اگه هکر پسوردت رو هم پیدا کنه، باز به یه کد دیگه نیاز داره که معمولاً فقط تو دسترسی داری. پس شانس موفقیت هکر تقریباً به صفر می‌رسه.


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


نتیجه‌گیری 🧠
حمله Brute Force یکی از روش‌های قدیمی ولی همچنان مؤثر برای دسترسی به اطلاعات حساسه. با اینکه این روش به ظاهر ساده‌ست، اما اگه پیشگیری‌های لازم رو انجام ندیم، می‌تونه خیلی خطرناک باشه. پس یادتون نره از پسوردهای قوی استفاده کنید، 2FA رو فعال کنید و همیشه امنیت اکانت‌هاتون رو جدی بگیرید! 🔒

ممنون میشم اگه خوشتون اومد با ریکشن زدن و فالو کردن از ما حمایت کنید :) ❤️

#امنیت_اطلاعات #brute_force #امنیت_اینترنتی


@ninja_learn_ir
🔥5👍41🏆1
دوستان یه موضوعی که خیلی توی گروه ها میبینم و بچه ها میان پیویم میگن اینه که

دست توی این کار زیاد شده
برای ما کارنیستو چجوری ما کارکنیم
و...

ببینید دوستان
اگه شما تو هر رشته ای نه تنها برنامه نویسی تو هر رشته ای
متخصص بشید و توش حرفه ای بشید همه دنبالتونن
همیشه برای ادم با سواد کارهست

مثال میزنم
شما بازار میوه رو درنظر بگیر
کلی میوه هست کلی میوه های جور واجور
مردم فقط میوه های خوب رو میخرن و بهشون اهمیت میدن
و دراخر میوه های خراب میمونه و بدرد نخور

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

امید وارم همیشه موفق باشید و توی زندگی پیشرفت کنید و سربلند باشید❤️

#موضوع_آزاد


@ninja_learn_ir
👍96🔥1👏1