Python BackendHub – Telegram
Python BackendHub
7.51K subscribers
314 photos
46 videos
11 files
432 links
Learning python & Backend Engineering, with Mani!

Youtube: https://www.youtube.com/@GitOverHere
Github: https://github.com/ManiMozaffar
Linkedin: https://www.linkedin.com/in/manimozaffar

تبلیغات نداریم

Admin: @Mani_nikou
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
شش مدل API مختلف
کاربردشون هم زیرش توضیح داده که بنظرم خوبه بدونید چیو کجا استفاده کنید

@ManiFoldsPython
👍22🔥4
ویدیو بعدی راجب DI Container و نحوه پیاده سازیش

چقدر از این کد و دلیل پیاده سازیشو رو متوجه میشین؟

پی نوشت:‌سورس کد تمام دوره رو گیتهابه
https://github.com/ManiMozaffar/testing-101

@ManiFoldsPython
👍3
تو قسمت هفتم از پلی لیست اصول تست نویسی در مهندسی نرم افزار، بررسی کردم DI Container یعنی چی و Depends تو FastAPI چطور پیاده میشه و یک فریم ورک پایتونی به نام dependency injector هم بررسی کردم و در اخر یک کانیتر هم خودمون نوشتیم ✌️

https://www.youtube.com/watch?v=mKUNGuBIgKc&list=PLEQ3RnweNGA6v7qTMrDCcpgr9u91zvpq_&index=7

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

@ManiFoldsPython
👍7
قراره این اسکریپت رو خط به خط در ipython اجرا کنید.
چه اتفاق هایی میفته بنظرتون؟


@ManiFoldsPython
چه اتفاق هایی میفته بنظرتون؟ ۱. اکسپشن میده ۲. لیست تو تاپل اپدیت میشه ۳. ایدی تاپل تغییر میکنه ۴. ایدی تاپل تغییر نمیکنه
Final Results
21%
۱ و ۴
9%
۱ و ۲ و ۴
38%
۲ و ۴
12%
۱ و ۳
12%
۲ و ۳
9%
۱ و ۲ و ۳
🤔8
Python BackendHub
تو قسمت هفتم از پلی لیست اصول تست نویسی در مهندسی نرم افزار، بررسی کردم DI Container یعنی چی و Depends تو FastAPI چطور پیاده میشه و یک فریم ورک پایتونی به نام dependency injector هم بررسی کردم و در اخر یک کانیتر هم خودمون نوشتیم ✌️ https://www.youtube.co…
هرچقدر تست نویسی مهمه, ولی بیایم قبول کنیم واقعا تست نویسی حوصله سربره 😂🤝
چیزی خلق نمیکنیم. فقط باگ پیدا میکنیم. به عنوان QA حتی اون باگم نمیتونید برطرفش کنید 😁

@ManiFoldsPython
👍13👎2🥴2😁1
Python BackendHub
چه اتفاق هایی میفته بنظرتون؟ ۱. اکسپشن میده ۲. لیست تو تاپل اپدیت میشه ۳. ایدی تاپل تغییر میکنه ۴. ایدی تاپل تغییر نمیکنه
اما بپردازیم به این سوال... جواب گزینه ۱ و ۲و ۴ هست. این کد در صورتی که اکسپشن میده ولی کار میکنه! دلیلش چیه؟ چرا اینطور شد؟
اول نیازه که ساختمان داده رو خوب بشناسید. وقتی میگیم آبجکتی immutable هست یعنی چی؟‌ اگه اینو متوجه میشدین اصلا گزینه هایی که ۳ توشون بود رو انتخاب نمیکردین.
پس تو پارت یک میپردازم به تفاوت بین immutable ها و mutable ها.

