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
میخوام یه سوال ازتون بپرسم، بدون اینکه جوابشو سرچ کنید بگید چرا.

اگه برید یه حلقه for بزنید که ۱۰۰,۰۰۰ بار یه متن رو پرینت کنه (یه بار توی golang یه بارم توی python)
و تست سرعت بگیرید.
میبینید پایتون ۱۰ الا ۱۷ ثانیه اجراش میکنع
گولنگ ۵۰ ثانیه الا ۱ دقیقه

بنظرتون دلیلش چیه؟ چرا بااینکه go کامپایلریه و خیلی سریعه انقدر کند تره نسبت به پایتون توی این مورد؟ 🤔

#question


🔆 CHANNEL | GROUP
👍4😁3👎2
Ninja Learn | نینجا لرن
میخوام یه سوال ازتون بپرسم، بدون اینکه جوابشو سرچ کنید بگید چرا. اگه برید یه حلقه for بزنید که ۱۰۰,۰۰۰ بار یه متن رو پرینت کنه (یه بار توی golang یه بارم توی python) و تست سرعت بگیرید. میبینید پایتون ۱۰ الا ۱۷ ثانیه اجراش میکنع گولنگ ۵۰ ثانیه الا ۱ دقیقه…
چرا پایتون تو اینجا سریع‌تر از گولنگه؟ 🤔

1⃣ ماجرای سیستم کال و بافرینگ
وقتی یه متن رو چاپ می‌کنی، اون متن باید از برنامه به خروجی (مثل ترمینال) فرستاده بشه. این کار با چیزی به اسم System Call انجام می‌شه، که مثل زنگ زدن به سیستم‌عامله و می‌گی: "هی، این متن رو بگیر و به خروجی بفرست".

گولنگ:
هر بار که fmt.Println رو صدا می‌زنی، داده فوراً از برنامه به بافر stdout سیستم‌عامل فرستاده می‌شه. یعنی ۱۰۰,۰۰۰ بار fmt.Println یعنی ۱۰۰,۰۰۰ تا تماس جداگانه با سیستم‌عامل

پایتون:
قبل از اینکه داده‌ها رو به stdout بفرسته، خروجی‌ها رو تو یه بافر داخلی نگه می‌داره. بعد وقتی بافر پر شد یا چاپ به انتهای خط رسید (به کمک line buffering)، داده‌ها رو یه‌جا به stdout می‌فرسته. یعنی تعداد تماس‌ها با سیستم‌عامل خیلی کم‌تر می‌شه (مثلاً به جای ۱۰۰,۰۰۰ بار، فقط ۱۰ بار).

2⃣ ـstdout خودش بافرینگ داره، پس چرا مشکل داریم؟

درسته که stdout (که به سیستم‌عامل تعلق داره) خودش بافرینگ داره، ولی این بافر برای هر تماس جداگانه کار می‌کنه.
مشکل اصلی اینه که وقتی گولنگ مستقیم داده‌ها رو به stdout می‌فرسته، تعداد تماس‌ها (System Calls) خیلی زیاده و این تماس‌های متعدد باعث کاهش سرعت می‌شه.
پایتون با بافر داخلی خودش این مشکل رو حل می‌کنه و تماس‌ها رو کم می‌کنه.

3⃣ چطور گولنگ رو بهینه کنیم؟
اگه بخوای گولنگ هم مثل پایتون سریع بشه، باید بافرینگ رو دستی پیاده‌سازی کنی. مثلاً با bufio.Writer:
package main

import (
"bufio"
"os"
)

func main() {
writer := bufio.NewWriter(os.Stdout) // بافر کردن خروجی
for i := 0; i < 100000; i++ {
writer.WriteString("Hello, world!\n")
}
writer.Flush() // ارسال بافر به خروجی
}

