Python Hints
خوانش گروهی کتاب Fluent Python به فصل ۱۳ رسید (عضو جدید نمیگیره گروه) Interfaces, Protocol and ABCs داشتم راجب همین موضوع پیش گروهی دیگر از دوستان صحبت میکردم که متوجه شدم خیلی از بچهها با این مفاهیم آشنا هستند، اما کاربرد درستش رو نمیدونند حتی بچههایی…
Duck typing, Dynamic Protocol
رو میشه با هم نشون داد؛ ی جمله معروف داره که همه بلد هستند اما خیلی ها مفهومش رو نمیدونند
Duck typing
:If it looks like a duck and quacks like a duck, it’s a duck.چیزی که این جمله سعی داره بگه اینه که؛
برای ما مهم نیست object کدوم کلاس هستی اگر این متدها و فانکشنالیتی ها رو داری عضوی از ما هستی.
ما برنامه نویسها همیشه
Duck type mode
هستیم بصورت پیشفرض؛ برای ما فرقی نمیکنه طرف رشته کامپیوتر خونده یا حقوق و حسابداری و ... یا اصلا درس نخونده برای ما مهم هست که طرف توانایی کد زدن داشته باشه و اگر بتونه این کار رو به خوبی انجام بده بهش لقب برنامه نویس میدیم.
پس توی
Duck typing
اولویت متدها هستند و نه خروجی isinstance
👍63❤🔥3🙏3⚡1👎1😁1💋1😈1👾1
Python Hints
Duck typing, Dynamic Protocol رو میشه با هم نشون داد؛ ی جمله معروف داره که همه بلد هستند اما خیلی ها مفهومش رو نمیدونند Duck typing :If it looks like a duck and quacks like a duck, it’s a duck. چیزی که این جمله سعی داره بگه اینه که؛ برای ما مهم نیست object…
Dynamic Protocol
هم از همین مفهموم استفاده میکنه؛ اگر یادتون باشه قبلا راجب پروتوکل مربوط به Sequence صحبت کردیم و گفتیم که اگر یک
class
متدهای __len__, __getitem__
رو داشته باشه میتونیم بعنوان
Sequence Protocol
رو رعایت میکنه و پایتون میتونه مثل Sequence
باهاش رفتار کنه و برخی از فانکشنالیتیهایی که پیاده سازی هم نکردیم رو بهش بده.Dynamic Protocol
ی قدم جلوتر میره و میگه اگر قرار نیست
len
اون آبجکت رو بگیری پس نیازی نیست توی اون کلاس حتی __len__
رو پیاده سازی کنی و صرف وجود __getitem__
من بهت یک سری ویژگیهای Sequence
رو میدم؛ ویژگیهایی که فقط به __getitem__
نیاز داره و نه چیز دیگه.توی مثال تصویر قبل؛ من هیچوقت
__iter__
رو پیادهسازی نکردم اما میتونم روی dp
از for loop
استفاده کنم؛ به لطف Duck typing, Dynamic Protocol
پایتون از
__getitem__
استفاده میکنه و با شروع از اندیس 0
میتونه کار __iter__
رو انجام بده و for loop
بهمون خروجی خواهد داد.برای
in
هم موضوع همین هست؛ توی کد قبلی من هیچوقت __contain__
رو پیادهسازی نکردم اما 9 in dp
خروجی میده (اینبار هم پایتون از
__getitem__
بعنوان fallback
برای __contain__
استفاده میکنه)بحثی که پیش میاد اینه که؛ آیا این موضوع اتفاق خوبی هست ؟
نه همیشه؛ خیلی وقتها میشه نسخه
optimize
شده تری رو نوشت مثلاْ توی کد قبلی اگر من لیست رو بصورت sort
قرار باشه داشته باشم همیشه میتونم بجای __contain__
که خود پایتون بهم میده و linear search
هست که مرتبه زمانی O(n)
داره از Binary Search
استفاده کنم و مرتبه زمانی رو تا O(log n)
کاهش بدم.اما تا وقتی نیازی به بهبود ندارم؛ هیچوقت
__contain__
یا ... رو خودم پیادهسازی نمیکنم و از آنچه که پایتون بهم ارائه میده استفاده میکنم (اینطوری نه نیاز به تست هست؛ نه باگ ازش در میاد و کد تمیزتری هم خواهم داشت)👍48❤🔥5⚡2
Python Hints
خوانش گروهی کتاب Fluent Python به فصل ۱۳ رسید (عضو جدید نمیگیره گروه) Interfaces, Protocol and ABCs داشتم راجب همین موضوع پیش گروهی دیگر از دوستان صحبت میکردم که متوجه شدم خیلی از بچهها با این مفاهیم آشنا هستند، اما کاربرد درستش رو نمیدونند حتی بچههایی…
Goose Typing
رو بعنوان
runtime type check
بهش اشاره میکنند؛ دلیلش هم توی عکس واضح هست.اما دقت کنید که من برای
isinstance
از from collection.abc import Sequence
چرا این مورد وجود داره؛ برطرف کردن مشکلاتی که
Duck typing
بوجود میاره همونطور که دیدیم برای duck typing
تکمیل بودن تمام متدها اهمیتی نداره.همینجا یک نکتهای رو بگم؛ توی پایتون استفاده بیش از اندازه از
isinstance , issubclass, hasattr
اصلا چیز خوبی نیست و به قول معروف code smell
هست (برای دلیلش میتونید راجب __subclasshook__
بخونید.)با این همه؛
goose typing
جایگاهی مطمئنتر از duck typing
برای تست پیادهسازی کامل یک Interface
بهمون میده و همیشه هم باید به یک ABC
برسه (پیادهسازی درست و اصولی)👍26❤5⚡2
Python Hints
Goose Typing رو بعنوان runtime type check بهش اشاره میکنند؛ دلیلش هم توی عکس واضح هست. اما دقت کنید که من برای isinstance از from collection.abc import Sequence چرا این مورد وجود داره؛ برطرف کردن مشکلاتی که Duck typing بوجود میاره همونطور که دیدیم برای…
اول با تصویر ۲ شروع کنیم (بالای کد 2 کامنت شده)
از دیگر مزایای
دقت کنید اگر من
برای رفع این مشکل پایتون و
پس برای همین
از دیگر مزایای
Goose typing
همین مورد هست وقتی برای اطمینان از Interface
میاید و کلاسهای فریمورکی که مینویسید رو به ABC
ها وصل میکنید (منظورم Inheritance
هست).دقت کنید اگر من
__len__
رو پیادهسازی نکنم بهم ارور میده؛ به عمد ارور رو گذاشتم که باهاش آشنا بشید.برای رفع این مشکل پایتون و
Goose Typing
و البته ABC من رو مجبور میکنند که __len__
رو پیادهسازی کنم.پس برای همین
runtime type checking
هم داریم توی پایتون اما مفهومش با زبانهای دیگه کمی فرق داره که حالا همگی دلیلش رو میدونیم.👍24❤4⚡3
قبل از اینکه بریم سراغ تصویر :
یک مفهومی داریم توی پایتون به اسم
حدس زدید دیگه تا الان ترکیبی هست از
استفادهاش؛ اجازه میده Interface رو طوری تعریف کنیم که کلاسهای مختلفی رو بشه بجاش استفاده کرد.
اما تصویر بالا؛ فرض کنید شما میخواید یک
رو هم داشته باشه اما
مثال بزنم شاید بهتر درک بشه :
رو در نظر بگیرید؛ و فرض کنید
میخوام مطمئن بشم هرکسی هر موردی رو بهم تحویل میده بعنوان
ادامه پست بعدی
یک مفهومی داریم توی پایتون به اسم
Static Duck Typing
حدس زدید دیگه تا الان ترکیبی هست از
Static typing, duck typing
استفادهاش؛ اجازه میده Interface رو طوری تعریف کنیم که کلاسهای مختلفی رو بشه بجاش استفاده کرد.
اما تصویر بالا؛ فرض کنید شما میخواید یک
Interface
بسازید و مهمتر از اون میخواید runtime type checking
رو هم داشته باشه اما
Interface
شما سختگیری ABC
های موجود رو لازم نداره (میدونیم که تعریف abc
هم کار درستی نیست توی ۹۹٪ موارد).مثال بزنم شاید بهتر درک بشه :
collections.abc.MutableSequence
رو در نظر بگیرید؛ و فرض کنید
Interface
من که قرار هست runtime checking
هم داشته باشه نیاز به ۳ تا متد داره :__len__, __getitem__, __setitem__
میخوام مطمئن بشم هرکسی هر موردی رو بهم تحویل میده بعنوان
Instance
ایی از Interface
باید حتما هر ۳ تا این متدها رو پیادهسازی کرده باشه Hard Rule
هست برای عملکرد درست کدهام برخلاف Duck typing
که soft rule
هست و دیدیم که میگه اگر نیازی به این متد نداری پس پیادهسازی نشدنش هم مشکلی نداره.ادامه پست بعدی
👍20
Python Hints
قبل از اینکه بریم سراغ تصویر : یک مفهومی داریم توی پایتون به اسم Static Duck Typing حدس زدید دیگه تا الان ترکیبی هست از Static typing, duck typing استفادهاش؛ اجازه میده Interface رو طوری تعریف کنیم که کلاسهای مختلفی رو بشه بجاش استفاده کرد. اما تصویر بالا؛…
تا اینجا میدونیم که وقتی صحبت از
رو هم پیادهسازی کنند.
اگر اینترفیس شما ترکیبی از چند
اون موقع شاید مجبور باشید برای اینکار بیش از ۱۰ متد رو پیادهسازی کنید وقتی فقط ۵-۶ متد رو لازم داشتید.
راهکار
به کد تصویر دقت کنید؛ اول اینکه هر کلاسی از
استفاده کنه میشه
و اینطوری
برگردیم سراغ مثال خودمون الان که من میخوام فقط همون ۳ متد رو داشته باشه میام یک کلاس بدون پیادهسازی میسازم به اسم
و به راحتی با
مثال سمت چپ هم از خود داکیومنت پایتون آوردم. چون سادهتر بود ( بخصوص
runtime check
میشه گزینه اصلی Goose Typing
هست اما ی مشکلی اینجا داره اگر من از goose typing
استفاده کنم باید از MutableSequence
هم Inherit
کنم و همهی کلاسهایی که ازین مورد میخوان استفاده کنند حتما باید __delitem__
رو هم پیادهسازی کنند.
اگر اینترفیس شما ترکیبی از چند
abc
باشه چی ؟اون موقع شاید مجبور باشید برای اینکار بیش از ۱۰ متد رو پیادهسازی کنید وقتی فقط ۵-۶ متد رو لازم داشتید.
راهکار
Static Protocol +
runtime_checkable
به کد تصویر دقت کنید؛ اول اینکه هر کلاسی از
typing.Protocol
استفاده کنه میشه
Static Protocol
و اینطوری
type checker
ها میتونند بررسی کنند.(توی سورس کدهای مختلف هم نگاه کنید فقط تا همین بخش استفاده میشه و کسی سراغ runtime_checkable
نمیره معمولا اما بعنوان یک برنامهنویس پایتون شما باید همه ابزارها رو بشناسید)برگردیم سراغ مثال خودمون الان که من میخوام فقط همون ۳ متد رو داشته باشه میام یک کلاس بدون پیادهسازی میسازم به اسم
SupportMutSeq
و به راحتی با
isinstance
میتونم بررسی کنم که کلاسهای دیگه از این Interface
پیروی میکنند یا خیر بدون اینکه هیچ برنامه نویسی یا حتی خودم رو مجبور کنم که __delitem__
پیادهسازی بشه.مثال سمت چپ هم از خود داکیومنت پایتون آوردم. چون سادهتر بود ( بخصوص
Closable
)👍23❤🔥3
Python Hints
خوانش گروهی کتاب Fluent Python به فصل ۱۳ رسید (عضو جدید نمیگیره گروه) Interfaces, Protocol and ABCs داشتم راجب همین موضوع پیش گروهی دیگر از دوستان صحبت میکردم که متوجه شدم خیلی از بچهها با این مفاهیم آشنا هستند، اما کاربرد درستش رو نمیدونند حتی بچههایی…
Monkey Patching
برای این مورد ترجیح میدم از مثال خود کتاب استفاده کنم؛ قطعا ۹۰٪ شما میدونید مانکی پچ چیکار میکنه و ساده هم هست برای همین نمیخوام عملکردش رو توضیح بدم اما جایگاه استفادهاش رو میخوام صحبت کنم (بسیار دیدم که اشتباه استفاده میشه)
لازم نیست اهل ورق بازی باشی تا بدونی که جذابیت بازی ورق (حکم بخصوص) به این هست که دست بر بخوره پس کلاس
CardDeck
کامل نیست مگر اینکه shuffle
رو داشته باشه.ازونجایی که این کلاس
Sequence Protocol
رو رعایت کرده طبق آنچه که صحبت شد؛ از Internal
ها استفاده میکنیم یعنی random.shuffle
.اما
random.shuffle
میگه من به یک MutableSequence
نیاز دارم؛ ی مقدار دقت کنیم روی مثال قبلی MutableSequence
چه متدهایی رو میخواست ؟__len__, __getitem__, __setitem__, __delitem__
با توجه به ارور من
goose typing
ندارم و shuffle
هم به __delitem__
نیازی نداره و فرض رو هم بر این میگیریم که کلاس CardDeck
از یک کتابخونه میاد ( بیاید فرض کنیم کتابخونه بزرگی هست و نمیتونیم بازنویسیش کنیم ) که برنامه نویسش __setitem__
رو اضافه نکرده.👍17❤3
Python Hints
Monkey Patching برای این مورد ترجیح میدم از مثال خود کتاب استفاده کنم؛ قطعا ۹۰٪ شما میدونید مانکی پچ چیکار میکنه و ساده هم هست برای همین نمیخوام عملکردش رو توضیح بدم اما جایگاه استفادهاش رو میخوام صحبت کنم (بسیار دیدم که اشتباه استفاده میشه) لازم نیست…
حالا بازی ما قراره بره پروداکشن و ویژگی
۱- ایمیل بزنیم؛ که به این دلایل
۲- خودمون سورس کد رو تغییر بدیم؛ ی داکیومنت بنویسیم برای تیم
۳- از تکنیک
توی این تصویر خط ۵ تا ۱۰ اینکارو میکنه ی تابع تعریف میکنم توی کد بازی حکم خودم و بهش میگم روی
که برای کلاس
پیادهسازی نشده بود رو تعریف کن و متدش رو برابر با تابع
نه نیازی به
رو هم خودم رو درگیرش نکردم و چون موقتی و سریع هم هست اگر توی ورژنهای بعدی
اضافه بشه حذف این ۵ خط کد هیچ تاثیری روی کدهای پروژه و بازی نخواد داشت.
shuffle
رو نداره ۳ تا راهکار :۱- ایمیل بزنیم؛ که به این دلایل
__setitem__
باید اضافه بشه یا اینکه merge request
بزنیم و ... که میره برای ورژنهای بعدی۲- خودمون سورس کد رو تغییر بدیم؛ ی داکیومنت بنویسیم برای تیم
DevOps
و بگیم بعد از نصب پیکج باید این چیزا رو توی سورس کد کتابخونه تغییر بدی و ... که خیلی کار کثیفی هست و کل پروسه اتوماسیون رو میبره زیر سوال چون ممکنه جای دیگه از همین تیم و شرکت با فرض اینکه __setitem__
وجود نداره یک بازی دیگه درحال توسعه باشه۳- از تکنیک
monkey patch
استفاده کنیم.توی این تصویر خط ۵ تا ۱۰ اینکارو میکنه ی تابع تعریف میکنم توی کد بازی حکم خودم و بهش میگم روی
__setitem__
که برای کلاس
CardDeck
پیادهسازی نشده بود رو تعریف کن و متدش رو برابر با تابع
set_card
درنظر بگیر.نه نیازی به
Merge Request
دارم؛ نه DevOps
و تیم های دیگه رو کارشون رو خراب کردم Inheritance , ....
رو هم خودم رو درگیرش نکردم و چون موقتی و سریع هم هست اگر توی ورژنهای بعدی
__setitem__
اضافه بشه حذف این ۵ خط کد هیچ تاثیری روی کدهای پروژه و بازی نخواد داشت.
🔥19👍8❤🔥3
خواستم یادآوری کنم
Neuralink
امسال (2024) شروع تست روی انسان رو انجام میده و با توجه به نتایجی که روی حیوانات داشته مجوز برای تست روی چند انسان رو گرفته، طبق گزارش قبلی قرار بود ۱۱ نفر باشه، با توجه به حدود قیمت و اینکه تستش تا ۳ سال آینده هر سال روی آدمهای بیشتری خواهد بود و البته اینکه سرعت و هزینه هم هر سال به ترتیب بیشتر و کمتر خواهد شد.
من رو دقیقاً یاد فیلم Upgrade انداخت
Neuralink
امسال (2024) شروع تست روی انسان رو انجام میده و با توجه به نتایجی که روی حیوانات داشته مجوز برای تست روی چند انسان رو گرفته، طبق گزارش قبلی قرار بود ۱۱ نفر باشه، با توجه به حدود قیمت و اینکه تستش تا ۳ سال آینده هر سال روی آدمهای بیشتری خواهد بود و البته اینکه سرعت و هزینه هم هر سال به ترتیب بیشتر و کمتر خواهد شد.
من رو دقیقاً یاد فیلم Upgrade انداخت
IMDb
Upgrade (2018) ⭐ 7.5 | Action, Sci-Fi, Thriller
1h 40m | R
👍21🆒5🔥1
خواستم یکبار دیگه تأکید کنم روی
که هم به خودم یادآوری کرده باشم هم باقی دوستان،
اصولاً توی دنیای واقعی هم همین هست مثال میزنم که جا بیوفته (چون متاسفانه خیلی کم رعایت میشه)
کودکی رو به خاطر بیارید، یک کاری میخواستی بکنی که با شک بالا میدونستی پدر و مادر اجازه نمیدهند.
وقتی میرفتی و اجازه میگرفتی، درجا نه میشنیدی حالا باید تمام جزئیات و ... رو توضیح میدادی تا همهی نگرانیها برطرف بشه
بعد شاید حتی ۱ همراه یا ... هم باهات میفرستادند و در اینصورت شما اجازه داشتی کاری که میخوای رو انجام بدی، لذتش ۲۰٪ میشد.
مثال میزنم :
یک تفریح سالمی که ما (از درس فیزیک و شیمی) داشتیم این بود که ۲ تا آجر میذاشتیم نزدیک هم ی تشتک نوشابه (باید پلاستیک کفش رو میکندیم، قدیما داشت، جدیدا نداره) میذاشتیم روی آجرها و یک تیکه شمع رو میریختیم داخلش (نقش روغن) بعد یک شمع دیگه زیر این تشتک روشن میکردیم صبر میکردیم شمع داخل تشتک به نقطه جوش برسه (یا حتی ی کم آتیش بگیره) بعد ی قطره آب داخلش مینداختیم و شعله چندبرابر میشد.
درس ایمنی :اگر ماهیتابه روغن روی گاز آتیش گرفت آب توش نریزید، فقط درش رو بذارید و شعله زیرش رو خاموش کنید 😁
۹۰٪ بچهها اجازه انجام اینکار رو نداشتند، من اولین بار بدون اجازه رفتم اینکارو کردم جلو در خونه خودمون وقتی پدرم دید گفت نباید اینکارو میکردی و ...
منم عذرخواهی کردم و توضیح دادم که شعله کوچیک هست (صورتمم عقب گرفتم که ابرو و موژهام نسوزه) و نمیدونستم که باید براش اجازه بگیرم، بعد چندبار به خودش نشون دادم، درنهایت گفت پس مراقب باش اشکالی نداره (بزرگ شدی دیگه)
اما قبل از اینکه پدرم من رو ببینه، بیش از ۵۰ بار اون کار رو گرده بودم.
هم همین هست، وقتی نسبت بروز Exception خیلی کم هست چرا هر دفعه میخوای چک کنی که اجازه انجام اون محاسبه رو داری یا نه ؟!
این همه گفتم، که خواهش کنم این مورد رو توی کدهاتون بیشتر رعایت کنید.
پ.ن : یادم رفت پستهای قبلی که EAFP رو توضیح دادم reply کنم ولی این اولین مورد بود (سرچ کنید باقیش رو هم میتونید بخونید)
https://t.iss.one/pyHints/59
EAFP
( easier to ask forgiveness than permission )که هم به خودم یادآوری کرده باشم هم باقی دوستان،
اصولاً توی دنیای واقعی هم همین هست مثال میزنم که جا بیوفته (چون متاسفانه خیلی کم رعایت میشه)
کودکی رو به خاطر بیارید، یک کاری میخواستی بکنی که با شک بالا میدونستی پدر و مادر اجازه نمیدهند.
وقتی میرفتی و اجازه میگرفتی، درجا نه میشنیدی حالا باید تمام جزئیات و ... رو توضیح میدادی تا همهی نگرانیها برطرف بشه
بعد شاید حتی ۱ همراه یا ... هم باهات میفرستادند و در اینصورت شما اجازه داشتی کاری که میخوای رو انجام بدی، لذتش ۲۰٪ میشد.
مثال میزنم :
یک تفریح سالمی که ما (از درس فیزیک و شیمی) داشتیم این بود که ۲ تا آجر میذاشتیم نزدیک هم ی تشتک نوشابه (باید پلاستیک کفش رو میکندیم، قدیما داشت، جدیدا نداره) میذاشتیم روی آجرها و یک تیکه شمع رو میریختیم داخلش (نقش روغن) بعد یک شمع دیگه زیر این تشتک روشن میکردیم صبر میکردیم شمع داخل تشتک به نقطه جوش برسه (یا حتی ی کم آتیش بگیره) بعد ی قطره آب داخلش مینداختیم و شعله چندبرابر میشد.
درس ایمنی :
۹۰٪ بچهها اجازه انجام اینکار رو نداشتند، من اولین بار بدون اجازه رفتم اینکارو کردم جلو در خونه خودمون وقتی پدرم دید گفت نباید اینکارو میکردی و ...
منم عذرخواهی کردم و توضیح دادم که شعله کوچیک هست (صورتمم عقب گرفتم که ابرو و موژهام نسوزه) و نمیدونستم که باید براش اجازه بگیرم، بعد چندبار به خودش نشون دادم، درنهایت گفت پس مراقب باش اشکالی نداره (بزرگ شدی دیگه)
اما قبل از اینکه پدرم من رو ببینه، بیش از ۵۰ بار اون کار رو گرده بودم.
EAFP
هم همین هست، وقتی نسبت بروز Exception خیلی کم هست چرا هر دفعه میخوای چک کنی که اجازه انجام اون محاسبه رو داری یا نه ؟!
این همه گفتم، که خواهش کنم این مورد رو توی کدهاتون بیشتر رعایت کنید.
پ.ن : یادم رفت پستهای قبلی که EAFP رو توضیح دادم reply کنم ولی این اولین مورد بود (سرچ کنید باقیش رو هم میتونید بخونید)
https://t.iss.one/pyHints/59
Telegram
Python Hints
توی این مثال (قطعا غیر واقعی)
هر ۲ تا روش رو بررسی کردیم و البته قانون
exception
هم رعایت شده.
تفاوت سرعت رو خودتون میبینید دلیلش هم اینه که اسم تابع رو وقتی کاربر میبینه توی ۹۹٪ موارد قطعا متوجه هست که ۲ تا عدد باید بده و ...
توی
LBYL
حتی اگر همه چیز…
هر ۲ تا روش رو بررسی کردیم و البته قانون
exception
هم رعایت شده.
تفاوت سرعت رو خودتون میبینید دلیلش هم اینه که اسم تابع رو وقتی کاربر میبینه توی ۹۹٪ موارد قطعا متوجه هست که ۲ تا عدد باید بده و ...
توی
LBYL
حتی اگر همه چیز…
👍28👏7👎1🔥1
Python Hints
خوانش گروهی کتاب Fluent Python به فصل ۱۳ رسید (عضو جدید نمیگیره گروه) Interfaces, Protocol and ABCs داشتم راجب همین موضوع پیش گروهی دیگر از دوستان صحبت میکردم که متوجه شدم خیلی از بچهها با این مفاهیم آشنا هستند، اما کاربرد درستش رو نمیدونند حتی بچههایی…
توی این مباحث یک کامنت داده شد درباره
چون خودم هم همیشه با نیروهای جدید (بخصوص Ai, Data Science, Data Engineering) مشکل دارم بدم نمیاد راجبش یک توضیح بدم.
اما
من بسیار استارتاپ دیدم که درگیر فیچر پشت فیچر دادن میشوند، اونقدری که فراموش میکنند اصلا محصول رو عرضه کنند (داستان این باکسهای نوشیدنی، که ۶ میلیون دلار fund raise داشت یک مورد بسیار بسیار معروف هست که بدون هیچ محصولی fail شد)
این یکی از جملههایی هست که بسیار توی شرکت استفاده میکردم (توی تیم دیتاساینس)، اینکه فرض کنی تیم
Data Engineering
همه چیز رو تست کرده و دیتای فوقالعاده بهت داده خطاس اما بیاعتمادی هم اشتباه هست (برای همین ی بخشی از دیتا رو shuffle میکنی و تست)
توی برنامهنویسی اینکه فکر کنی، چون به یوزر گفتی لیست بهم بده دلیلی نمیشه که حتماً لیست بهت بده یا
Dynamic Programming
دیدیم که تست میکنیم یک کلاس هست یا خیر، ولی این دلیل نمیشه اون متد خاص پیاده سازی شده باشه
Fail fast
اگر نباشه، ممکنه شما ۱۰ دقیقه، ۱ روز ، ۱ماه پردازش انجام بدید (توی کار دیتا اصلا بعید نیست) و در نهایت ببنید کاربر دیتای اشتباه بهتون داده و ...
Fail fast
میگه همه ویژگیهایی که بهشون نیاز داری رو همون اول کار تست کن قرار بوده از یوزر list بگیری ؟!
اوکی تستش کن :
تو بدترین حالت
بذار اگر خطایی هست، همین اول برگرده به یوزر.
پ.ن : سعی کردم ساده توضیح بدم، ولی اگر کسی متوجه نشد بگه سعی کنم بهتر توضیح بدم.
Fail Fast (Defensive Programming)
چون خودم هم همیشه با نیروهای جدید (بخصوص Ai, Data Science, Data Engineering) مشکل دارم بدم نمیاد راجبش یک توضیح بدم.
اما
fail fast
نه تنها توی برنامهنویسی که توی زندگی هم باید رعایت کنید؛ من بسیار استارتاپ دیدم که درگیر فیچر پشت فیچر دادن میشوند، اونقدری که فراموش میکنند اصلا محصول رو عرضه کنند (داستان این باکسهای نوشیدنی، که ۶ میلیون دلار fund raise داشت یک مورد بسیار بسیار معروف هست که بدون هیچ محصولی fail شد)
Assumption kills
این یکی از جملههایی هست که بسیار توی شرکت استفاده میکردم (توی تیم دیتاساینس)، اینکه فرض کنی تیم
Data Engineering
همه چیز رو تست کرده و دیتای فوقالعاده بهت داده خطاس اما بیاعتمادی هم اشتباه هست (برای همین ی بخشی از دیتا رو shuffle میکنی و تست)
توی برنامهنویسی اینکه فکر کنی، چون به یوزر گفتی لیست بهم بده دلیلی نمیشه که حتماً لیست بهت بده یا
Dynamic Programming
دیدیم که تست میکنیم یک کلاس هست یا خیر، ولی این دلیل نمیشه اون متد خاص پیاده سازی شده باشه
Fail fast
اگر نباشه، ممکنه شما ۱۰ دقیقه، ۱ روز ، ۱ماه پردازش انجام بدید (توی کار دیتا اصلا بعید نیست) و در نهایت ببنید کاربر دیتای اشتباه بهتون داده و ...
Fail fast
میگه همه ویژگیهایی که بهشون نیاز داری رو همون اول کار تست کن قرار بوده از یوزر list بگیری ؟!
اوکی تستش کن :
تو بدترین حالت
user_input = list(user_input)
بذار اگر خطایی هست، همین اول برگرده به یوزر.
پ.ن : سعی کردم ساده توضیح بدم، ولی اگر کسی متوجه نشد بگه سعی کنم بهتر توضیح بدم.
👍27👌4❤🔥2🔥1
اعلام نفرت میکنم
از تمام کتابخونههایی که میگه پشتیبانی از
داره ولی وقتی نصبش میکنی میگه
بعد میری سرچ میزنی میبینی این نسخه دیفالت ۲ تا ورژن بالاتر هست.
نمونهاش
راهکار:
ولی بطور کلی کار تمیزی نیست دیگه.
از تمام کتابخونههایی که میگه پشتیبانی از
python3.xx
داره ولی وقتی نصبش میکنی میگه
your system has an unsupported version of sqlite3
بعد میری سرچ میزنی میبینی این نسخه دیفالت ۲ تا ورژن بالاتر هست.
نمونهاش
chromadb
راهکار:
pip install pysqlite3-binary
__import__('pysqlite3')
import sys
sys.modules['sqlite3'] = sys.modules.pop('pysqlite3')
ولی بطور کلی کار تمیزی نیست دیگه.
👍25🤝11😁3
نوجوانی
خیلی با ارزشتر از این حرفاست که توی این کشور هدر بره.
اینو میگم چون خیلی سوال میشه، این ترازو رو تصور کنید،
انجام هرکاری توی ایران ------------- فرار از ایران.
همیشه سمت چپ این ترازو سنگینتر هست،
همیشه.
فقط فرار کنید.
خیلی با ارزشتر از این حرفاست که توی این کشور هدر بره.
اینو میگم چون خیلی سوال میشه، این ترازو رو تصور کنید،
انجام هرکاری توی ایران ------------- فرار از ایران.
همیشه سمت چپ این ترازو سنگینتر هست،
همیشه.
فقط فرار کنید.
👍82👎51💔9🫡5💯3
#خارج_از_بحث #لینوکس
خبر پشتیبانی از پکیجهای
اگر کاربر یا طرفدار
که سال بعدی میاد گفته که دیگه از نسخههای قدیمی پشتیبانی نخواهد کرد
تنها گزینه خواهد بود. این یعنی
در همین راستا چندسال قبل راجب
صحبت کرده بودم و گفتم که این
بازم میگم : کاربران
در کنار نسخههای قدیمی اضافه خواهد شد؛ که اتفاقا خبر خوبی هست اگر
شخصا بیصبرانه منتظر آپگرید سیستمم به
هستم.
خبر پشتیبانی از پکیجهای
x86_64-v3
خلاصه و به زبان ساده بگم؛ این نسخه از پکیجها برای cpu
های سال 2015
به بعد بهینه شده خوبیش استفاده بهینه از منابع و حتی سرعت بیشتر هست.اگر کاربر یا طرفدار
ubuntu
هستید میدونید که گفته به سراغ این موضوع میره؛ fedora
هم از این قضیه مستثنی نیست و گفته که این موضوع رو بررسی میکنه؛ اما این وسط RedHat
حرکت عجیبتری زدهRedHat Enterprise Linux v10
که سال بعدی میاد گفته که دیگه از نسخههای قدیمی پشتیبانی نخواهد کرد
x86_64-v3
تنها گزینه خواهد بود. این یعنی
cpu
های قبل از 2015
دیگه توانایی نصب RHEL10, Rocky10 , ...
رو نخواهد داشت و این موضوع رو هم اعلام کرده که حتی اگه اینکار باعث بهبود سرعت و پرفورمنس هم نشه بازم اینکار رو میکنه چون دیگه لازم نیست توی کدها شرایط AVX - , ...
رو بررسی کنند ( داستان کد کمتر باگ کمتری هست که ۲ هفته پیش صحبت کردم راجبش )در همین راستا چندسال قبل راجب
Intel Clear Linux
صحبت کرده بودم و گفتم که این
OS
روی اکثر سرورهای پردازشی شرکتی که اون زمان کار میکردم وجود داره و دلیلش هم بهینه بودنش توی استفاده از منابع هست.بازم میگم : کاربران
Fedora, Ubuntu
و مشتقاتش نگرانی نداشته باشند چون x86-64-v3
در کنار نسخههای قدیمی اضافه خواهد شد؛ که اتفاقا خبر خوبی هست اگر
cpu
شما پشتیبانی کنه OS
بهینه تری خواهید داشتید.شخصا بیصبرانه منتظر آپگرید سیستمم به
Rocky10
هستم.
🍾13👍9🔥1😢1
#موقتی
کتابی که استوری شد، برای همه کسانی هست که میگفتند نمیدونند چطور باید کدهای
بزنند یا اینکه چطوری تصمیم بگیرند از
کجا استفاده کنند.
شخصاً نسخه قدیمی این کتاب رو خوندم،
اما پیشنهاد میدم نسخهای که استوری شده رو بخونید.
خوبی کتابهای
پ.ن : کتاب بعدی هم راجب
هست.
کتابی که استوری شد، برای همه کسانی هست که میگفتند نمیدونند چطور باید کدهای
OOP
بزنند یا اینکه چطوری تصمیم بگیرند از
Inheritance, Multi-Inheritance, Interface, Protocol, ...
کجا استفاده کنند.
شخصاً نسخه قدیمی این کتاب رو خوندم،
python3 OOP
اما پیشنهاد میدم نسخهای که استوری شده رو بخونید.
خوبی کتابهای
Dusty Philips
اینه که علاوه بر تئوری، همه چیز رو بصورت کدهای عملی مثال میزنه و نمایش میدهپ.ن : کتاب بعدی هم راجب
Python Software Architecture
هست.
👍47❤24❤🔥1💯1🦄1
#خارج_از_بحث
#جهت_انتشار
#جهت_آگاهسازی
من راجب لو رفتن دیتاهای اسنپ (حتی همون بخش کوچیک)، ایرانسل، همراهاول توی این چندسال هیچ چیزی نگفتم توی این کانال چون واقعاً ربطی نداشت به ما.
اما یک مورد رو بسیار زیاد دیدم توی چند وقت اخیر، یک گروه از افراد (بیاید بگیم گروه هکری، هرچند خیلی از هکرها شرف دارند)
شروع کردند به دخترها، توی تلگرام پیام دادن که:
خلاصه و مضمون این پیام اینطوری هست که به دلیل مشکلات جسمی و #جنسی نیاز به رابطه دارند و ... ولی امکانش رو ندارند.
بنابراین اگر شما بدون چهره و ... بهشون تصویر یا ویدئو لخت بدید حاضرند به شما پرداخت داشته باشند، به عمد هم مبالغ خوبی رو پیشنهاد میدهند.
و تأکید میکنند پلتفرم ناشناس باشه، چهره نباشه و ...
حالا بخش اخاذی چطوری میاد ؟
دیتابیس #ایرانسل، #اسنپ #همراه_اول هر ۳ مورد علاوه بر شماره اطلاعات دقیق صاحب خط، شناسنامه، آدرس و ... رو هم داره
توی موردی که شخصاً با فرد داشتم چت میکردم، حتی اعلام کرد برای ویدیو ۵ دقیقهای حاضر هست ۱ میلیون تومان پرداخت مستقیم داشته باشه
بعد از ۲ تا عکس هم حاضره نصف مبلغ رو درجا پرداخت کنه، (همین شیوه پرداخت خودش،ناشناس بودن رو میبره زیر سوال)
متأسفانه جامعه هدف این افراد کسانی هستند که سواد کامپیوتری ندارند و یا طبق اطلاعات ثبت شده سن افراد بین ۱۸ تا ۲۵ هست.
من نمیدونم چطوری اما اگر شما هم کسی رو میشناسید که دختر داشته باشه، یا دوست و آشنایی دارید حتماً این پیام رو بفرستید براشون یا بهشون توضیح بدید.
میدونم زندگی سخت شده و برای پول هرکاری شاید بکنند بعضی افراد، با تصور اینکه هیچ اطلاعاتی ازشون وجود نداره (توی گروهی بودم که حداقل ۱٪ میخواستند اینکارو رو بکنند) اما شما و من میدونیم به محض اینکه اولین ویدئو رو دریافت کنند اخاذی شروع خواهد شد.
بر اساس همون آدرسها و اطلاعاتی که توی دیتابیسهای مختلف هک شده وجود داره
میدونم موضوع کانال این چیزا نیست، اما وظیفه خودم دونستم که این موضوع رو حتماً اطلاع بدم و شخصاً از شما عزیزان خواهش میکنم که این مطلب رو به اشتراک بذارید (نیاز به ذکر منبع نیست)
کاش با این شرکتهایی که امنیت کاربر براشون مهم نیست و اطلاعات دقیق از کاربر میگیرند برخورد محکم و قاطعی صورت میگرفت.
#جهت_انتشار
#جهت_آگاهسازی
من راجب لو رفتن دیتاهای اسنپ (حتی همون بخش کوچیک)، ایرانسل، همراهاول توی این چندسال هیچ چیزی نگفتم توی این کانال چون واقعاً ربطی نداشت به ما.
اما یک مورد رو بسیار زیاد دیدم توی چند وقت اخیر، یک گروه از افراد (بیاید بگیم گروه هکری، هرچند خیلی از هکرها شرف دارند)
شروع کردند به دخترها، توی تلگرام پیام دادن که:
خلاصه و مضمون این پیام اینطوری هست که به دلیل مشکلات جسمی و #جنسی نیاز به رابطه دارند و ... ولی امکانش رو ندارند.
بنابراین اگر شما بدون چهره و ... بهشون تصویر یا ویدئو لخت بدید حاضرند به شما پرداخت داشته باشند، به عمد هم مبالغ خوبی رو پیشنهاد میدهند.
و تأکید میکنند پلتفرم ناشناس باشه، چهره نباشه و ...
حالا بخش اخاذی چطوری میاد ؟
دیتابیس #ایرانسل، #اسنپ #همراه_اول هر ۳ مورد علاوه بر شماره اطلاعات دقیق صاحب خط، شناسنامه، آدرس و ... رو هم داره
توی موردی که شخصاً با فرد داشتم چت میکردم، حتی اعلام کرد برای ویدیو ۵ دقیقهای حاضر هست ۱ میلیون تومان پرداخت مستقیم داشته باشه
بعد از ۲ تا عکس هم حاضره نصف مبلغ رو درجا پرداخت کنه، (همین شیوه پرداخت خودش،ناشناس بودن رو میبره زیر سوال)
متأسفانه جامعه هدف این افراد کسانی هستند که سواد کامپیوتری ندارند و یا طبق اطلاعات ثبت شده سن افراد بین ۱۸ تا ۲۵ هست.
من نمیدونم چطوری اما اگر شما هم کسی رو میشناسید که دختر داشته باشه، یا دوست و آشنایی دارید حتماً این پیام رو بفرستید براشون یا بهشون توضیح بدید.
میدونم زندگی سخت شده و برای پول هرکاری شاید بکنند بعضی افراد، با تصور اینکه هیچ اطلاعاتی ازشون وجود نداره (توی گروهی بودم که حداقل ۱٪ میخواستند اینکارو رو بکنند) اما شما و من میدونیم به محض اینکه اولین ویدئو رو دریافت کنند اخاذی شروع خواهد شد.
بر اساس همون آدرسها و اطلاعاتی که توی دیتابیسهای مختلف هک شده وجود داره
میدونم موضوع کانال این چیزا نیست، اما وظیفه خودم دونستم که این موضوع رو حتماً اطلاع بدم و شخصاً از شما عزیزان خواهش میکنم که این مطلب رو به اشتراک بذارید (نیاز به ذکر منبع نیست)
کاش با این شرکتهایی که امنیت کاربر براشون مهم نیست و اطلاعات دقیق از کاربر میگیرند برخورد محکم و قاطعی صورت میگرفت.
👍117❤9👌5😁1🤔1