Soft teach – Telegram
Soft teach
45 subscribers
16 photos
6 videos
4 files
32 links
چک نویس و save message یک برنامه نویس 😅
Download Telegram
ما در برنامه نویسی چیزی داریم به اسم software development methodology یعنی اینکه بر اساس چه راه و روشی ما نرم‌افزارمون رو توسعه میدیم.

یکی از اون‌ها مثلا waterfall (آبشار) هست که ما همه‌چیز رو از قبل مشخص میکنیم و بعد شروع میکنیم به کد زدن. سیستم دست و پا گیری هست و اصطلاحا بهشون میگن heavyweight (سنگین‌وزن)، بعد یه عده‌ای اومدن گفتن، بابا ولمون کن، بیایید یه سیستم lightweight (سبک‌وزن‌) داشته باشیم که اینقدر اذیت نکنه و برای همین methodologyهای متفاوتی توسعه پیدا کرد. مثل scrum یا extreme programming و ... که بعدن به این‌ها گفتن مجموعه روش‌های agile (چابک) در مقابل با روش‌های قبلی.

توی مثلا extreme programming از pair progaramming استفاده میشه (یعنی دو نفر میشینن پای یک مانیتور و یکی کد میزنه و یکی نظر میده) و کد رو فقط در صورتی میزنن که بهش نیاز باشه.

توی scrum که الآن رایج‌ترین روش هست، ما یه مفهومی داریم به اسم sprint یعنی یه timebox (جعبه زمانی؟) مشخص دو هفته‌ای باید یک سری هدف‌ها به پایان برسن. پس ما وقت نداریم که محض محکم‌کاری فلان کار رو بکنیم. باید ببینیم که نیاز هست یا نه.

بعد توی scrum که یه روش iterative (تکرارشونده؟) هست، ما سریع پشت سر هم نسخه جدید میدیم بیرون. توی هر iteration (تکرار؟) ما میبینیم که چه چیزی اولویت هست و چه چیزی نیست. وقتی که ما فلان feature رو میدیم، نمیشینیم محض محکم‌کاری به بهترین حالت ممکن بنویسیم، بلکه میبینیم که آیا توی فیدبکی که از کاربرها گرفتن و این‌که ما اون‌ها رو track کردیم توی سایت، آیا اون فیچر رو اصلا استفاده میکنن و ارزش داره که ما توسعه‌اش بدیم یا نه؟

فرض کن مثلا یه feature اضافه کردیم به سایت، export کردن رزومه کاربر. حالا میشه pdf که مهم هست (مهم بودنش رو من و شما مشخص نمیکنیم، بلکه رفتار کاربر توی سایت آنالیز میشه. حتی نظر خود کاربر هم مهم نیست، رفتاری که توی سایت نشون میده مهمه، این خیلی نکته اساسی هست) و export کردن به json. خوب وقتی که اون پی‌دی‌اف مشکل داره، اولویت اون هست. و توی iteration بعدی به اون میرسیم. یا اینکه باید ببینیم که کدوم کاربرها پول بیشتری میدن، آنالیز رفتار اون‌ها مهم‌تر هست، تا یه نفر که مجانی از سایت ما استفاده میکنه. چون هدف نگاه داشتن کاربرانی هست که پول میدن.


@softwrteach
--------‐----------------
🌐💻
👍3
یک مبحثی که خیلی وقت‌ها آدم‌های رو داخل #جنگو گیج میکنه موضوع Aggregation هستش. برای مثال کوئری پایین:


>>> from django.db.models import Avg, Max, Min
>>> Book.objects.aggregate(Avg("price"), Max("price"), Min("price"))
# {'price__avg': 34.35, 'price__max': Decimal('81.20'), 'price__min': Decimal('12.99')}

خب این کوئری مشخصه چه کاری داره انجام میده، همه میتونن بفهمنش مخصوصا وقتی خروجی کوئری رو میبینن، اما اگر ازشون بپرسید خب Aggregation چی هستش هیچ ایده ای ندارن! و این ماجرا از ضعف در دانش SQL سر چشمه میگیره. چون خیلی از آدم‌هایی که دارن #django کار میکنن مستقیم سراغ جنگو اومدن و نرفتن چیزهای دیگه رو مطالعه کنن و یاد بگیرن.