اینجا bufio.Writer خروجی‌ها رو توی یه بافر داخلی نگه می‌داره و فقط وقتی که بافر پر شد یا خودت Flush کردی، داده‌ها رو به stdout سیستم‌عامل می‌فرسته.

4⃣ نتیجه

گولنگ:
هر بار با fmt.Println یه تماس به سیستم‌عامل می‌فرسته، که هزینه‌ی زیادی داره.


پایتون:
با بافر داخلی خودش، تماس‌ها رو کم می‌کنه و همین باعث می‌شه در چاپ‌های متوالی سریع‌تر باشه.


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

🔆 CHANNEL | GROUP
👍14🔥64
نظرتون چیه درمورد Golang هم پست بزاریم؟
👍50👎15👀2
Ninja Learn | نینجا لرن
نظرتون چیه درمورد Golang هم پست بزاریم؟
مثل اینکه از go خوشتون اومده😂
👍16👎74😁3🆒1
خب خب Go چیه و چرا؟

گو (Go)، یا همون Golang که لوگوش از حیوان gopher الهام گرفته شده، یه زبان برنامه‌نویسی مدرنه که گوگل سال 2009 معرفی کرد.

چرا Go ساخته شد؟ 🤔
تو پروژه‌های بزرگ، زبان‌هایی مثل C++ و Java، با وجود قدرت زیاد، به دلیل پیچیدگی زیاد و سرعت پایین توسعه، دردسرساز بودن. Go این مشکلات رو با ترکیب سادگی و سرعت حل کرد:

1⃣ سینتکس ساده:
کدها راحت‌تر نوشته و خونده می‌شن.


2⃣ عملکرد بالا:
ـ Go مثل C مستقیماً به کد ماشین کامپایل می‌شه، برای همین سریع اجرا می‌شه.


3⃣ مدیریت حافظه خودکار:
با استفاده از Garbage Collection، مدیریت حافظه ساده و بدون دخالت مستقیم برنامه‌نویس انجام می‌شه.


4⃣ ابزارهای مدرن:
مدیریت همزمانی، تست، و مدیریت حافظه به شکل مدرنی طراحی شده.


5⃣ مناسب برای پروژه‌هایی با مقیاس بالا:
ـGo در ابتدا برای تسهیل توسعه پروژه‌های بزرگ و زیرساختی گوگل طراحی شد.



ویژگی‌های مهم Go 🧩

1⃣ سادگی
ـGo از همون اول برای ساده بودن طراحی شد. توش خبری از ارثبری پیچیده یا کلی مفهوم سنگین نیست. این یعنی یادگیری و استفاده ازش راحت‌تره ( البته نه خیلی ساده 😅).

2⃣ مدیریت همزمانی به بهترین شکل
ـGo با Goroutines، اجرای همزمان رو خیلی سبک و سریع کرده. این Goroutines نسبت به Threadها خیلییی کم‌هزینه‌تر هستن و فقط چند کیلوبایت حافظه مصرف می‌کنن. مثلا می‌تونی صدها کار همزمان انجام بدی بدون اینکه سرور زیر بار بره.
3⃣ کتابخانه های قدرت مند
کتابخونه استاندارد Go بیشتر چیزایی که برای ساختن یه برنامه نیاز داری رو داره، از کار با شبکه گرفته تا رمزنگاری و فایل. این کتابخونه‌ها به شکل بهینه طراحی شدن تا بدون نیاز به ابزارهای خارجی، بسیاری از نیازهای شما رو برطرف کنن.
4⃣ ـCross-Platform بودن
کد Go رو یه بار کامپایل می‌کنی و روی سیستم‌عامل‌های مختلف می‌تونی اجراش کنی. این قابلیت به خاطر تولید فایل باینری مستقل فراهم شده که نیازی به runtime مثل JVM یا Python Interpreter نداره.
5⃣ سازگاری با معماری Microservices
ـGo به خاطر سبک و سریع بودنش، برای ساخت Microservices عالیه. سرویس‌های کوچیک و مستقلی که Go مدیریت‌شون رو خیلی راحت کرده.
6⃣ مدیریت Dependency‌ها با Go Modules
ـGo ابزار Go Modules رو داره که مدیریت وابستگی‌ها رو ساده و مدرن کرده. این ابزار امکان تعریف ورژن ها و مدیریت کتابخانه‌ها رو خیلی راحت‌تر از روش‌های سنتی میکنه.
کجاها از Go استفاده می‌شه؟
ـBackend
ـDevOps
ـCloud
ـDistribution systems
ـBloc
kchain
و...

