Python Hints
8.62K 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
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🙏31👎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❤‍🔥52
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 برسه (پیاده‌سازی درست و اصولی)
👍2652
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 هم داریم توی پایتون اما مفهومش با زبان‌های دیگه کمی فرق داره که حالا همگی دلیلش رو می‌دونیم.
👍2443
قبل از اینکه بریم سراغ تصویر :
یک مفهومی داریم توی پایتون به اسم
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__ رو اضافه نکرده.
👍173
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 انداخت
👍21🆒5🔥1
خواستم یکبار دیگه تأکید کنم روی
EAFP ( easier to ask forgiveness than permission )

که هم به خودم یادآوری کرده باشم هم باقی دوستان،
اصولاً توی دنیای واقعی هم همین هست مثال میزنم که جا بیوفته (چون متاسفانه خیلی کم رعایت میشه)

کودکی رو به خاطر بیارید، یک کاری می‌خواستی بکنی که با شک بالا می‌دونستی پدر و مادر اجازه نمی‌دهند.
وقتی می‌رفتی و اجازه می‌گرفتی، درجا نه می‌شنیدی حالا باید تمام جزئیات و ... رو توضیح میدادی تا همه‌ی نگرانی‌ها برطرف بشه
بعد شاید حتی ۱ همراه یا ... هم باهات می‌فرستادند و در اینصورت شما اجازه داشتی کاری که می‌خوای رو انجام بدی، لذتش ۲۰٪ می‌شد.

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

درس ایمنی : اگر ماهیتابه روغن روی گاز آتیش گرفت آب توش نریزید، فقط درش رو بذارید و شعله زیرش رو خاموش کنید 😁

۹۰٪ بچه‌ها اجازه انجام اینکار رو نداشتند، من اولین بار بدون اجازه رفتم اینکارو کردم جلو در خونه خودمون وقتی پدرم دید گفت نباید اینکارو می‌کردی و ...

منم عذرخواهی کردم و توضیح دادم که شعله کوچیک هست (صورتمم عقب گرفتم که ابرو و موژه‌ام نسوزه) و نمی‌دونستم که باید براش اجازه بگیرم، بعد چندبار به خودش نشون دادم، درنهایت گفت پس مراقب باش اشکالی نداره (بزرگ شدی دیگه)
اما قبل از اینکه پدرم من رو ببینه، بیش از ۵۰ بار اون کار رو گرده بودم.

EAFP
هم همین هست، وقتی نسبت بروز Exception خیلی کم هست چرا هر دفعه می‌خوای چک کنی که اجازه انجام اون محاسبه رو داری یا نه ؟!

این همه گفتم، که خواهش کنم این مورد رو توی کدهاتون بیشتر رعایت کنید.

پ.ن : یادم رفت پست‌های قبلی که EAFP رو توضیح دادم reply کنم ‌ولی این اولین مورد بود (سرچ کنید باقیش رو هم می‌تونید بخونید)

https://t.iss.one/pyHints/59
👍28👏7👎1🔥1
Python Hints
خوانش گروهی کتاب Fluent Python به فصل ۱۳ رسید (عضو جدید نمی‌گیره گروه) Interfaces, Protocol and ABCs داشتم راجب همین موضوع پیش گروهی دیگر از دوستان صحبت می‌کردم که متوجه شدم خیلی از بچه‌ها با این مفاهیم آشنا هستند، اما کاربرد درستش رو نمی‌دونند حتی بچه‌هایی…
توی این مباحث یک کامنت داده شد درباره
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
This media is not supported in your browser
VIEW IN TELEGRAM
🎉3213🍾4😁21🤷1
#خارج_از_بحث #لینوکس

خبر پشتیبانی از پکیج‌های 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
هست.
👍4724❤‍🔥1💯1🦄1
#خارج_از_بحث
#جهت_انتشار
#جهت_آگاه‌سازی

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

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