اسم Aggregation داخل ORM جنگو مستقیما از SQL میاد. در SQL یک سری فانکشن وجود داره که بهشون Aggregation functions میگن و کارشون خلاصه سازی اطلاعات:
MIN() - returns the smallest value within the selected column
MAX() - returns the largest value within the selected column
COUNT() - returns the number of rows in a set
SUM() - returns the total sum of a numerical column
AVG() - returns the average value of a numerical column

و خب شما میتونید داخل کوئری‌های SQL ازشون استفاده کنید و دیتا خروجی رو خلاصه سازی کنید و یا یک آمار ازش دربیارید. مثلا میانگین قیمت کتاب‌های تو سال اخیر و ...
یک کوئری مثال برای Aggregation میتونه این باشه:

SELECT AVG(Price) as price_avg FROM Books WHERE puddate='2023-01-01';


خب از اونجایی که ORM جنگو در نهایت قرار کار همین SQL نوشتن برای شما انجام بده و کوئری‌ شمارو به SQL تبدیل کنه شما دقیقا همین کوئری میتونید داخل جنگو به این صورت بنویسید:


>>> from django.db.models import Avg
>>> from datetime import datetime
>>> Books.objects.filter(pubdate=datetime(2023, 1, 1)).aggregate(price_avg=Avg("price"))

میتونید لیست فانکشن‌های Aggregation خود SQL داخل این لینک ببینید و ساپورت جنگو هم میتونید داخل این لینک ببینید.

در نهایت از دانش SQL غافل نباشید و حتما یادش بیگیرید. هرچی بیشتر SQL بدونید زندگی راحت‌تری خواهید داشت.

@TorhamDevCH
خب خب خب WebSocket در Fastapi

امروز می‌خوام درباره‌ی یه موضوع باحال و کاربردی تو دنیای وب حرف بزنم: پیاده‌سازی 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
خب خب خب آشنایی با 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 --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
Forwarded from کاف
نمیدونم هیستوری chat gpt ام خجالت آور تره یا هیستوری ماشین حسابم

💬keisha
Lidia @kafiha
👍1😁1
پروتکل OAuth چیه؟


پروتکل OAuth یک پروتکل امنیتی هست که به شما این امکان رو می‌ده که بدون به اشتراک گذاشتن پسوردتون، به سرویس‌های مختلف دسترسی پیدا کنید. 🔐


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


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

@softwrteach
--------‐----------------
🌐💻
👍1
SQL vs MySQL

وقتی بحث دیتابیس وسط میاد، خیلیا این دو تا رو(SQL ,MySQL) یکی میدونن ولی در واقع این دوتا دو چیز کاملا متفاوتن...

●خوب Sql یه زبان استاندارِ که برای مدیریت و دستکاری دیتابیس های رابطه ای استفاده میشن،در کل یعنی میتونیم رو داده ها عملیات crud رو انجام بدیم بعلاوه میتونیم اطلاعات رو بازیابی کنیم.

● ولی MySQL یه سیستم مدیریت دیتابیس که به ما اجازه عملیات crud و مدیریت داده ها رو می‌ده.

بخوایم یه مثال بزنیم میتونیم بگیم
کهSQL مثل دستور آشپزی هستش که نحوه پخت غذا رو توضیح میده..
و MySQL یک آشپزخونس که غذارو داخلش میپزیم ..

ویژگی های SQL:
۱ یه زبان برای کار با دیتابیس‌هاست.
۲ به هیچ سیستم خاصی وابسته نیست.
۳ روی دیتابیس‌های مختلف مثلPostgrSQL و SQL Server هم کار می‌کنه.
۴ فقط دستورات و قواعد دیتابیس رو تعریف می‌کنه.

ویژگی های MySQL:
۱ یه نرم‌افزار دیتابیس (DBMS) که از SQL استفاده می‌کن
۲ یه نوع خاص از سیستم‌های مدیریت دیتابیس رابطه‌ای (RDBMS) هست.
۳ فقط مربوط به خود MySQL هست.
۴ یه ابزار واقعی برای ذخیره و مدیریت داده‌هاست.

@Learrning_Python
👍2
Forwarded from Linuxor ?
فرانت کارا از وقتی که فهمیدن هوش مصنوعی می‌خواد جای برنامه نویسارو بگیره دیگه نمی‌گن ما برنامه نویسیم


@Linuxor
😁1
دکوراتور ها در پایتون

تا حالا شده بخوای بدون تغییر در ساختار اصلی یه تابع، یه قابلیت جدید بهش اضافه کنی؟
مثلاً یه لاگ بگیری، زمان اجراشو حساب کنی، یا قبل از اجراش چک کنی که ورودی‌هاش معتبرن یا نه؟

