Python BackendHub – Telegram
Python BackendHub
7.5K 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
برای دوستانی که میخواین شغل پیدا کنن تو خارج از کشور و دارن اپلای میکنن. یک پروژه جذاب اوپن سورس دارم که آگهی هارو به صورت real time از لینکدین میگیره و پردازش میکنه.

لینک گیت هاب | کانال تلگرام | ربات تلگرام | Dev map

تو این پروژه شما میتونید شغل پرفکت خودتون رو بدون هیچ effort ای پیدا کنید. کافیه جوین تلگرام و ربات بشین, و یک query مینویسید. query که مینویسید logıcal python expresion هست مثلا برای پیدا کردن شغل بک اند پایتون یا فرانت اند جاوااسکریپت اینطوری باید بنویسین
(python and backend) or (javanoscript and frontend)
یک or france هم مثلا بهش اضافه کنید فقط شغل های فرانسه رو براتون لحاظ میکنه. هروقت که شغلا تو کانال اضافه شدن ریل تایم فراوارد میکنه براتون.

این پروژه رو تمرینی زده بودم برای خودم ولی محبوب شد و حتی اسپانسرم براش پیدا شده. پرفومنس مارکینگ و آنالیز آگهیشو قوی ترم میکنم وقتی مبلغی که دونیت کردن به حسابم اضافه شه. چون فکر نمیکردم محبوب شه کد بیسش یک چیز شلخته و یکهویی بود که نیاز خودمو کاور کنه ولی الان دارم ریفکتورش میکنم که اصولی باشه. کد crawlerشو دیشب تموم کردم و تو نسخه جدید تو 12 ساعت 6 هزار آگهی کراول زد 😁

ممنون میشم حمایت کنید از پروژه, با فروارد این متن یا ستاره دادن یا contribute کردن به پروژه.

@ManiFoldsPython
👍93👎1
سعی کنید به جای TypedDict از Pydantic استفاده کنید. هم ولیدیشن داره هم felixable تره هم آپشن های خوبی داره و هم خیلی راحت میتونید تبدیلش کنید به json و dictionary و ..

@ManiFoldsPython
👍11👎1
Python BackendHub
@ManiFoldsPython
یکی از کار هایی که میتونید با gpt انجام بدین و خوب انجام میده اینه که شما یک پروتکل از class تون همراه با داک استرینگ بنویسید و بعدش به gpt بدین تا سریع طبق اون تکمیل کنه کدتون رو اینطوری تو وقت صرفه جویی کردین. اون موقع میتونید فقط بپردازین به تست نویسی و دیباگ کدی که gpt نوشته و برطرف کردن ایراد های کلیش.

یک همچین پرومتی من استفاده میکنم در اینجور مواقع:
PROMPT:

1. follow best practices of coding according to fluent python. Explain yourself how did you follow fluent python guideline.
2. Use modern syntax, for instance list comprehension instead of for loop and append in a list. Explain yourself if you used this.
3. Write the code algorithm friendly, make the base problem to be as efficient as possible, with a good time complexity pattern, Explain yourself if you used this approach.
4. Respect SOLID, DRY, KIS, Explain yourself how you did this.
5. Respect clean code practices according to Robert Cecil Martin book, Explain yourself how you respected.
6. Respect type annotation and pay attention to the output annotation of each method. I want it SAME as protocol.
7. Keep docstring with the code. Improve it if you can.
8. your prompts ...

@ManiFoldsPython
👍6
لینک چت من با gpt راجب همین کد با همین پرومت
https://chat.openai.com/share/a92bc14f-d8e9-49f4-bd28-020d543c57f5

خیلی مهمه که هیچوقت نذارین AI راجب base و دیزاین کدتون تصمیم بگیره. اینکه مشورت بگیرین خوبه ولی نذارین کار به تصمیم گیری برسه. مثلا میتونید همین پرومت رو یکم دست کاریش کنید و ازش بخواین که ایراداتتون رو بهتون بگه و معمولا هم ایرادات خوبی پیدا میکنه.

