Ninja Learn | نینجا لرن
1.27K subscribers
96 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
💎 شروع کار با Node.js 💎

اگه تازه می‌خوای یادگیری Node.js رو شروع کنی، بهتره از یه مسیر ساده و کاربردی شروع کنی.

نود برای اجرای جاوااسکریپت سمت سرور استفاده می‌شه و بهت این امکان رو میده که اپلیکیشن‌های تحت وب، APIها، و حتی برنامه‌های چت یا استریمینگ بسازی.

1⃣ قدم اول: نصب Node.js
اولین قدم اینه که Node.js رو نصب کنی. برو به سایت رسمی Node.js و نسخه‌ای که به سیستم‌ت می‌خوره رو دانلود کن. وقتی نصب شد، می‌تونی با زدن دستور زیر توی ترمینال مطمئن شی که درست نصب شده:
node -v

با این دستور نسخه Node.js نمایش داده میشه و می‌فهمی که همه چیز درسته.

2⃣ قدم دوم: آشنایی با npm
یکی از ابزارهای کلیدی که با Node.js میاد، npm یا همون Node Package Manager هست. با npm می‌تونی به راحتی کتابخونه‌ها و بسته‌های مورد نیاز پروژه‌ت رو نصب کنی. برای مثال، اگه بخوای یه کتابخونه مثل Express رو نصب کنی که خیلی معروفه برای ساخت وب‌سرورها، از این دستور استفاده می‌کنی:
npm install express


3⃣ قدم سوم: ساخت اولین پروژه
حالا بیا یه پروژه ساده رو با هم بسازیم. اول یه پوشه جدید ایجاد کن و واردش شو:
mkdir my-first-node-app
cd my-first-node-app

حالا یه فایل به اسم app.js بساز و کد زیر رو توش بنویس:
const http = require('http');

const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World\n');
});

server.listen(3000, () => {
console.log('Server running at https://localhost:3000/');
});

این کد یه سرور ساده می‌سازه که وقتی توی مرورگر https://localhost:3000 رو باز کنی، عبارت "Hello World" رو بهت نشون میده.

4⃣ قدم چهارم: اجرای پروژه
حالا برای اینکه سرورت رو اجرا کنی، توی همون پوشه‌ای که فایل app.js هست دستور زیر رو بزن:
node app.js

اگه همه چیز درست باشه، پیغام Server running at https://localhost:3000/ توی ترمینال نمایش داده می‌شه. حالا می‌تونی مرورگرت رو باز کنی و این آدرس رو وارد کنی تا نتیجه رو ببینی.

5⃣ قدم بعدی: آشنایی با فریم‌ورک‌ها
بعد از اینکه به Node.js عادت کردی، خوبه با فریم‌ورک‌هایی مثل Express آشنا بشی که کار ساخت وب‌سرور و API رو برات خیلی راحت‌تر می‌کنه. با Express می‌تونی راحت مسیرها (routes)، میدلور (middleware)، و مدیریت درخواست‌ها رو پیاده‌سازی کنی. مثلاً کد بالا رو با Express می‌تونی خیلی ساده‌تر بنویسی:
const express = require('express');
const app = express();

app.get('/', (req, res) => {
res.send('Hello World');
});

app.listen(3000, () => {
console.log('Server running on https://localhost:3000');
});


🧑‍🏫 یادگیری مستمر
پیشنهاد می‌کنم حتماً روی پروژه‌های کوچیک و ساده کار کنی تا مفاهیم برات جا بیفته. یه نکته دیگه اینکه، منابع آموزشی رایگان زیادی برای یادگیری Node.js هست مثل:

- سایت رسمی Node.js
- مستندات Express
- آموزش‌های یوتیوب و دوره‌های آنلاین.

هر سوالی داشتی، اینجا هستم که کمک کنم! :)

@ninja_learn_ir
8
پیشنهادی برای بهتر شدن کانال داری؟ 🧐

خیلی خوشحال میشم که تو کامنتا بهمون بگی ☺️❤️
🔥41
💎 استفاده از PostgreSQL با Django 💎

امروز می‌خوایم درباره PostgreSQL و اینکه چرا این دیتابیس رابطه‌ای با Django فوق‌العاده مچ میشه، صحبت کنیم. همچنین چندتا از فیچرهای خاصی که جنگو برای این دیتابیس داره رو معرفی می‌کنیم

چرا PostgreSQL؟ 🤔
خب PostgreSQL یه دیتابیس رابطه‌ای قدرتمنده که خیلی‌ها بهش میگن "Postgres". این دیتابیس اوپن سورس، خیلی خوب با Django هماهنگ میشه و خیلی امکانات و قابلیت‌های پیشرفته‌ای رو ارائه میده که وقتی با جنگو کار می‌کنی حسابی به درد می‌خوره. از جمله پشتیبانی از JSONB، قفل‌های پیچیده، پارتیشن‌بندی داده‌ها و ... 😍

چطوری از PostgreSQL توی Django استفاده کنیم؟ 🛠️

1⃣ اول از همه، باید مطمئن شی که PostgreSQL رو نصب داری.

