Python Hints
8.95K subscribers
186 photos
11 videos
10 files
152 links
Python tips and tricks
The Good, Bad and the Ugly

توی این کانال فقط قرار هست در مورد core python صحبت کنیم.

این کانال یک بلاگ شخصی هست و پیرامون نظرات و چیزهایی که توی بیش از ۱۰ سال کد زدن یاد گرفتم (فقط برای کمک به دوستان تازه‌کار)

Admin: @Abbasi_ai
Download Telegram
Forwarded from RandRng
مشکل امنیتی جدید whatsapp که باعث شده 3.5 میلیارد پروفایل و اطلاعات پروفایل در کرال بشه؛
این گزارش ربطی به هک شدن واتساپ و ... نداره (چون دیدم بعضی کانالا می‌گن واتساپ هک شده؛ یا سرورهای متا هک شده)

مشکل اصلی که ضرر مالی بزرگی هم مثل اینکه به Meta زده سر نداشتن Rate Limit بوده البته متا سریعا آپدیت کرده و سرعت کرال داده رو کند کرده ولی خب بعد از اینکه ۳.۵ میلیارد اکانت کرال شده.
شماره تماس؛ وضعیت و اگر تصویر پابلیک بوده عکس پروفایل.

خداروشکر من اصلا یوزر واتساپ نیستم؛ حتی برای کار هم نصب نکردم.
ولی خطر کرال شدن این دیتاها برای کاربرها چیه ؟

۱- فیشینگ؛ طرف کلی اطلاعات از شما داره (اسم و فامیل + عکس + شماره تماس) همین می‌تونه برای انجام فیشینگ کافی باشه. ولی بیاید فرض کنیم مثل من فکر کنه.
شماره موبایل شمارو توی پلتفرم‌های دیگه سرچ می‌کنه؛ تلگرام + توییتر + فیسبوک و ...
از تلگرام آیدی‌ها و عکس‌های بیشتر؛ علاقه مندی و ... می‌تونه پیدا بشه
از توییتر و اینستاگرام؛ آدمای نزدیک به شما؛ جبهه گیری سیاسی و کلی اطلاعات بدرد بخور دیگه که ادامه نمیدم ولی فقط همینقدر که تگ زدن شما به لطف LLM ها کار سخت و زمانبری نیست.

۲- پروفایل سازی؛ با این حجم دیتا و داشتن شماره تماس؛ چیزی که توی قدم قبلی گفتم می‌تونه از شما و تمام آدم‌های نزدیک بهتون پروفایل بسازه. توی پلتفرم‌های مختلف بررسی کنه و روی گراف بیاره تا بدونه از چه طریقی به شما نزدیک بشه امکان نفوذ بیشتر هست.

۳- جستجوی یوزر با یک تصویر صورت؛ بدست آوردن شماره و ....

و ... که بازم ترجیح میدم توضیح ندم؛ چه کسایی دربرابر این کرال امن بودند ؟
اگر پروفایل شما روی حالت public نبوده احتمالا امن هستید
اگر هم هست چون این موضوع لو رفته (احتمالا کلی گروه دیگه هم شروع به کرال دیتا کردند) بهتره همین الان پروفابل واتساپ خودتون رو خصوصی کنید.

کاری هم که کردن ساده بوده؛ تمام شماره‌های موجود رو درست کردن ۶۳ میلیارد بعد شروع کردن سرچ کردن اون شماره‌های روی واتساپ!
توی تلگرام اگر این کار رو کرده باشید؛ بلاک می‌شید یا اینکه بعد از ۲۰۰ مورد باید اون‌هارو به شماره‌هاتون اضافه کنید که ظرفیت اینکار هم ۲۵۰ مورد هست.

اما درس امروز برای بکند دولوپر‌ها؛
حتما rate limit بذارید این گروه همه‌ی شماره‌هارو از یک ip کرال کردند. منم کلی پلتفرم ایرانی رو کرال کردم قبلا پس مطمئنم که خیلی‌ها rate limit نمی‌ذارند.

پینوشت:
مثل اینکه این گروه تحقیقاتی بودند و مقاله‌ نوشتن راجبش (آنالیز روی دیتاها زدند)
👍272
Forwarded from RandRng
از تیم ترب کسی رو داریم ؟

مشکلات فرانت‌اند رو کاری ندارم که ممکنه تمرکز روی کروم باشه فقط و ... (مثلا فیلتر رو ببینید؛ با اینکه من فقط مورد ۸ ترابایت رو انتخاب کردم توی نمایش همرو نشون میده)
یا اینکه به محض تغییر یک فیلتر سمت راست؛ کل صفحه reload می‌شه و نمی‌شه همزمان چندتا فیلتر رو انتخاب کرد.

