جنگولرن
3.78K subscribers
287 photos
74 videos
31 files
554 links
آموزش Django و بستگان
Download Telegram
بنظرم دانش تو زمینه بک اند به ۳ قسمت تقسیم میشه، که خیلی مهمه سه تاشو داشته باشیم.

مثلا فکر کنید میخواین یک rest api بنویسید به همراه تست.

قسمت اول بلد بودن فریم ورکی برای اینکاره. مثل پای تست و فست. ولی بلد بودن اینا کافی نیست فقط

قسمت دوم، فلسفه پشت اون موضوعه. که دونستنش خیلی ضروریه. مثلا تو بحث api نویسی کی باید یک اندپوینت post باشه کی put کی patch و .. . یک api چطور باید باشه. Rest api چی داره که بهش میگن restful. و …. یا مثلا برای تست نویسی چی باید تست شه. چقد باید تست نوشته شه. چی باید ماک شه. چی نباید ماک شه.

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

از کانال @PyBackendHub
8👍4
Forwarded from CodeCrafters (Mojtaba)
رویه ذخیره شده Stored Procedure ناجی برنامه های تحت فشار:
در دنیای برنامه‌نویسی(منظور ما سمت Back-End است Front-End 🥸)، بهینه‌سازی و عملکرد روان برنامه‌ها از اهمیت بالایی برخوردار است. در این میان، پایگاه‌های داده نقش حیاتی در ذخیره‌سازی و بازیابی اطلاعات ایفا می‌کنند.

رویه ذخیره‌شده یا Stored Procedure چیست ؟
به صورت خلاصه Stored Procedure یک مجموعه از دستورات SQL است که کار خاصی را انجام میدهد و ما برای آن یک نام مرتبط میگذاریم و در هر جایی که نیاز داشته باشیم آن را فراخوانی میکنیم (اگر پارامتر خاصی نیاز داشته باشد هم میتوانیم به آن پاس بدهیم )

به صورت معمول برنامه نویس ها از ORM هایی مخصوص زبان برنامه نویسی که با آن کار میکنند برای ایجاد کوئری بر روی دیتابیس استفاده میکنند ولی ORM (منظورم هر ORM است حتی اگر معجزه برنامه نویسی قرن باشد!!!) چندین ایراد مهم و اساسی دارند که در ادامه به آن ها اشاره میشود:

۱. شما باید هزینه تبدیل کد هایتان را به SQL پرداخت کنید(با کاهش قدرت برنامه) در نهایت پایگاه داده شما با SQL کار میکند نه زبان برنامه نویسی شما !!!

۲.وقتی از ORM ها استفاده میکنید اگر نیاز به کوئری پیچیده و یا خیلی خاصی داشته باشید قدرت زیادی برای مدیریت این چالش با استفاده از ORM نخواهید داشت.

۳. معمولا برای فراخوانی یک مقدار از پایگاه داده به چندین روش مختلف میتوان این کار را انجام داد که یه سری از این روش ها دارای پرفومنس خوب و بعضی از روش ها دارای پرفومنس وحشتناک هستند (این مورد مربوط به افزایش پرفومنس در SQL است که توضیح طولانی دارد که در اینجا جای نمیگیرد ولی برای آشنایی بیشتر ساده ترین مورد را اشاره میکنم :
تصور کنید جدولی به نام کارکنان و با ۱۵ ردیف داریم و میخواهید مقدار نام از جدول کارکنان خود را بخوانید با استفاده از ORM خود در نهایت به این کوئری خواهید رسید :
select * from employee;

در حالی که شما فقط به نام کارکنان در این جدول نیاز دارید و این جدول دارای ۱۵ ردیف است که فراخوانی ۱۴ ردیف دیگر بیهوده و هزینه برخواهد بود
و این کوئری نیاز شما را برطرف میکرد :


select name from employee;

که دارای پرفومنس بهتری خواهد بود
{شاید بتوانید جلوی استفاده از * بگیرید و ORM را مجبور به فرخوانی تنها name کنید ولی در موارد دیگر همچنین ساده هم نخواهد بود }

) وقتی از ORM خود استفاده میکنید شما کنترل زیادی برای اینکه از چه روشی استفاده کند نخواهید داشت و صرفا کد های ORM خود را خواهید دید