2⃣ بعدش توی پروژه جنگویی، توی فایل settings.py باید دیتابیس رو به Postgres وصل کنی. یه همچین چیزی:
  
  
   DATABASES = {
       'default': {
           'ENGINE': 'django.db.backends.postgresql',
           'NAME': 'your_db_name',
           'USER': 'your_db_user',
           'PASSWORD': 'your_db_password',
           'HOST': 'localhost',
           'PORT': '5432',
       }
   }
  
حالا می‌تونی از قابلیت‌های خفن Postgres استفاده کنی و دیتابیس پروژه‌ت رو به یه سطح بالاتر ببری! 🚀

فیچرهای خاص Django برای PostgreSQL 📦

1⃣ مدل‌های JSONField 📄 
   با استفاده از Postgres توی Django، می‌تونی از فیلد JSONField استفاده کنی. این فیلد بهت اجازه میده که داده‌های JSON رو به‌راحتی توی دیتابیس ذخیره کنی و بعداً کوئری‌های خفن روشون بزنی! دیگه نیازی نیست همیشه ساختار داده‌ت فقط رابطه‌ای باشه.

  
   from django.db import models
  
   class MyModel(models.Model):
       data = models.JSONField()
  

2⃣ فیلد ArrayField 🔢 
   اگه یه لیست یا آرایه داری و می‌خوای اون رو مستقیم توی دیتابیس ذخیره کنی، ArrayField بهترین انتخابه. با این فیلد، می‌تونی یه لیست از مقادیر (مثلاً یه سری عدد یا استرینگ) رو توی یه ستون ذخیره کنی.

  
   from django.contrib.postgres.fields import ArrayField
   from django.db import models

   class MyModel(models.Model):
       tags = ArrayField(models.CharField(max_length=100), blank=True)
3⃣ فیلد HStore 🗂️ 
خب HStore یه قابلیت خاص توی Postgresه که بهت اجازه میده داده‌های کلید-مقدار (key-value) رو توی دیتابیس ذخیره کنی. Django از این فیلد پشتیبانی می‌کنه و باهاش می‌تونی داده‌هایی شبیه به دیکشنری رو ذخیره کنی.

 
   from django.contrib.postgres.fields import HStoreField
   from django.db import models

   class MyModel(models.Model):
       attributes = HStoreField()
  
4⃣ فیلد Range 📏 
   این فیلد بهت اجازه میده که رِنج‌ها رو توی دیتابیس ذخیره کنی. مثلاً می‌خوای یه بازه تاریخی یا عددی رو نگه‌داری، این فیلد دقیقاً به درد همون کار می‌خوره.

  
   from django.contrib.postgres.fields import DateRangeField
   from django.db import models

   class MyModel(models.Model):
       date_range = DateRangeField()
  
5⃣ و در اخر Full-Text Search 🔍 
خب Postgres قابلیت جستجوی متنی پیشرفته داره و Django هم از این قابلیت پشتیبانی می‌کنه. با استفاده از این فیچر می‌تونی به‌صورت سریع و بهینه توی متن‌ها جستجو کنی.

  
   from django.contrib.postgres.search import SearchVector
   from .models import MyModel

   MyModel.objects.annotate(search=SearchVector('title', 'description')).filter(search='keyword')
  
جمع‌بندی 🎯
استفاده از PostgreSQL توی Django یه انتخاب خیلی خوبه، چون هم دیتابیس قوی‌ایه و هم فیچرهای اختصاصی زیادی برای جنگو داره که می‌تونه کارتو سریع‌تر و راحت‌تر کنه. از ذخیره JSON گرفته تا جستجوی متنی، Postgres و Django یه ترکیب طلایین

امیدوارم مفید بوده باشه :)

#django #postgressql #postgres


@ninja_learn_ir
🔥125
🚀 معرفی رورس پروکسی Traefik 🚀

امروز می‌خوایم درباره Traefik صحبت کنیم، یه رورس پروکسی هست و خیلی کارآمد که مخصوصاً برای مدیریت ترافیک توی اپلیکیشن‌های میکروسرویس طراحی شده.

حالا Traefik چیه؟ 🤔
خب Traefik یه reverse proxy و load balancer قویه که به راحتی می‌تونه ترافیک رو بین چندین سرویس توی یه کلاستر مدیریت کنه. یکی از ویژگی‌های جالبش اینه که به راحتی می‌تونی با Docker، Kubernetes و دیگر ابزارهای مدیریت کانتینر کار کنی.

چرا باید از Traefik استفاده کنیم؟ 💡

1⃣ پیکربندی آسان: Traefik به راحتی با فایل‌های پیکربندی یا بر اساس برچسب‌های Docker پیکربندی میشه و نیازی به تنظیمات پیچیده نداره.

2⃣؛ TLS خودکار: Traefik به راحتی می‌تونه SSL رو مدیریت کنه و برای هر دامنه، گواهی‌نامه Let’s Encrypt رو به صورت خودکار بگیره. دیگه نیازی به نگرانی درباره امنیت نیست 🔒

3⃣ داشبورد کاربرپسند: یه داشبورد خیلی قشنگ داره که می‌تونی وضعیت سرویس‌ها و ترافیک رو ببینی.
این داشبورد بهت کمک می‌کنه تا بفهمی چه اتفاقی داره می‌افته. 📊

