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
#واقعی دیدم chatgpt داون شده. رفتم پیج استتوسش. نوشته رفرش کنید درست میشه. 😂
- کار نمیکنه این چرا؟
+‌رفرش کن درست میشه

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

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

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

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

@PyBackendHub
15👍8👎3
نسخه جدید aioclock هم منتشر شد 🔥

تغییرات این نسخه:
- اضافه شدن پشتیبانی برای تسک های sync . هر فانکشن sync توسط aioclock تو تردپول با anyio ران میشه. ولی این رو خوده فانکشنی که دکوریت کردین تاثیر نمیذاره و تبدیل به کوروتین نمیشه و همونطور که استفاده کردین میتونید انجام بدید.

- بهتر شدن داکیومنت. همراه با پشتیبانی از چند نسخه


داکیومنت
گیتهاب

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

@PyBackendHub
🔥193
نسخه بعدی aioclock منتشر شد 👀

تغییرات این نسخه:
اضافه شدن تریگر Cron - با سینتکس cron میتونید راحت تریگر بنویسید.

اضافه شدن OrTrigger - میتونید تریگری بنویسید که شامل تریگر های دیگه میشه و هرکدوم زودتر نوبتشون شد اجرا میشن.

داکیومنت
گیتهاب

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

@PyBackendHub
👍124
Forwarded from Sadra Codes
اگه از FastAPI استفاده می‌کنید و سعی دارید MVP بیارید بالا (درحدی که منابع زیادی مورد نیاز نباشه) پلتفورم‌های زیر Free Trial دارن و بدون پرداخت می‌تونید سرویس بک‌اندتون رو روشون بالا بیارید. داکیومنت و بلاگ هم در دسترس هست کافیه سرچ کنید.


1️⃣ - https://render.com/

2️⃣ - https://www.cyclic.sh/

3️⃣ - https://fly.io/

4️⃣ - https://leapcell.io/

5️⃣ - https://vercel.com/
👍171
کسایی از chatgpt یک سوال میپرسن، یا یک کدی از استک اورفلو کپی پیست میکنن، توضیه میکنم بهشون حتما این مقاله زیر رو بخونید.
https://archive.ph/jRvwx

خلاصه بخوام بگم، کدشون رو داشتن از تایپ اسکریپت میبردن پایتون. مدل های دیتابیس رو دادن chatgpt از پریسما تبدیلش کنه به sqlalchemy. این وسط chatgpt برای یکی از مدل ها برای id مدل، به جای اینکه از دیفالت فکتوری استفاده کنه، از دیفالت استفاده میکرد. و اینطوری بود که اون مدل هروقت instance ای ازش ساخته میشد آیدی تکراری میشد. و دیتابیس ارور میداد. و این باگ باعث ضرر ۱۰ هزار دلاری به این شرکت شد. صرفا برای اینکه یکی‌نمیدونست دیتاکلس توپایتون چطور کار میکنه و به جای خوندن داک از chatgpt پرسید 🙂

@PyBackendHub
👍15👎3🤣3
یک باگ خیلی عجیب
فهمیدین چیه؟
@PyBackendHub
🤔10👍4
Python BackendHub
یک باگ خیلی عجیب فهمیدین چیه؟ @PyBackendHub
کدو اول توضیح میدم چون خیلیا درک نکردن, این کد درواقع داره اینکارو میکنه
SELECT 1

شما وقتی تو sqlalchemy چیزی رو سلکت میکنی خودکار تبدیل به تاپلی از اون چیز میشه. مثلا من اگه 1 رو سلکت کنم میشه Select[Tuple[int]]
پس درواقع تایپ چیزی که دو تا فانکشن دارن ریترن میکنن تاپلی هست که فقط یک int هست.
ولی تو من signature فانکشن گفتم تاپلی از string عه. که خب تایپ اشتباهه.

حالا برگردیم به باگ:
تو فانکشن اول که correct هست تایپ چکر داره این موضوعو به من نشون میده. چون من گفتم q = ... و بعد q رو ریترن کردم.
ولی وقتی خوده فانکشن رو ریترن میکنم مستقیما تایپ چکر تشخیص نمیده. که خیلیی باگ عجیبیه 😂

@PyBackendHub
👾6👍4🥴1🦄1
Python BackendHub
کدو اول توضیح میدم چون خیلیا درک نکردن, این کد درواقع داره اینکارو میکنه SELECT 1 شما وقتی تو sqlalchemy چیزی رو سلکت میکنی خودکار تبدیل به تاپلی از اون چیز میشه. مثلا من اگه 1 رو سلکت کنم میشه Select[Tuple[int]] پس درواقع تایپ چیزی که دو تا فانکشن دارن ریترن…
ایشو زده بودم تو pyright درواقع فهمیدم که باگ نیست. درواقع دیزاین اینطوریه.
ما روش های مختلفی برای resolve کردن تایپینگ داریم. طوری که pyright کار میکنه bidirectional type inference هست. یعنی چی؟
Constructors are typed by inheritance, and so the name is available when resolving the constructor, whereas variables are typed by synthesis, and so each variable must have a unique type.

دقیقا اتفاقی که تو select افتاده . تو sqlalchemy سلکت ۹ تا اورلود داره. یعنی برای ۹ اینپوت مختلف, تایپینگ مختلف داره.
یکی از این overload ها درواقع داره تایپینگ رو satisfy میکنه. یعنی این مسیر رو برعکس میره. درواقع داره چک میکنه که آیا Select[tuple[str]] با تایپ ریترن شده از اون فانکشن satisfy میشه یا نه. و چون یکی از این اورلود ها این satisfy میکنه بنابراین تایپ چکر ارور نمیده.