کانسپت immutable یعنی آبجکتی که تو مموری memory id اش تغییر نمیکنه و ثابته. قابل تغییر نیست. پس شما مثلا یک تاپلو به یک تاپل دیگه اضافه کنید چه اتفاقی میفته؟ id تاپل تغییر میکنه. یعنی پایتون براتون یک تاپل جدید میسازه از روی دو تاپل قبلی, و یک جای دیگه مموری ذخیرش میکنه. و دو تاپل قبلی رو پاک میکنه از مموری (اگه رفرنسشون صفر شده باشه و باقی شروط gc collection رعایت شده باشه). برای همینه که عملیات اضافه کردن دو تاپل به هم عملیات پر هزینه ای هست. اما چرا اینجا id اش تغییر نکرد؟ آبجکت immutable وقتی id اش تغییر میکنه که آبجکتی داخلش id اش تغییر کنه. اینجا تاپلی داریم که داره مثلا به لیستی از ایدی یک داخلش رفرنس میده. بنابراین اگه لیست تغییر کنه دلیل نمیشه تاپل هم تغییر کنه. ایدی لیست ثابت میمونه. پس تاپل میتونه داخلش mutable هایی داشته باشه که تغییر کنند بدون اینکه هزینه اضافه و جا به جایی تو مموری داشته باشه
داریم:


lst = [1, 2]
tpl = (lst, 1)
id_1 = id(tpl)
lst.append(3)
id_2 = id(tpl)
assert id_1 == id_2


پس مشکلی نداره تغییر محتوایی داخل تاپل که mutable باشه. ولی اگه immutable باشه طبیعتا آبجکت توش باقی میمونه. مثال زیرو ببینید ->

string = "Hello"
tpl = (string, 1)
id_1 = id(tpl)
string += " World"
id_2 = id(tpl)
assert id_1 == id_2
print (tpl) # ('Hello', 1)
print(string) # 'Hello World'

چه اتفاقی افتاد؟‌ string تغییر کرده ولی تاپلمون تغییر نکرده. چرا؟‌ اگه id استرینگ رو بگیرین و مقایسه کنید متوجه میشین که پایتون برامون یک string object جدید ساخته به نام hello world با یک id دیگه. چون استرینگ immutable هست. ولی آبجکت قبلی که فقط hello بود همچنان همون آیدی رو داره و تاپل به همون آبجکت رفرنس زده بود. برای همینه که توی تاپل تغییر نمیکنه string چون رفرنسی هست به آبجکتی که تو خط اول ساخته بودیم.

@ManiFoldsPython
👍11❤‍🔥1🤡1
Python BackendHub
چه اتفاق هایی میفته بنظرتون؟ ۱. اکسپشن میده ۲. لیست تو تاپل اپدیت میشه ۳. ایدی تاپل تغییر میکنه ۴. ایدی تاپل تغییر نمیکنه
تو پارت دوم میپردازم به اینکه چرا اصلا اکسپشن خورد ولی کد کار کرد؟

پس فهمیدیم که میشه توی تاپل رو تغییر داد به شرطی که mutable باشه. وقتی از سینتکس += استفاده میکنیم تو پایتون داندر مجیک متود iadd رو صدا میزنیم. ابتدا میاد لیست رو append میکنه و طبیعتا آیدیش یکسان میمونه چون mutable هست. .تو قدم بعدی پایتون میاد رو سطح آبجکت tuple و اونجا اکسپشن میده. چرا؟ چون ابجکتی که اپدیت شده رو میخواد assign کنه به ایندکسی از تاپل. این موضوع خطا میده چرا؟ چون نمیتونه یک تاپل (بدون اینکه یک تاپل جدید بسازه) آبجکتی توش تغییر کنه. در صورتی که tuple همچنان داره رفرنس میزنه به آیدی لیستی که قبلا وجود داشته. و چون توی اون مموری آدرس لیست تغییر کرده پس تاپل آپدیت میشه.

یعنی همچین اتفاقی میفته:
tpl[0].__iadd__("Awesome")ا
۱. یعنی فکر کنید اول داره لیست append میشه. اونجا اکسپشن نمیخوره.
۲. توی خود آبجکت تاپل داره اکسپشن میخوره که داره سعی میکنه به ایندکس دسترسی پیدا کنه و آبجکت جدید رو بهش assign کنه.

پس کلا
tpl[...] +=
اکسپشن میخوره. بدون توجه به اینکه ایا واقعا id خود اون ایندکس تغییر کرده بود یا نه.

