Coding Lovers
2.03K subscribers
189 photos
16 videos
19 files
229 links
:همه شبکه های اجتماعی یکجا 🌐
Zil.ink/codinglovers

📌 تبلیغات:
@CodingLoversAds

:گروه 🍻
@CodingLovers_GP

:حرفی سخنی 🧑‍💻
@Amir_OfficiaI

:ثبت نمونه کار 🪄
@CodingLovers_result
Download Telegram
رفتم گیتهابم بعد یه مدت
یهو اینو دیدم، سیگنال می‌دادیم وقتی مد نبود 🌟
۲۶ هزار بود اون موقع

https://github.com/AmirofficiaI
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥142
Coding Lovers
🔥 جایگزینی برای تمام پکیج منیجر های پایتون و venv ها ابزار uv که توی اوایل سال 2024 معرفی شده به طور کلی کارایی پروژه های پایتونی رو متحول کرده :) ❓️ حالا چی هست؟ یک ابزاری هست که با زبان Rust نوشته شده که میتونه به طور کامل یک پروژه پایتونی رو مدیریت کنه…
📦 ابزار مدیریت پروژه رسمی پایتون
قبلا درمورد uv که از بهترین هاست گفتیم، حالا بهتره یکم راجب ابزار رسمی خود پایتون حرف بزنیم.

🛠 ابزار hatch
یه ابزار مدرن و جدید برای مدیریت پروژه های پایتون هست که توسط خود pypi تایید شده و حتی داکیومنت hatch رو خود pypi با ساب‌دامین در اختیار همه قرار داده.
هدف از این ابزار این بوده که وابستگی شما به چندین ابزار مختلف برای مدیریت پروژه رو از بین ببره.

براتون:
- پروژه هایی با ساختار های پیشنهادی خود پایتون خلق میکنه
کار pip رو انجام میده و همه پکیج هارو مدیریت میکنه
- کار venv رو انجام میده
- کار pytest رو انجام میده ( ولی خب ضعیف تره )
- بهتون برای انتشار لایبرری در pypi کمک میکنه

🚀 فرق با UV
ابزار hatch با پایتون نوشته شده و uv با Rust.
سرعت کمتری نسبت به uv داره.
ابزار uv چیزی فراتر از یک مدیریت پروژه هست و امکانات بیشتری با سرعت بیشتری میده، اما در عین حال یادگیری‌ش خیلی سخت تره ( البته که مثل hatch کار pytest رو انجام نمیده ).
از uv برای پروژه های استفاده میکنن که سرعت CI/CD اهمیت زیادی داره.

@CodingLovers_OFF 🔥
👍5🤣31
یکم بریم تو دل چیز هایی که کمتر بهشون توجه میشه :)
Coding Lovers
یکم بریم تو دل چیز هایی که کمتر بهشون توجه میشه :)
Soft Delete در مدیریت دیتابیس
برای متوجه شدن Soft delete اول باید یه نگاهی به مفهوم Hard Delete بندازیم.
کلمه ای رو تصور کنید — Hard Delete یعنی حذف کردن و پاک کردن اون کلمه به شکل کامل. ولی از اون طرف، Soft Delete یعنی قرار دادن اون کلمه در جایی به نام "دور انداخته شده". حذف شده، اما همچنان هست اگر نیازش داشته باشی.

توی دیتابیس، Hard Delete یعنی حذف کامل یک دیتا به شکل کلی اما Soft delete یعنی قرار دادنش به عنوان "حذف شده".

✨️ چرا مهمه؟
- جلوگیری از اشتباهات: یهویی اشتباهی دیتای مهمی از دیتابیس پاک بشه. با Soft Delete میتونی برش گردونی
- قانون: بسیاری از صنعت ها و شغل ها هستن که قوانین‌شون شمارو موظف میکنه هیچ دیتایی نباید پاک شه و تمام اطلاعات باید نگهداری بشن. خصوصا وقتی داخل ایران هستی، یکی میتونه بی دلیل ازت شکایت دروغ بکنه؛ اگه دیتا رو پاک کرده باشی هیچ مدرکی برای دفاع نداری
- حسابرسی: توی بیزینس های بزرگ، معمولا اطلاعات حذف شده هم ارزش پیدا میکنن و برای بررسی و پیشرفت مهم هستن ( خصوصا توی حسابداری و حسابرسی )