وقتی prompt میدین همیشه ازش بخواین که توضیح بده که چطور به اون prompt ای که دادین عمل کرده. هرچقدر توضیح بیشتری AI بده پاسخش دقیقتره چون مجبور میشه بیشتر پردازش انجام بده.

@ManiFoldsPython
👍7
یک کد کم حجم زدم برای تمیز کردن فایل HTML به کمک xpath و pydantic با type annotation

خود کد اینجاست:
https://github.com/pydantic/pydantic/issues/5984

اگه دوست داشتین استفاده کنید. nested هم کاملا پوشش میده طبق سمپل کدی که تو عکس گذاشتم.
امیدوارم maintainer های pydantic با این ایده موافق باشن که PR بزنم.

@ManiFoldsPython
👍5
یک سوالی برام مطرح شده که چند درصد برنامه نویسا کراول زدن، پس ممنون میشم بگین، تاحالا کراول زدین؟ (کراول = داده کاوی از یک سایت)
Anonymous Poll
30%
بله، با فریم ورکی مثل scrapy
35%
بله ولی فقط با pure python مثلا bs
22%
نه
13%
کراول چیه؟
Python BackendHub
بنچ مارک با نسخه 1.1 پایدانتیک Adaptix time: 0.1495994 Pydantic time: 0.2624557999999999 بنچ مارک با نسخه 2 پایدانتیک Adaptix time: 0.15963560000000004 Pydantic time: 0.07577920000000005 @ManiFoldsPython
این بنچ مارک یک جاییش ایراد داره، اگه گفتین کجا؟ 😀

چند تا ایراد ساختاریم داره، اونا هم اگه میتونید اشاره کنید.
@ManiFoldsPython
یک چیز خیلی جالب متوجه شدم. درواقع وقتی تو پایتون میگیم Optional یعنی required 😅😅 اما None هم میگیره.

پایدنتیکمو آپدیت کردم پروژم به ارور میخورد
کدم اینطوری بود
class LinkedinData(BaseModel):
ads_id: Optional[str]


obj = LinkedinData() # Error
obj = LinkedinData(ads_id=None) # No Error

خود maintainer پایدانتیک گفت

ads_id: Optional[str] is equivalent to ads_id: str | None, which means it can be either str or None, while still being required. So it does match your None parameter (last line). Optional is probably the most confusing thing introduced in Python typing 😅

خلاصه جالبه, آپشنال required هست ولی میتونه none باشه. پس آپشنالی که درواقع باید آپشنال باشه آپشنال نیست 😂😂
@ManiFoldsPython
😁10👍1🤣1
Python BackendHub
این سایت رو جدیدا پیدا کردم برای هندل todolist و کار هام https://habitica.com خیلی سایت جالبیه 😅 حتما یک سر بهش بندازین. برای daily repetitive task و habit هم میتونید برنامه درست کنید. @ManiFoldsPython
habitica
شخصا خیلی کمکم کرده. productivity ام رو به شدت بالا برده. تسک هایی که کامل میکنم هم تو لیست completed نگه میداره و باعث میشه بتونم organize کنم کامل
و البته daily task هامو همیشه انجام بدم :)

پ.ن: حتما هرروز مقاله های real python رو به صورت روزانه بخونید. یک اشتراک پولیم داره که دیروز گرفتم و واقعا کورساش خوبه ولی fluent python و deep dive تا اینجا برام بهتر و عمیق تر بود :) ارزش قیمتی که دادم براش رو نداشته تا الان. حالا بعدا شاید فیدبکم عوض شه.

