Python BackendHub
سمت فرانت تنها کاری که باید انجام بدین که مربوط به JWT میشه: فرش توکن اصلا نباید تو local storage ذخیره شه چون تو بک آپ browser هست و کلا دسترسی بهش غیر ممکن نیست. به جاش باید تو کوکی ذخیرش کنید تحت همچین ویژگی هایی: prefixes (e.g. __HOST-) attributes (Secure…
خب ما رفرش توکن رو تو لوکال استوریج ذخیره میکردیم درسته؟ اتکر هم بهش دسترسی داره. پس باید چیکار کنیم؟ میبریم تو کوکی.
یک نکته خیلی جالب داشت که کسی بهش اشاره نکرد و امروز یکم بهش فکر کردم اصلا باعث میشه رفتار اندپوینت refresh توکن باید کاملا تغییر کنه تا pen test ای که انجام میشه نتونه ریپورت یا مشکل امنیتی بگیره. دلیلش چیه؟
اگه تو کوکی با اون مشخصاتی که پست قبل تر اشاره کردم هم بذاریم اینقدر امن میشه که دیگه خود کلاینت فرانت هم نمیتونه بهش دسترسی داشته باشه. 😂
پس همینجا مشکل میشه. باید تو روتر refresh token, تو کوکی رفرش توکن رو بگیریم نه تو بادی!
و تو سرور هم رفرش توکن رو تو کوکی چک کنیم. اما تمام ماجرا اینجا نیست. حالا برای اینکه CSRF اتک هم رخ نده باید از CSRF Token تو اون روتر استفاده کنیم. اکسز توکن هم که تو مموری نگه میداریم.
اتفاقا خیلی وقت پیش داشتم یک سیستم اهراز هویت خفن رو چک میکردم نفهمیده بودم چرا اینکارو کرده بود. الان فهمیدم دیگه.
@ManiFoldsPython
یک نکته خیلی جالب داشت که کسی بهش اشاره نکرد و امروز یکم بهش فکر کردم اصلا باعث میشه رفتار اندپوینت refresh توکن باید کاملا تغییر کنه تا pen test ای که انجام میشه نتونه ریپورت یا مشکل امنیتی بگیره. دلیلش چیه؟
اگه تو کوکی با اون مشخصاتی که پست قبل تر اشاره کردم هم بذاریم اینقدر امن میشه که دیگه خود کلاینت فرانت هم نمیتونه بهش دسترسی داشته باشه. 😂
پس همینجا مشکل میشه. باید تو روتر refresh token, تو کوکی رفرش توکن رو بگیریم نه تو بادی!
و تو سرور هم رفرش توکن رو تو کوکی چک کنیم. اما تمام ماجرا اینجا نیست. حالا برای اینکه CSRF اتک هم رخ نده باید از CSRF Token تو اون روتر استفاده کنیم. اکسز توکن هم که تو مموری نگه میداریم.
اتفاقا خیلی وقت پیش داشتم یک سیستم اهراز هویت خفن رو چک میکردم نفهمیده بودم چرا اینکارو کرده بود. الان فهمیدم دیگه.
@ManiFoldsPython
👍3
اینم بگم که اصلا تو اپ موبایل نیاز به این کارا نیست. تو اپ موبایل Key Chain داریم که یک استوریج امن بهمون میده.
https://developer.android.com/reference/android/security/KeyChain
https://medium.com/ios-os-x-development/securing-user-data-with-keychain-for-ios-e720e0f9a8e2
پس میتونید اگه تست هاتون رو مثلا با همون حالت نوشتین همونو نگه دارین و برای اپ موبایل هم همونو نگه دارین. به جاش تو وب اپ روش cookie رو فورس کنید.
اینطوری backward compatibility هم دارین و نیازی به ریفکتور کردن تستون و اپ گوشیتون ندارین.
البته مدل اهراز هویتتون هم پیچیده تر میشه :) چون حالا به جای یک مدل اهراز حویت دو مدل دارین.
@ManiFoldsPython
https://developer.android.com/reference/android/security/KeyChain
https://medium.com/ios-os-x-development/securing-user-data-with-keychain-for-ios-e720e0f9a8e2
پس میتونید اگه تست هاتون رو مثلا با همون حالت نوشتین همونو نگه دارین و برای اپ موبایل هم همونو نگه دارین. به جاش تو وب اپ روش cookie رو فورس کنید.
اینطوری backward compatibility هم دارین و نیازی به ریفکتور کردن تستون و اپ گوشیتون ندارین.
البته مدل اهراز هویتتون هم پیچیده تر میشه :) چون حالا به جای یک مدل اهراز حویت دو مدل دارین.
@ManiFoldsPython
Python BackendHub
Perfect programming language! 😂😂 یکی از عجیب ترین زبون های برنامه نویسی رو تو ریپو زیر میتونید ببینید که البته بیشتر بنظرم شبیه میمه 😂 https://github.com/TodePond/DreamBerd چند چیز عجیب این زبون که میشه به طور خلاصه بهش اشاره کنم: میتونید یک integer رو…
جا مانده از perfect programming language
استاد مفاهیم جدیدی تو versioning داره معرفی میکنه 😂😂
@ManiFoldsPython
استاد مفاهیم جدیدی تو versioning داره معرفی میکنه 😂😂
@ManiFoldsPython
😁5
طبق Auth0 بهتره رفرش توکن فقط یک بار استفاده شه
منبع
برای پیاده سازیش پس عملا رفرش توکن سمت سرور باید ذخیره شه, و بعد از رفرش شدن توکن قدیمی ممبرشیپش باطل شه.
بهتره جای اینکه هر رفرش توکنی باطل میشه یک لیست گنده درست کنید و اونجا بلک لیست کنید, هر رفرش توکنی که زندست رو بتونید وایت لیست کنید. (از نظر ریسورس منطقی تره)
یکم عجیب نیست؟
ولی خب استاندارده 😅
@ManiFoldsPython
منبع
برای پیاده سازیش پس عملا رفرش توکن سمت سرور باید ذخیره شه, و بعد از رفرش شدن توکن قدیمی ممبرشیپش باطل شه.
بهتره جای اینکه هر رفرش توکنی باطل میشه یک لیست گنده درست کنید و اونجا بلک لیست کنید, هر رفرش توکنی که زندست رو بتونید وایت لیست کنید. (از نظر ریسورس منطقی تره)
یکم عجیب نیست؟
ولی خب استاندارده 😅
@ManiFoldsPython
Auth0 - Blog
What Are Refresh Tokens and How to Use Them Securely | Auth0
Learn more about refresh tokens and how they help developers balance security, privacy, and usability in their applications.
👍3
امروز با اختلاف بسییااااار فاحش یکی از سخت ترین مصاحبه های تکنیکالمو دادم. با شرکتی که 2 ماه پیش رزومه فرستاده بودم مصاحبه فنی گرفتم شرکت نسبتا بزرگ و پیشرفته ای هست. (اسم شرکت رو به دلایل شخصی نمیتونم بگم). 2 ساعت و 45 دقیقه مصاحبه طول کشید تماما فنی. اما بزرگ ترین درس فنی رو یاد گرفتم که اخر متن میگم.
یک تکنیکال question داشت که پیچیده بود به جای خود. هر خط کدی که مینوشتم درجا میگفت why و قبلش هم باید سره architect کدم باهاش به توافق میرسیدم!
اما برسیم سره سوالات, من اینطوری بودم که الان قراره چند تا سوال پایتونی آسون بپرسه و ببنده کارو. استاد ازم پرسید NS چیه توضیح دادم.گفت وقتی مرورگر رو میزنم میرم یک یو ار ال چه اتفاقی میفته توضح دادم که اره JSP میاد اون ip که کش کرده خودش رو مپ میکنه به دامین. بعد پرسید ISP چطوری اینکارو انجام میده؟ همینطوری لایه لایه ازم میپرسید میرفت بالا. اخرش به یک لایه ای رسید که گفتم من بخدا از اینجا به بعدشو بلد نیستم 😂😂
سوال بعدی این بود که کش چطوری هندل میشه؟ با GC. اوکی gc چطور کار میکنه؟ جواب دادم. اوکی حالا میتونیم به پایتون کش رو خودمون هندل کنیم؟ جواب دادم. اوکی حالا چه بلایی سره مجیک متودای مربوط به کش میاد وقتی کاستومایز میکنیم؟ جواب دادم. دیگه ادامه نداد و لبخند زد.
رفت سوال بعدی, گفت تو پایتون وقتی یک تابعو با 2 تا variable که ساختی صدا میزنی چه اتفاقی میفته؟ جواب دادم گفت by value و by reference چطور تو پایتون هندل میشه؟ جواب دادم. بعد ایراد گرفت و رفت سوال بعدی
خلاصه کلام, هر سوالی که میپرسید اینقدر کشش میداد میگفت why و how تا به عمق پایینتری برسه. از همه چیز پرسید, profiling benchmarking CI CD و سافتور آرچیتکت . همه هم با همین روند پیش رفت. اینقدر جلو میرفت تا بگم غلط کردم یا اینکه به ته عمقش میرسیدم و میرفت سوال بعدی!
تهش به من گفت تو کل مصاحبه فقط 2 تا why و how رو تا انتهاش رفتی یکی مموری بود یکیم software architect و بقیه چیزایی که پرسیدم همون عمق دوم یا سوم گیر کردی توش و همین سنیورت نمیکنه و من تو رو تو category مید لول میذارم تو شرکتمون.
و در انتها گفت سنیور کسیه که میدونه why, how و where برای تمام چیزایی که باهاش سرو کله داره چه مستقیم چه غیر مستقیم روزانه.
تعریف جالبی بود و تجربه جالبی بود گفتم باهاتون به اشتراک بذارم.
@ManiFoldsPython
یک تکنیکال question داشت که پیچیده بود به جای خود. هر خط کدی که مینوشتم درجا میگفت why و قبلش هم باید سره architect کدم باهاش به توافق میرسیدم!
اما برسیم سره سوالات, من اینطوری بودم که الان قراره چند تا سوال پایتونی آسون بپرسه و ببنده کارو. استاد ازم پرسید NS چیه توضیح دادم.گفت وقتی مرورگر رو میزنم میرم یک یو ار ال چه اتفاقی میفته توضح دادم که اره JSP میاد اون ip که کش کرده خودش رو مپ میکنه به دامین. بعد پرسید ISP چطوری اینکارو انجام میده؟ همینطوری لایه لایه ازم میپرسید میرفت بالا. اخرش به یک لایه ای رسید که گفتم من بخدا از اینجا به بعدشو بلد نیستم 😂😂
سوال بعدی این بود که کش چطوری هندل میشه؟ با GC. اوکی gc چطور کار میکنه؟ جواب دادم. اوکی حالا میتونیم به پایتون کش رو خودمون هندل کنیم؟ جواب دادم. اوکی حالا چه بلایی سره مجیک متودای مربوط به کش میاد وقتی کاستومایز میکنیم؟ جواب دادم. دیگه ادامه نداد و لبخند زد.
رفت سوال بعدی, گفت تو پایتون وقتی یک تابعو با 2 تا variable که ساختی صدا میزنی چه اتفاقی میفته؟ جواب دادم گفت by value و by reference چطور تو پایتون هندل میشه؟ جواب دادم. بعد ایراد گرفت و رفت سوال بعدی
خلاصه کلام, هر سوالی که میپرسید اینقدر کشش میداد میگفت why و how تا به عمق پایینتری برسه. از همه چیز پرسید, profiling benchmarking CI CD و سافتور آرچیتکت . همه هم با همین روند پیش رفت. اینقدر جلو میرفت تا بگم غلط کردم یا اینکه به ته عمقش میرسیدم و میرفت سوال بعدی!
تهش به من گفت تو کل مصاحبه فقط 2 تا why و how رو تا انتهاش رفتی یکی مموری بود یکیم software architect و بقیه چیزایی که پرسیدم همون عمق دوم یا سوم گیر کردی توش و همین سنیورت نمیکنه و من تو رو تو category مید لول میذارم تو شرکتمون.
و در انتها گفت سنیور کسیه که میدونه why, how و where برای تمام چیزایی که باهاش سرو کله داره چه مستقیم چه غیر مستقیم روزانه.
تعریف جالبی بود و تجربه جالبی بود گفتم باهاتون به اشتراک بذارم.
@ManiFoldsPython
❤51👍24👏3👎1😁1
یکی از سوالاتی که پرسیدن ازم Pass by Reference in Python و Pass By Value بود که این مکانیزم چطور تو پایتون کار میکنه. این مثال به طور خیلی مشخص و خوشگلی توضیح میده.
خروجی کدوم یکی از حالات میشه؟
پی نوشت: عدد memory address رو یک رقمی کردم که قدرت خوانایی سوال بالا بره.
@ManiFoldsPython
خروجی کدوم یکی از حالات میشه؟
پی نوشت: عدد memory address رو یک رقمی کردم که قدرت خوانایی سوال بالا بره.
@ManiFoldsPython
❤3
کدوم گزینه میتونه خروجی باشه تو سوال بالا؟
Final Results
21%
گزینه ۱
23%
گزینه ۲
18%
گزینه ۳
38%
گزینه ۴
اینم quiz دوم. در واقع سوال دومش رو میشه از همین کوییز نتیجه گیری کرد.
شب هم اینکه چطور اینطوری شد و هم اینکه چرا اینطوری شد توضیح میدم 😁
پ.ن: چراشو دیشب فهمیدم :)) بقیشو تونستم جواب بدم ولی تاحالا واقعا فکر نکرده بودم چرا تو پایتون اینطوری هندل میشه این موضوع.
@ManiFoldsPython
شب هم اینکه چطور اینطوری شد و هم اینکه چرا اینطوری شد توضیح میدم 😁
پ.ن: چراشو دیشب فهمیدم :)) بقیشو تونستم جواب بدم ولی تاحالا واقعا فکر نکرده بودم چرا تو پایتون اینطوری هندل میشه این موضوع.
@ManiFoldsPython
کدوم گزینه میتون خروجی باشه تو سوال بالا؟
Final Results
11%
گزینه ۱
10%
گزینه ۲
56%
گزینه ۳
23%
گزینه ۴
اما جواب
تو پایتون چیزی به اسم Pass by Reference in یا pass by value نداریم.به جاش میگیم pass by assignment
یعنی چی حالا؟ اول به کلمهassigment میپردازم و رفتارش تو پایتون|
داریم که:
چون متغیر ما mutable نیست پس وقتی که یک بلایی سرش میاریم تغییر نمیکنه. بلکه یک آبجکت جدید ساخته میشه و رفرنسی که قبلا داده بودیم از بین میره.درسته؟
اما راجب mutableها اینطوری نیست. یعنی وقتی چیزی بهشون اضافه میکنیم یا بلایی سرشون میاریم همون آبجکت تغییر میکنه.
list_a = []
print(id(list_a)) # 1
list_a.append(1)
print(id(list_a)) # 1
درواقع رفتار پایینی خیلی بهینه تره از نظر ریسورسی نسبت به رفتار بالایی ولی تو رفتار بالا ما مجبوریم اونکارو کنیم چون mutable نیستن.
حالا یعنی چی pass by assignment?
یعنی دقیقا pass by assignment
یعنی نه رفرنسی از اون برمیگرده نه مقدارش کپی میشه. اگه قرار بود مقدارش کپی شه که کل مموری مارو توابعمون میگرفتن چون هی میخواستن مقدار رو کپی کنند دوباره برگردونن.
حالا از لحاظ ریسورسی و رم کاری ندارم به این موضوع ولی یک دلیل دیگه ای هم داشت
چون ذن پایتونه!
explicit is better than implicit
وقتی ما یک تابع صدا میکنیم و میگیم
myfunc(a=2)
پس یعنی a=2. به همین سادگی 😅
درواقع داریم ۲ رو assign میکنیم به a
دیگه پیچیدگی عجیبی نداره. مفهوم assign رو بلد باشین متوجه میشین.
ولی رفتاری که نشون میده بستگی به اون رفتار assign تغییر میکنه که mutable هست یا immutable
برای همینه که ما موقع سورت لیست مینویسیم
mylist.sort()
نمیگیم
my_list = sort(mylist)
چون اینطوری هم تو اینپوتی که بهش دادیم رو سورت میکرد هم لیست اصلیو
@ManiFoldsPython
تو پایتون چیزی به اسم Pass by Reference in یا pass by value نداریم.به جاش میگیم pass by assignment
یعنی چی حالا؟ اول به کلمهassigment میپردازم و رفتارش تو پایتون|
داریم که:
a = 2
print(id(a)) # 1
a += 1
print(id(a)) # 2
چون متغیر ما mutable نیست پس وقتی که یک بلایی سرش میاریم تغییر نمیکنه. بلکه یک آبجکت جدید ساخته میشه و رفرنسی که قبلا داده بودیم از بین میره.درسته؟
اما راجب mutableها اینطوری نیست. یعنی وقتی چیزی بهشون اضافه میکنیم یا بلایی سرشون میاریم همون آبجکت تغییر میکنه.
list_a = []
print(id(list_a)) # 1
list_a.append(1)
print(id(list_a)) # 1
درواقع رفتار پایینی خیلی بهینه تره از نظر ریسورسی نسبت به رفتار بالایی ولی تو رفتار بالا ما مجبوریم اونکارو کنیم چون mutable نیستن.
حالا یعنی چی pass by assignment?
یعنی دقیقا pass by assignment
یعنی نه رفرنسی از اون برمیگرده نه مقدارش کپی میشه. اگه قرار بود مقدارش کپی شه که کل مموری مارو توابعمون میگرفتن چون هی میخواستن مقدار رو کپی کنند دوباره برگردونن.
حالا از لحاظ ریسورسی و رم کاری ندارم به این موضوع ولی یک دلیل دیگه ای هم داشت
چون ذن پایتونه!
explicit is better than implicit
وقتی ما یک تابع صدا میکنیم و میگیم
myfunc(a=2)
پس یعنی a=2. به همین سادگی 😅
درواقع داریم ۲ رو assign میکنیم به a
دیگه پیچیدگی عجیبی نداره. مفهوم assign رو بلد باشین متوجه میشین.
ولی رفتاری که نشون میده بستگی به اون رفتار assign تغییر میکنه که mutable هست یا immutable
برای همینه که ما موقع سورت لیست مینویسیم
mylist.sort()
نمیگیم
my_list = sort(mylist)
چون اینطوری هم تو اینپوتی که بهش دادیم رو سورت میکرد هم لیست اصلیو
@ManiFoldsPython
👍16
Media is too big
VIEW IN TELEGRAM
Work life balance European countries >>>>>
سره کار یک چنل داریم که روز مرخصیو اعلام میکنیم، بیشتر خبریه تا اجازه 😂😂
@ManiFoldsPython
سره کار یک چنل داریم که روز مرخصیو اعلام میکنیم، بیشتر خبریه تا اجازه 😂😂
@ManiFoldsPython
😁8👍4😢1
Forwarded from DevTwitter | توییت برنامه نویسی
قانون جدید مهاجرتی آلمان برای IT specialist ها:
بدون مدرک تحصیلی میتونید مهاجرت کنید و blue card بگیرید.
پدر و مادر رو هم علاوه بر همسر و فرزند میتونید ببرید.
@DevTwitter | <mehdi/>
بدون مدرک تحصیلی میتونید مهاجرت کنید و blue card بگیرید.
پدر و مادر رو هم علاوه بر همسر و فرزند میتونید ببرید.
@DevTwitter | <mehdi/>
😁9👎3👍2
Screenshot 2023-06-17 162818.png
149.4 KB
کورسیه که خودم پلنشو و syllabusاش آماده کردم و قصدشو دارم استارت ظبطشو بزنم و آخر هفته ها یک یا چند اپیزود بدم.
از بالا به ترتیب شروع میکنم میام پایین.
اگه نظری چیزی دارین یا حس میکنید چیزی هست که میشه بهتر کرد به من بگین. هر کورسی که میبینید اینجا یک playlist جدا داره که چند ساعت بیشتر نمیشه.
پی نوشت: حقیقتا بین انگلیسی و فارسی موندم, احتمالا introduction بالا رو فارسی بذارم و بقیه انگلیسی چون مخاطب فارسی کم تعداده و مشابه این کورس هم کم پیدا هست.
@ManiFoldsPython
از بالا به ترتیب شروع میکنم میام پایین.
اگه نظری چیزی دارین یا حس میکنید چیزی هست که میشه بهتر کرد به من بگین. هر کورسی که میبینید اینجا یک playlist جدا داره که چند ساعت بیشتر نمیشه.
پی نوشت: حقیقتا بین انگلیسی و فارسی موندم, احتمالا introduction بالا رو فارسی بذارم و بقیه انگلیسی چون مخاطب فارسی کم تعداده و مشابه این کورس هم کم پیدا هست.
@ManiFoldsPython
👍27🔥11😁1🤩1
میگن الگوریتم به چه دردی میخوره
اگه میخواستین یک rate limit request کاملا dynamic داشته باشین تو سطح gateway اپلیکیشنتون چیکار میکردین؟
ببینید چقدر قشنگ کراکند اینو هندل میکنه :)
https://www.krakend.io/docs/endpoints/rate-limit/
الگوریتم باکتش:
https://www.krakend.io/docs/enterprise/throttling/token-bucket/
@ManiFoldsPython
اگه میخواستین یک rate limit request کاملا dynamic داشته باشین تو سطح gateway اپلیکیشنتون چیکار میکردین؟
ببینید چقدر قشنگ کراکند اینو هندل میکنه :)
https://www.krakend.io/docs/endpoints/rate-limit/
الگوریتم باکتش:
https://www.krakend.io/docs/enterprise/throttling/token-bucket/
@ManiFoldsPython
KrakenD - Open source API Gateway
Rate Limiting API Gateway Endpoints
Implement rate-limiting strategies in KrakenD API Gateway to control the number of requests and prevent API abuse or overloading
❤6👍1
رودمپ دوآپس
بنظره شما، به عنوان یک بک اند دولوپر چه چیزایی رو باید از این مسیر رو بلد باشیم؟
@ManiFoldsPython
بنظره شما، به عنوان یک بک اند دولوپر چه چیزایی رو باید از این مسیر رو بلد باشیم؟
@ManiFoldsPython
👍9
داشتم کورس تایپ چک real python رو میدیدم (پولیه رایگان نیست) که این تعریف برام جالب بود
@ManiFoldsPython
@ManiFoldsPython
👍6
https://realpython.com/lessons/python-coding-interview-tips-overview/
این کورس هم خیلی خوبه مخصوصا برای پاسخ دادن به سوالات پایتونی که ممکنه تو مصاحبه بپرسن. پولیه بازم ولی حداقل کداشو به صورت رایگان گذاشته. اگه وقت بذارین و از gpt بپرسین و قنشگ تمرین کنید نیازی به ویدیوهاش نخواهید داشت
@ManiFoldsPython
این کورس هم خیلی خوبه مخصوصا برای پاسخ دادن به سوالات پایتونی که ممکنه تو مصاحبه بپرسن. پولیه بازم ولی حداقل کداشو به صورت رایگان گذاشته. اگه وقت بذارین و از gpt بپرسین و قنشگ تمرین کنید نیازی به ویدیوهاش نخواهید داشت
@ManiFoldsPython
Realpython
How to Stand Out in a Python Coding Interview (Overview) – Real Python
Hi, my name is James. In this course, you’ll learn how to stand out in a Python coding interview. This applies to coding challenges, technical phone screens, and onsite interviews. You’ll learn a bunch of different data structures, built-in…
👍8👎2
خیلی خوشم اومد از این سوال,
Return a list of the indexes of the majority element.
Majority element is the element that appears more than floor(n / 2) times.
If there is no majority element, return []
جوابشو کامنت کنید 😁
سوال خیلی راحتیه ولی خیلی راحت میشه تسلط و آشنایی فرد رو به پایتون با همین سوال سنجید.
مثال ورودی خروجیش
@ManiFoldsPython
Return a list of the indexes of the majority element.
Majority element is the element that appears more than floor(n / 2) times.
If there is no majority element, return []
جوابشو کامنت کنید 😁
سوال خیلی راحتیه ولی خیلی راحت میشه تسلط و آشنایی فرد رو به پایتون با همین سوال سنجید.
مثال ورودی خروجیش
>>> majority_element_indexes([1, 1, 2])
[0, 1]
>>> majority_element_indexes([1, 2])
[]
>>> majority_element_indexes([])
[]
@ManiFoldsPython
👍7
اما پاسخش
نزدیک ترین پاسخ برای سروش بود.
Counter
برای این هست که شما الکی کدتون رو زیاد و گنده نکنید و همون کار رو انجام میده با پرفومنس خیلی خوب. یعنی کسی که پایتون بلده نسبت به itertools و collections و built in method ها تسلط داره یا آشنایی داره حداقل که کجا باید استفاده کنه ازشون.
نکته دیگه تایپ هینت بود که سروشم اینو رعایت کرده بود تو نسخه دوم کدش.
اما ایراد سروش این بود که برای اینکه تست کنه فاکنشنش ورودی خروجی هاش درست کار میکنه پرینتشون کرده بود.
راه حل ایده آل اینه که وقتی دارین فقط یک فانکشن مینویسید شما تو داک استرینگ بیاین داک تست بنویسید.
اون موقع میتونید فایلتونو با داک تست ران کنید و بهتون میگه اگه کدتون ایراد داشت نسبت به ورودی خروجی. من اصلا اینو نمیدونستم و دیشب فهمیدم که چرا تو داک استرینگ همچین چیزی میذارن. فکر میکردم فقط برای داکیومنت کردنه در صورتی که هم داکیومنت کردنه هم اینکه برنامه نویسی که داره اینو میخونه متوجه کارکردش شه و هم اینکه یک جور تسته خودش 😁
python -m doctest myfile.py
list comprehension ✅
doc test ✅
doc string ✅
type hints ✅
Counter ✅
@ManiFoldsPython
نزدیک ترین پاسخ برای سروش بود.
Counter
برای این هست که شما الکی کدتون رو زیاد و گنده نکنید و همون کار رو انجام میده با پرفومنس خیلی خوب. یعنی کسی که پایتون بلده نسبت به itertools و collections و built in method ها تسلط داره یا آشنایی داره حداقل که کجا باید استفاده کنه ازشون.
نکته دیگه تایپ هینت بود که سروشم اینو رعایت کرده بود تو نسخه دوم کدش.
اما ایراد سروش این بود که برای اینکه تست کنه فاکنشنش ورودی خروجی هاش درست کار میکنه پرینتشون کرده بود.
راه حل ایده آل اینه که وقتی دارین فقط یک فانکشن مینویسید شما تو داک استرینگ بیاین داک تست بنویسید.
اون موقع میتونید فایلتونو با داک تست ران کنید و بهتون میگه اگه کدتون ایراد داشت نسبت به ورودی خروجی. من اصلا اینو نمیدونستم و دیشب فهمیدم که چرا تو داک استرینگ همچین چیزی میذارن. فکر میکردم فقط برای داکیومنت کردنه در صورتی که هم داکیومنت کردنه هم اینکه برنامه نویسی که داره اینو میخونه متوجه کارکردش شه و هم اینکه یک جور تسته خودش 😁
python -m doctest myfile.py
list comprehension ✅
doc test ✅
doc string ✅
type hints ✅
Counter ✅
@ManiFoldsPython
👍19🔥1🤯1
بحث سیستم شد با یکی از دوستام
من ۶-۷ ماه پیش حدودا یک سیستم بستم که هنوز خیلی راضیم ازش. قیمتش نسبت به کاراییش خیلی خوب دراومد. اون موقع خیلی تحقیق کردم راجبش.
AMD Ryzen™ 7 7700X - 7700TL
Nvidia GeForce GTX 1660 Super - 4700 TL
Kingston FURY Beast 64GB DDR5 5200MHz CL40 Performans Rami Kit (2x32GB) - 6200TL
Samsung NVMe 500GB 1240TL
Asus Prime X670-P AMD X670 6400 MHz (OC) DDR5 Soket AM5 ATX Anakart - 7000TL
Monitor Trendyol 7500TL
قیمت ها برای اون موقع هستن که مجموعا شد ۲۵ هزار لیر که به پول اون موقع میشد ۱۲۰۰ دلار.
با مانیتور, رم ۶۴ و سی پی یو قوی. هیچ کاری نبود که روش نتونم بکنم. کارت گرافیکش هم در حد فیلم دیدن و 4k بود ولی خب برای گیم بازی کردن ایده ال نیست. اما ترجیح دادم کارت گرافیک اصلا پولی خرج نکنم براش و بیشتر تمرکز رو بذارم رو بقیه قطعات چون کارت گرافیک خیلی گرونه.
کل این سیستم ddr5 بود. اولش واقعا درک نمیکردم چقدر قدرتش فرق داره با ddr4 ولی وقتی سیستمو گرفتم چیزایی که تو سرور اجرا میکردم که رمش ۱۲۸ بود و ddr3 یا 4 بودن هم کم میاوردن ولی رو سیستم خودم خیلی راحت همونا اجرا میشدن.
پی نوشت:از سخت افزار خیلی کم حالیمه :))
@ManiFoldsPython
من ۶-۷ ماه پیش حدودا یک سیستم بستم که هنوز خیلی راضیم ازش. قیمتش نسبت به کاراییش خیلی خوب دراومد. اون موقع خیلی تحقیق کردم راجبش.
AMD Ryzen™ 7 7700X - 7700TL
Nvidia GeForce GTX 1660 Super - 4700 TL
Kingston FURY Beast 64GB DDR5 5200MHz CL40 Performans Rami Kit (2x32GB) - 6200TL
Samsung NVMe 500GB 1240TL
Asus Prime X670-P AMD X670 6400 MHz (OC) DDR5 Soket AM5 ATX Anakart - 7000TL
Monitor Trendyol 7500TL
قیمت ها برای اون موقع هستن که مجموعا شد ۲۵ هزار لیر که به پول اون موقع میشد ۱۲۰۰ دلار.
با مانیتور, رم ۶۴ و سی پی یو قوی. هیچ کاری نبود که روش نتونم بکنم. کارت گرافیکش هم در حد فیلم دیدن و 4k بود ولی خب برای گیم بازی کردن ایده ال نیست. اما ترجیح دادم کارت گرافیک اصلا پولی خرج نکنم براش و بیشتر تمرکز رو بذارم رو بقیه قطعات چون کارت گرافیک خیلی گرونه.
کل این سیستم ddr5 بود. اولش واقعا درک نمیکردم چقدر قدرتش فرق داره با ddr4 ولی وقتی سیستمو گرفتم چیزایی که تو سرور اجرا میکردم که رمش ۱۲۸ بود و ddr3 یا 4 بودن هم کم میاوردن ولی رو سیستم خودم خیلی راحت همونا اجرا میشدن.
پی نوشت:از سخت افزار خیلی کم حالیمه :))
@ManiFoldsPython
Amazon
Amd Ryzen 7 7700X AM5Pin 105W Fansız (Box)
Bu baskın oyun işlemcisi, dünyanın en popüler oyunlarında 100'den fazla FPS performansı sunabilir AMD "Zen 4" mimarisine dayanan 8 Çekirdekli ve 16 işleme ipliği 5.4 GHz Max Boost, overclock için kilitsiz, 80 MB önbellek, DDR5-5200 desteği Son teknoloji ürünü…
🔥6👍2❤1👏1🎉1