اما نکته جالبش توی بکند هست؛ یا توی کوئری زدن مشکل دارند
یا توی optimization؛ مورد دوم رو توی شرکت‌های مشابه دیدم که میگه اگر سرویس X تا ۵ ثانیه جواب نداد ولی healthy بود پس دیتایی نداره.

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

صحبت از تیم تست شد؛ ترب جان تست که می‌نوسید بابا جان ؟
👍532
RandRng
از تیم ترب کسی رو داریم ؟ مشکلات فرانت‌اند رو کاری ندارم که ممکنه تمرکز روی کروم باشه فقط و ... (مثلا فیلتر رو ببینید؛ با اینکه من فقط مورد ۸ ترابایت رو انتخاب کردم توی نمایش همرو نشون میده) یا اینکه به محض تغییر یک فیلتر سمت راست؛ کل صفحه reload می‌شه و…
توی این کانال دارم از تجربیاتم روی Home Lab ایجاد کردن می‌نویسم؛ البته من هدفم راه‌اندازی سرویس بکاپ عکس و سرویس فیلم و ... نیست. هدف اصلیم Distributed Programming بوده و هست ولی کنارش دارم کارهای دیگه هم می‌کنم
مثلا تست کانفیگ‌های مختلف برای بکند؛ kafka, rabbitmq, ....

اگر دوست داشتید می‌تونید اونجا این مطالب رو به مرور زمان دنبال کنید ولی قبلش Info اون کانال رو بخونید.
23👍7
Forwarded from RandRng
#کاسبان_تحریم

یک سرویس دهنده هست که هزاران بار توی گروها بهش اشاره کردیم و گفتیم حتی اگر از گشنگی داشتید میمردید ازینا سرویس برای خرید محصول نگیرید (این امکان که ایمیل بزنید و اون شرکته براتون غذای مجانی بفرسته بیشتره)

اون سرویس دهنده هم #ایرانیکارت هست؛
تقریبا هرروز توی یکی از گروها؛ یک نفر که بحث‌های قبلی رو شرکت نکرده اکانت؛ کار؛ تحقیق و ... اش همش دود می‌شه میره هوا و دنبال یک راهکار جدید باید بگرده.
اینکه ایرانیکارت پول رو میخوره و ی آبم روش و پاسخ هیچ چیزی رو به هیچ‌ کسی نمیده یک بحث جدایی هست که مقام قضایی کشور باید دنبال کنه! حتما باید دنبال کنه!

اما برای ساده‌ترین اتفاقات هم ایرانیکارت موقع پرداخت از کارت‌های با تراکنش مشکوک استفاده می‌کنه (این بهترین حالت هست؛ چون توی یک سری موارد با ذکر اینکه از سرویس دهنده third-party برای خرید استفاده کردید و آپلود مدارک حداقل اکانت رو بهتون برمی‌گردوند ولی خب پول و سرویس پریده)

توی بیشتر مواقع این شرکت از سرویس‌های تخفیفی که ۱۰۰٪ هم گیر میوفته خرید می‌کنه تا خودش سود بیشتری کنه؛ همونطوری که گفتم چون به کسی هم پاسخگو نبوده و نیست (مقام قضایی و دادستانی و ... هم خواب هستند) این وضعیت همچنان ادامه داره!

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

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


بنظرم این وظیفه دادستانی و مقام قضایی هست که جلوی این کلاهبرداری بزرگ ایرانیکارت رو بگیره بخصوص اینکه توی حداقل ۶ ماه اخیر تقریبا هرکسی که از این شرکت سرویس خریده نتیجه زحمات و پولش دود شده و رفته!
👍6014
آقای مهندس عباسی،
در گذشت والده ی محترمه اتون رو تسلیت عرض میکنیم 🖤

دوستان ایشون در حال حاضر قادر به پاسخگویی پیام های شما در پیوی اشون نیستند

موقتا اگر سوالی هست بنده در خدمت دوستان هستم

@majid_aghamohamad
275❤‍🔥2🔥2👏2
Forwarded from RandRng
تو زندگیم یادگرفتم همیشه دستم رو زانوی خودم باشه، فقط به خودم تکیه کنم و فقط روی خودم حساب کنم.

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