ولی وقتی assign اش میکنی به یک مقدار و بعد اون مقدار رو ریترن میکنی دیگه نمیره با همه constructor ها (که میشن همون overload ها) چک کنه تایپ satisfy میشه یا نه. داره دو تا تایپ رو باهم مقایسه میکنه.

پس هر موقع شما یک constructor داشتین که بر اساس ورودی ممکن بود تایپ های مختلف بده, باید حواستون باشه که حتما assign اش کنید به یک مقدار تا bidirectional نشه.

@PyBackendHub
👍112😱1
اینم برای reproduce کردنش.

@PyBackendHub
👍5🙏1
‌BenDev
مصاحبه فنی سنیور با مانی @BenDevelop @PyBackendHub https://www.youtube.com/watch?v=rh3acuXS3xw&t=633s
یک سری نکاتی که بنظرم تو ویدیو جا مونده بود

@PyBackendHub
👍4❤‍🔥2
بنظره من دونستن type interface خیلی به دانش شما کمک میکنه و تو نحوه کد زدتون تاثیر میذاره وقتی شروع میکنید بهش فکر میکنید.

حالا quiz امروز:‌ این جفت variable ها درواقع تایپ annotation اشون یکیه. جفتشون Mapping[str,str] هستن. بنظرتون pylance (یا pyright که میشه تایپ چکر vscode من) چطور تشخیص میده که بالایی mutable هست ولی پایینی mutable نیست؟

هینت:‌این سوال لزوما مربوط به پایتون نمیشه. یک قاعده کلی تو کامپیوتر ساینس هست.
@PyBackendHub
👍5
اما جوابش:
بحث ساب تایپ تو پایتونه (چه تو mypy چه تو pyright). که دو روش وجود داره
nominal typing
و
structural typing
وقتی من تو پایتون مینویسم
var = 2
طبق nominal typing خود تایپ چکر میفهمه تایپ var درواقع int هست. (یا حتی دقیقتر Literal 2)
و همیشه nominal به صورت strict بر پایه class hierarchy هست. و غلبه میکنه به structural type به شرطی که تو hierarchy tree اش اون تایپ رو داشته باشه. اگه نداشته باشه ارور میده (تو عکس ببین bar دقیقا همین کیسه)

برای همین شما بنویسی:
foo: int = 2

درواقع تایپ چکر به شما میگه تایپ foo اینت نیست. بلکه Literal 2 هست. تایپ چکر هم ایرادی به شما نمیگیره چون میگه int درواقع Literal 2 رو satisfy میکنه. ولی برعکسش درست نیست. یعنی ساده تر بگم literal 2 همیشه int هست. ولی int همیشه literal 2 نیست.

این موضوع رو تو عکس واضح تر نشون دادم با ۲ تایپی که خودم ساختم.

این رفتار که ایا این دو تایپینگ باید باشن یا فقط یکیش باشه یا چطوری هم دیگه رو satisfy میکنن ممکنه تو زبونا ممکنه فرق کنه ولی کانسپت language design هست.
@PyBackendHub
👍5😭2
This media is not supported in your browser
VIEW IN TELEGRAM
Same question, different places 😂
@PyBackendHub
🤣25😁1
Correlation is not causation
اشتباهی که به عنوان انسان و برنامه نویس زیاد انجام میدیم

تو این سایت همش رو نوشته. تازه نکته جالب اینجاست که خیلیاش ریسرچ و پیپیره.
https://www.tylervigen.com/spurious-correlations

@PyBackendHub
👍10
#توصیه
وقتی دارین از SQLAlchemy استفاده میکنید و دارین یک چیزی سلکت میکنید
بهتره select from رو بنویسید
چون امروز یک ساعت درگیر یک باگی‌بودم، که یک آبجکت cte نسبتا پیچیده چند بار استفاده شده بود، و تو یکی از این دفعات sqlalchemy نمیتونست به درستی متوجه شه رو کدوم مدل باید سلکت from کنه (مدل اشتباهی رو داشت سلکت میکرد) با وجود اینکه فقط یک چیزو داشتم سلکت میکردم.
یعنی به جای
sa.select(Model)
بنویسید
sa.select(Model).select_from(Model)

کلا هرچی لاجیک compile کوئری رو بیرون تر بکشید و explicit تر باشه و به خوده SQL نزدیک تر باشه، بهتره، خیلی edge case وجود داره همیشه.

@PyBackendHub
👍19👌3
چهار روزه تو خونه نت ندارم، نت گوشیم کار میکنه، که خب شارژ گوشیم تموم میشه و فقط تو بالکن آنتن میده، برای همین دو سوم تایمی که میخوام کد بزنم نه استک اورفلویی هست نه داکیومنت آنلاینی نه گوگلی 😂

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

@PyBackendHub
😁21👍5🔥1😱1
مشکل روتر درست شد. فقط یک مشکل ریز داشت اونم این بود که وای فای تقریبا هر ۲-۳ دقیقه یک بار قطع میشه و یک bash noscript نوشتم که اگه قطع بود وای فای سعی کنه دوباره وصل شه :))

@PyBackendHub
🏆24😁21