۴. گاها پیش میآید که شما برای فراخوانی مقدار در پایگاه داده با استفاده از ORM کوئری میسازید ولی ORM کوئری عجیبی تولید میکند که فشار فوق العاده ای بر روی برنامه شما وارد میکند.(برای جلوگیری این مورد اگر اصرار به استفاده از ORM دارید باید به موارد پیشرفته ORM خود مراجعه کنید که نیاز به تمرین و زمان است)

از معایب استفاده از Stored Procedure میتوان به این موارد اشاره کرد:


۱. نیاز به دانش خوبی از SQL دارد

۲. در صورت تغییر پایگاه داده نیاز به بازنویسی خواهند داشت

۳.نوشتن برنامه با سرعت خیلی پایین تری پیش خواهد رفت.

مقایسه Stored Procedure با ORM:


در واقع ORMها (Object-Relational Mapping) ابزاری برای نگاشت اشیاء برنامه به ساختارهای پایگاه داده هستند. ORMها به طور خودکار وظایف مربوط به ترجمه کوئری‌ها از زبان برنامه‌نویسی به زبان SQL را انجام می‌دهند.

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

در نتیجه :اگر برنامه شما دارای فشار زیادی بر روی پایگاه داده است و همین طور برنامه شما دارای بار زیادی است میتوانید برای مدیریت آن از Stored Procedure ها در پایگاه داده تان استفاده کنید
یا اینکه میتوانید استفاده نکنید و به زیبایی کد های خود با استفاده از ORM به خود افتخار کنید و بگذارید پایگاه داده تحت فشار کد های SQL عجیب شما تبدیل به نفت شود
این مورد کاملا بستگی به برنامه و نیاز شما بستگی دارد.

#Database #General
@Code_Crafters
😁4👍3👎1
CodeCrafters
رویه ذخیره شده Stored Procedure ناجی برنامه های تحت فشار: در دنیای برنامه‌نویسی(منظور ما سمت Back-End است Front-End 🥸)، بهینه‌سازی و عملکرد روان برنامه‌ها از اهمیت بالایی برخوردار است. در این میان، پایگاه‌های داده نقش حیاتی در ذخیره‌سازی و بازیابی اطلاعات…
من هر شرکتی که بودم اینقدر توی استفاده از SP ها شورش را در آوردند که دیگه همه کارهای اصلی رو با SP پیاده سازی می کردند.

✔️متاسفانه اکثر کدهای SQL ایی که بکند کارها نوشتن بسیار کثیف و غیربهینه بودن. هر چند همون غیربهینه بودن به مراتب از نتیجه ORM بهتر بوده

✔️لذا توصیه میکنم تا جایی که امکان داره از SP استفاده نکنید تا دنیا و آخرت خوبی داشته باشید.
👍6😁1
معرفی پکیج django-silk برای پروفایلینگ

پروفایلینگ چیه؟
در طی طراحی یک برنامه همیشه این سوال برامون پیش میاد که کد و کوئری ما بهینه هست یا نه ،چقدر منابع مصرف میکنه(حافظه ، cpu ، i/o و ...) ،از لحاظ تایمینگ چطور ، و یا حتی تعداد کوئری‌هامون و ... به این موضوع شکل گرفته در ذهن ما در دنیای مهندسی نرم افزار پروفایلینگ میگن (تشکر از codecrafters)

لینک گیت هاب django-silk:
https://github.com/jazzband/django-silk
👍13🔥3
به دنبال ساختار باشید و نه چارچوب