اینجاست که دکوراتورها (Decorators) وارد میشن!

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

🎯 چند کاربرد معروف دکوراتورها

1 ثبت لاگ‌ها: بررسی این که چه زمانی یه تابع اجرا شده

2 کنترل سطح دسترسی: چک کردن اینکه کاربر مجوز لازم داره یا نه

3 کش کردن: ذخیره نتایج برای بهینه‌سازی اجراهای بعدی


🔍 مثال:
اندازه‌گیری زمان اجرای تابع:
Copy
Edit
import time

def timer_decorator(func):
    def wrapper(*args, **kwargs):
        start_time = time.time()
        result = func(*args, **kwargs)
        end_time = time.time()
        print(f" runtime : {end_time - start_time:.5f} sec")
        return result
    return wrapper

@timer_decorator
def heavy_function():
    time.sleep(2) 
    print(" function is run")

heavy_function()

📌 خروجی:
function is run
runtime: 2.00012 sec


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

کد رو تمیزتر و خواناتر می‌کنه
بدون تغییر در توابع، ویژگی‌های جدید اضافه می‌کنیم
قابلیت استفاده مجدد از کد رو افزایش میده


تا حالا از دکوراتور ها استفاده کردید؟

#python
@Learrning_Python
خووب
امروز یه مبحثک میخوایم استارتشو بزنیم که به نظرم خیلی نیاز و تقریبا هرکی که برنامه نویسی میکنه باهاش سر و کله میزنه
و قراره به صورت تخصصی از صفر براش محتوا تولید کنیم
البته بگم که این به این معنی نیس که همه مطالبو میگیم و کامل کامله...
این مطالب کلیاتی رو پوشش میده و میتونید منابع زیادی رو بعد از اون بخونید (حالا در ادامه منابعی رو خدمتتون معرفی میکنم)
قبل از شروع:
محتوا به صورت متنی است البته بعضی جاها نیاز باشه عکس و ویدیوم میگیرم
#git
Forwarded from Python Hints
گفتم سال جدیدی یک لیستی از چیزهایی که یک Django Developer باید بلد باشه رو بهتون بدم؛ این موارد حداقل چیزهایی هست که به محض ورود به هر پروژه استاندارد Django باید بلد باشید.
نکته مهم : من ۹۹.۹٪ وقتا فقط Django Rest Framework استفاده می‌کنم پس توی متن هرجا گفتم Django منظورم همون DRF هست.

۱- یک سری چیزها هست که شما باید بلد باشی ربطی به جنگو هم نداره؛ اگر میخوای پیشرفت کنی باید بتونی با اینا کار کنی:

Linux, PostgreSQL, Docker & Docker Compose, Redis, Nginx, Celery & Celery beat
بعضی وقتا RabbitMQ, Kafka هم نیازمندی هست؛ بسته به سطح شما به مرور زمان توی موارد بالا حرفه‌ای تر می‌شید. لینوکس رو خیلی‌ها کنار میذارند که خیلی اشتباه هست؛ ببین کل استک شما قراره بره روی docker, k8s, podman یا ... وقتی یک اتفاقی توی سیستم میوفته و لاگ سرور بهت داده می‌شه هم container شما لینوکس هست هم ۹۹.۹٪ سرور شما؛ اگر نتونی اون مشکل رو بازسازی کنی چطوری میخوای تست بگیری و متوجه‌اش بشی ؟
درحد LPIC1 هم کفایت می‌کنه (اگر خواستید مدرک بگیرید؛ پیشنهاد می‌کنم حتما برای آزمون‌های redhat بخونید)
اگر تاحالا با Linux کار نکردید؛ پیشنهاد نصب و ... بهتون نمیدم؛ از wsl برای تمرین کردن آنچه که لازم هست استفاده کنید و محیط گرافیکی رو بندازید دور؛ شما روی سرور محیط گرافیکی ندارد (درست تمرین کنید).

باقی موارد رو ولی کم کم یادبگیرید؛ کمی یادگیری - بعد تمرین یا استفاده توی پروژه - به چالش و مشکل خوردن - دوباره یادگیری (ادامه یادگیری) و اینکار رو تکرار کنید.
یادبگیرید هر کدوم از موارد بالا چه زمانی استفاده می‌شه و برای چه کاری این موضوع خیلی مهم هست؛ کی باید استفاده کنید و کی نباید استفاده کنید.

