Python Hints
8.63K subscribers
172 photos
11 videos
9 files
141 links
Python tips and tricks
The Good, Bad and the Ugly

توی این کانال فقط قرار هست در مورد core python صحبت کنیم.

این کانال یک بلاگ شخصی هست و پیرامون نظرات و چیزهایی که توی بیش از ۱۰ سال کد زدن یاد گرفتم (فقط برای کمک به دوستان تازه‌کار)

Admin: @Abbasi_ai
Download Telegram
روی هیچی پشتیبانی گرفتن
فقط جای تشکر داره ❤️

پ.ن : نمی‌دونم چرا ولی تعداد
subscribers
به یکباره از ۷۰ اومده روی ۱۹ (هنوز با قوانین و ... یوتیوب آشنایی ندارم و نمی‌دونم برای چی این اتفاق افتاده)
جالبه همچنان داره کمتر می‌شه 🧐
49❤‍🔥21👎1
#خارج_از_بحث

احتمالا شما هم با anti-adblock detector یوتیوب مواجه شدید و متوجه شدید تقریبا هیچکدوم از adblocker های معروف نمی‌تونند دورش بزنند.

شخصا دنبال این بودم که popup مربوط به بلاک شدن adblocker رو فیلتر کنم (اینجوری دیگه اخطار نمیاد و ویدئو رو میشه اجرا کرد) : اگر بررسی کنید یوتیوب با اینکه اون اخطار رو نشون میده اما توی پس زمینه ویدئو رو هم درخواست می‌کنه

این مورد رو پیدا کردم امیدوارم مفید باشه :
۱- اول uBlock رو نصب کنید
۲- بعد از نصب روی آیکونش کلیک کنید و به بخش dashboard برید (گوشه پایین سمت راست با علامت ۳ تا چرخ‌دنده)
۳- از منوی بالای صفحه وارد بخش My Filters بشید.
۴- توی ادیتور پایین همون صفحه این دستورات رو بزنید :
youtube.com##+js(set, yt.config_.openPopupConfig.supportedPopups.adBlockMessageViewModel, false)

youtube.com##+js(set, Object.prototype.adBlocksFound, 0)

youtube.com##+js(set, ytplayer.config.args.raw_player_response.adPlacements, [])

youtube.com##+js(set, Object.prototype.hasAllowedInstreamAd, true)


۵- روی گزینه apply changes کلیک کنید و یوتیوب رو بدون تبلیغات ببینید و لذت ببرید.

@PyHints
👍38933🌚3👎2
#موقت

طرف ی داکر فایل بهم داده
اندازه نصب کل OS حجم میگیره

DevOps
هم هست.
بعد من ساختم، ۷۰٪ حجمش کمتر شده.
در نهایت هم اومده میگه چرا می‌خوای کار من رو خراب کنی نکنه میخوای شغل من رو بگیری ؟

صرف یاد گرفتن ۴ تا دستور داکر، شما نمی‌تونی بزنی داکر رو حرفه‌ای هستم.
👍54😁21👎1
آدم زرنگ جا پاش رو سفت می‌کنه و تورو مجبور به استخدام می‌کنه :

شرکت ۳ مورد نیروی تازه‌کار گرفته (امروز دیدمشون) و باید انتخاب میکردیم که بین این ۳ نفر با یک نفر قرارداد ۱ ساله ببندیم و ...

همشون کارشون عالی بود، اما یکی از نیروها سابقه کاری نداشت و تو زمان دانشگاه هم هیچ کاری نکرده بود (اسپویل، ایشون استخدام شد)

چرا، به همگی تسک‌های مشابه داده شده بود و همگی کاملاً فوق‌العاده از پس کارهاشون بر اومده بودند.
نیروهای قدیمی شرکت و هم تیمی‌هاشون هر سه مورد رو تأیید کردند (قرارداد قبلی ۶ ماهه بود.)

اما این دوستمون که دیده بود سابقه کاری نداره، و از نظر رزومه از باقی عقبتر هست توی وقتای خالی پروژه‌ای که بهشون داده بودیم تا گیتش رو ببینند و ...
رفته بود نشسته بود
Type annotation
براش زده بود،

۴ تا دلیل قشنگ هم توی جلسه آورد :
۱- من رزومه قوی ندارم (سابقه کاری منظورش بود) پس باید دنبال راهکاری می‌گشتم که خودمو ثابت کنم.

۲- نمی‌خواستم خیلی مزاحم دولوپرهای قدیمی پروژه بشم، پس اول پروژه رو کامل خوندم و سوالاتم رو کامل نوشتم

۳- چون سورس کد زیاد بود، خیلی بخش‌ها سردرگم می‌شدم، برای اینکه وقت کمتری ازم بگیره و شاید بتونم بعضی سوالات خودم رو جواب بدم به ذهنم رسید
Type Annotation
می‌تونه کمکم کنه و همین کار رو هم کردم.