چند روز پیش یه مربی کودک یه حرف خیلی مهمی زد با این مفهوم: «ما اینجا برای بچه ها ساختار تعیین می کنیم نه چارچوب، چارچوب یعنی حد و مرز!»
این جمله رو باید قاب کرد و زد رو دیوار، احتمالا در ابعاد خیلی زیادی از زندگی مهم باشه. در مهندسی نرم افزار و توسعه محصول هم خیلی حرف مهمیه.
بیشتر اوقات ما دنبال چارچوب هستیم در مهندسی نرم افزار، به همین دلیل وقتی خودمون رو به یه چارچوب خاص محدود می کنیم با چالش های زیادی روبرو میشیم. در حالیکه بهتره ما برای توسعه محصول ساختار داشته باشیم و طبق اصول ساختاری کار رو پیش ببریم، اینطوری چالش مون کمتر میشه.
اجازه بدید برداشت خودم از چارچوب و ساختار رو کمی بیشتر باز کنم. ساختار میشه مجموعه از قواعد رفتاری که باید سعی کنیم در توسعه محصول بهشون پایبند باشیم، در مقابل، چارچوب میشه تعیین کردن یه سری حد و مرز مشخص به شیوه ای سختگیرانه.
مثلا اگه بخوام برای توسعه یک سرویس ساختار تعیین کنم احتمالا میگم: این سرویس باید توان پاسخگویی بالایی داشته باشه، در مقابل خطا مقاوم باشه، قابلیت مقیاس پذیری داشته باشه، یک قرارداد ساده و شفاف به کلاینت ها ارائه بده و مواردی از این دست.
اما اگه بخوام چارچوب برای سرویس تعیین کنم احتمالا میگم: ما باید از ساختار کد مبتنی بر clean code یا ddd در فلان repository که خودمون یا دیگران اونو نوشتن پیروی کنیم، باید همه ورودی هارو تو پوشه port قرار بدیم، باید همه مدل هامون تو پوشه models باشه، باید از فلان روش ci/cd استفاده کنیم.

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

خیلی از practiceهایی که معروف شدند مثل clean code و ddd و tdd و غیره هم از نظر من بیشتر به دنبال این هستند که به شما کمک کنند که برای کارتون ساختار تعیین کنید. در حالیکه اشتباهی که زیاد رخ میده اینه که ما با خوندن این مطالب احتمالا بیشتر به سمت درآوردن چارچوب میریم... همه ش به دنبال این هستیم که مثلا یه boilerplate داشته باشیم که از clean code پیروی کنه و همون رو همه جا استفاده کنیم.

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

شما وقتی برای کارت ساختار داشته باشی میتونی انعطاف پذیر باشی و بسته به نیازت چارچوب تعیین کنی، اما اگه بخوای یه چارچوب معین رو همه جا رعایت کنی احتمالا یه جاهایی اصول ساختاری خودت رو مجبور میشی زیر پا بذاری چون هیچ چارچوب واحدی وجود نداره که برای همه نیازها مناسب باشه.
👍8
یه بهانه این سوال در گروه جنگو:

سلام کسی میدونه کاربرد این gettext_lazy که تو اکثر base مدل‌های خود جنگو استفاده شده دقیقا چیه ؟ خودم سعی کردم درکش کنم و یه سرچی زدم نوشته بودن اول اینکه اجباری نیست استفادش بعدم برای افزایش پرفورمنس translation رشته‌هارو رو به تعویق میندازه تو view و template های برنامه.
اوکی ولی دقیقا چی به چی translate میشه ؟

from django.db import models
from django.utils.translation import gettext_lazy as _

class ClassName(models.Model):
   
field = models.CharField(
_("fieldname"),
max_length=100,
help_text=_("help text")
)


یادش بخیر
اوایل یک هفته ای درگیر این بودم که چرا در CBVs جنگو باید از reverse_Lazy استفاده کنیم
همون ایام (حدودا 4 سال پیش) نتیجه بررسی هام رو توی ویرگول نوشتم.
Python class attributes are evaluated on declaration

لینک
👍9🔥1
سوال جنگویی
از کانال @TorhamDevCH
جوابش هم توی کانالش ببینید 😉
اگه یک مدل داشته باشیم به شکل زیر:
from django.db import models


class Fruit(models.Model):
name = models.CharField(max_length=100, primary_key=True)

بعد بیاییم این کد رو اجرا کنیم:
>>> fruit = Fruit.objects.create(name="Apple")
>>> fruit.name = "Pear"
>>> fruit.save()

اومدیم یک آبجکت ساختیم و ذخیره اش کردیم. بعد فیلم name که پرایمری‌کی بود رو آپدیت کردیم و ذخیرش کردیم.