❓️ روش ها
روش های ساده ای هست که خیلی راحت به ذهن میان.
برای اطلاعات میتونید سطری به نام is_deleted در نظر بگیرید
یا میتونید برای دقیق تر شدن اطلاعات، تاریخ بزنید deleted_at
و ...

🚀 تاثیر در بهینه بودن دیتابیس
این روش در مراحل اول خیلی میتونه به سرعت کمک کنه، چون بجای DELETE کردن، شما از UPDATE استفاده میکنید و این سرعت رو بالا میبره. اما سرعت SELECT کردن شما رو به مرور زمان با بالا رفتن اطلاعات کاهش میده.
برای حفظ کردن سرعت، باید اطلاعات قدیمی  رو به شکلی آرشیو کنید و از اطلاعات اصلی جدا کنید ( و یا حتی اطلاعاتی که میدونید بدرد نمیخورن رو Hard delete کنید )

@CodingLovers_OFF 🔥
4
Coding Lovers
‏Soft Delete در مدیریت دیتابیس برای متوجه شدن Soft delete اول باید یه نگاهی به مفهوم Hard Delete بندازیم. کلمه ای رو تصور کنید — Hard Delete یعنی حذف کردن و پاک کردن اون کلمه به شکل کامل. ولی از اون طرف، Soft Delete یعنی قرار دادن اون کلمه در جایی به نام "دور…
حالا در مقابل روش Soft delete، استراتژیی هست برای نگه داشتن اطلاعات حذف شده.
توی شرکت ها، اسناد قدیمی و بدرد نخور رو میریزن کجا؟ آرشیو

روش آرشیو در مدیریت دیتابیس
فرض کنید کتابخانه ای رو مدیریت میکنین. اگر بخواید کتابی را دور بندازید، میشه Hard Delete. اگه بخواید کتاب های قدیمی رو همونجا در قفسه ای به نام "حذف شده ها" بچینید، میشه Soft Delete، و اما اگه بخواید بفرستید به مکانی مثل انبار، میشه آرشیو کردن.

در روش Hard Delete، کتاب کاملا از دست رفته و قابل برگشت نیست، پس بحثی راجبش نداریم.
در روش Soft Delete، به مرور زمان کتابخونه شما تبدیل به انباریی از کتاب های حذف شده میشه. پیدا کردن کتاب های جدید سخت تر و سخت تر میشه.
در روش آرشیو، همه چیز مرتب و منظم در جای خودش قرار داره.

❓️ روش ها
چندین روش وجود داره بسته به راهی که میرید. آخرین راهی که من استفاده کردم این بوده:
بخشی (یک schema) به نام archive توی دیتابیس ساختم، تیبل هارو به همون ساختار اصلی ( گاهی با کمی تفاوت ) در archive ساختم.
با استفاده از قابلیت TRIGGER در دیتابیس ها، عملکرد های Delete رو شنود کردم و اینجوری هروقت اطلاعاتی در بخش اصلی دیتابیس حذف شد، خودکار اون اطلاعات ریخته میشن توی archive.

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

🚀 تاثیر در بهینه بودن دیتابیس
باعث میشه عملکرد های DELETE سرعت خیلی پایینی پیدا میکنن و ممکنه زمانبر بشن، اما در عین حال سرعت SELECT و UPDATE رو در بالاترین حالت خودش حفظ میکنه‌. همچنین همیشه فضای اصلی و تیبل های اصلی کم حجم و تمیز میمونن.

@CodingLovers_OFF 🔥
4👍3
خب دیگه دوباره حتی جمینی هم مارو تحریم کرد 😂
🤣12👎1
سِری پست های Rate Limiting
توی این سِری پست ها میخوام الگوریتم های مختلف rate limting رو توضیح بدم. اول از همه ببینیم چه کاربردی داره؟

