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
zoxide is a smarter cd command, inspired by z and autojump.It remembers which directories you use most frequently, so you can "jump" to them in just a few keystrokes. zoxide works on all major shells.

https://github.com/ajeetdsouza/zoxide

این خیلی چیزه تمیزیه👌 یک سالی میشه تقریبا دارمش رو سیستمم. مخصوصا الان خیلی بدرد بخوره. مثلا یک پروژه داشتم اسمش helicopter بود. نمیتونستم پیداش کنم. میخواستم cd کنم تو دایرکتوریش.


z helicopter


خلاصه اینکه rust چیکار ها که نمیکنه😁

@PyBackendHub
😁19👍2👎2🆒2🔥1
من mkdocs تاحالا کار نکرده بودم
ولی وقتی کار کردم فهمیدم چقدر راحت میتونید داک جنریت کنید. مستقیم از کد. یک عالمه پلاگین مفید داره و پلاگین نوشتن براش هم خیلی سادست.

نمونه پروژه aioclock رو میتونید ببینید که از داک استرینگ خوده سورس داکیومنت نوشتم:

خوده پروژه
داک پروژه

برای پروژه ای که مونولیتیک هست خیلی چیزه خوبی میتونه باشه حتی تو کیس بیزنس (نه لزوما اوپن سورس) چون همیشه این مشکل رو داشتم که داکیومنت وقتی تو نوشن نگه میداری خیلی زود outdate میشه و خیلی غیر منطقی هست که داکیومنت مربوط به کد رو بخوای تو نوشن بذاری.
از طرفی داک استرینگ بنویسی ممکنه تو نگاه اول مشخص نباشه و طرف باید بدونه بره سراغ چی. و سرچ کردن و اینا یکم سخت تره.

@PyBackendHub
👍113
Forwarded from Sadra Codes
در این کنفرانس، دو آزمایش انجام شد. در آزمایش اول، یک تفنگ پینت‌بال روی یک شاسی روبه‌روی یک تابلو قرار داده شد و در هر لحظه، یک توپ پینت‌بال به سمت تابلو پرتاب می‌شد و در نهایت تصویر یک آدمک مصور شد.

آزمایش دوم تقریبا شبیه به آزمایش اول بود با این تفاوت که این‌بار بجای یک تفنگ پینت‌بال، ۱،۱۰۰ مازل پینت‌بال با فشار هوای موجود در چهار محفظه به حجم کلی ۸،۰۰۰ لیتر به سمت تابلو پرتاب می‌شدن.

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

مثلا یک پردازنده ۳ گیگاهرتزی (3GHz) نمایانگر اینه که این پردازنده این قابلیت رو داره که در هر ثانیه، ۳ میلیارد بار بین هر تسک پردازشی سوییچ کنه! تسک پردازشی می‌تونه خواندن از مموری، نوشتن در IO، باز کردن یک سشن وب یا هرچیزی باشه.

وظیفه پردازش در پردازنده بر عهده هسته (Core) هست. یک خصیصه بد هسته‌ها، Lazy بودنشونه. خیلی زود به خواب می‌رن. فرض کنید شما دوتا تسک دارید.

تسک اول: بررسی تعداد اعداد اول بین عدد ۱ میلیارد تا ۲ میلیارد.
تسک دوم: ۲۰ بار پرینت کردن Hello world.

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

این درحالیه که می‌تونستید برای پردازنده مشخص کنید که برنامه شما از دو تسک تشکیل شده که کاملا مستقل و مجزا هستن نسبت به هم تا هسته می‌تونست برنامه رو به نحو بهتری اجرا کنه. این عمل اجرای موازی نام داره. درواقع شما دارید برنامه رو به دو بخش (ترد) تقسیم می‌کنید و دست Core رو واسه سوییچ کردن بین هریک از این تسک‌ها باز می‌ذارید.

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


python -c "import sys; print(sys.getswitchinterval())"
0.005


پردازش موازی به طور کلی به دو صورت انجام میشه. واقعا موازی (Parallel) شبه‌موازی (Concurrent). خیلی خلاصه بگم، در حالت موازی، واقعا چند تعداد هسته اجیر اجرای چند تسک میشن و در لحظه همشون درحال پردازشن اما در حالت شبه‌موازی، یک یا چند هسته روی چند تسک سوییچ می‌کنن. به قدری این سوییچ سریع اتفاق می‌یوفته (۰.۰۰۵ ثانیه در پایتون) که شما فکر می‌کنید واقعا دانلود منجر شما movie1.mp4 و movie2.mp4 رو داره همزمان دانلود می‌کنه!