خلاصه و مضمون این پیام اینطوری هست که به دلیل مشکلات جسمی و #جنسی نیاز به رابطه دارند و ... ولی امکانش رو ندارند.
بنابراین اگر شما بدون چهره و ... بهشون تصویر یا ویدئو لخت بدید حاضرند به شما پرداخت داشته باشند، به عمد هم مبالغ خوبی رو پیشنهاد می‌دهند.
و تأکید می‌کنند پلتفرم ناشناس باشه، چهره نباشه و ...

حالا بخش اخاذی چطوری میاد ؟
دیتابیس #ایرانسل، #اسنپ #همراه_اول هر ۳ مورد علاوه بر شماره اطلاعات دقیق صاحب خط، شناسنامه‌، آدرس و ... رو هم داره
توی موردی که شخصاً با فرد داشتم چت می‌کردم، حتی اعلام کرد برای ویدیو ۵ دقیقه‌ای حاضر هست ۱ میلیون تومان پرداخت مستقیم داشته باشه
بعد از ۲ تا عکس هم حاضره نصف مبلغ رو درجا پرداخت کنه، (همین شیوه پرداخت خودش،ناشناس بودن رو می‌بره زیر سوال)

متأسفانه جامعه هدف این افراد کسانی هستند که سواد کامپیوتری ندارند و یا طبق اطلاعات ثبت شده سن افراد بین ۱۸ تا ۲۵ هست.

من نمی‌دونم چطوری اما اگر شما هم کسی رو می‌شناسید که دختر داشته باشه، یا دوست و آشنایی دارید حتماً این پیام رو بفرستید براشون یا بهشون توضیح بدید.

می‌دونم زندگی سخت شده و برای پول هرکاری شاید بکنند بعضی افراد، با تصور اینکه هیچ اطلاعاتی ازشون وجود نداره (توی گروهی بودم که حداقل ۱٪ می‌خواستند اینکارو رو بکنند) اما شما و من می‌دونیم به محض اینکه اولین ویدئو رو دریافت کنند اخاذی شروع خواهد شد.
بر اساس همون آدرس‌ها و اطلاعاتی که توی دیتابیس‌های مختلف هک شده وجود داره

می‌دونم موضوع کانال این چیزا نیست، اما وظیفه خودم دونستم که این موضوع رو حتماً اطلاع بدم و شخصاً از شما عزیزان خواهش می‌کنم که این مطلب رو به اشتراک بذارید (نیاز به ذکر منبع نیست)

کاش با این شرکت‌هایی که امنیت کاربر براشون مهم نیست و اطلاعات دقیق از کاربر میگیرند برخورد محکم و قاطعی صورت می‌گرفت.
👍1179👌5😁1🤔1
این رو توی لینکدین دیدم.
بهانه‌ای شد تشکر کنم از همه‌ی آدم‌های باهوش، باتجربه‌ تر از خودم که توی زندگیم دیدم

قدردان روزایی که با هر کدوم گذروندم هستم، خداکنه باقی زندگیم هم انقدر خوب باشه که پر باشه ازین آدم‌ها.
101👍21🫡3❤‍🔥1🔥1💯1
تفاوت نسخه های مختلف پایتون (داکر) و البته تاثیرش روی سایز image نهایی (عکس رو باز کنید) :

نسخه‌ای که من از بچه‌ها گرفتم درنهایت سایز image اش به 1.3GB میرسید
نسخه‌ای که من برای چک کردن کدها و توسعه استفاده کردم 241MB هست و نسخه‌ای که برای deploy تحویل دادم 153MB (روش multistage که قبلا راجبش توضیح دادم توی زبان‌هایی مثل Go lang)

علاوه بر کم کردن هزینه و مزایایی سریعتر up شدن و ... که میدونید
cloud provider
شرکت بابت نگهداری از این image ها (زیر ۲۵۰ مگ) هیچ هزینه‌ای نمیگیره و حتی بابت نسخه تست هم (رم و cpu کم) هیچ هزینه‌ای نداره.
👍27❤‍🔥2