4⃣ پشتیبانی از پروتکل‌های مختلف: Traefik از HTTP/2 و WebSocket پشتیبانی می‌کنه و می‌تونه بهترین عملکرد رو ارائه بده.

5⃣ کاملن مقیاس‌پذیر: به راحتی می‌تونی با افزایش تعداد سرویس‌ها، Traefik رو گسترش بدی و ترافیک رو مدیریت کنی.

5⃣ چطوری شروع کنیم؟ 🚀
برای شروع کار با Traefik، کافیه Docker رو نصب کنی و یه فایل docker-compose.yml ساده بسازی. مثلاً:

version: '3.7'
services:
traefik:
image: traefik:v2.5
command:
- "--api.insecure=true"
- "--providers.docker=true"
- "--entrypoints.web.address=:80"
ports:
- "80:80"
- "8080:8080" # داشبورد
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"

حالا با یک دستور ساده می‌تونی Traefik رو بالا بیاری و شروع کنی به مدیریت سرویس‌هات.

جمع‌بندی 🎯
فهمیدیم Traefik یکی از بهترین انتخاب‌ها برای مدیریت ترافیک و بارگذاری در اپلیکیشن‌های مدرن و میکروسرویس‌هاست. با ویژگی‌های کاربرپسند و پیکربندی آسونش می‌تونه به تو کمک کنه که تمرکز بیشتری روی توسعه اپلیکیشن‌هات داشته باشی.

امید وارم مفید بوده باشه :)

#traefik #reverse_proxy #web_server


@ninja_learn_ir
👍73🔥2🆒1
💎 معرفی فریم‌ورک Locust 💎

امروز می‌خوام یه فریم‌ورک خفن برای تست بار بهتون معرفی کنم: Locust

حالا Locust چیه؟ 🐛
خب Locust یه فریم‌ورک open-source برای تست بار (Load Testing) و بررسی عملکرد (Performance Testing) اپلیکیشن‌هاست. با Locust می‌تونی هزاران کاربر شبیه‌سازی کنی و ببینی وقتی کلی درخواست به سرورت میاد، چطور رفتار می‌کنه. بر خلاف خیلی از ابزارهای تست بار، Locust از پایتون استفاده می‌کنه که باعث میشه راحت و منعطف باشه 😍

چرا Locust؟ 💡
1⃣ ساده و قابل‌فهم: توی Locust کد تست رو با پایتون می‌نویسی، یعنی اگه با پایتون آشنا باشی، خیلی سریع می‌تونی تست‌ها رو پیاده کنی.
 
2⃣ قابلیت گسترش: Locust بهت اجازه میده که به راحتی تعداد کاربران رو افزایش بدی و رفتار واقعی کاربرها رو شبیه‌سازی کنی.

3⃣ داشبورد وب: یه رابط کاربری وب خفن داره که می‌تونی تست‌ها رو از اونجا مدیریت کنی و نتایج رو همون لحظه ببینی 📊

4⃣ انعطاف‌پذیر: با هر API یا وب اپلیکیشنی سازگار هست و می‌تونی برای اپلیکیشن‌های REST، SOAP و حتی اپلیکیشن‌های استاتیک ازش استفاده کنی.

چطور از LOCUST استفاده کنیم؟ 🚀
برای استفاده، کافیه Locust رو نصب کنی:
pip install locust

بعدش می‌تونی یه تست ساده بنویسی. مثلاً:

from locust import HttpUser, task, between

class MyUser(HttpUser):
    wait_time = between(1, 5)

    @task
    def my_test(self):
        self.client.get("/some-url")

این تست داره هر 1 تا 5 ثانیه یه درخواست به آدرسی که مشخص کردی می‌فرسته. وقتی تست رو اجرا کنی، می‌تونی کاربرهای شبیه‌سازی شده رو تنظیم کنی و نتایج رو از داشبورد ببینی.

اجرای تست 🖥️
وقتی تستت رو نوشتی، با دستور زیر می‌تونی Locust رو اجرا کنی:
locust -f my_test_file.py

حالا برو به آدرس https://localhost:8089 تا داشبورد Locust رو ببینی و اپتو تست کنی.

جمع‌بندی 🎯
فهمیدیم Locust یکی از بهترین فریم‌ورک‌ها برای تست بار و عملکرده. باهاش می‌تونی بفهمی سرورت تحت فشار چطوری کار می‌کنه و کلی امکانات داره که کارو برات راحت می‌کنه. حتماً امتحانش کن و ببین چقدر کارتو راحت‌تر می‌کنه.

امید وارم براتون مفید بود باشه :)

#python #django #locust


@ninja_learn_ir
🔥10👍53
🚀 معرفی Kubernetes 🚀

امروز می‌خوایم درباره Kubernetes صحبت کنیم که یکی از ابزارهای دنیای کانتینرهاست.

حالا Kubernetes چیه؟ 🤔
خب Kubernetes که به اختصار به K8s هم معروفه، یه پلتفرم متن‌باز برای مدیریت کانتینرهاست. این یعنی اگه اپلیکیشن‌هات رو داخل کانتینرها راه‌اندازی کردی، Kubernetes میاد و بهت کمک می‌کنه که این کانتینرها رو به بهترین شکل مدیریت کنی.