@ManiFoldsPython
👍5
Python BackendHub
habitica شخصا خیلی کمکم کرده. productivity ام رو به شدت بالا برده. تسک هایی که کامل میکنم هم تو لیست completed نگه میداره و باعث میشه بتونم organize کنم کامل و البته daily task هامو همیشه انجام بدم :) پ.ن: حتما هرروز مقاله های real python رو به صورت روزانه…
مثلا دیروز meta programming اشو تموم کردم. خیلی خلاصه طور بود . تنها نکته ای که تو کل ویدیو هاش بود و یادم نمیاد تو deep dive OOP بهش اشاره شده بود همین بود. نحوه عملکرد enum که خودش درواقع یک metaclass از EnumType هست که سورس کدشو بررسی کرد.

@ManiFoldsPython
👍6
Python BackendHub
مثلا دیروز meta programming اشو تموم کردم. خیلی خلاصه طور بود . تنها نکته ای که تو کل ویدیو هاش بود و یادم نمیاد تو deep dive OOP بهش اشاره شده بود همین بود. نحوه عملکرد enum که خودش درواقع یک metaclass از EnumType هست که سورس کدشو بررسی کرد. @ManiFoldsPython
برای دیپ شدن خیلی بهتر تو پایتون بنظرم یکی از بهترین روش ها خود سورس کده پایتونه تو built-in module ها. اینکه وقتی دارین یک built in module رو استفاده میکنید یک سری بهش بزنید ببینید چه خبره. خیلی وقتا متوجه نشدین میتونید برین بخونید که چه اتفاقی میفته. میتونید از منابع مختلف استفاده کنید مثل forums, جی پی تی, داکیومنت, داک استرینگ, کامنت داخل کد.

@ManiFoldsPython
👍6
تو کامنتا خیلیا راجب software architecture میپرسن.
من خودم به شخصه یک کتاب واحدی تاحالا پیدا نکردم که همرو بخواد کامل و خوب توضیح بده. پس بنظرم برای هر کدوم باید یک کتاب جداگونه بخونید که آشنا شید. مثلا خودم اخیرا 2 کتاب گرفتم که یکیش راجب DDD هست و یکیش راجب EDD. هروقت تموم کردم و دیدم خوب بوده باهاتون به اشتراک میذارم اسمشو

اما برای اینکه بتونید out of box خلاصه وار با بعضیاشون یک آشنایی دو خطی داشته باشید که حداقل بدونید چه drawback ای دارن و کجا باید از چی استفاده شه و هرکدوم چطوری operate میکنن (در حد یک schema خیلی جنرال و کلی) میتونید مقاله زیر رو بخونید.

https://nix-united.com/blog/10-common-software-architectural-patterns-part-1/

خیلی قشنگ 10 تارو خیلی خلاصه وار توضیح داده.
@ManiFoldsPython
👍5
وقتی رو پروداکشن تست میزنی
@ManiFoldsPython
🤣20😁1
هر چه‌قد راحت‌تر با حس مزخرف و گهِ ریجکشن (در کار، اپلای، مناقصه، دیتینگ، ...) کنار بیای، گزینه‌های بیشتری تو زندگی جلوت قرار می‌گیره.

چرا؟

چون شجاعت، جسارت، و همّتِ «در معرض گذاشتن»ت بالا می‌ره. و اگه جنبه‌ی باخت داشته باشی، به‌جای ۱۰ تا مورد مثلاً ۳۰ تا رو اپلای می‌کنی. (خصوصاً اگه مثل اپلای کاریابی یا پیام اول دیتینگ، کم‌هزینه یا رایگان باشه.)
چرا نمی‌کنیم؟

آناتومی ریجکشن ۲ تا بخش عمده داره: نرسیدن و قضاوت‌شدن.