حالا سوال اینه، در این لحظه چه اتفاقی میوفته؟ آیا ارور میخوریم یا ابجکت آپدیت میشه یا اتفاق دیگه ای میوفته؟
👍51
داخل جنگو ۳ نوع Model inheritance داریم. یعنی مدل‌های دیتابیس میتونن به سه شکل از هم دیگه ارث بری کنند.
۱. Abstract base classes
۲. Multi-table inheritance
۳. Proxy models
که فعلا با دوتا اول کار ندارم و احتمالا بدونید چی هستند. ولی سومی همیشه برای من گنگ بود که چی هست و چیکار میکنه. ولی داشتم داکیومنت جنگو میخوندم که رسیدم به توضیح پروکسی‌مدل و تمام، بهترین توضیحی بود که خوندم و تا آخر یادم خواهد ماند :)
if you only want to modify the Python-level behavior of a model, without changing the models fields in any way, you can use Proxy models.
اگر فقط و فقط میخوایید تو لول فانکشنالیتی مدل تغییر ایجاد کنید. مثلا فانکش foobar میخایید یک تغییر بدید برای نسخه جدید ولی میخوایید نسخه قدیمی باقی بمونه میایید از پروکسی استفاده میکنید.
حالا شما یک مدل دارید دقیقا با همون مشخصات ولی فانکشنالیتی فانکشن foobar فرق میکنه.
تو مثال خود داکیومنت یک فانکشنالیتی اضافه کرده:

from django.db import models


class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)


class MyPerson(Person):
class Meta:
proxy = True

def do_something(self):
# ...
pass


@TorhamDevCH
👍8🔥2
Forwarded from Microfrontend.ir
پیاده سازی و برنامه نویسی یک مینی ترلو برای وب و موبایل

روز اول،آموزش پروژه محور، مینی ترلو، ایجاد داکر فایل برای پایتون و جنگو
Backend : Django-PostgreSQL-Redis-Docker
Frontend: Flutter, React, Angular


channel: @microfrontend_ir

Link: https://youtu.be/hw4RBA_ygWM

playlist: https://youtube.com/playlist?list=PLJ9zDGwhhsBytE9r6ZtsIwumc1Xu2lQWW

github: https://github.com/hemanhp/minitrello-services
👍2
📣تبلیغ رایگان

کانال آموزشی:

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

ما در Security_Hint منتظرتیم

@Sec_Hint
1👍1👏1
Forwarded from ITShield
دوره های🔥 رایگانی 🔥که در حال برگزاریه و تو کانال @itshield داره قرار میگیره:

⭐️دوره  اسمبلی (به هدف مقدمه برای مهندسی معکوس و تحلیل بدافزار)
https://t.me/itshieldassembly
⭐️دوره رایگان پایتون برای نفوذگر سطح مقدمات
https://t.me/itshield/1452
⭐️دوره  پایتون برای تست نفوذ پیشرفته (دوره مقدماتیش تموم شده که تو همین کانال  @itshield قرار گرفته)
https://t.me/PythonForPentester
⭐️دوره برنامه نویسی سی پلاس پلاس (به هدف ابزار امنیتی نوشتن)
https://t.me/CPlusPlus4Pentester
⭐️ دوره جرم شناسی ویندوز (For 500)
https://t.me/for500
⭐️ دوره اتوماسیون صنعتی
https://t.me/ICS_ITShield

😎پکیج رایگان ccna
https://t.me/itshield/1322
🤓پکیج رایگان MCSE
https://t.me/itshield/1326
🤓دوره رایگان ISMS
#isms
🥸دوره رایگان مقدمات SOC
#soc
🥸مینی دوره مهندسی اجتماعی
#مهندسی_اجتماعی
🥸 دوره جمع آوری اطلاعات برای تست نفوذ وب
#web_recon
یه سری دوره دیگه هم هست  که باید سرچ بزنین پیدا کنین
نکته هزینه شرکت در این دوره ها اینه که روی لینک زیر کلیک کنین و فاتحه برای عزیزان من بفرستین :
https://fatehe-online.ir/g/13486
🤓یه سری دوره و مباحث آموزشی رایگان دیگه هم هست که با سرچ و ... تو کانال بدست میاد
جنگولرن
بالاخره بریم برای مطالعه کتاب Fluent Python شاید با این کتاب یکم پایتون یاد بگیریم اگه نکته خاصی وجود داشت. توی کامنت های همین پست قرار میدم.
Media is too big
VIEW IN TELEGRAM
آشنایی با مجیک متد repr

آموزش از روی کتاب Fluent Python
توسط محمد عباسی