اما برای خود Django حداقل چیزهایی که باید همزمان با Django بلد باشید؛ نشده جونیور (حتی بدون سابقه کاری) بیاد پیشم و این موارد رو بلد باشه (به فرض اینکه پایتون رو اصولی یاد گرفته) و توی مصاحبه رد بشه؛ اصلا تا حالا نداشتم واقعا می‌گم :
pytest (basics), djagno-silk, drf-spectacular, faker, factory-boy, djangorestframework-simplejwt, django-axes, django-storage
استاندارد لاگ نویسی هم که درموردش قبلا یک صحبتی داشتیم اون حداقلش هست و بهترش اینه که به ابزارهای موجود وصل بشه.
یک سری چیزا هم توی خود Django هست؛ مثل throttling, middleware, ... که مفاهیمی هست که روی بکند داریم و فارغ از فریمورک باید بلد باشید برای همین صحبتی راجب این موارد ندارم.

واسه همه این‌ها توی سطوح مختلف کلی ویدئو یوتیوب هست و برای مواردی هم که نیست مطمئنم به زودی درست خواهند کرد دوستان؛ ولی نکته مهمتر اینه که یادبگیرید داکیومنت هم بخونید و خودتون رو آپدیت نگه دارید.


پینوشت:
شخصا برنامه‌ای برای ساخت آموزش روی این مباحث یا پروژه‌ها ندارم.
ماشین حساب شما سالم است؟

دیشب مشغول کدزدن با دوست جدیدمان جناب cursor بودم که جایی دیدم روی تست کیس خاصی کد درست کار نمی‌کند (یک جورهایی مساله parse کردن یک جور درخت بود). هر چه خودم تقلا کردم بفهمم چرا این طور شده نتوانستم. cursor را ندا دادم روی چنین تست کیسی درست کار نمی‌کنه ببین مشکل از کجاست. cursor هم شروع کرد به تقلا. به سرعت نوشت مشکل چیست و کد را عوض کرد و بعد هم شروع کرد خودش به نوشتن تست کیس. من دیگر از ماجرا پرت شده بودم و فقط شاهد تلاش‌های این زبان بسته بودم که خودش تست کیس می‌نوشت و اجرا می‌کرد و گاها هم می‌دید روی تست کیس جواب نمی‌گیرد کد را تغییر می‌داد. چند دقیقه‌ای تقلایش طول کشید و نهایتا گفت که great و تمام. کد با آن چیزی که من اول نوشته بودم بسیار تفاوت داشت طوری که برای فهمیدن منطقش باید از خود cursor دوباره می‌پرسیدم. شروع کردم چند testcase جدید را تست گرفتن و دیدم که روی همه آن‌ها درست جواب می‌دهد. مساله تبدیل به یک مساله تصمیم ناپذیر شده بود. نمی‌توانستم بگویم چرا درست کار می‌کند ولی هر چه تست کیس امتحان می‌کردم درست بود. فکر کردم دیدم آیا باید رها کنم؟ اگر جایی اشتباه کرده بود چه؟

ناخودآگاه یاد مثال همیشگی مقایسه LLM و ماشین حساب افتادم. فرض کنید الان یک جمع و ضرب چند رقمی را به ماشین حساب می‌دهیم و آن به ما جواب را می‌دهد. از کجا معلوم که اشتباه نکند؟ مثلا چه می‌دانم پالسی، سیمی، موجی روی هم بیافتند و یک رقم اشتباه شود.  در این صورت آیا ما اصلا اغلب متوجه می‌شویم ؟!؟ کدام یک از ما نتیجه ماشین حساب را وریفای می‌کنیم؟ احتمالا روزهای اولی هم که ماشین حساب‌ها اختراع شده بودند و مکانیکی تر از امروز بودند، افراد به آن‌ها اعتماد کامل نداشتند و جواب نهایی‌شان را به نحوی وریفای می‌کردند. از جایی به بعد ولی احتمالا هم به خاطر اعتمادپذیری بیشتر و هم به خاطر این که محاسبات سنگین شده بودند دیگر هیچ کس به وریفای کردن جواب نهایی ماشین‌ حساب‌ فکر هم نمی‌کند. الغرض از نظر اعتمادپذیری بین LLM‌ها و ماشین‌حساب‌ها در لحظه فاصله زیاد است اما احتمالا روزی هم خواهد آمد که دیگر ما خروجی‌های LLM‌ها را وریفای نمی‌کنیم و از خود نمی‌پرسیم از کجا معلوم این درست بگوید؟ آن روز وضعمان شبیه به امروز است که برایمان سوال نمی‌شود از کجا معلوم این ماشین حساب درست محاسبه می‌کند؟
🔥1
Forwarded from Linuxor ?
درباره سیستم های پیشنهاد دهنده چی می‌دونید؟