چطور کار می‌کنه؟ 💡
خب Kubernetes به شما اجازه میده تا:

1⃣ مقیاس‌پذیری:
تعداد کانتینرها رو براساس نیاز افزایش یا کاهش بدی. مثلاً اگه بار ترافیکی زیاد بشه، K8s می‌تونه به طور خودکار کانتینرهای جدید بسازه. 💪

2⃣ توزیع بار:
به طور هوشمند بار رو بین کانتینرها تقسیم می‌کنه تا هیچ کانتینری تحت فشار قرار نگیره و همه چیز به خوبی کار کنه.

3⃣ مدیریت آسان:
اگه یکی از کانتینرها کرش کنه، K8s خودش اون رو دوباره راه‌اندازی می‌کنه. یعنی نگرانی از بابت قطعی‌ها نداری 🔧

4⃣؛ Rolling Updates:
می‌تونی اپلیکیشن‌هات رو به راحتی آپدیت کنی بدون اینکه داون‌تایم داشته باشی. این یعنی کاربرانت هیچ اختلالی احساس نمی‌کنن.

چرا باید از Kubernetes استفاده کنی؟ 🌟

1⃣ سازگاری:
با هر محیطی مثل AWS، Google Cloud و حتی دیتاسنتر خودت کار می‌کنه.

2⃣ قابلیت گسترش:
با توجه به نیازت می‌تونی از K8s در پروژه‌های کوچک تا بزرگ‌ترین پروژه‌ها استفاده کنی.

3⃣ جامعه بزرگ:
به خاطر متن‌باز بودنش، جامعه کاربری و منابع آموزشی زیادی داره.

جمع‌بندی 🎯
فهمیدیم Kubernetes یکی از بهترین ابزارها برای مدیریت کانتینرهاست. اگه به دنبال بهینه‌سازی اپلیکیشن‌هات و مدیریت بهتر منابع هستی، K8s بهترین انتخابه.

امیدوارم مفید بوده باشه :)

#devops #kubernetes #contanier


@ninja_learn_ir
🔥32👍1👌1
توی پست جدیدمون SSE یا همون Server Sent Events رو بررسی کردیم

مبحثی که ۹۰٪ بک اند کارا هنوز ازش خبری ندارن 😄

https://www.instagram.com/p/DAi-T83Jc5q/?igsh=ZHExOXA4NGFqb3By
5
💎 معرفی SSE در Node.js 💎

مروز می‌خوایم درباره SSE یا Server-Sent Events توی Node.js صحبت کنیم.

حالا SSE چیه؟ 🤔
خب SSE یکی از تکنیک‌های وب هست که به سرور اجازه میده به طور یکطرفه اطلاعات رو به کلاینت بفرسته. یعنی سرور می‌تونه داده‌ها رو به مرور زمان به کلاینت بفرسته بدون اینکه کلاینت درخواست خاصی بده.

چرا از SSE استفاده کنیم؟ 💡
1⃣ ساده و راحت:
برای پیاده‌سازی SSE به کد کمتری نسبت به WebSocket نیاز داریم و ساده‌تره.

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

3⃣ پشتیبانی از مرورگرها:
اکثر مرورگرهای مدرن از SSE پشتیبانی می‌کنند.

چطور از SSE در Node.js استفاده کنیم؟ 🚀
برای استفاده از SSE توی Node.js می‌تونی به راحتی یه سرور ساده راه بندازی. مثلاً:

const express = require('express')
const app = express()

app.get('/events', (req, res) => {
res.setHeader('Content-Type', 'text/event-stream')
res.setHeader('Cache-Control', 'no-cache')
res.setHeader('Connection', 'keep-alive')

setInterval(() => {
const data = new Date().toLocaleTimeString()
res.write(`data: ${data}\n\n`)
}, 1000)
})

app.listen(3000, () => {
console.log('Server running on https://localhost:3000')
})


توضیحات کد 📝
- با استفاده از Express یه روت /events تعریف کردیم که داده‌ها رو به صورت زنده ارسال می‌کنه.
- سرور با استفاده از setInterval هر یک ثانیه زمان فعلی رو به کلاینت ارسال می‌کنه.

سمت کلاینت 🖥️
برای دریافت این داده‌ها در کلاینت می‌تونی از JavaScript استفاده کنی:

const eventSource = new EventSource('/events')

eventSource.onmessage = (event) => {
console.log('New message:', event.data)
}

جمع‌بندی 🎯
فهمیدیم SSE یکی از روش‌های عالی برای ارسال داده‌ها به صورت زنده از سرور به کلاینت در Node.js هست. با استفاده از این تکنیک می‌تونی تجربه کاربری بهتری رو برای اپلیکیشن‌هات ایجاد کنی.

امید وارم مفید بوده باشه :)

#sse #js #node.js


@ninja_learn_ir
7
💎 عملیات‌های IO Bound و CPU Bound در جنگو 💎

امروز می‌خوایم درباره عملیات‌های IO Bound و CPU Bound صحبت کنیم و اینکه این دو نوع عملیات چطور روی عملکرد اپلیکیشن‌های جنگو تاثیر میذاره.

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