همین مثال رو شما با دیتا immutable چک کنید جوابش میشه گزینه ۱ و ۴.
@ManiFoldsPython
👍5
متوجه شدید فرق بین mutable و immutable رو و چرا این اتفاق افتاد یا ویدیو بگیرم بعدا؟
Anonymous Poll
51%
اره متوجه شدم
49%
نه ویدیو بگیر
Python BackendHub
تو قسمت هفتم از پلی لیست اصول تست نویسی در مهندسی نرم افزار، بررسی کردم DI Container یعنی چی و Depends تو FastAPI چطور پیاده میشه و یک فریم ورک پایتونی به نام dependency injector هم بررسی کردم و در اخر یک کانیتر هم خودمون نوشتیم ✌️ https://www.youtube.co…
نیاز به یک فیدبک هم دارم تو تولید محتوام, معمولا خودم بدم میاد از ویدیو های توتوریالی که خیلی تند تند همه چیزو نشون میدن انگار که مخاطب هم مثل خودشون اون مطلبو بلده! هی باید pause کنم ببینم چی نوشته و چرا اینکارو کرده.اما از طرفی میزان دقیقه رو به شدت بالا میبره اگه بخوام همیشه کامل توضیح بدم.
من با ویدیو های arjan خیلی حال میکنم چون در عین حالی که کوتاهه, ولی خیلی توضیح داره.

کسایی که حداقل یک ویدیو دیدن, بنظرتون من دارم کم توضیح میدم؟‌یا به اندازه توضیح میدم؟‌یا زیاد توضیح میدم. مثلا فیلم DI Container رو واقعا میشد تو ۷ دقیقه هم جمعش کرد.

@ManiFoldsPython
👍15
مصاحبه بابی ۹ روز دیگست با tech immigrant تو calendarتون بذارین که از دستش ندید🔥🔥
https://www.youtube.com/watch?v=dg5cliosE5w

به شخصه خیلی از بابی یاد گرفتم و واقعا ممنونشم🙌 خیلی به کامینیتی کمک های زیادی کرده

مصاحبه کنندشو نمیشناسم ولی میگن سوالات چالشی میپرسه 👀 ایده داشتین کامنت کنید شاید مصاحبه کننده کامنتتون رو دید :)))

@ManiFoldsPython
🔥14👍71🥰1🤡1
Forwarded from Python BackendHub
The software mindset
قیمت این کورس از ۲۳۰ دلار شروع میشه تا ۷۰۰ دلار که Arjan میفروشه. حالا به هر طریقی دانلود کردیم (با تشکر از سایه بابت معرفی اون طریق 😁)
گذاشتم تو کانال زیر. داره اپلود میشه کامل نشده.

https://news.1rj.ru/str/+wHLS0yl7y_M4Yzdk

این کورس رو حتمااااا ببینید (البته اگه با غیر قانونی دیدنش مشکل ندارین)
مباحثش به شدت مهمه! تو عکس تایتل هاشو گذاشتم.
خودمم دیروز دانلودش کردم که ببینم.

@ManiFoldsPython
👍112
Python BackendHub
The software mindset قیمت این کورس از ۲۳۰ دلار شروع میشه تا ۷۰۰ دلار که Arjan میفروشه. حالا به هر طریقی دانلود کردیم (با تشکر از سایه بابت معرفی اون طریق 😁) گذاشتم تو کانال زیر. داره اپلود میشه کامل نشده. https://news.1rj.ru/str/+wHLS0yl7y_M4Yzdk این کورس رو حتمااااا…
دوستانی که این کورسو میبینن، اگه چپتر های اولش براتون سادست برین چپتر ۸، کورس اصلی از اونجا شروع میشه
مطالبی که تو این کورس گفته شده بنظره من هر پایتون دولوپری باید بلد باشه

@ManiFoldsPython
19
😁22👍11
من کلی نشستم خوندم چطور exporter ها کار میکنن و push gateway ها چطورین و چطوری exporter بنویسیم تو prometheus
با کلی ذوق اومدم کار کنم ولی دیدم واسه هرچی که فکرشو میکنم exporter نوشتن و هر metricای که میتونم بهش فکر کنم ازش میگیرن, خیلی خورد تو ذوقم :))))

چند تا exporterای که استفاده کردم
Redis: https://github.com/oliver006/redis_exporter
FastAPI: https://github.com/trallnag/prometheus-fastapi-instrumentator
PostgreSQL: https://github.com/prometheus-community/postgres_exporter