✔️توی این قسمت نکات خوبی در مورد متد repr گفته میشه.
✔️توی اینترنت تفاوت str و repr رو سرچ می کنیم تفاوت هایی رو اشاره میکنن که زیاد مهم نیست.
✔️اما این ویدئو به صورت کاربردی میگه repr چه کاری میتونه بکنه

آدرس کانالش @pyHints
🔥8👍21
Forwarded from علی بیگدلی
وبینار بررسی مسائل سئو برای توسعه دهنده و آشنایی با ابزار های مهم

در این وبینار قرار است به بررسی مسائل پایه سئو و نحوه استفاده از آن به صورت عملی بپردازیم و از تجربیات مهندس پویا قربانخانی که SEO Master در شرکت Smart-PI هستش استفاده کنیم تا بتونیم کیفیت کار فعلی رو بیشتر ارتقا بدیم.

از جمله مواردی که بررسی خواهد شد:
- سئو مستر کی هستش و چه وظایفی داره؟
- نقش سئو در وبسایت چیه؟
- خوب و بد در سئو به چه چیزی اتلاق میشه
- ابزار های مفید سئو شامل چه مواردی میشه
- چطور از هوش مصنوعی در سئو میشه استفاده کرد

زمان برگزاری :
پنجشنبه 27 اردیبهشت - ساعت 18:00

هزینه:
رایگان 😁

لینک ثبت نام:

https://thealibigdeli.ir/event/
👍1
سیستم SSO (single sign-on) چیست؟

از کانال @code_crafters با کمی تغییرات

✔️یک سیستم احراز هویته که فقط یک صفحه لاگین برای ورود برنامه‌های مختلف ارائه میکنه

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

✔️مزایای استفاده از sso

۱-پسورد سخت:
کاربران تنها از یک پسورد استفاده میکنند و sso امکان ساخت و به یاد داشتن پسورد سخت رو فراهم میکنه چون کاربران تنها از یک پسورد استفاده میکنند و پسورد سخت از حملات (brute force attack) جلوگیری میکند، حدس زدن یک پسورد سخت کار رو غیر ممکن میکند

۲-عدم تکرار پسورد:
وقتی کاربران برای هر سرویس نیاز به پسورد داشته باشند معمولا از یک پسورد تکراری در تمامی سرویس‌ها استفاده میکنند(یک رمز یکسان برای تمامی سرویس‌ها) اگر داده‌های دیتابیس یک سرویس لو بره با همون پسورد کاربر میتوانن به همه سرویس‌های دیگه دسترسی پیدا کنند، sso با حذف چندین صفحه ورود به یک صفحه این مورد رو رفع میکند

۳-اعمال و اجرا کردن سیاست‌های رمز عبور:
با استفاده از سیستم sso متخصصان IT میتوانند به راحتی سیاست‌های رمز عبور خود را اعما کنند برای مثال: بجای بازنشانی رمز عبور دوره‌ای در سرویس‌های مختلف با استفاده از sso کاربر تنها در یک سرویس بطور دوره‌ای رمز عبور خود را بازنشانی میکند

۴-احراز هویت‌های چندعامله(multi-factore authentication):
یا به اختصار MFA رجوع میکنه به بیش از یک عامل هویت سنجی، برای مثال علاوه بر نام کاربری و رمز عبور کاربر ممکن است مجبور به استفاده از احرازهویت سخت افزاری هم گردد، این قطعه سخت افزاری در شناسایی کاربر بسیار مهم است، MFA بسیار امن تر از اتکا به رمز عبور می‌باشد، sso امکان استفاده از MFA رو در یک نقطه واحد بجای استفاده از آن در چندین نقطه که ممکن است غیرقابل پیاده سازی باشد فراهم میکند

۵-مدیریت اعتبار داخلی بجای حافظه خارجی:
معمولا رمزعبور کاربران بصورت مدیریت نشده توسط برنامه‌ها و سرویس‌های که ممکن است از بهترین شیوه‌های امنیتی پیروی کنند یا نکنند ذخیره میشوند، با sso آنها بصورت داخلی در محیطی ذخیره میشوند که تیم IT کنترل بیشتری روی آن دارد

۶-یک نقطه برای ورود رمز عبور