مثال‌هایی از IO Bound:
- خوندن و نوشتن در دیتابیس
- ارسال یا دریافت داده‌ها از API
- بارگذاری فایل‌ها

حالا CPU Bound چیه؟ 🧠
عملیات‌های CPU Bound به کارهایی اشاره دارن که بیشتر زمانشون صرف محاسبات سنگین میشه. یعنی برای پردازش و محاسبات نیاز به قدرت پردازشی بالا دارن. در اینجا عملکرد CPU نقش کلیدی رو ایفا می‌کنه.

مثال‌هایی از CPU Bound:
- پردازش تصاویر و ویدئوها
- انجام محاسبات ریاضی پیچیده
- اجرای الگوریتم‌های پیچیده

تفاوت‌های اصلی بین IO Bound و CPU Bound 🔍
1⃣ مدت زمان انتظار:
-عملیات های IO Bound معمولاً منتظر ورود و خروج داده‌ها هستن و زمان زیادی رو صرف این کار می‌کنن.

- عملیات های CPU Bound بیشتر زمانشون رو برای پردازش و محاسبات صرف می‌کنن.

2⃣ تکنیک‌های بهینه‌سازی:
- برای عملیات‌های IO Bound می‌تونی از Async و Threading استفاده کنی تا زمان انتظار رو کاهش بدی.

- برای CPU Bound باید به سراغ Multiprocessing بری تا بتونی از چند هسته CPU به طور همزمان استفاده کنی.

چطور در جنگو با اینها کار کنیم؟ 🚀
- برای IO Bound:
می‌تونی از async و await استفاده کنی تا درخواست‌ها به صورت غیر همزمان انجام بشن و سرعت اپلیکیشن بالا بره.

- برای CPU Bound:
می‌تونی از ماژول concurrent.futures و ProcessPoolExecutor استفاده کنی تا کارهای سنگین رو در چند پروسه اجرا کنی.

جمع‌بندی 🎯
درک تفاوت‌های بین IO Bound و CPU Bound می‌تونه بهت کمک کنه تا اپلیکیشن‌های جنگو رو بهتر بهینه‌سازی کنی. اگه عملیات‌های IO Bound داری، از async استفاده کن و اگر CPU Bound هستن، برو سراغ multiprocessing.

امید وارم مفید بوده باشه :)

#iobound #cpubound #python #django


@ninja_learn_ir
73👍3
دوستان میخوایم استارت تولید محتوا رو توی یوتوب بزنیم 😁
بنظرتون درمورد چه موضوعاتی ویدیو بزاریم؟🤔
تو کامنتا بگید 😉
🔥72👍1👎1
بریم لینکدین، اونجا محیط کاری و حرفه ایه

لینکدین:
😁11
💎 اصول Normalization در طراحی دیتابیس 💎

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

1⃣ فرم اول نرمال (1NF)
تو فرم اول نرمال، باید همه‌ی ستون‌های دیتابیس‌تون "اتمی" باشن. یعنی هر سلول از جدول باید فقط یه مقدار داشته باشه، نه چندتا مقدار!
📌 مثال:
فرض کن یه جدول داری که توش شماره تلفن‌های چند نفر رو ذخیره کردی. اگه تو یه سلول چند تا شماره تلفن ذخیره کنی، دیتابیست تو فرم اول نرمال نیست باید هر شماره تلفن توی یه ردیف جدا باشه.

2⃣ فرم دوم نرمال (2NF)
وقتی فرم اول رو رعایت کردی، می‌رسی به فرم دوم. تو این فرم، باید مطمئن بشی که همه‌ی ستون‌های غیرکلیدی، وابسته به کلید اصلی (Primary Key) باشن.
📌 مثال:
فرض کن یه جدول داری که اطلاعات دانش‌آموزان و درس‌هایی که می‌خونن رو ذخیره می‌کنه. اگه یه ستون مربوط به اطلاعات کلاس (مثل شماره کلاس) باشه که وابسته به دانش‌آموز نباشه، دیتابیس‌ت تو فرم دوم نرمال نیست. باید اون اطلاعات رو تو یه جدول جدا ذخیره کنی.

3⃣ فرم سوم نرمال (3NF)
حالا که فرم دوم رو رعایت کردی، می‌رسیم به فرم سوم. اینجا باید مطمئن بشی که هیچ ستون غیرکلیدی به یه ستون غیرکلیدی دیگه وابسته نباشه
📌 مثال:
اگه تو جدول دانش‌آموزان، هم اسم شهر و هم اسم استان رو ذخیره کنی و استان وابسته به شهر باشه، دیتابیس تو فرم سوم نرمال نیست. باید شهر و استان رو تو یه جدول دیگه ذخیره کنی.

جمع بندی 🎯
این سه فرم نرمال‌سازی باعث می‌شن دیتابیس‌تون بهینه‌تر باشه، خطاهای کمتری داشته باشه و به راحتی قابل توسعه باشه. پس اگه می‌خواین دیتابیس‌تون تو پروژه‌های بزرگ دچار مشکل نشه، حتما این اصول رو رعایت کنین 😉

امید وارم مفید بوده باشه :)

#sql #database #db #nf


@ninja_learn_ir
👍111
💎 معرفی adminer 💎