خوده kludex هم یک داشبورد نسبتا خوب داره رو فست:
https://github.com/Kludex/fastapi-prometheus-grafana

برای postgresql و ردیس البته داشبورد های خیلی بهتری هست:
https://grafana.com/grafana/dashboards/11835-redis-dashboard-for-prometheus-redis-exporter-helm-stable-redis-ha/

https://grafana.com/grafana/dashboards/9628-postgresql-database/

@ManiFoldsPython
👍31😁1
دیروز چند تا دیتابیس ادمین هم تست کردم. که یک چیزی مثل جنگو ادمین داشته باشم ولی سوار رو دیتابیس
تک تک پست میذارم توضیحشون میدم

اینارو تست کردم من دیروز:
Motor Admin -> خیلی ساده و کاربردی بود
خیلی فیچر نداره ولی واقعا setup راحتی داره. پیچیدگی خیلی کمی داره و پیجینشن داره و اکشن هم میتونید تعریف کنید و form داره.. تقریبا میشه گفت عینه جنگو ادمینه

https://github.com/motor-admin/motor-admin

@ManiFoldsPython
🔥2👍1
این یکی metabase بود. خیلی فیچر های خفنی داشت و مثلا لیست و صفحه خودش خودکار جنریت میکرد! خیلی حال کردم باهاش منتهی یک مشکل بزرگ داشت و اونم اینه که لیمیت های احمقانه داشت. مثلا pagination پیدا نکردم من داشته باشه یا مثلا بیشتر از ۱ میلیون row رو نمیتونی دانلود کنی یا بیشتر از ۲۰۰۰ تا row رو نمیتونی ببینی... .
نمیدونم شایدم من کار باهاش رو بلد نبودم داکشم درست حسابی نبود

https://github.com/metabase/metabase
@ManiFoldsPython
👍1
اخرین چیزی که تست کردم appsmith بود
عجیب سنگین بود. ۴ تا کور میخواست و ۸ گیگ رم فقط واسه بالا اوردنش. ۳ تا دیتابیس و nginx کنارش بالا میاورد😂
واترمارکش میخورد رو همه صفحه هایی که میساختین باهاش. همه کار میکرد فقط نمیرفت سره کوچه نون بگیره .خیلی میشد کاستومایزش کرد.
ولی دو مشکل بزرگ داشت:
۱. خیلی خیلی ست آپش زمان میبرد. فکر کنید مثلا واسه داشتن یک list view از دیتابیس باید میومدین تک تک element های صفحه رو براشون action تعریف میکردین و لینکش میکردین به دیتابیس و sql. یا مثلا باید میگفتین این دکمه رو کلیک کنی یک modal باز شه و ... .
۲. منابع زیادی که میگرفت...
خیلی خفن بود ولی اینجا مناسب case من نبود چون حوصله و زمان زیادی میخواست کار کردن باهاش. بنظرم اگه تو شرکت میخواین یک ابزاری داشته باشین که مثلا ui ux کارتون باهاش اپلیکیشن بزنه حتما یک سر به این تولز جذاب بزنید.

https://github.com/appsmithorg/appsmith

فقط پلاگین هاشو ببینید که تو اسکرین شات گذاشتم :))))

@ManiFoldsPython
👍2
کنار تست نویسی میخوام یک دوره دیگه هم تو youtube ببرم جلو همزمان باهاش, این چهار دوره مد نظرمه. کدوم رو ترجیح میدین؟ ‌تو نظر سنجی میذارم:

۱. دوره cutting edge tools:‌ تو این دوره با ابزار و فریم ورک های جدید آشناتون میکنم و باهم رو لبه تکنولوژی راه میریم :)))

۲. دوره design patterns

۳. دوره Neat Python که بررسی میکنم چیزایی که ممکنه ازش به خوبی استفاده نکنید مثل دیتاکلس و pydantic و namedtuple و ...

@ManiFoldsPython
👏9🔥2
کدوم دوره رو بیشتر میپسندین؟
Final Results
12%
Cutting Edge Tools
65%
Design Patterns Deep Dive
23%
Neat Python