Rate Limit چیست؟
توضیح خاصی نداره چون همتون باهاش آشنایید. تاحالا به خطای 429 Too Many Requests برخورد کردین؟ دقیقا همونه. مکانیزمی هست برای محافظت از یک منبع دربرابر اضافه‌بار.

برای مثال اوایل که AWS درست شد، همچین مکانیزمی نداشتن و یه نفر فقط با فرستادن ۱ میلیون درخواست باعث شد سرویس‌شون دچار مشکل بشه و هزینه ی هنگفتی براشون ایجاد کنه. این دقیقا جایی بود بحث Rate limit به شکل رسانه ای بزرگ شد.

چرا Redis برای Rate Limit؟
ردیس یه ابزار محبوب برای پیاده سازی rate limit هست و دلیل خوبی داره: سرعت و اسکریپت‌نویسی‌.
همچنین atomic بودن و نگه‌داشتن داده ها در حافظه هم هستن.

انواع پترن ها و الگوریتم ها
- ‏Leaky Bucket
- ‏Token Bucket
- ‏Fixed Window
- ‏Sliding Window

به ترتیب روزی یکی رو توضیح میدم ( با سورس و گیف )

#ratelimit
@CodingLovers_OFF 🔥
11😁1
This media is not supported in your browser
VIEW IN TELEGRAM
سِری پست های Rate limit - الگوریتم Leaky Bucket
یک سطل رو با یه سوراخ کوچیک در تهه اون تصور کنین. درخواست‌ها (آب) به سطل اضافه می‌شون و با سرعت ثابتی «قطره قطره» پردازش میشن و از سیل ناگهانی جلوگیری می‌کنن.

از یه سایت بخوام مثال بزنم،
فرض کن کاربر ۱۰۰ تا درخواست همزمان میده، ولی تو با این الگوریتم، تو ۱۰ تا ۱۰ تا جوابشو میدی
✨️ موارد استفاده
برای جاهایی مثل پردازش پرداخت کاربرد داره، چون قطعا نمیخواین یه کاربر همزمان ۱۰ تا ۱۰ تا پرداخت انجام بده، و باید دونه دونه پردازش بشن و باز هم قطعا نمیخواین یه کاربر ساعتی ۱۰۰ تا پرداخت انجام بده و باید یه وقفه‌ای بین‌شون باشه.
همچنین برای پلتفرم های پخش انلاین هم اهمیت داره، برای مثال یه کاربر نباید بتونه همزمان چند تا پخش رو دنبال کنه تا کیفیت پخش رو بتونین تضمین کنین.

💢 ضعف
از اونجایی که یه نرخ ثابتی برای پردازش تعیین میکنین ( مثلا پردازشِ ۱۰ تا ۱۰ تا )، هیچوقت نمیتونین این نرخ ثابت رو تغییر بدین، حتی وقتی ک سیستم‌تون قدرت پردازش‌عه بالاتری داره ( درواقع این الگوریتم انعطاف پذیر نیست )

#ratelimit
@CodingLovers_OFF ❤️‍🔥
👍63
Coding Lovers
کدِ الگوریتم‌ش رو وقت کنم با lua و ردیس مینویسم میزارم ( داخل پایتون )
leaky_bucket_algorithm.py
1.7 KB
اینم از سورس‌عه الگوریتم و مثال
لذت‌شو ببرین 🔥

ازش حتی داخل ربات های تلگرامی هم برای جلوگیری از اسپم و تشخیص‌شون میتونین استفاده کنین

#ratelimit
@CodingLovers_OFF
10🤣2
والا بقران وسط جنگ وضعیت اینترنتم بهتر بود
این چه وضعیتیه
👍17🤣4
This media is not supported in your browser
VIEW IN TELEGRAM
سِری پست های Rate limit - الگوریتم Token Bucket
توکن‌ها با نرخ ثابتی تولید و توی یه سطل ذخیره می‌شون. هر درخواست یک توکن مصرف می‌کنه. وقتی توکن ها تموم بشن، درخواست هم رد میشه.
پیچیدگی خاصی نداره که بخوام توضیح بیشتری بدم :/