۴- نمی‌دونستم کار رو میگیرم یا خیر، ولی خواستم اسمم توی بخشی از پروژه‌های شرکت بمونه برای نفرات بعدی اگر type annotations هام تایید بشه.

تنها کسی بود که این پروژه رو‌ هم مثل موم تو دستش داشت (از نظر کد، نه بیزینس)

اینو گفتم برای دوستان تازه‌کار، حتماً نباید ی دیتابیس یا ... خفن پیاده‌سازی کنید که donate کرده باشید
بعضی وقتا همین کارهای ساده، مثل تایپینگ، داکیومنت کردن و ....
می‌تونه شمارو از باقی افراد سر تر نشون بده (اعتراف می‌کنم ایشون گزینه آخر من برای استخدام بود.)
👍723🤩21🐳1
این رو تازه کشف کردم گفتم شاید مفید باشه :
توی پایتون 3.11 یک تایپینگ جدید اضافه شده به اسم Self :
from typing import Self


کاربردش توی class - classmethod - context manager و البته مهمتر از همه
Class inheritance 

هست.
مثال تصویر رو ببینید تا متوجه بشید (توی پروژه‌های بزرگ واقعا بسیار بسیار کمک کننده هست بخصوص در زمان debug)

تصویر اول نسخه‌ای هست که مشکل ایجاد می‌کنه (البته BUG نیست چون typing پایتون هیچ تاثیری در زمان اجرا نداره)
و تصویر دوم راه‌حل ساده.
@PyHints

توی نسخه قدیمی‌تر از 3.11 باید برید سراغ راهکارهایی مثل
TypeVar, Generic

که معمولا اکثرا فراموش می‌شد
👍38531
اسم نمی‌برم
ولی طرف دوره گذاشته، آموزش رزومه نویسی و چگونگی پیدا کردن بهترین موقعیت شغلی.

یکی از شما دوستان برای من فرستادید،
رفتم یک سرچی زدم دیدم طرف خودش هنوز کار گیر نیاورده و جایی کارآموز هست. (چون با حرف‌هاش مخالف بودم)


قبل از اینکه پول و وقت صرف این دوره‌ها کنید، ی جستجو بزنید (خیلی خیلی مهمتر هست)
31👍18😁6🤪63🗿3🐳1
اینم چون دیدم خیلی از بچه‌ها نمی‌دونند :

اگر شما هم مثل من بیشتر کارها رو با
Firefox
انجام می‌دید و ممکنه توی چند هفته بیش از sleep کردن سیستم کاری نتونید بکنید قطعاً مشکل Ram رو دیدید (روی سیستم من بعضی وقتا که خیلی سنگین استفاده می‌کنم، به ۱۵ گیگ - ۲۰ گیگ هم میرسه)

مخصوصاً اینکه من
Hardware Acceleration
رو هم فعال کردم.


ی راهکار بگم بدون restart مصرف رم فایرفاکس رو کم کنید (بخصوص روی دیتاهای کش شده که دیگه نیازی بهش نداره) توی سرچ بار بزنید :

about:memory

و توی صفحه‌ای که باز میشه توی بخش
Free Memory

گزینه
GC (garbage collection)
و بعد از اون
Minimize memory usage
رو بزنید.

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

بطور کلی
Hardware Acceleration
رو اگر خاموش کنید مصرف رم قطعاً بهینه‌تر و کمتر خواهد بود.
👍3231
مقایسه داشته باشیم روی
Software Design Steps

داخل ایران و استاندارد‌هایی که شرکت‌ها یا استارتاپ‌های مطرح رعایت می‌کنند :
اول نسخه شرکت‌های مطرح :
1- Requirement Analysis
2- System Architecture Design (system design)
3- Detailed Design (Component design)
4- UI
5- Database design
6- Prototyping
7- Test Strategy
8- Regular design review / updates
* All above steps, must have documentation step in it.

مدل مطرح بین شرکت‌های ایرانی:
1- SRS (Software Requirements Specification)

که خب معمولا در حد ۱-۲ صفحه میاد بدون هیچ جلسه‌ای
2- Requirement Analysis
خوشحال نباشید این قدم تو ایران فقط برای سخت‌افزار و منابع مالی هست
3- UI/UX Design