الان تا حدودی با CPUها آشنا شدیم. این وسط GPUها چطوری کار می‌کنن؟!

برخلاف محدودیت CPU ها در تعداد هسته‌ها، GPUها می‌تونن تعداد بسیار زیادی هسته داشته باشن. در یک پردازنده معمولی امروزی، شما نهایتا ۸ هسته در اختیار دارید. این در حالیه که در یک GPU میان‌رده، حداقل ۱۰۰۰ هسته وجود داره. مشخصا انجام یک تسک بصورت Parallel خیلی سریعتره تا Concurrent و نقطه قوت GPU ها در پردازش موازیشونه!

در یک تسک رندر کردن یک جسم سه‌بعدی، ممکنه هزاران هسته در لحظه روی پردازش ابعاد مختلف اون شی کار کنن. با حجم فضای مموری (VRAM) که در سخت افزار GPU تعبیه شده، مسلما سرعت و حجم، خیلی بیشتر از ریجستری CPU و RAM هست. این در حالیه که یک CPU در حالتی Efficient هست که کلاک بالایی داشته باشه و با سرعت زیادی سوییچ کنه.

حالا می‌دونید دیوایسی که در دست دارید یا تلگرامی که درحال استفاده ازش هستید چطور کار می‌کنه! امیدوارم لذت برده باشید! :) ❤️

Join for more: @lnxpylnxpy
👍21🔥1
نسخه ۰.۱.۰ فریم ورک AioClock منتشر شد 🔥🔥

آیوکلاک یک فریم ورک برای scheduling هست که کاملا Async عه و هر چیزی که یک فریم ورک نیاز داره رو داخلش داره, مثل دپندسی اینجکشن و startup/stop ایونت و ...

تغییرات نسخه جدید:

- بهبود داکیومنت و خوانایی بسیار بالا

- اضافه شدن پلاگین FastAPI - تو لایه HTTP میتونید ببینید چه تسک هایی دارین, که قراره ران بشن و اگه لازم بود یک تسک با درخواست POST همون لحظه ران کنید!

- اضافه شدن API Internal - برای کنترل لایبری, و نوشتن پلاگین FastAPI که میتونید ابزار CLI باهاش بنویسید یا مثل پلاگین فست رو برای فریم ورک های وب دیگه استفاده کنید.


Github
Documentation

برای حمایت خوشحال میشم استار بدید یا contribute کنید.

@PyBackendHub
🔥13👍3
ریسپانس API وقتی tasks رو صدا میزنید.
از همین ID هم میتونید استفاده کنید برای اینکه تسک رو بلافاصله اجرا کنید و دیگه منتظر اون trigger بعدیش نباشین (مثلا اگه قراره فردا ساعت ۹ اجرا شه دوباره)

@PyBackendHub
👍6
ما یک git flow داریم، که شاید اسمشو نشنیده باشین ولی حتما احتمال زیاد همینو رعایت میکنید. تو عکس توضیح داده. تو پروژه واقعی main میشه پروداکشن، و جای release branches میشه staging و develop هم که میشه نسخه dev که معمولا خیلی استیبل نیست.
معمولا وقتی هاتفیکس انجام میدین رو پروداکشن، رو برنچ staging و dev باید rebase کنید.

حالا سوال دارم ازتون، فکر کنید هات فیکس انجام دادید، ولی‌بخاطر اون هاتفیکس برنچ develop کانفلیکت خورد موقع ریبیس که حل کردین. ولی شما ۱۰۰ تا برنچ فیچر دیگه دارین از develop، که حالا همشون دقیقا همون کانفلیکت رو خوردن. بنظرتون راهکارش چیه؟