امروز می‌خوایم درباره یه ابزار جذاب برای مدیریت دیتابیس‌ها به اسم Adminer صحبت کنیم و در آخر، یاد بگیریم چطوری با استفاده از Docker سریع و راحت یه سرویس Adminer بیاریم بالا. 🚀

حالا Adminer چیه؟ 🤔

خب Adminer یه ابزار تحت وب برای مدیریت دیتابیس‌هاست که کار باهاش خیلی ساده و رونه. اگه تا حالا با ابزارهایی مثل DBeaver یا HeidiSQL کار کردین و دنبال یه گزینه سبک‌تر و ساده‌تر هستین، Adminer بهترین انتخابه این ابزار از دیتابیس‌های مختلف مثل MySQL، PostgreSQL، SQLite، و حتی MongoDB پشتیبانی می‌کنه.

چرا Adminer؟ 🤷‍♂️

1⃣ سبک و سریع:
دیگه لازم نیست ابزارهای سنگین نصب کنی. Adminer خیلی سبک و کم‌حجمه.

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

3⃣ رابط کاربری ساده:
با یه محیط ساده و بدون شلوغی، سریع به دیتابیس‌هات دسترسی داری.


4⃣ نصب و راه‌اندازی راحت:
با چندتا کامند ساده توی Docker می‌تونی به‌سرعت راهش بندازی

چطور با Docker سرویس Adminer رو بالا بیاریم؟ 🐳

حالا بریم سر اصل مطلب به‌جای نصب دستی، از Docker استفاده می‌کنیم تا Adminer رو در عرض چند دقیقه راه بندازیم. 😎

قدم‌های راه‌اندازی Adminer با Docker:

1⃣ نصب Docker:
اگه Docker رو نصب نداری، اول از همه باید Docker رو نصب کنی. برای این کار می‌تونی به سایت Docker بری و طبق راهنمای اون برای سیستم‌عامل خودت نصبش کنی.

2⃣ اجرای Adminer با Docker:

بعد از اینکه Docker نصب شد، کافیه دستور زیر رو توی ترمینال اجرا کنی:

docker run -d --name adminer -p 8080:8080 adminer



توضیحات:
docker run -d --name adminer

این دستور یه کانتینر در حالت جدا شده (detached) اجرا می‌کنه.

اسم کانتینرت رو "adminer" می‌ذاره.

-p 8080:8080:
پورت 8080 روی سیستم‌ت رو به پورت 8080 داخل کانتینر متصل می‌کنه تا بتونی از مرورگر بهش دسترسی داشته باشی.

adminer:
این قسمت می‌گه که از ایمیج Adminer استفاده کنه.


3⃣ اتصال به Adminer:

حالا Adminer رو توی مرورگر اجرا کن. آدرس زیر رو وارد کن:

https://localhost:8080

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

4⃣ اتصال به دیتابیس:

حالا باید دیتابیس خودت رو به Adminer وصل کنی. اطلاعات مثل نوع دیتابیس، سرور (مثل db برای Docker یا localhost برای لوکال)، نام کاربری و رمز عبور رو وارد کن و تمام 🚀

5⃣ اجرای هم‌زمان دیتابیس و Adminer:

اگر دیتابیس رو هم با Docker اجرا می‌کنی، مثلاً MySQL، می‌تونی با کامپوز Docker (docker-compose) هر دو سرویس رو هم‌زمان بیاری بالا. یه فایل docker-compose.yml شبیه به این درست کن:

version: '3'
services:
  db:
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD: example
    ports:
      - "3306:3306"

  adminer:
    image: adminer
    ports:
      - "8080:8080"


حالا با دستور زیر، هر دو سرویس رو اجرا کن:

docker-compose up -d


با این دستور، MySQL و Adminer به‌صورت هم‌زمان اجرا می‌شن و به راحتی می‌تونی به دیتابیس وصل شی.

جمع بندی 🎯

فهمیدیم اگه دنبال یه ابزار سریع و ساده برای مدیریت دیتابیس‌هات هستی و می‌خوای بدون دردسر از طریق Docker یه سرویس بالا بیاری، Adminer بهترین گزینه‌ست.

امید وارم مفید بوده باشه :)

#db #adminer #docker


@ninja_learn_ir
👍74
🔸 قطعا بهترین کتاب برای افرادی که علاقه مندن به شکلی ساده و شهودی وارد دنیای الگوریتم‌ها بشن کتاب Grokking Algorithms هستش.

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


زیر این پست تو چنل نسخه فارسی و انگلیسی pdf این کتاب رو براتون میزارم ... 🤩


#️⃣ #algorithm #book

🚀 @coolycode
👍5👌31👎1
💎 معرفی پکیج honeypot 💎

امروز می‌خوام درباره یه پکیج خفن برای جنگو به اسم django-admin-honeypot صحبت کنم که به شما کمک می‌کنه جلوی دسترسی‌های غیرمجاز به پنل ادمین پروژه‌تون رو بگیرین. این پکیج به‌صورت حرفه‌ای می‌تونه هکرها و ربات‌هایی که سعی دارن به پنل ادمین سایتتون دسترسی پیدا کنن رو گیر بندازه 😎