نمونه کد Go 💻

یه مثال از ارسال درخواست HTTP همزمان با استفاده از Goroutines:
package main

import (
"fmt"
"net/http"
)

func fetch(url string) {
resp, err := http.Get(url)
if err != nil {
fmt.Println(url, "Error:", err)
return
}
defer resp.Body.Close()
fmt.Println(url, resp.Status)
}

func main() {
urls := []string{"https://example.com", "https://google.com", "https://golang.org"}

for _, url := range urls {
go fetch(url)
}

fmt.Scanln() // برای جلوگیری از بسته شدن برنامه



#go #برنامه_نویسی


🔆 CHANNEL | GROUP
👍84
Learning Go 2024 494pages.pdf
4.7 MB
این کتابم برای یادگیریش پیشنهاد میدم

#کتاب #go


🔆 CHANNEL | GROUP
10
این گروه رو برای بچه های FastAPI زدم
هرکس دوست داشت جوین بشه.

https://t.iss.one/fastapiir

🔆 CHANNEL | GROUP
👍9
Ninja Learn | نینجا لرن pinned «این گروه رو برای بچه های FastAPI زدم هرکس دوست داشت جوین بشه. https://t.iss.one/fastapiir 🔆 CHANNEL | GROUP»
Ninja Learn | نینجا لرن
این گروه رو برای بچه های FastAPI زدم هرکس دوست داشت جوین بشه. https://t.iss.one/fastapiir 🔆 CHANNEL | GROUP
دوستان سعی کنید این کامیونیتی رو بزرگ کنید چون واقعا کامیونیتی fastapi فارسی خیلی کوچیکه، عملا صفر هست 😕
11👎2
پست بعدی؟
5👍4
خودمونیما
عجب خانواده باحالی شدیم 🙃
واقعا ازتون خیلی انرژی میگیرم ❤️
27
Still golden

🔆 CHANNEL | GROUP
🤣12🔥4
Forwarded from Python BackendHub (Mani)
یکی از اشتباهات رایج و خیلی بد تو دیزاین دیتابیس که من دیدم خیلی انجام میدن اینه که سعی میکنن state یک entity رو با چند boolean ست کنند.
مثلا برای یوزر داریم:
is_active
is_banned
یا شما میتونی برای پردازش یک دیتایی اینطوری هم ذخیره کنی:
is_pending
is_success

اما خیلی پرکتیس بدیه. چرا؟ به ۲ دلیل:
۱. حالت هایی به وجود میاد از ترکیب این boolean ها که رخ دادنش ممکن نیست. مثلا چطوری میشه is_pending=true باشه و is_success هم true باشه؟ حالا هرچی جلوتر برید و تعداد boolean هاتون بیشتر شه این ترکیب هایی که امکان رخ دادنشون وجود نداره خیلی بیشتر میشه. مثلا ۴ تا boolean میشه ۱۶ حالت. آیا واقعا همه ۱۶ حالت رو دارین؟!
۲. راه حل دوم خیلی بهتره! راه حل دوم چیه؟‌استفاده از یک Enum تو دیتابیستون.

PENDING
SUCCESS
FAILED

حالا یک جایی نیازه که ایمیل بزنید اگه این پردازش موفقیت آمیز نبود. خیلی راحت میتونید رو همه حالت ها match case کنید. و در نهایت یک assert never هم قرار بدید.
اینطوری فردا اگه یک state جدید اضافه کنید به اپلیکیشنتون, همه جای کدتون ارور تایپینگ میخورید تا مجبور شید رفتار و ساید افکت state جدید رو تو همه جا هندل کنید.


match state:
case State.FAILED:
email_to_user()
case State.SUCCESS | State.FAILED:
pass # do nothing
case _:
assert_never(state)



@PyBackendHub
🔥9👍4
🚀 معرفی FastAPI

ـ FastAPI یه فریم ورک پایتونیه که باهاش میشه داخل پایتون api توسعه داد که تازگیا خیلییی بین پایتون کارا سرو و صدا کرده.
ـFastAPI یه فریم‌ورک مدرن برای ساختن APIبا پایتون و ویژگی هایی مثل async/await که بهینه شده و... . خیلی از شرکت‌های بزرگ مثل Netflix و Uber برای توسعه سرویس‌هاشون از FastAPI استفاده می‌کنن، و دلیلش هم مشخصه: سریع، ساده و انعطاف‌پذیره.

💡 چرا FastAPI محبوبه؟
سریع‌ترین فریم‌ورک پایتون: FastAPI به لطف استفاده از Starlette و Pydantic، یکی از سریع‌ترین فریم‌ورک‌های پایتون حساب می‌شه.

کدنویسی سریع‌تر: تایپ‌هینت‌های پایتون باعث می‌شه نوشتن کدها هم سریع‌تر باشه و هم باگ‌های کمتری داشته باشی.

مستندات خودکار: یکی از بهترین ویژگی‌های FastAPI اینه که خودش به‌طور اتوماتیک با Swagger UI و ReDoc مستندات API رو برات می‌سازه.

پشتیبانی از async/await: فست خیلی خوب از کدونیسی async ساپورت میکنه و یکی از دلایل محبوبیتشه.

🛠 ـFastAPI و کار با دیتابیس
وقتی می‌خوای با دیتابیس کار کنی، معمولاً از ORMها استفاده می‌کنی. تو FastAPI دو تا گزینه معروف داریم:
ـSQLAlchemy
ـSQLModel
حالا کدوم بهتره؟ بیاین دقیق‌تر بررسی کنیم:

ـ🔍 SQLAlchemy؛ قدیمی و قدرتمند
ـSQLAlchemy یکی از معروف‌ترین ORMها برای پایتونه که زیاد استفاده میشه. انعطاف‌پذیری بالایی داره و برای پروژه‌های پیچیده و بزرگ گزینه خیلی خوبیه.
مزیت‌ها:
کنترل کامل روی کوئری‌ها و عملکرد دیتابیس
پشتیبانی از تراکنش‌ها و مدل‌های پیچیده
جامعه کاربری بزرگ و منابع آموزشی زیاد
چالش‌ها:
سینتکسش برای تازه‌کارها ممکنه سخت و پیچیده باشه
نوشتن کدهای زیاد برای مدل‌سازی

ـ🌀 SQLModel؛ ساده و مدرن
ـSQLModel یه کتابخونه جدیدتره که توسط خالق FastAPI یعنی Sebastián Ramírez توسعه داده شده. هدف SQLModel اینه که کار با دیتابیس رو ساده‌تر کنه و کدنویسی رو شبیه به Pydantic (برای ولیدیشن) بکنه.
مزیت‌ها:
سینتکس خیلی ساده و خوانا
پشتیبانی از تایپ‌هینت‌های پایتون
هماهنگی عالی با FastAPI
کمتر شدن کدنویسی و مدل‌سازی سریع
چالش‌ها:
هنوز نسبت به SQLAlchemy به بلوغ کامل نرسیده
برای پروژه‌های خیلی پیچیده ممکنه محدودیت‌هایی داشته باشه

مقایسه کدها
مدل‌سازی با SQLAlchemy:
from sqlalchemy import Column, Integer, String  
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True, index=True)
name = Column(String, index=True)


