Python BackendHub – Telegram
Python BackendHub
7.51K 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
برای لود تست هم locust رو داریم
https://github.com/locustio/locust

که میتونید scalability اپلیکشنتون رو باهاش بسنیجید که تو لود بالا چقدر پرفومنس داره.
خودشم GUI داره.
@ManiFoldsPython
👍3
Python BackendHub
دیروز با یک pen tester راجب بست پرکتیس های JWT صحبت میکردم و اینکه کلا چطور میشه هم مزیت های JWT رو داشت و هم به نحوی امن پیاده سازیش کرد, JWT همونطور که میدونید stateless هست یعنی نیازی به هیت به دیتابیس نداره. برای microservice و SOA هم بهتره چون overhead…
دارم رو یک boilerplate کار میکنم که همه اینا رو رعایت کرده باشه.

https://github.com/ManiMozaffar/fast-auth

امکاناتی که داره:
Secure JWT implementation
Redis black list access token
Refresh/login endpoint
Register endpoint


امکاناتی که مونده و باید ادد شه:
Add email field
Mail client
Email and verify email address on registration endpoint
Alarm unauthorized logins with mailing
Change username/email/password functionality with 2FA step (as email/gauth)
Opentelemetry integration
OAuth2 proto integration
OAuth support for gmail and apple

ROADMAP


اگه دوست داشتین میتونید کانتربیوت کنید. کدش کاملا کلین و اصولیه 😅

@ManiFoldsPython
👍9
This media is not supported in your browser
VIEW IN TELEGRAM
مصاحبه رو صد در صد تضمینی با این روش با هر شرکتی پاس میشین 😂
@ManiFoldsPython
😁21🖕1
خبر مهم: کورسرا حق اشتراک ماهانه شو کرده ۱ دلار/یورو/پوند
همه دوره‌ها رو برای یک ماه میتونید با این قیمت داشته باشید و از ماه بعد قیمت کامل تقریبا ۶۰ دلاری رو باید بپردازید.

آخرین فرصت خرید تا ۲۲ جوئن هست.
https://www.coursera.org/courseraplus/special/june-promo-2023

@DevTwitter | <Abbas عطاردوار/>
👎4👍2
Perfect programming language! 😂😂

یکی از عجیب ترین زبون های برنامه نویسی رو تو ریپو زیر میتونید ببینید که البته بیشتر بنظرم شبیه میمه 😂

https://github.com/TodePond/DreamBerd

چند چیز عجیب این زبون که میشه به طور خلاصه بهش اشاره کنم:

میتونید یک integer رو دیلیت کنید.
delete 3!
print(2 + 1)! // Error: 3 has been deleted
😂😂😂

حتی میتونید دیلیت رو دیلیت کنید😂😂 ولی حواستون باشه که اگه دیلیت رو دیلیت کردین دیگه نمیتونید چیزیو دیلیت کنید! 😂
delete delete!


یک چیز باحال دیگه, استاد تو زبونش اتک هم زده به OOP کارا :))))))
You can make classes, but you can only ever make one instance of them. This shouldn't affect how most object-oriented programmers work

class Player {
const var health = 10!
}

const var player1 = new Player()!
const var player2 = new Player()! //Error

ولی میتونید همینم دور بزنید 😂😂
class PlayerMaker {
function makePlayer() => {
class Player {
const var health = 10!
}
const const player = new Player()!
return player!
}
}

const const playerMaker = new PlayerMaker()!
const var player1 = playerMaker.makePlayer()!
const var player2 = playerMaker.makePlayer()!

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

پ.ن: فیلم زیرو از دست ندین
https://www.youtube.com/watch?v=tDexugp8EmM

@ManiFoldsPython
🤣12👍1
Your wiki, docs, & projects. Together.
https://www.notion.so/