این ریپو بهتون یاد می‌ده چطوری یه سیستم ریکامندر شبیه به تیک‌تاک بسازین و مدل خودتون رو آموزش بدین همچنین روی کوبرنیتیز اونو بالا بیارین

https://github.com/decodingml/personalized-recommender-course


@Linuxor
Channel photo removed
Channel photo updated
مقدمه‌ای بر گیت (Git) - جلسه اول

گیت (Git) یه سیستم کنترل نسخه هست که برای مدیریت تغییرات کدها و همکاری بین برنامه‌نویس‌ها استفاده می‌شه. کار کردن با گیت توی سه مرحله‌ی اصلی انجام می‌شه:

۱. محیط کاری (Working Directory)
همون جایی که شما کدهاتون رو می‌نویسید و تغییرات ایجاد می‌کنید. این مرحله مثل میز کار شماست که هر تغییری که توی فایل‌ها بدین، فقط توی سیستم خودتون اعمال می‌شه و هنوز به گیت اضافه نشده.

۲. محل استیج (Staging Area)
اینجا یه جورایی مثل برزخه! 😅
وقتی یه فایل رو توی گیت اضافه می‌کنید (git add)، در واقع اون رو می‌فرستید به این فضای میانی. توی این مرحله، فایل‌ها هنوز ثبت نهایی نشدن و شما می‌تونید قبل از ثبت کردن، چک کنید که چی تغییر کرده.

۳. مخزن (Repository) - ثبت نهایی (Commit)
وقتی تغییرات رو تأیید کردید (git commit)، گیت یه عکس از وضعیت پروژه شما ثبت می‌کنه و تغییرات رو توی مخزن ذخیره می‌کنه. این مرحله همونجاییه که دیگه تغییرات شما به عنوان یه نسخه جدید ثبت می‌شه و قابل مشاهده و بازیابی خواهد بود.

🚀 بعد از این، اگه بخواید تغییراتتون رو با بقیه به اشتراک بذارید، باید اون رو روی یه مخزن راه دور (مثل GitHub یا GitLab) push کنید تا تیم‌تون هم بتونه ببینه و روش کار کنه.

خلاصه‌ی کل مراحل:
1️⃣ ایجاد تغییرات توی فایل‌ها (Working Directory)
2️⃣ اضافه کردن تغییرات به استیج (git add .)
3️⃣ ثبت تغییرات در مخزن (git commit -m "توضیح تغییرات")
4️⃣ ارسال تغییرات به مخزن راه دور (git push)

اینجا فقط یه نمای کلی از کار با گیت بود، توی جلسات بعدی وارد جزئیات بیشتر می‌شیم!
@softwrteach
--------‐----------------
🌐💻
🔥4
کجا چه اروری بدیم ؟...


@softwrteach
--------‐----------------
🌐💻
🌐 فرانت‌اند و بک‌اند دو بخش اصلی و حیاتی در توسعه وب هستن که با هم همکاری می‌کنن تا یه وبسایت یا اپلیکیشن کامل و کاربردی بسازن. بیایید با هم نگاهی به هرکدوم بندازیم: 🔍

💻 فرانت‌اند (Front-End) بخش ظاهری و قابل مشاهده سایت یا اپلیکیشن هست. این همون قسمتیه که کاربر باهاش تعامل داره و همونطور که از اسمش پیداست، این بخش در "جبهه جلو" قرار داره! این بخش شامل طراحی، رابط کاربری (UI) و تجربه کاربری (UX) میشه. از تکنولوژی‌هایی مثل HTML، CSS و JavaScript برای طراحی و ساخت این بخش استفاده می‌شه.

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

⚙️ حالا بک‌اند (Back-End) پشت پرده میاد! این بخش مسئول پردازش داده‌ها، ذخیره‌سازی، و انجام تمام محاسبات و منطق‌های پیچیده است. معمولاً این بخش با سرورها، پایگاه‌های داده (مثل MySQL یا MongoDB) و API‌ها سروکار داره. به‌طور ساده، بک‌اند همانند مغز سیستم عمل می‌کنه که اطلاعات رو مدیریت می‌کنه و به فرانت‌اند می‌ده تا به کاربر نمایش داده بشه.