مدل‌سازی با SQLModel:
from sqlmodel import SQLModel, Field  

class User(SQLModel, table=True):
id: int = Field(default=None, primary_key=True)
name: str = Field(index=True)


همون‌طور که می‌بینید، SQLModel خیلی تمیزتر و کوتاه‌تره و شبیه به Pydantic می‌شه.

🎯 بالاخره SQLAlchemy یا SQLModel؟
اگه تازه‌کار هستی یا پروژه‌ت کوچیکه و می‌خوای سریع کارت راه بیفته، SQLModel گزینه بهتریه. سینتکس ساده‌ای داره و هماهنگیش با FastAPI عالیه.
ولی اگه پروژه‌ت بزرگه یا نیاز به کنترل کامل و قابلیت‌های بیشتر ORM داری ، SQLAlchemy انتخاب بهتریه.
خلاصه:
پروژه‌های کوچیک و متوسط SQLModel
پروژه‌های بزرگ و پیچیده SQLAlchemy

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

#python #fastapi


🔆 CHANNEL | GROUP
21👍5
🔆 CHANNEL | GROUP
😁5🔥4
Forwarded from Django Expert (Boby Cloud)
🚫 اگه مثل توضیحات بالا عمل میکنید، یک مهندس نرم‌افزار نیستید.