۷-اتلاف زمان کمتر جهت بازیابی رمز عبور
👍51
هر وقت صحبت از شیء گرایی و ارث بری میشه پای Mixin هم میاد وسط. اما دقیقا چیه؟ Mixin توی پایتون یک الگو هستش و کدهایی که از این الگو بهره می‌برند کلمه‌ی کلیدی خاصی یا چیز اضافه‌تری ندارند. فرض کنین ما می‌خواهیم یک متد جدید به یک کلاس اضافه کنیم تا کارایی یا Functionality اون رو زیاد کنیم. اینجا میشه از Mixin استفاده کرد.
مثلا کلاس‌های زیر رو در نظر بگیرید.
class Vehicle:
    pass

class Car(Vehicle):
    pass

class Van(Vehicle):
    pass

class Motorcycle(Vehicle):
    pass

حالا نیاز داریم که متد play music رو هم به این کلاس ها اضافه کنیم، دوتا راه داریم. اولیش اینه که:
class Vehicle:
    pass

class Car(Vehicle):

    def play_music(self):
        print("play_music")

class Van(Vehicle):

    def play_music(self):
        print("play_music")
   
class Motorcycle(Vehicle):
    pass

اما یک ایرادی وجود داره. اینجا خودمون رو تکرار کردیم. درواقع اومدیم دوبار یک تکه کد رو تکرار کردیم و این از نظر کدینگ وجه خوبی نداره. پس این راه حل ما نیست.
روش دوم اینه بیایم به بیس کلاسمون یعنی Vehicle یک متد تحت عنوان play_music اضافه کنیم.

class Vehicle:
    def play_music(self):
        print("play_music")

class Car(Vehicle):
    pass

class Van(Vehicle):
    pass

class Motorcycle(Vehicle):
    pass

اما در این صورت کلاس موتورسیکلت هم دارای رفتار پخش موزیک خواهد شد و این اشتباه است. اینجا است که Mixin خودش رو نشون می‌ده. به کد زیر توجه کنید.
class Vehicle:
    pass

class PlayMusicMixin:
    def play_music(self):
        print("play_music")

class Car(Vehicle, PlayMusicMixin):
    pass

class Van(Vehicle, PlayMusicMixin):
    pass

class Motorcycle(Vehicle):
    pass

درواقع از کلاس PlayMusicMixin قرار نیست هیچ شیٔ ای ساخته شود و صرفا مهم این است که کارایی کلاس‌های خاصی را افزایش شود.
پ.ن: اون کلمه‌ی Mixin انتهای اسم کلاس هم قراردادیه، بهتره نوشته بشه ولی اجبار نداره.
👍22🔥2
Forwarded from Python BackendHub (Mani)
توصیه شخصی, دیدم بعضیا میخوان یک فریم ورک یا زبون جدید یاد بگیرن خیلی سریع میرن سراغ یک پروژه خیلی خوب. (از جمله خودم تا چند وقت پیش). ولی حقیقتا خیلی کمکتون نمیکنه.مثلا من برم یک پروژه خفن FastAPI ببینم و سعی کنم همون پترن رو تکرار کنم. چه مشکلی ایجاد میکنه؟ دید منو به شدت کور و محدود میکنه. یعنی چی؟ فرض کنید شما کاناله منو دارین دنبال میکنید, یک پروژه فست دارین میخواین تصمیم بگیرین چطور با دیتابیس کانکت شید. خب راه های مختلفی هست, مثل استفاده از orm و چه orm ای هم مهمه. یک راه حل اینه که شما صرفا چیزی که من نوشتم رو دنبال کنید, که اصلا ممکنه حرف من درست نباشه یا دیدم bias باشه.

خب چیکار باید کنیم؟‌ نظره من اینه که شما باید بتونید سبک سنگین کنید. ببینید کسی که از orm django استفاده کرده چی گفته (تو اینترنت مقاله پیدا کنید). درک کنید چرا یک نفر از orm django خوشش میاد و یک نفر بدش میاد. همینکارو برای بقیه orm های پایتونی هم انجام بدید. و البته یک قدم خارج تر شید. فلسفه استفاده orm چیه؟ چه فلسفه ای پشت orm django هست؟ چه فلسفه ای پشت sqlalchemy هست؟ query builder چیه؟ فرقش چیه با orm؟ یعنی خیلی فلسفه ها صرفا تو طرز استفاده از ابزاره, نه تنوع یا فیچر های مختلف یک ابزار.