🔗 ارتباط بین این دو بخش با استفاده از API‌ها و پروتکل HTTP انجام می‌شه. وقتی کاربر یه درخواست (مثل جستجو یا ارسال فرم) به فرانت‌اند میده، فرانت‌اند اون رو به بک‌اند می‌فرسته، بک‌اند اطلاعات مورد نظر رو پردازش کرده و به فرانت‌اند برمی‌گردونه تا به کاربر نمایش داده بشه. به همین دلیل این دو بخش باید همزمان و به‌درستی با هم کار کنن تا یه تجربه کاربری بی‌نقص ایجاد بشه.

👨‍💻 برای ارتباط بهتر بین این دو، تکنولوژی‌های متنوعی هم وجود دارن. مثلاً GraphQL یه تکنولوژی جدیدتره که به‌جای استفاده از APIهای معمولی REST، به فرانت‌اند این امکان رو می‌ده که درخواست‌های دقیق‌تری ارسال کنه و فقط همون داده‌هایی که لازم داره رو دریافت کنه. این می‌تونه سرعت اپلیکیشن رو افزایش بده و مصرف داده‌ها رو به حداقل برسونه.

@softwrteach
------------------------
🌐💻
👍3
✔️ قضیه CAP در سیستم های توزیع شده

در دنیای مدرن که فناوری حرف اول را می‌زند، سیستم‌های توزیع شده به بخش جدایی‌ناپذیری از زندگی ما تبدیل شده‌اند. از خرید آنلاین گرفته تا انجام تراکنش‌های بانکی و تعامل در شبکه‌های اجتماعی، همه‌جا ردپای این سیستم‌ها دیده می‌شود. اما طراحی این سیستم‌ها کار ساده‌ای نیست. یکی از مفاهیم کلیدی که به ما در درک چالش‌های این حوزه کمک می‌کند، قضیه CAP است. CAP که مخفف Consistency (یکسانی)، Availability (دسترس‌پذیری) و Partition Tolerance (تحمل پارتیشن) است، چارچوبی برای فهمیدن محدودیت‌ها و انتخاب‌های پیش روی طراحان سیستم‌های توزیع شده ارائه می‌دهد.

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

در کالی بویز بخوانید: قضیه CAP در سیستم های توزیع شده

@kaliboys | کالی بویز
Please open Telegram to view this post
VIEW IN TELEGRAM
🌐 اکستنشن REST Client در VS Code یک جایگزین عالی برای Postman یا Insomnia


📌 اصلا REST Client چیه؟
ابزار REST Client یه افزونه (اکستنشن) برای VS Code هست که بهت اجازه می‌ده بدون نیاز به ابزارهای جانبی، مستقیماً توی ادیتورت درخواست‌های HTTP ارسال کنی و APIها رو تست کنی!


💻 چرا REST Client؟
سبک و سریع – نیازی به نصب نرم‌افزارهای سنگین نیست
همه درخواست‌ها در یک فایل – دیگه لازم نیست برای هر تست جداگانه کار کنی
پشتیبانی از همه متدهای HTTP – GET، POST، PUT، DELETE و …
مدیریت هدرها و توکن‌ها – به راحتی می‌تونی Authorization و سایر تنظیمات رو انجام بدی
پشتیبانی از متغیرها – دیگه لازم نیست بارها یه URL تکراری بنویسی



چطور از REST Client استفاده کنیم؟
برای شروع، یه فایل جدید با پسوند .http یا .rest بساز و یه درخواست ساده بنویس:
GET https://jsonplaceholder.typicode.com/posts/1

بعد از نوشتن، دکمه "Send Request" که بالای این درخواست ظاهر می‌شه رو بزن و نتیجه رو ببین!



📡 ارسال درخواست POST با JSON
POST https://jsonplaceholder.typicode.com/posts
Content-Type: application/json

{
"noscript": "REST Client در VS Code",
"body": "این یه تسته!",
"userId": 1
}

با زدن Send Request، داده‌ها به سرور ارسال می‌شن و پاسخ برمی‌گرده!



🔗 ارتباط بهتر با متغیرها
گاهی اوقات ممکنه یه API چندین بار با URLهای مشابه تست بشه، اینجاست که متغیرها کمک می‌کنن:
@baseUrl = https://jsonplaceholder.typicode.com

GET {{baseUrl}}/posts/1

حالا هروقت بخوای این درخواست رو تغییر بدی، فقط مقدار baseUrl رو عوض کن!




@softwrteach
------------------------
🌐💻