یک راست میریم سراغ طراحی فرانت (معماری سیستم و ... اصلا معنی نداره تو اینجا؛ جزئیات که هیچ)
4- API Design
این قدم توی ایران هست به بکند میگن که چی میخوایم و چطوری باید پیاده بشه (برگای آدم میریزه)
بجای اینکه دیتابیس طراحی بشه و نیازمندی به بکند تسک بشه
به بکند میگن که دیتابیس رو خودت طراحی کن (برای همین هیچکدوم از شرکتهای مطرح ایرانی شناسنامه دیتابیس نداند) و نیازمندی رو هم خودمون بهت میگیم چطوری باید پیاده سازی بشه که همین دلیل ۹۰٪ عدم رعایت clean code هم هست
5- Deploy
تست نویسی اصلا مطرح نیست تو ایران تا زمانش بشه
پروتوتایپ هم همین هست (اگر مجبور نباشیم؛ نمی‌دیم)

معماری پروژه هیچوقت آپدیت نمی‌شه و بهبود پیدا نمی‌کنه فقط فیچر بهش می‌چسبه و اهمیتی هم نداره بعد از این چقدر معماری بدردنخور میشه چون هنوز کار می‌کنه.

اینو فقط بعنوان یک رفرنس میذارم (مطمئنم همه‌ی شما هم تقریبا باهام همنظر هستید و چیزایی که گفتم رو دیدید توی ایران) که به وقت مدیر فنی شدن سعی کنید برای نسل بعدی یک چیزی رو درست کنید.
👍455🤪3🗿311
https://t.iss.one/pyHints?boost

درصورت فعال شدن استوری
ازین قابلیت برای معرفی کتاب استفاده می‌کنیم
(هفتگی یا ماهانه)
👍74👎184
This media is not supported in your browser
VIEW IN TELEGRAM
سم خالص
😁72🤪11👾321👎1🦄1
The Music Played
Matt Monro
The Music Played
Artist: Matt Monro
Released: 1968
Genres: Pop

@pytensMusic
❤‍🔥9👎3👌2🍾21
من راجب repr, str , ... صحبت کردم.
این کد رو یکی از اعضا فرستاده (درحال code review این کد رو دیده)

@dataclass
class CasbinRuleEntity:
id: typing.Optional[int] = None
ptype: typing.Optional[str] = None
v0: typing.Optional[str] = None
v1: typing.Optional[str] = None
v2: typing.Optional[str] = None
v3: typing.Optional[str] = None
v4: typing.Optional[str] = None
v5: typing.Optional[str] = None

def __str__(self):
arr = [self.ptype]
for v in (self.v0, self.v1, self.v2, self.v3, self.v4, self.v5):
if v is None:
break
arr.append(v)
return ', '.join(arr)

def __repr__(self):
return '<CasbinRule {}: "{}">'.format(self.id, str(self))
ی مورد رو من بگم و بعد سکوت کنم :
یکی از دلایلی که
@dataclass
رو استفاده می‌کنیم این هست که دیگه repr بدرد نخور ننویسیم.

باقی مشکلات رو شما بگید (به اکثر موارد قبلاً اشاره شده توی کانال)
🤔14👍92🍓21👎1🔥1😱1🆒1
Python Hints
من راجب repr, str , ... صحبت کردم. این کد رو یکی از اعضا فرستاده (درحال code review این کد رو دیده) @dataclass class CasbinRuleEntity: id: typing.Optional[int] = None ptype: typing.Optional[str] = None v0: typing.Optional[str] = None v1:…
دوستان به موارد زیادی اشاره کردند اما گفتم یکبار هم خودم همه‌ی آن چیزی که توی کد ریویو انجام میدم رو بگم :

۱- وقتی کلاس یا تابع تعریف می‌کنید که خودش یا اجزا تشکیل دهنده‌اش مشخص نیست حتما باید داکیومنت یا کامنت داشته باشه
v0, v1, v2 , ...
بدترین اسامی هست که میشه انتخاب کرد؛ چون برنامه نویس داره فرض می‌کنه که همه‌ی افرادی که کد رو میخونند بیزینس رو بخوبی می‌شناسند.

۲- استفاده از typing optional در اینجا درست نیست مخصوصا که برای همه‌ی موارد تکرار شده و به همه‌ی موارد دیفالت None داده شده؛ حتی اگر همین کد رو بخوایم نگه داریم این راهکارها بهتر خواهد بود :

v0: str | None


v0: typing.Union[str, None]

۳- از dataclass هیچ استفاده‌ای نشده (frozen, ordering, slot , ....) حتی از ویژگی‌های حالت ساده‌ترش هم استفاده نشده؛ مثل پیاده سازی __methods__ که یعنی __repr__ و __str__ نیازی نبود نوشته بشه.

۴- حالا که نوشته شده
__repr__
در انتهای خروجی به str(self) رو داره و این یعنی برنامه نویس سواد نوشتن __repr__ درست رو نداشته و چون توی حلقه بی‌نهایت میوفته مجبور شده که __str__ رو هم پیاده‌سازی کنه