من آدم حرف زدن نیستم؛ دردام مال خودم بوده و هست.
خیلی جاها خیلی خیلی کم آوردم ولی بازم خندیدم و ادامه دادم.
هرجای زندگیم کم می‌آوردم دوتا دلیل داشتم که بازم ادامه بدم؛
اول اینکه نمی‌خواستم ببینم مادرم بخاطر من غم تو صورتش هست.
دوم اینکه پشتم به مادر گرم بود، فقط کافی بود دست بذاره رو سرم و باهام حرف بزنه؛ کل دنیا هم حریفم نبود.

اما حالا دیگه نه پشت دارم نه مشت.

دیگه حالی برای جنگیدن نیست، امیدم به تموم شدن این جنگه.

---------------------

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

برای همه‌‌ی شما و عزیزانتون آرزوی سلامتی دارم.
455
Forwarded from RandRng
#Backend_RoadMap_2025
قبل از اینکه بخواید این roadmap رو دنبال کنید باید پست قبلی رو بخونید.
یک نکته‌ای که اضافه کنم؛ توی جلسات و ... که بحث شد من اصلا قرار نیست هیچ چیزی رو آموزش بدم (اشتباهات رو کمک می‌کنم حل بشه و ...) اما اینکه آموزش بدم FastAPI چیست و جطوری CRUD بنویسیم و ازین موارد با اوضاع الانم اصلا نمی‌خونه پس دلیل ساده بودنش همین پست قبلی هست.

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

فریمورک مورد نظرتون رو کمی بشناسید (من روی FastAPI پیش میرم ولی خیلی فرقی نیست)

1. Middleware: Starlette interface for how to write middleware.
Must know: auth, request ID, timing, gzip, validators, rate-limit, logging.
Important to know the order of execution.

2. CORS (and headers in general).

3. Authentication / Authorization: What is JWT + RS256.
Nice to know: Auth0, Cognito.

4. SQL and SQLAlchemy 2.0 (async style).

5. Tests:
* Unit tests for business logic.
* Integration tests for database, Redis, etc. interactions.
* Contract tests (very important) for endpoints and services you use.

6. Benchmarking: k6, load testing, CI smoke tests for performance-sensitive endpoints; wrk, hyperfine (or alternatives).

7. Docker / Docker Compose: multi-stage builds.

8. Profiling: Scalene or Perf — flamegraph interpretation.

9. Caching (Redis): cache invalidation; GET/SET strategies (Cache-Aside vs Write-Through).

10. Background tasks:
FastAPI background tasks & Dramatiq (or other alternatives).
Don't bring Celery or its equivalent into projects — it's heavy and overkill in most cases.
Use/understand: idempotency, retries, dead-lettering.

11. Observability: Logging, tracing, metrics.
Logs must be structured (JSON is a good option).
Distributed tracing is a must-have.
Metrics (Prometheus) are important — at minimum: response_time_ms, active_connections, etc.

12. Configuration management: Pydantic Settings; no hard-coded settings or configs.

13. Migrations: Alembic — each migration should have both UP and DOWN so it is safe to revert.

14. API documentation: FastAPI provides it automatically, but don't forget to use the Pydantic model example field.
BTW: Pydantic v2 is the only accepted version.

15. Error handling + correct HTTP codes.

16. Graceful shutdown:
App must stop accepting new HTTP connections,
finish processing current requests,
drain the database connection pool,
then exit.

17. Idempotency and retries:
For network/database failures — learn exponential backoff, circuit breakers, bulkheads.

18. Health checks and readiness probes: The app must provide them (Docker health check alone is not accepted).

19. Connection pooling tuning: Postgres, Redis, etc.
You must be able to explain tuning decisions based on your benchmarks/profiling results.

20. Security basics: Input sanitization/validation, rate limiting, secrets management, secure defaults (CSP, HSTS), threat modeling for endpoints.

21. Scalability patterns: Focus on connection pooling and indexing first.
Too many or unnecessary indexes = Fail.
Nice to learn: horizontal scaling, load balancing, sharding, replication.

22. Feature flagging (dynamic configuration): All projects should have it — very important.

23. API versioning strategy: Header versioning / URL versioning.

24. Architecture Decision Records
From day 1 you must have this document in the project with at least 3 entries per decision:
What you decided.
Why you did that.
What the consequences are.
--————————————-
Future / next steps

1. Design system architecture.
2. Integrate message queues (when and why to use them) — Kafka, RabbitMQ.
3. Event-driven patterns.
4. Optimize for latency.
5. GraphQL / gRPC — when and why to use them.