@PyBackendHub
👍8😱6
Python BackendHub
ما یک git flow داریم، که شاید اسمشو نشنیده باشین ولی حتما احتمال زیاد همینو رعایت میکنید. تو عکس توضیح داده. تو پروژه واقعی main میشه پروداکشن، و جای release branches میشه staging و develop هم که میشه نسخه dev که معمولا خیلی استیبل نیست. معمولا وقتی هاتفیکس…
سید تو کامنت اشاره کرد, چند تا راه حل داره.
یک راه حلی که من قبلا استفاده میکردم و خیلی بهینه نیست اینه که شما برنچ فیچرت رو ریست کنی رو آخرین کامیتی که رو برنچ پروداکشنم هست. و بهت هاتفیکس رو cherry pick کنی و همه کامیت های بعدیشم هم چری پیک کنید (میتونید یک رنجی از کامیت هارو چری پیک کنید نیازی نیست دونه دونه انجام بدید). و بعد کامیت هایی که زده بودید هم چری پیک کنید.برای هر برنچ ۵-۱۰ دقیقه طول میکشه و خیلی بهینه نیست.
راه حل خیلی منطقی تر استفاده از git rerere هست. این قابلیت رو میده که اگه کانفلیکت مشابهی رو یک بار حل کردین دیگه دفعات بعدی هم حل شه. این اسم مخفف Reuse Recorded Resolution هست, که خیلی معنی قشنگی داره. جوری که حلش میکنی اینه که شما وقتی یک کانفلیکت رو حل میکنی گیت راهکار شما رو ذخیره میکنه و یادش میمونه و دفعه بعدی که بخواین دقیقا همون کانفلیکت رو حل کنید git براتون حل میکنه.
یک یوزکیسش دیگش اینه که شما رو یک برنچی زمان زیادی کار کردی و الان اون برنچ خیلی کانفلیکت خورده. اصلا نیازی نیست کانفلیکت هارو حل کنید چون احتمالا قبلا حل کردیشون.

لینک یک مقاله که کامل توضیحش داده
لینک خود داکیومنتش

@PyBackendHub
👍132
🤣34👎8👍5😁1🤬1👌1🌚1🖕1
‌BenDev
درود دوستان مصاحبه سطح جونیور با آقا بهداد عزیز سری جدید ماک اینترویو رو داریم شروع می‌کنیم و لطفا در این فرآیند هرگونه ‍نظر مثبت و منفی دارین برام بنویسین که توی مصاحبه های بعد تغییر بدیم @BenDevelop https://www.youtube.com/watch?v=DJ6lHSp7gUo
یک پلی لیست عالی از امیربهادر 👌
دیدن ماک یکی از بهترین روش های یادگیریه.
مصاحبه انجام دادن مثل رزومه نوشتن یک اسکیله. لزوما کسی که دانش تکنیکال خوبی داره خوب مصاحبه نمیکنه. بخش خیلی زیادی از مصاحبه اسکیل communication هست که خیلی مهمه. لزوما کسی که بره تو یک مصاحبه ۳ تا سوال الگوریتمی حل کنه استخدام نمیشه و FAANG و شرکت های بزرگ تر برای اینکه فرصت چک کردن assignment ندارن و هزینه زیادی براشون میبره و لایو هم نیست رو به پرسیدن سوال های الگوریتمی آوردن‍, که البته هدفشون استخدام یک leet coder نیست‌(ولی سولوشن بهتری براشون وجود نداره یا هنوز پیدا نشده که بتونن یک سوالی رو طرح کنند و طرف بتونه با کد زدن حلش کنه و اسکیل communication اش هم نشون بده و عمق دانشش هم نشون بده)
و البته سوالای system design ای که میپرسن هم دوباره یک مکانیزمه که leet coder ای استخدام نکنن که communication خوبی هم داره.

من میخواستم خیلی وقت پیش یک repo بنویسم برای مصاحبه دادن (مثل رزومه نویسی)
ولی بعدش فهمیدم که اونقدر مصاحبه objective نیست و تا کسی مصاحبه ماک خوب نبینه چند تا مصاحبه نده قلقش دستش نمیاد. ولی نوشتن resume خیلی آبجکتیو هست که یک ریپو دارم در خصوص تکنیک های نوشتن رزومه.

یک نکته که اخیرا کشف کردم برای اپلای, اگه سطح زبانتون خوبه حتما درج کنید (مثلا اگه c1 هستین بنویسید که c1 هستین) چون واقعا خیلیا (حتی اروپایی و خارجی ها) خیلی خوب حرف نمیزنن. البته دروغ ننویسید چون قطعا باعث ریجکتتون میشه اگه بنویسید c1 بلدید ولی تو مصاحبه اول نتونید در حد c1 حرف بزنید.
@PyBackendHub
👍122
چقدر یک architecture میتونه پیچیده باشه؟

Sentry: YES