۵- داخل __repr__ همه چیز پر از ایراد هست (تمام موارد رو قبلا بررسی کردیم تو کانال) :
عدم استفاده از qualname , هاردکد کردن اسم کلاس
عدم استفاده از r! جهت نمایش درست تایپ‌های داخلی
فرمت اشتباه؛ خروجی __repr__ رو برای ساخت مجدد آبجکت از کلاس نمی‌شه استفاده کرد.

۶- خورد __str__ کلا سوال هست؛ نوشتاری که تمیز نیست؛ هدفش مشخص نیست و ....

من حتی به این حالت هم فکر کردم که چون تعداد متغییرها زیاد بوده برنامه‌نویس خواسته از یک جایی به بعد ... نشون بده مثل کاری که numpy , .... می‌کنند؛ که اگر هدف هم این بوده پیاده سازی اشتباهی انجام داده و با یک جستجوی ساده حتی می‌تونسته به راهکار درست برسه
reprlib builtin module

تقریبا ۲۰ خط کد بود و ۳۰ خط ایراد.
👍105❤‍🔥6🤷‍♂6👌52🔥1
Reaction

روی پست‌ها لطفاً فراموش نشه، کمک می‌کنه بدونم کدوم مطالب رو دیگه نیازی نیست راجبش توضیح بدم و ....
25👍1511👎2🤷‍♂1🫡1
لطفاً پیام‌های پین شده کانال رو بخونید 🌹


به لطف شما عزیزان, کانال قابلیت استوری گذاشتن داره
و سعی می‌کنم ازین قابلیت برای معرفی کتاب‌ها استفاده کنم
تا دوستان به راحتی بتونند کتاب‌ها رو پیدا کنند.

همونطور که قبلاً گفتم، فقط و فقط کتاب‌هایی رو معرفی می‌کنم که شخصاً خوندم و بنظرم مفید بوده.

اما، قابلیت استوری و ... بستگی به Boost کانال داره که محدودیت زمانی هم داره این ویژگی (تلگرامم باید پول دربیاره دیگه) اگر دوست داشتید می‌تونید کانال رو boost کنید تا این حرکت رو ادامه بدم.

https://t.iss.one/pyHints?boost


هر وقت قابلیت Story نداشته باشیم، معرفی کتاب روی توییتر انجام خواهد شد.
پیشنهاد می‌کنم اکانت کانال رو داشته باشید.

Twitter: https://twitter.com/pyhints
👍4810🍾6👎3
آقا من نمی‌دونم این به گوش بچه‌های طراح سایت اینترنت مخابرات میرسه یا نه
یا مثلاً مدیر فنی و ... (قبلاً این اتفاق افتاده چون)

ولی دوست دارم شما همگی بدونید؛
مودم من به یک مشکلی خورده بود و بنا به دلایلی رفتم پسورد اینترنت رو تغییر دادم، برای امنیت بیشتر کاراکتر ' رو داخل پسورد گذاشتم، اتفاقی که افتاد این بود

فرض کنید پسوردی که من زدم این بود :
Pyhints2023'24
سایت مخابرات چی توی دیتابیس برای مچ کردن گذاشته بنظرتون ؟! 🤣😂

اول اینکه hash، نشده و اصل پسورد رو برام فرستادند اما چی بنظرتون بود پسورد :
\&quot;pyhints2023\'24\&quot;

یعنی : پسورد رو نرمالایز کردن حروف بزرگ رو کردن کوچیک بعد ' رو escape کرده توی دیتابیس گذاشتن و چون ' توی پسورد داشتم از " اطرافش استفاده کردند و همون‌جوری توی دیتابیس گذاشتن

شما ببین سایتای ایرانی رو کیا کد میزنند. 😂🤣😂
😱35😁15😐13🤔4🤯3🗿3👍2👨‍💻1🆒1
یلدا مبارک

حافظ فراموش نشه ♥️
66❤‍🔥5👍3👎3💔1
خوانش گروهی کتاب
Fluent Python
به فصل ۱۳ رسید (عضو جدید نمی‌گیره گروه)

Interfaces, Protocol and ABCs
داشتم راجب همین موضوع پیش گروهی دیگر از دوستان صحبت می‌کردم که متوجه شدم خیلی از بچه‌ها با این مفاهیم آشنا هستند، اما کاربرد درستش رو نمی‌دونند حتی بچه‌هایی که پایتون رو تا سطح بالایی دنبال کردند.

برای همین تصمیم گرفتم توی پست‌های بعدی این مفاهیم رو با مثال توضیح بدم، منظورم از این مفاهیم :

Interface, Duck typing, Goose typing, Static typing, Static Duck typing, ABC, Protocol,Static Protocol, Monkey patching, polymorphic interface, Structural typing, ....

هست.

پ.ن : اگر مورد دیگری هست که فکر می‌کنید جا افتاده زیر همین پست کامنت کنید توضیح میدم حتماً 🌹
👍52🙏62💋2❤‍🔥1