@PyBackendHub
🔥6👍32
Forwarded from مطالب رایگان و آزاد🎈 ( behrad)
* ابزارهای CMake و MinGW و pkg-config چی هستن؟

یه سوال دیگه هم که میلاد پرسیده بود و گفت بذارم چنل این بود که؛

برای اجرا کردن یه پروژه روی ویندوز یه سری پیش نیازها بود که نصب کرده ولی دقیق متوجه نشده داستان‌شون چیه.
* CMake
* MinGW
* pkg-config
=+=+=+=+=+=+=+=+=+=+=+


CMake

سی‌میک یه کامپایلره که کدهای C و سی‌پلاس رو کامپایل میکنه...
Update: دوستمون جاوید تذکر داد که در واقع کامپایلر نیست، یه بیلد سیستمه

اپنسورسه و آزاد.
معمولا پروژه هایی که ازش استفاده میکنن، توی دایرکتوری که باید کامپایل صورت بگیره یه فایل به اسم
CMakeLists

CMakeFile

یا همیچن چیزی دارن که توش کانفیگهای کامپایل نوشته شده،
مثل سوئیچ ها، پارامترهای کامپایل، مقادیر پارامترها، کانفیگها، فلگهای کامپایل و این چیزا
هدفش هم اینه که فرایند کامپایل رو ساده کنه، شما فقط میزنی
cmake
و کامپایل اجرا میشه.
=+=+=+=+=+=+=+=+=+=+=+

MinGW

بسیاری از ابزارهای برنامه‌نویسی روی یونیکس سوار شدن، و کسی که طراحیشون کرده، برای ویندوز نسخه‌ای نداده..
پس ویندوز توی یسری از پکیج های پایه‌ای lack ابزار میزنه...
مثلا همین cmake اگر بخواد توی ویندوز اجرا بشه پیچیدگی های زیادی داره،
کانفیگهاشم باید تغییر کنه..،
پس استفاده از جایگذینها به همین سادگی نیست.

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

واضحه که همه پکیجهای لازم توش نیست،
نیازمند یه جامعه بزرگه که دونه دونه ابزارهارو پورت کنن،‌که این اتفاق نمی‌افته چون کار سختیه...
اصلش اینه که ویندوز باید بتونه خودشو با یونیکس هم ادپته کنه.
https://github.com/msys2/MINGW-packages
اینجا لیست ابزارهایی که پورت شدن رو میتونین ببینین.
من با برنامه‌نویسشم حرف زدم خیلی آدم خوبیه!
=+=+=+=+=+=+=+=+=+=+=+

pkg-config

اینم من توی سیستمم دیفالت دارم، میتونیم منوآلش رو بخونیم ببینیم چیه، توی لینوکس یه man قبل از اسم هر پکیج بذاری، بهت منوآلش رو نشون میده:
pkg-config - Return metainformation about installed libraries

The pkg-config program is used to retrieve information about installed libraries in the system. It is typically used to compile and link against one or more libraries.

کتابخونه‌های سیستم رو میخونه که ببینه چیا نصب شدن و ورژنها چنده،
معمولا از این اطلاعات توی کامپایل استفاده میشه...
الان احتمالا اگه بری فایل cmake رو بخونی توش یه جایی پکیج‌کانفیگو کال کرده که کتابخونه هارو فچ کنه و بذاره توی پارامترهای کامپایل.
👍3
Forwarded from مطالب رایگان و آزاد🎈 ( behrad)
* فرانت در مقابل بک؛ کدوم سخت تره؟

اینم یه داستانی بود که گفتم خوبه بازنشرش کنم؛

Front-end vs Back-end
فرانت-اند در مقابل بک-اند

فرانت به اون قسمتی از یه سیستم کامپیوتری میگن که کاربر مستقیما باهاش در تعامله، مثل رابط گرافیکی (گویی/GUI) و این قسمتها،
بک به تکنولوژی میگن که زیر باک سیستم در حال اتفاق افتادنه...

مثلا توی یه اتوموبیل، فرانت اون ظاهرش و شمای داخلیشه،
بک اون موتورش و زیر باکشه...