احساس میکنم این پیچیدگی از قصده که نخوای خودت maintain کنی اینو 😂 چون هزینه maintain کردنش به صورت self host از هزینه اینکه از نسخه کلادش استفاده کنی بیشتره :))

هنوز متوجه نمیشم چرا هم memcached هست هم ردیس. 😁

@PyBackendHub
😁9🤣7👍4🤔2👎1
اگه ری اکت کار میکنید یک سری بزنید به این پروژه:
https://www.locatorjs.com/

کارش اینه که شما رو component ای که تو صفحه مرورگرت میبینی کلیک میکنی و میبرتت تو کد دقیقا قسمت مربوط بهش.‌😅👌

@PyBackendHub
👍6👎1
یک پارادیم که خیلی قشنگه بدونید راجبش CoC هست.
Convention over configuration
این پارادیم core خیلی از فریم ورک هایی هست که شما استفاده میکنی. و خیلی خوبه که خودت هم استفاده کنی.
حالا این پارادیم چیه؟

این پارادیم خیلی سادست. میگه تعداد تصمیم هایی که یک برنامه نویس قراره بگیره وقتی داره از یک component شما استفاده میکنه باید تو کمترین حالت ممکن باشه. یعنی چی؟

یعنی من دارم لایبری pydantic مینویسم. دیدین احتمالا که یک Field داره که شما توضیح میدی تو Field یک سری متا دیتا میدی راجب اون فیلد تو اون دیتا کلس. این فیلد کلی پارامتر میگیره. ولی همه این پارامتر ها آپشناله. و این دقیقا CoC هست. یعنی به شما این flexibility خیلی زیاد رو میده که رفتار یک component رو هرچقدر میخواین تغییر بدید, در عین حال کلی مقدار دیفالت میذاره براتون که لازم نباشه خیلی فکر کنید و تصمیم های زیادی بگیرین.

این اصل رو شما هرجایی میتونید استفاده کنید. چه تو backend چه فرانت چه devops چه هر جای دیگه ای.

@PyBackendHub
👍35
یک مشکلی همیشه تو تستا وجود داره وقتی دارین از container استفاده میکنید
اینم اونه که container پورت میگیره. تستون به یک سری hostname و پورت دپندنسی داره و اینا خیلی راحت میتونن باهم conflict بخورن.
و خیلی‌مشکلات دیگه

و خیلی‌وقتا ماک یا استفاده از SQLite پاسخگو نیاز نیست مثلا ماگریشن دارین یا functionality خاصی از دیتابیس استفاده میکنید یا … و تستاتون flaky میشه

اکثر این مشکلات رو testcontainer حلشون کرده.

https://testcontainers.com/
@PyBackendHub
👍52
داشتم docker compose مینوشتم که یک مشکلی داشتم (رو مخم بود مشکل نبود واقعا‌:)) ) و اونم این بود که وقتی دارم YAML مینوسیم خیلی خودمو دارم تکرار میکنم. مثلا endpoint های opentelemtry ام رو باید به همه service هام بدم.
بنابراین اینطوری میشه:


services:
foo_service:
environment:
trace_endpoint: baz_url
log_endpoint: baz2_url
metric_endpoint: baz3_url
# some other env....

bar_service:
environment:
trace_endpoint: baz_url
log_endpoint: baz2_url
metric_endpoint: baz3_url
# some other env...


و خوب قانع نشدم. گشتم ببینم راه حلی برای این موضوع هست. که بله هست. و اونم استفاده از Anchor هست.



x-otel-endpoints: &default-otel-endpoints
trace_endpoint: baz_url
log_endpoint: baz2_url
metric_endpoint: baz3_url

services:
foo_service:
environment:
<<: *default-otel-endpoints
# some other env

baz_service:
environment:
<<: *default-otel-endpoints
# some other env


خیلی بهتر شد نه؟ مقاله زیر کامل توضیح داده که چیه و چطور کار میکنه. توصیه میکنم یک سری بزنید چون معمولا yaml زیاد مینویسیم.

https://medium.com/@kinghuang/docker-compose-anchors-aliases-extensions-a1e4105d70bd


@PyBackendHub
👍31
یک میم پیرو بحث امشب‌ گروه😂😂😂
@PyBackendHub
🤣29👍1
Forwarded from ‌BenDev
توضیحات در رابطه با ماک اینترویو