پینوشت: اگر جایی کپی کردید؛ لطفا پیام قبلی و بعدی رو هم بذارید 🌱
توضیحات مهم هست.
26👍1
RandRng
#Backend_RoadMap_2025 قبل از اینکه بخواید این roadmap رو دنبال کنید باید پست قبلی رو بخونید. یک نکته‌ای که اضافه کنم؛ توی جلسات و ... که بحث شد من اصلا قرار نیست هیچ چیزی رو آموزش بدم (اشتباهات رو کمک می‌کنم حل بشه و ...) اما اینکه آموزش بدم FastAPI چیست و…
نمی‌دونم چرا ولی از هفته قبل تعداد پیام‌های یادگیری بکند برام خیلی خیلی زیاد شده.

تا قبل از این همگی هوش مصنوعی بود.

توقع دارم بعد از این مرحله Rust باشه و System Programming (خدا کنه خودم به اندازه کافی تجربه کنم تا اون موقع)

حتماً پیام قبل و بعد این roadmap رو توی اون کانال بخونید.
شرایط رو درک کنید و context توی ذهنتون باشه و بعد شروع به دنبال کردن این roadmap کنید.

پینوشت:
مواردی مثل SSO, Event driven, ... هستند که یک سنیور باید بلد باشه اما ازونجا که مفاهیم نقشه‌راه بالا باعث میشه هرکسی هر زمان که لازم داشت بتونه به راحتی اون‌ها رو یاد بگیره دیگه اینجا گفته نشده


زمانبندی برای کسی که روزی ۴ ساعت بتونه وقت بذاره توقع دارم توی ۶ ماه این موضوعات رو تموم کنه!

حداکثر ۲ ساعت مطالعه،
حداقل ۲ ساعت توسعه کد.
در طول هفته (شنبه تا ۵ شنبه)
جمعه هم ۱ ساعت، برای code review (بخش‌هایی که قبلتر کد زدید)
42👍9
خیلی درده، وقتی هیچی واسه از دست دادن نداری.
245👍8
ی جمله‌ی معروفی هست:
«در جنگ‌ها، این سربازان‌اند که کشته می‌شوند، نه رهبران.»


در اعتراض به دزدی، اختلاس، ناکارآمدی و فساد و ... هم

دزد و مختلس و مسئولِ ناکارآمد در آرامش‌اند،
اما
این معترض و محافظ‌اند که روبه‌روی هم وایساده و همدیگر را می‌کشند.
معترض می‌دونه برای چی اعتراض می‌کند.
اما آقای محافظ…
تو هم می‌دانی از چی داری دفاع می‌کنی؟
128👍32
Forwarded from RandRng
Donald J. Trump on Truth

اگر ایران به معترضان صلح‌جو تیراندازی کند و آنها را به‌طور خشونت‌آمیز بکشد، که این کار معمول آنهاست، ایالات متحده آمریکا برای نجات آنها وارد عمل خواهد شد. ما آماده حرکت و مسلح هستیم. از توجه شما به این موضوع سپاسگزارم!
رئیس‌جمهور دونالد جِی. ترامپ


یک ۱۰ دقیقه‌ای هست دارم متن می‌نویسم؛ که با این پست به اشتراک بذارم ولی حقیقتش همرو پاک کردم چون هرچی بگم ننگ؛ درد و غم این پست رو کم می‌کنه!

نیروی نظامی کشور خودم؛ مردم خودم رو می‌کشه!
اونوقت همین مردم؛ باید از پیام تهدید به حمله کشورهای دیگه خوشحال بشوند.

با شناختی که از پدرم داشتم؛ یک وقتایی خداروشکر می‌کنم که بعنوان یک ارتشی زنده نیستند و این خبرها رو نمی‌بینه.
100👍19
Forwarded from RandRng
توی پست مربوط به رودمپ بکند :
Backend Roadmap
برای آخرین مورد گفتم که حتما همه‌ی بچه‌ها باید از روز اول ADR بنویسند؛ سر این موضوع با هیچ کدوم از بچه‌ها شوخی ندارم.

اما خیلی‌ها (مثل بچه‌هایی که باهاشون کار می‌کنم) پرسیدید چرا باید ADR بنویسیم بهتر نیست وقتمون رو روی کد زدن و تمرین و یادگیری بذاریم.

جواب کوتاه:
هیچ ابزار - هیچ کتاب و ... دیگری به اندازه نوشتن ADR شمارو تست نمی‌کنه و به شما یاد نمی‌ده حتی.

اما اگر توضیحات برای قانع شدن می‌خواید ادامه مطلب رو بخونید:

بخش بزرگی از کار یک مهندس نرم‌افزار (بخصوص توی سطوح بالاتر) یادگیری بحث و مناظره کردن هست؛ چیزی که توی سال‌های اخیر همکاریم با بچه‌ها توی ایران خیلی خیلی کم دیدم. این بحث‌ها اکثرا سر چه چیز‌هایی هست ؟
۱- از کدوم فریمورک استفاده کنیم
۲- با کدوم استاندارد پیش بریم
۳- دیتابیس چی بذاریم
۴- تست نویسی چطوری باشه
۵- چرا از این ابزار استفاده کنیم یا نکنیم
و ...

شما هرروز درگیر این بحث‌ها خواهید بود و اینکه بتونید از پیشنهادات خودتون بطور منطقی دفاع کنید موضوع بسیار بسیار مهمی هست.
وقتی شروع به نوشتن
ADR = Architecture Decision Records
می‌کنید یاد می‌گیرید ابزاری که دارید انتخاب می‌کنید رو همه جنبه‌هاش رو ببینید؛ خیلی وقتا ابزارهایی که افراد انتخاب می‌کنند فقط بخاطر hype هست و جو زده هست اون انتخاب بدون اینکه بدونند آیا واقعا بدردشون میخوره یا مناسب کارشون هست.
خیلی وقتا این مکالمه رو شنیدیم:

- چرا فلان ابزار رو انتخاب کردید ؟
+ گوگل داره ازین استفاده می‌کنه؛ چی ازین بهتر

آره دوست من ولی گوگل چندین میلیارد کاربر داره و تو به زور به ۵ هزارتا میرسی.
گوگل هزاران نفر توسعه دهنده داره ولی تیم تو به زور به ۱۰ نفر میرسه.
گوگل میلیاردها دلار خرج زیرساخت و دستمزد و ... میده.
تو زیرساختت به زور ۱۰۰ هزار دلار میشه.

برای خود من موقع بحث سر موضوعاتی که بچه‌ها باید یاد بگیرند برای توسعه بکند همین موضوع پیش اومد یکی از بچه‌ها گفت برای سرویس ارسال ایمیل از celery استفاده کنیم پس اینم بنویسید؛ که اگر نگاه کنید من ممنوع کردم استفاده‌اش رو celery سرویس بسیار بزرگ و سنگینی هست.
برای پروژه‌های کوچیک اشتباه هست که توی قدم اول برید سراغش؛ اما اگر کسی بتونه ADR خوب بهم بده قطعا قبول می‌کنم.

درسته وقتی تنهایی کد میزنید به ADR نیازی نیست اما نوشتنش باعث میشه یاد بگیرید بحث کنید؛ توی نوشتن ADR معمولا شما به چندتا ابزار میرسیدو باید این چیزها رو توضیح بدید :

۱- این ابزارها برای چه کاری هستند و چرا فکر می‌کنید توی پروژه لازمشون داریم ؟
۲- چرا هرکدوم از ابزارها رو در نظر گرفتید؟ (چرایی مهم هست)
۳- انتخاب شما کدوم بوده ؟ و البته چرا ؟
۴- نقاط قوت و ضعف ابزاری که انتخاب کردید چی هست ؟
۵- نقاط قوت و ضعف ابزارهایی که انتخاب نشدند چی هست؟
۶- تحت چه شرایطی ابزارهای دیگر رو انتخاب می‌کردید یا اینکه شرایط پروژه چی بود که نقاط قوت ابزار انتخابی شما به باقی موارد و البته نقاط ضعف اون چربید و انتخاب شد.

فکر می‌کنم از سوال‌ها مشخص باشه که چقدر چیز مفید و مهم رو درک می‌کنید و یاد میگرید.
آیا همه پروژه‌ها این رو دارند ؟
به جرات میگم که بیش از ۹۲-۹۳٪ پروژه‌ها و حتی شاید توسعه دهنده‌ها حتی نمی‌دونند چی هست؛ ولی تمام پروژه‌ها و تمام مدیران فنی و اعضای تیم‌هاشون هرروز درگیر یکی از این تصمیم گیری‌ها هستند.

به مدیرای فنی هم پیشنهاد می‌کنم توی تیم این موضوع رو داشته باشید؛ خیلی وقتا نیرو احساس می‌کنه حرف‌هاش شنیده نمی‌شه درصورتی که شما می‌دونید چیزی که پیشنهاد می‌کنه خوب نیست برای پروژه فقط وقت برای توضیح دادن بهش رو ندارید.
معمولا با نوشتن ADR خیلی از بچه‌ها خودشون متوجه می‌شوند که چرا جواب نه بهشون داده شده.
25👍10