معمولاً خود نرسیدنه خیلی فاجعه نیست و از اول هم مثلاً ۱۰٪ احتمال و امید بوده. منتهی درد بزرگ اون وقتیه که حس می‌کنی لخت جلوی یه جماعتی ایستاده‌ای که کامل بهت زل زده‌ن و بعدش هم بهت گفته‌ن تو خوب و کافی نیستی!
این درد وقتی خیلی بزرگتر هم می‌‌شه که:
۱. توضیح و فیدبک‌ای داده نشه. و مغز انسان شروع کنه هزار تا فرضیه بسازه و به همه خصلت‌ها و توانایی‌هاش دونه‌دونه شک کنه.
۲. شاهد موفقیت بقیه در همین رقابت باشی. و ببینی اپنا پذیرفته‌شده‌ن. و مغزت می‌گه: «ببین پس ۱۰۰٪ مشکل از تو بوده!»

راه حل؟

در زمینه‌ی نرسیدن: یادت باشه که تو شیر هستی و نه آهو! و فقط کافیه یکی‌شون بشه. و وقتی شد دیگه کسی نمی‌دونه و یادش نمیاد و اصن مهم نیست که آیا این یکی از ۱۰ تا بوده یا یکی از ۱۰۰ تا! پس تو ۱۰۰تات رو بزن. 💪

در زمینه‌ی حس قضاوت شدن و ناکافی بودن:
یادت باشه تو نسبت به خودت یه نظری داری، بقیه هم یه نظری دارن. این وسط هم شناخت اونا از تو محدود هست، هم شناخت تو از نیازها و بارم امتحانی اونا!

پس اولاً بپذیر که فقط خودت کامل خودتو می‌شناسی، و ثانیاً کمک بخواه.

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

دمت هم گرم.✌️

[Loc0m0]
👍193👎1
چقدر مثال امروز real python قشنگ بود

Explicit is better than implicit.
Flat is better than nested.
Beautiful is better than ugly.



https://realpython.com/zen-of-python/

@ManiFoldsPython
👍12
یکی دیگه از کاربرد های fingerprinting میتونه request limit باشه.

تو هر api شما نیاز دارین برای gateway سرویس هاتون یک لیمیت بنویسید که کسی شما رو ddos نکنه.
یکی از راه حل های ابتدایی استفاده از IP Address هست. البته بخاطر وجود CGNAT عملا راهکار جالبی نیست چون هکر میتونه پشت CGNAT قایم شه که شما وایت لیست کردین و همچنان سیستمتون رو پایین بیاره.

پس برای یک راهکار safe باید چیکار کرد؟

1. برای روتر های private: از authentication header استفاده کنید و ریت لیمیت رو روی اون بذارین. در حالی که میتونه راه حل بنظر مناسبی باشه ولی هکر میتونه تعداد زیادی کاربر بسازه و با JWT هر کدوم بازم اسپم کنه. پس بازم راهکار کاملی نیست.

2. برای روتر ثبت نام: لیمیت کردن و حساسیت رو سرویس ثبت نام به ازای هر آی پی بدون داشتن وایت لیستی برای CGNATکه به طور periodic بلک لیست کنه اون آی پی رو و بعد چند ساعت دوباره بتونه حساب کاربری بسازه.

3. برای روتر پابلیک : استفاده از browser fingerprinting برای تشخیص دیوایس کاربر و گذاشتن ریمیت لیت روی ترکیب GPU fingerprint (مثل webgl یا webtrc) و IP بدون هیچ وایت لیستی. همین تکنیک میتونه رو روتر ثبت نام هم پیاده شه تا حساسیت روتر ثبت نام رو روی CGNAT کم کنه.


راهکار سوم راهکاریه که ddos shield ها ازش استفاده میکنن مثل cloudflare. راهکار بهترش اینه که خودتون مدل کاستومایز و فینگرپرینت مخصوص خودتون داشته باشین یا از سرویس پرمیومشون استفاده کنید که فایل جاوا اسکریپتشو تند تند آپدیت میکنن و به اطلاعات ویزیتور ها هم دسترسی میدن.


از نمونه سایت هایی که از راهکار سوم استفاده میکنن:
Sony Entertainment
Apple Store
Youtube


برای دیدن browser fıngerprint خودتون به این صفحه برین
@ManiFoldsPython
👍7