@BenDevelop
👍5
یک چیزی که من خیلی زیاد میبینم مخصوصا تو community خودمون اینه که اکثر مواقع سوال ها بدون context پرسیده میشن. و این context خیلی میتونه تو جواب سوال تاثیر داشته باشه. بذارین مثال بزنم:
سلام من میخوام پایتون یاد بگیرم. میشه بهم ۵ تا کتاب معرفی کنید؟
اوکی تخصصتون چیه؟‌بک اند کار میکنید؟ ML؟ دوآپسین و دنبال یک زبون اسکریپتی هستین؟ دیتا اینجینر هستین؟ از پایتون چه یوزکیسی دارین؟! چقدر الان بلدین؟ چیا بلدین؟ این رو جواب سوال تاثیر میذاره. ممکنه جواب رو ۱۸۰ درجه بچرخونه. مثلا یک مثال دیگه.

سلام من از playwright یا سلنیوم استفاده میکنم. میخوام یک element رو سلکت کنم. بنظرتون از چه سلکتوری استفاده کنم؟‌css selector یا xpath یا .. ؟

اگه QA باشین, من میگم css selector بهتره. با پراپرتی test-id تو html که اصلا برای همین کار خلق شده. چرا؟ چون خودتون HTML رو کنترل میکنید و به فرانت میتونید بگین تغییر بده.
ولی اگه دارین اسکرپ میکنید یک سایتی رو, اون موقع xpath selector بهتره. چون احتمال تغییر یک element صفحه html ای که خودتون کنترل میکنید با xpath خیلی کمتره تا با سلکتور. مثلا اگه فرانت از Material UI استفاده میکنه اصلا استفاده از سلکتور خیلی سخت تر میشه. ولی شما با xpath میتونید query های خیلی پیشرفته و پیچیده تری بنویسید. مثلا رو دکمه ای که داخل متنش "login" هست کلیک کن! این query همیشه جواب میده تا زمانی که design ux صفحه کلا تغییر کنه.

پس همیشه بنظرم وقتی سوال میپرسین کامل context بدید. اشکال نداره سوالتون ۴-۵ خط طولانی تر شه ولی جواب درست تری دریافت خواهید کرد.
@PyBackendHub
👍39
#واقعی دیدم chatgpt داون شده. رفتم پیج استتوسش. نوشته رفرش کنید درست میشه. 😂
- کار نمیکنه این چرا؟
+‌رفرش کن درست میشه

@PyBackendHub
🤣17🥰1🌚1👾1
این بدترین طرز فکریه که یک نفر میتونه داشته باشه، اینکه یک سری الاف (علاف؟) تو گیتهاب مجانی دارن کد میزنن. جدا از اینکه اون سری افراد چه درآمدی دارن که مهم نیست، اصلا طرز فکر اشتباهه.
سوال من اینه که شما مگه از یک ابزار اوپن سورس استفاده نمیکنی؟ کمترین contribution ای که میتونی داشته باشی اینه که اگه مشکلی میبینی تو اون ابزار، یک ایشو براش بذاری. این دیگه کمترین حالته.
همین مشکلم ممکنه خودت حل کنی. میتونی با شرکت هماهنگ کنی و همونو PR بدی بشی contributer.
و در نهایت این پروموشنی هست برای خودتون. من همین چند وقت با اینکه اصلا تمایلی نداشتم شرکتمو عوض کنم، ولی ۲ شرکت پروژه aioclock من رو دیده بودن خوششون اومد، و لطف کردن منو به مصاحبه دعوت کردن.(منظورم recruiter نیست)

خلاصه کسی که پروفایل گیتهابش مثل برف سفیده، بنظرم میتونه رد فلگ باشه!

@PyBackendHub
👍55👎11
Python BackendHub
این بدترین طرز فکریه که یک نفر میتونه داشته باشه، اینکه یک سری الاف (علاف؟) تو گیتهاب مجانی دارن کد میزنن. جدا از اینکه اون سری افراد چه درآمدی دارن که مهم نیست، اصلا طرز فکر اشتباهه. سوال من اینه که شما مگه از یک ابزار اوپن سورس استفاده نمیکنی؟ کمترین contribution…
یک کامنتی گذاشتن که ظاهرا سو بداشت شده بود از حرفه من،
من نگفتم کسی که فعالیت گیتهاب نداره حتما رد فلگه. گفتم میتونه رد فلگ باشه. قطعا به عوامل دیگه هم بستگی داره.

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

@PyBackendHub
15👍8👎3