حالا django-admin-honeypot چیه؟ 🤔
خب django-admin-honeypot یه پکیج امنیتی برای Django هست که یک صفحه لاگین جعلی برای پنل ادمین شما ایجاد می‌کنه. این صفحه شبیه به صفحه لاگین اصلی به نظر می‌رسه، ولی در واقع تله‌ایه که کاربرهای غیرمجاز رو فریب می‌ده تا اطلاعات ورودشون رو وارد کنن. از این طریق، شما می‌تونید به‌راحتی متوجه بشید چه افرادی قصد دسترسی به پنل شما رو دارن. 💀

چه فایده‌ای داره؟ 🤷‍♂️

1⃣ ردیابی حملات:
شما می‌تونین هر کسی که سعی داره بدون اجازه وارد پنل ادمین بشه رو شناسایی کنین.

2⃣ کاهش ریسک حملات:
هکرها به اشتباه فکر می‌کنن وارد صفحه اصلی شدن و شما می‌تونین از این فرصت استفاده کنین تا حمله رو مدیریت کنین.

3⃣ سادگی استفاده:
بدون نیاز به تغییرات پیچیده توی پروژه‌تون، به‌راحتی می‌تونید این پکیج رو نصب و استفاده کنین.

چطور از django-admin-honeypot استفاده کنیم؟ 🚀

1⃣ نصب پکیج
برای شروع، کافیه پکیج رو نصب کنی:

pip install django-admin-honeypot

2⃣ اضافه کردن به پروژه
بعد از نصب، باید django-admin-honeypot رو به تنظیمات پروژه اضافه کنی. توی فایل settings.py خط زیر رو اضافه کن:

INSTALLED_APPS = [
# برنامه‌های دیگه
'admin_honeypot',
]

3⃣ تنظیمات URL
حالا وقتشه که یه مسیر جعلی برای پنل ادمین بسازی! توی فایل urls.py این تغییرات رو اعمال کن:

from django.urls import path, include
import admin_honeypot.urls

urlpatterns = [
path('admin/', include('admin_honeypot.urls', namespace='admin_honeypot')),
path('real-admin/', admin.site.urls), # مسیر اصلی پنل ادمین واقعی‌تون
]

نتیجه:
- مسیر /admin/ حالا صفحه جعلی ادمینه که تله‌ی شماست 😈
- مسیر /real-admin/ هم مسیر واقعی پنل ادمین شماست که فقط خودتون می‌دونید.

4⃣ تست و بررسی
حالا اگه کسی به /admin/ بره و سعی کنه وارد پنل بشه، اطلاعات تلاش‌هاش توی لاگ‌ها ذخیره می‌شه و می‌تونین بررسی کنین که چه کسی سعی داشته پنل ادمین رو هک کنه. هر لاگ شامل زمان، آی‌پی و اطلاعات لاگین اشتباه فرد مهاجم می‌شه. 📜

جمع بندی 🎯
فهمیدیم استفاده از django-admin-honeypot یه راه عالی برای گمراه کردن هکرها و افرادیه که سعی دارن به پنل ادمین شما دسترسی پیدا کنن. با ساختن یه تله ساده، می‌تونین از دسترسی‌های غیرمجاز جلوگیری کنین و امنیت پروژه‌تون رو بالاتر ببرین.

امید وارم مفید بوده باشه :)

#django #honeypot



@ninja_learn_ir
👍122🔥1👏1
Forwarded from پروگرمرزمیم (Mehan Alavimajd)
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8👏31😁1
امروز یه پست خفن راجب GraphQL داریم 😁
🔥91
💎 معرفی GraphQL و استفاده ازش 💎

اگه تا حالا اسم GraphQL به گوشتون خورده ولی نمی‌دونستید دقیقاً چیه و چه کاربردی داره، امروز قراره باهم برسیش کنیم و بفهمیم چرا این روزها انقدر محبوب شده🌟

حالا GraphQL چیه؟ 🤔

خب GraphQL یه زبان کوئری برای API هاست که توسط فیسبوک توی سال ۲۰۱۵ معرفی شد. این تکنولوژی به شما اجازه می‌ده که دقیقاً همون داده‌هایی که نیاز دارین رو از سرور درخواست کنین. مهم‌ترین ویژگی GraphQL اینه که به جای دریافت یه ساختار ثابت از اطلاعات، می‌تونین مشخص کنین چه داده‌هایی رو دقیقاً می‌خواین و چه داده‌هایی رو نمی‌خواین.

به زبان ساده، GraphQL به شما کنترل بیشتری روی داده‌هایی که از API می‌گیرین می‌ده. 🌍

چرا از GraphQL استفاده کنیم؟ 🤷‍♂️

1⃣ دریافت داده‌های دقیق 🎯
یکی از بزرگ‌ترین مشکلاتی که معماری‌های سنتی API دارن اینه که گاهی داده‌هایی که لازم نداریم رو هم به ما برمی‌گردونن. GraphQL این مشکل رو حل کرده. شما توی GraphQL می‌تونین کاملاً مشخص کنین که چه فیلدهایی از داده‌ها رو نیاز دارین و فقط همون‌ها رو از سرور بگیرین.
مثال: فرض کنین می‌خواین فقط اسم و ایمیل کاربر رو از API بگیرین. کوئری GraphQL می‌تونه این‌طوری باشه:

{
user(id: 1) {
name
email
}
}

و پاسخ هم دقیقاً همون چیزی خواهد بود که درخواست کردین:

{
"data": {
"user": {
"name": "Ali",
"email": "[email protected]"
}
}
}

این یعنی فقط همون داده‌هایی که خواستین برمی‌گرده و هیچ اطلاعات اضافه‌ای به شما داده نمی‌شه.

2⃣ بهینه‌سازی درخواست‌ها 🚀

یکی از مشکلات رایج توی APIهای سنتی، تعداد زیاد درخواست‌ها (requests) برای گرفتن اطلاعات مختلفه. GraphQL به شما این امکان رو می‌ده که با یک درخواست همه داده‌های مورد نیازتون رو بگیرین. شما می‌تونین توی یه کوئری، اطلاعات از چندین منبع مختلف رو دریافت کنین و نیازی به ارسال چندین درخواست نیست.
مثال: فرض کنین می‌خواین اطلاعات کاربر، لیست سفارش‌ها و محصولاتی که خریده رو بگیرین. کوئری GraphQL به‌راحتی این اطلاعات رو توی یک درخواست برمی‌گردونه:

{
user(id: 1) {
name
orders {
id
product {
name
price
}
}
}
}

این بهینه‌سازی توی عملکرد و سرعت، تاثیر زیادی روی تجربه کاربری داره. 💡

3⃣ پشتیبانی از تکامل تدریجی 💻
یکی از ویژگی‌های مهم GraphQL اینه که به‌راحتی می‌تونین API خودتون رو بدون اینکه تغییرات بزرگی به وجود بیارین، توسعه بدین. این یعنی می‌تونین فیلدهای جدیدی به داده‌هاتون اضافه کنین بدون اینکه نیاز به تغییر توی کل API داشته باشین. این قابلیت، انعطاف‌پذیری زیادی توی توسعه و نگهداری API داره.
4⃣ مستندات خودکار 📚
یکی دیگه از ویژگی‌های عالی GraphQL، مستندسازی خودکارشه. از اونجایی که GraphQL یک سیستم تایپینگ قوی داره، می‌تونه به‌صورت خودکار مستندات API رو بسازه و شما همیشه مستندات به‌روز و کاملی دارین. این خیلی به درد تیم‌های توسعه‌ای می‌خوره که از پروژه‌های مختلف استفاده می‌کنن و همیشه باید به مستندات دقیق دسترسی داشته باشن.
کاربردهای واقعی GraphQL 📈

1⃣ فیسبوک: همونطور که گفته شد، GraphQL توسط فیسبوک ایجاد شد و فیسبوک همچنان از اون توی بسیاری از محصولات خودش استفاده می‌کنه، مثل اپلیکیشن فیسبوک و اینستاگرام.

2⃣ گیت هاب: GraphQL به عنوان یک API اصلی توی GitHub استفاده می‌شه و شما می‌تونین از طریق GraphQL به اطلاعات پروژه‌ها و کاربران GitHub دسترسی داشته باشین.

3⃣ شاپیفای (Shopify): توی پلتفرم Shopify، از GraphQL برای بهینه‌سازی و سرعت بخشیدن به APIها استفاده می‌شه.

حچطور از GraphQL استفاده کنیم؟ 🛠️

راه‌اندازی GraphQL توی پروژه‌های مختلف واقعاً ساده‌ست. توی پلتفرم‌هایی مثل Django یا Node.js، پکیج‌ها و کتابخونه‌های آماده‌ای وجود دارن که شما می‌تونین سریعاً ازشون استفاده کنین.

برای مثال، در Django، شما می‌تونین با استفاده از Graphene-Django خیلی راحت یه API GraphQL بسازین.

توجه ⚠️:
این فقط یه مثال ساده برای شروع هستش:
pip install graphene-django

و بعد توی پروژه‌تون:
import graphene

class Query(graphene.ObjectType):
hello = graphene.String()

def resolve_hello(self, info):
return "Hello, world!"

schema = graphene.Schema(query=Query)

این کد یه کوئری ساده به اسم hello می‌سازه که وقتی از GraphQL درخواست بشه، مقدار "Hello, world!" رو برمی‌گردونه.

جمع‌بندی 🎯 
فهمیدیم GraphQL با انعطاف‌پذیری و سرعت بالا، باعث می‌شه که APIهای بهتری طراحی کنین و تجربه کاربری بهتری ارائه بدین.

امید وارم مفید بوده باشه :)

#django #api #graphql


@ninja_learn_ir
🔥16👍32
پی‌نوشت:
تو GraphQL، فقط همون داده‌ای که می‌خوای رو می‌گیری، بدون نیاز به تنظیمات اضافه روی سرور. مثلاً با این درخواست فقط اسم و ایمیل رو می‌گیری:

{
user(id: 1) {
name
email
}
}

درسته که تو REST هم می‌تونی با سریالایزرها داده‌های اضافی رو حذف کنی، ولی تو GraphQL از همون اول کاربر تعیین می‌کنه که چه اطلاعاتی رو می‌خواد، بدون دردسر سریالایزر و فیلتر.
🔥18👍43