™️ @DjangoIR
〰️〰️〰️〰️〰️〰️
© @DjangoEx
👍72👎1
نظرتون درمورد کانال؟ 🤔
Anonymous Poll
84%
خوب
11%
بد
4%
تو کامنتا میگم
10
Forwarded from Python BackendHub (Mani)
خیلیا منظور این متن رو متوجه نشدن، قرار نیست شما انجین دیتابیس بنویسی. ولی همین که بدونی چیه و بتونی راجبش ۵ دقیقه حرف بزنی خیلی مهمه چون بیشتر روز باهاش درگیری. یا بهتره خوده raw sql رو یاد بگیری تا اینکه orm django رو بدون یاد گرفتن sql استفاده کنی ازش.
ایا میشه بدون دونستن sql از جنگو استفاده کرد؟ بله. آیا در این صورت شما skilled worker محسوب‌میشین؟ نه.

خیلی وقتا ممکنه بخاطر دانش بیشترتون، یک راهکار بهتر به ذهنتون برسه که برد بزرگی رو برای بیزنس رقم بزنه. به خاطر دانش بیشترتون، کدتون ممکنه باگ کمتری داشته باشه که براتون پروموشن خواهد داشت. و …

نقل قول ازنظرر Kurt Guntheroth، با ۴۰ سال سابقه و نویسنده چند کتاب معروف:

Some software jobs you can get after a 2-year Associate’s Degree from a community college, or a 9-month boot camp, just like a blue-collar job.
Some software jobs don’t require much independent thought and analysis. How hard is it to arrange content on a web site? (Yes, I know, as hard as you want to make it. But not always).
Some software jobs are done in assembly-line fashion. Pull the next feature card off the stack and start coding, pull the next bug report off the list and start looking for a fix. Your job has no beginning and no end, just an endless stream of little tasks (called sprints), with no time to rest in between, just like a blue-collar job.
Some bosses of software people are Dickensian horrors, driving their team to work long, uncompensated hours. Never a word of praise, but the sure prospect of getting fired for not toeing the mark, just like a blue-collar job.
But those same bosses will insist software is a white collar job, because if it ever did become a blue-collar job, they would have to pay time-and-a-half for overtime (in the US).
I think what’s true is that the software profession is diverging into two levels of skill, professional software developers, and programmers. Once upon a time it was like this, but the original reason for programmers (typing code onto punch cards and running it on batch terminals) went away. Now we’ve got easy problems solved by programmers with limited education, and really hard problems, solved by highly educated and trained professionals.



@PyBackendHub
4👍1