با اینترفیس notion خیلی حال کردم
همه چی داره! با UX و UI خیلی عالی. و کمپانی های خیلی بزرگیم ازش استفاده میکنن مثل آمازون و فیگما و uber و pixar.
نمونه داک فنیشو تو تصویر میتونید ببینید (پ.ن: درفته واقعی نیست :)) )
پلن پایه اش مجانیه میتونید تست کنید و اگه نیاز بود آپگرید کنید. 👍

@ManiFoldsPython
🤓4🍌1
Python BackendHub
سمت فرانت تنها کاری که باید انجام بدین که مربوط به JWT میشه: فرش توکن اصلا نباید تو local storage ذخیره شه چون تو بک آپ browser هست و کلا دسترسی بهش غیر ممکن نیست. به جاش باید تو کوکی ذخیرش کنید تحت همچین ویژگی هایی: prefixes (e.g. __HOST-) attributes (Secure…
خب ما رفرش توکن رو تو لوکال استوریج ذخیره میکردیم درسته؟ اتکر هم بهش دسترسی داره. پس باید چیکار کنیم؟ میبریم تو کوکی.

یک نکته خیلی جالب داشت که کسی بهش اشاره نکرد و امروز یکم بهش فکر کردم اصلا باعث میشه رفتار اندپوینت 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
طبق Auth0 بهتره رفرش توکن فقط یک بار استفاده شه
منبع

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

بهتره جای اینکه هر رفرش توکنی باطل میشه یک لیست گنده درست کنید و اونجا بلک لیست کنید, هر رفرش توکنی که زندست رو بتونید وایت لیست کنید. (از نظر ریسورس منطقی تره)

یکم عجیب نیست؟
ولی خب استاندارده 😅

@ManiFoldsPython
👍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
51👍24👏3👎1😁1
یکی از سوالاتی که پرسیدن ازم Pass by Reference in Python و Pass By Value بود که این مکانیزم چطور تو پایتون کار میکنه. این مثال به طور خیلی مشخص و خوشگلی توضیح میده.

خروجی کدوم یکی از حالات میشه؟
پی نوشت: عدد memory address رو یک رقمی کردم که قدرت خوانایی سوال بالا بره.

@ManiFoldsPython
3
کدوم گزینه میتونه خروجی باشه تو سوال بالا؟
Final Results
21%
گزینه ۱
23%
گزینه ۲
18%
گزینه ۳
38%
گزینه ۴
اینم quiz دوم. در واقع سوال دومش رو میشه از همین کوییز نتیجه گیری کرد.

شب هم اینکه چطور اینطوری شد و هم اینکه چرا اینطوری شد توضیح میدم 😁

پ.ن: چراشو دیشب فهمیدم :)) بقیشو تونستم جواب بدم ولی تاحالا واقعا فکر نکرده بودم چرا تو پایتون اینطوری هندل میشه این موضوع.

@ManiFoldsPython
کدوم گزینه میتون خروجی باشه تو سوال بالا؟
Final Results
11%
گزینه ۱
10%
گزینه ۲
56%
گزینه ۳
23%
گزینه ۴
اما جواب

تو پایتون چیزی به اسم 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
😁8👍4😢1
قانون جدید مهاجرتی آلمان برای IT specialist ها:

بدون مدرک تحصیلی میتونید مهاجرت کنید و blue card بگیرید.

پدر و مادر رو هم علاوه بر همسر و فرزند میتونید ببرید.

@DevTwitter | <mehdi/>
😁9👎3👍2
Screenshot 2023-06-17 162818.png
149.4 KB
کورسیه که خودم پلنشو و syllabusاش آماده کردم و قصدشو دارم استارت ظبطشو بزنم و آخر هفته ها یک یا چند اپیزود بدم.

از بالا به ترتیب شروع میکنم میام پایین.
اگه نظری چیزی دارین یا حس میکنید چیزی هست که میشه بهتر کرد به من بگین. هر کورسی که میبینید اینجا یک 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
6👍1