یجورایی برخلاف الگوریتم قبلی رفتار میکنه، اونجا سطل با درخواست پر میشد، اینجا خالی میشه.
✨️ موارد استفاده
بدرد API هایی میخوره که میخوان جلوی اسپم و بروت فورس رو بگیرن. تخصصی تر بخوام بگم، برای مدیریت افزایش ناگهانی ترافیک بدرد میخوره.
مثلا سایت قابلیت سرچ داره، این الگوریتم کمکت میکنه تا از سرچ های تند تند و پشت هم کاربرا جلوگیری کنی.

خلاصه بهترین الگوریتم برای گذاشتن محدودیت هایی مثل Request per minute هست.
💢 ضعف
حقیقتا شخصا ضعفی توش ندیدم :)

#ratelimit
@CodingLovers_OFF ❤️‍🔥
10🔥1
یه چند روز وقفه افتاده بین پست ها عذرمیخوام
۲ ۳ روز ریلکس کرده بودم، بعد ۲ ماه بکوب نشستن پشت سیستم حقم بود
7👍1🔥1😢1
This media is not supported in your browser
VIEW IN TELEGRAM
سِری پست های Rate limit - الگوریتم Fixed Window Counter
ساده ترین الگوریتم؛ تعداد درخواست‌ها رو در فواصل زمانی ثابت (مثلاً ۱ دقیقه) پیگیری می‌کنیم. بعد از رسیدن به حد مجاز، تمام درخواست‌های بعدی در اون پنجره رد می‌شن.

✨️ موارد استفاده
‏API های ساده با ترافیک قابل پیش‌بینی و پروژه های ساده. کاراییش بشدت راحته و مهاجم ها راحت میتونن دورش بزنن :)

🔓 خلاصه ازش استفاده نکنین، امن نیست‌.

💢 ضعف
همونطور که گفتم راحت میشه دورش زد و باهاش بازی کرد. میشه زمانبندی درخواست هارو یجوری میزون کرد که بیشتر از حد مجاز درخواست زد.

#ratelimit
@CodingLovers_OFF ❤️‍🔥
6👍2🔥1😢1
چرا هرچی بیشتر فعالیت کردم تعداد کمتر شد
داستانیه؟
20
عشقای من کانال یوتوب کدینگ لاورز رو دریابید
چیزی نمونده ۴۰۰۰ تا بشیم
کارهای خفن زیادی در پیش رو هست 👨‍💻

📱 https://youtube.com/@CodingLovers

اگه آموزش خاصی نیاز دارید توی کامنت ها بگید 🙏
Please open Telegram to view this post
VIEW IN TELEGRAM
14🔥3
سِری پست های Rate limit - الگوریتم Sliding Window
این خودش به دو الگوریتم تقسیم میشه:

‏1: Sliding Window Log
دقیقا چیزیه که داخل ویدیو میبینین.
بازه‌ی زمانی متحرک داره و اومده که مشکل الگوریتم Fixed Window رو حل کنه.

بدرد بخش هایی از پروژه میخوره که واقعا دقت rate limit بالایی میخواد و امنیت بشدت بالایی نیاز داره؛ چون هیچجوره نمیشه این الگوریتم رو دور زد. برای مثال بانک ها ( خارجیاش ) از این الگوریتم برای محدود کردن کاربران برای تعداد برداشت وَجه در روز استفاده میکنن.

تنها ضعفی که داره اینه که مصرف مموری بالایی داره.

‏2: Sliding Window Counter
یه نسخه کم دقت تر از الگوریتم اولی‌عه. همونکار رو به همون شکل انجام میده، با دقت کمتر، و مصرف مموری کمتر.

کد هاشونو میزارم، و بعد یه پست میزارم که بگم هرکدوم رو کجا استفاده کنید. اینا بیشتر داخل API ها استفاده میشن، اما داخل ربات های تلگرامی هم خالی از لطف نیستن.
#ratelimit
@CodingLovers_OFF ❤️‍🔥
4🔥1