توی یه سیستم وب، اون زبانهای سمت سرور و دیتابیس و اینا میشن جزو بک-اند و اون رابط گرافیکی سایت که تلفیقی از HTML/CSS و جاوااسکریپته میشه فرانت-اند.
=+=+=+=+=+=+=+=+=+=+=+


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

این بحث بسیار بزرگیه و پاسخ دادن بهش ساده نیست؛
بیاین با سیستم‌های تحت وب شروع کنیم:

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

1- تسلط به JS که زبان دور از منطقیه، کار سختیه .
2- استایلها (CSS) روی سیستم‌های متفاوت/ مروگرهای متفاوت، بصورتهای متفاوتی تفسیر میشن..، برای همین تنظیم کردن فرانت سایت جوری که بتونه با تمام این تغییرات خودشو ادپته کنه چالش بزرگیه.
3- جاوااسکریپت ورژنهای مختلفی داره، و موتورهای مختلفی رانش میکنن که کارکردش روی براوزر های مختلف ممکنه تغییر کنه، از طرفی خود دیوایس هم توی اجرای JS ممکنه متفاوت عمل کنه، همچنین کانفیگهای کاربرایی که JS رو محدود میکنن و یا میبندن هم تاثیر گذاره...
قبلا اون اوایل اگه JS رو هم خاموش میکردین تقریبا 99 درصد وب همچنان کار میکرد...، چون گیر گرافیک نبودن، یه استایل ساده HTML و نهایتا CSS داشتن...
اما الان 99 درصد سایتهای جهان برای کارکرد نیازمند JS هستن.
هندل کردن JS خیلی کار دشواریه...


به این دلایل، هم کارکردن و هم استخدام کردن فرانتکار خوب توی وب یه چالش بزرگه.

توی مک/اندروید/ویندوز/یا... مثلا یه نفر فرانتکار باشه، فریمورکش مشخصه، کارشم مشخصه، API ها هم مشخص هستن، توی وب اما اینطور نیست.

یه نکته اینکه به اون قسمت آخر که اشاره کردم که که باید توی وب سیستم رو جوری تنظیم کنیم که روی پلتفرمها/مروگرهای مختلف درست جواب بده میگن مشخصه ریسپانسیو (Responsive) یا کامپتیبیلیتی کراس-براوزر(Cross-browser compatibility) .

این لینکها راجع بهش مفیدن:
https://en.wikipedia.org/wiki/Responsive_web_design
https://en.wikipedia.org/wiki/Cross-browser_compatibility
=+=+=+=+=+=+=+=+=+=+=+

این فقط بحث وبش بود؛ اما داستان ادامه داره :
👎10👍4
.

لینک ویدیوی جلسه 10:

https://youtu.be/9twvNteCHPY


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

جزوه ای که روش تدریس میکنم :
https://github.com/SEYEDBAX/course-notes/tree/main/lesson-10

🔔 حتما حتما یوتیوب رو فالو کنید و ویدیو رو لایک کنید و نوتیف رو روشن بزارید 🫶

https://t.me/QaDeveloper

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

@SEYED_BAX | @MakeDeveloper
Please open Telegram to view this post
VIEW IN TELEGRAM
1
.

لینک ویدیوی جلسه 11:

https://youtu.be/8ttgD0DZsBw


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

🔔 حتما حتما یوتیوب رو فالو کنید و ویدیو رو لایک کنید و نوتیف رو روشن بزارید 🫶

https://t.me/QaDeveloper

تمرین این جلسه :
۱- یک تابع بنویسید که بینهایت آرگومان ورودی بگیرد و همه را با هم جمع کند
۲- یک دکوریتور بنویسید که روی تابع بالا بنشیند و تقریق عدد های ورودی را حساب کند(در دکوریتور پرینت شود)
۳- یک کلاس والد بنویسید که به عنوان Person ویژگی های یک انسان را دارا باشد (اسم و وزن و قد و ...) سپس یک کلاس Student که از کلاس Person ارث بری کند و ویژگی های کلاس چندم بودن و چه مدرسه ای بودن به آن اضافه شود.
۴- در کلاس Student توانانیی محاسبه معدل دانش آموز بر اساس نمرات ورودی دانش آموز را داشته باشیم. کلاس Student باید یک تابع جهت ثبت نمره داشته باشد و نمره ها به لیست نمرات instance موجود اضافه شود.

@SEYED_BAX | @MakeDeveloper
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3