Random shi- tutorials – Telegram
Random shi- tutorials
206 subscribers
228 photos
27 videos
12 files
546 links
محتوای مفید برنامه نویسی و لینوکسی از سراسر دنیا ✍️
جوین شدن شما موجب شادی روح و روان ما میگردد😗
Download Telegram
Forwarded from جنگولرن
تا حالا شده به ویرایش یه آبجکت در پنل ادمین جنگو لینک بدید؟

فرض کن من یه مدل دارم به اسم Product
که توی یه اپ به اسم shop هست.
با فرض اینکه آیدی Product م 14 باشه.
لینک ویرایش ش توی ادمین جنگو این میشه:
http://127.0.0.1:8000/admin/shop/product/14/change/

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


حالا چطور لینک بدیم؟
میدونیم که بهتره از تمپلت تگ url و اسم url استفاده کنیم.
اما اسمش چیه؟
اینجوریه:
<a href="{% url 'admin:shop_product_change' product.id %}" target="_blank">Edit Product</a>

دقت کردی؟
اسم اپ admin ع
بعد اسم url ترکیب اسم اپ خودمون + اسم مدل + عملیاتی که میخواهیم انجام بدیم.

از کجا اینارو میاره؟
وقتی داری توی admin.py مدل هارو رجیستر میکنی، از اونجا بر میداره.

توی کدهای جنگو دنبال کلاس AdminSite بگرد و متد get_urls رو ببین. این تیکه س:
        # Add in each model's views, and create a list of valid URLS for the
# app_index
valid_app_labels = []
for model, model_admin in self._registry.items():
urlpatterns += [
path(
"%s/%s/" % (model._meta.app_label, model._meta.model_name),
include(model_admin.urls),
),
]
if model._meta.app_label not in valid_app_labels:
valid_app_labels.append(model._meta.app_label)
Media is too big
VIEW IN TELEGRAM
یکی از مرسوم‌ترین روش‌های کلاهبرداری، پست کردن آگهی‌های شغلی جعلی در پلتفرم‌های اجتماعی و پلتفرم‌های آگهیه.
این ویدئو از نوش‌دارو (منبع) به شما میگه چطور کار می‌کنند.
شخصا تجربه مشابهی رو از سمت شرکتی در زمینه سرمایه‌گذاری استارتاپی داشتم که مبلغ نسبتا زیادی رو هم گرفتند که «کارچاق‌کن» دریافت سرمایه باشند.
خلاصه حواستون رو جمع کنید.

@haghiri75_blog
اگه برنامه نویس هستید و از هوش مصنوعی برای کدنویسی استفاده می‌کنید، واقعاً به خودتون لطف می‌کنید که OpenSpec رو چک کنید. این ابزار به شما کمک می‌کنه کنترل کامل پروژه رو دست بگیرید و از AI به عنوان یک همکار قابل اعتماد استفاده کنید!

تا حالا با دستیارهای کدنویسی هوش مصنوعی (مثل Cursor یا Copilot) کار کردید و به جای چیزی که دقیقاً در ذهن داشتید، یک چیز کاملاً دیگه تحویل گرفتید؟ یا یک بخش رو نوشته و یک بخش دیگه رو براتون خراب کرده

من جدیدا ابزاری رو پیدا کردم به اسم OpenSpec که داره این بازی رو برای همیشه عوض می‌کنه.

ایده‌اش ساده و ناب هست: شما و هوش مصنوعی، قبل از نوشتن حتی یک خط کد، روی «چیزی که باید ساخته بشه» به توافق کامل می‌رسید.

دیگه خبری از پرامپت‌های مبهم در چت و خروجی‌های غیرقابل پیش‌بینی نیست. OpenSpec یک فرآیند کاری سبک و قدرتمند اضافه می‌کنه که پروژه‌ها رو اینطوری پیش می‌بره:

۱. پیشنهاد تغییر (Change Proposal): شما به AI می‌گید چه قابلیتی رو می‌خواید اضافه کنید. AI یک ساختار کامل از مشخصات، وظایف و پیشنهادها رو براتون می‌سازه.

۲. بازبینی و هماهنگی: شما و AI با هم مشخصات رو دقیق می‌کنید تا همه چیز شفاف و بدون ابهام باشه.

۳. پیاده‌سازی: AI بر اساس مشخصات نهایی و توافق شده، کدنویسی رو انجام می‌ده.

۴. آرشیو: بعد از اتمام کار، تغییرات به آرشیو منتقل می‌شن و مشخصات اصلی پروژه رو به‌روز می‌کنن.

چرا این ابزار به خوبی جواب میده
- بدون نیاز به کلید API: نصب کن و استفاده کن. ساده و سریع.
- با ابزارهای فعلی شما کار می‌کنه: با Claude Code, Cursor, GitHub Copilot, Windsurf و ده‌ها ابزار دیگه یکپارچه می‌شه.
- قابل پیش‌بینی و شفاف: دیگه نمی‌خواد حدس بزنید AI چی می‌سازه. همه چیز از قبل مشخصه.
- عالی برای پروژه‌های موجود: نه فقط برای پروژه‌های جدید، بلکه برای تغییر و توسعه کدهای قدیمی هم عالیه.
- مستندسازی خودکار: هر تغییری با مشخصات و وظایفش ثبت می‌شه و یک سند زنده از پروژه می‌سازه.

اینم آدرس گیتهابش که همه چیز اماده یک جا هست!
https://github.com/Fission-AI/OpenSpec

اگر نتونستنید دستی نصبش کنید ، میتونید فایل README[.]md رو کپی کنید ، بدید به همون ابزار Ai که براتون کد میزنه مثل Claude Code, Cursor, GitHub Copilot ، بگید نصبش کن!

~ POURYA

#تجربه
1
Forwarded from Network Security Channel
اگه دوست دارید باهاتون مصاحبه تمرینی داشته باشم رزومتونو برام ایمیل کنید.

به ذهنم رسید که در قالب یک کار شخصی و داوطلبانه با هر فردی که نیاز به کمک داره٫ مصاحبه تمرینی داشته باشم(بدون هیچ هزینه‌ای)
چون یک کار شخصیه، راحت تر و صریح تر میتونم بهتون فیدبک بدم و امیدوارم مفید باشه براتون.
اگه تمایل دارید رزومتونو برام ایمیل کنید.
hosein.aghaie@gmail.com

نمیدونم چقدر استقبال میشه از این موضوع ولی با توجه به شاغل بودنم شاید نتونم به سرعت با همه مصاحبه بذارم ولی اگه تقاضا بالا بود سعی میکنم از دوستانم کمک بگیرم.


🔹 Share & Support Us 🔹
📱 Channel : @Engineer_Computer
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Linuxor ?
این ابزارم خیلی چیز ساده و باحالیه. یه فایل به اسم justfile توی پروژتون می‌سازین بعد توش یه لیستی از دستورات که مربوط به پروژتون هست و زیاد تکرارش می‌کنید رو می‌نویسید حالا اگه دستور just رو بزنید می‌تونید اونارو با یه کلیک اجرا کنید

شبیه به npm و Makefile عمل می‌کنه ولی خیلی ساده تره و برای همه‌چی می‌شه ازش استفاده کرد

github.com/casey/just

@Linuxor
Forwarded from TheAliBigdeli Channel
موضوع GIL در پایتون یعنی چی؟

پایتون یه مکانیزمی داره به اسم GIL (Global Interpreter Lock) که باعث می‌شه در هر لحظه فقط یه بخش از کد پایتونی روی CPU اجرا بشه. یعنی حتی اگه چند کار هم‌زمان تعریف کرده باشی، مفسر پایتون فقط یکی‌شون رو در لحظه اجرا می‌کنه.

هدف GIL اینه که از تداخل و خراب شدن داده‌ها جلوگیری کنه، چون حافظه‌ی داخلی پایتون طوری طراحی نشده که چند بخش از برنامه هم‌زمان بتونن روش بنویسن. این قفل باعث می‌شه اجرای برنامه‌ها در حالت عادی ساده‌تر و ایمن‌تر باشه، ولی در عوض جلوی اجرای واقعی هم‌زمان روی چند هسته CPU رو می‌گیره.

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

اما نکته جدید: در نسخه‌ی ۳٫۱۴ پایتون، حذف (یا به عبارتی «اختیاری کردن») GIL وارد فاز جدیدی شده. در حالت Free-Threaded (یا No-GIL)، پایتون قادر می‌شه بخش‌های محاسباتی را در چند تِرِد واقعی و هم‌زمان اجرا کنه، که در صورت طراحی درست ممکنه عملکرد چند برابر بهتر بشه.

پست زیر می تونه در عمل بهتر بهت نشونش بده:

https://www.linkedin.com/posts/avi-chawla_finally-python-314-lets-you-disable-gil-activity-7383818720332169216-dtH_?utm_source=share&utm_medium=member_desktop&rcm=ACoAACOugCYBHGWYjHpFz9urfiJEDF52-xCSwtE

📢 @thealibigdeli_channel

#python
#news
Forwarded from localhost (Yousef Taheri)
2
Forwarded from Linuxor ?
دنیای نسل بعدی دنیای اینترنت اشیاءس یادگیریش برای همه بسیار ضروریه، مایکروسافت یه دوره 12 هفته ای برای اینترنت اشیاء داره که خیلی خوب همچی رو از پایه توش توضیح داده

microsoft.github.io/IoT-For-Beginners/#/?id=lessons

این نسخه اصلیشه که انگلیسه ولی ایرانی ها یه نسخه ترجمه شده فارسیش هم درست کردن:

github.com/microsoft/IoT-For-Beginners/blob/main/translations/fa/README.md

@Linuxor
Forwarded from TheAliBigdeli Channel
چرا باید solid بدونم و کجا ها استفاده نکنم

طرز تفکر ما اینه که هرچی یاد میگیریم لزوما باید استفاده کنیم در صورتی که شما اگر شمشیر بازی یاد بگیری برای بریدن کره از شمشیر که قرار نیست استفاده کنی.

تو برنامه نویسی هم‌ همینطوره منطق های ساده رو اگر پیچیده کنی داری over-engineering می کنی و بیش از حد سخت و پیچیده میکنیش.

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

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

لینک مرجع:

https://www.linkedin.com/posts/anton-martyniuk_junior-developer-needs-to-know-2-solid-principles-activity-7385925245712482304-JsHw?utm_source=share&utm_medium=member_android&rcm=ACoAACOugCYBHGWYjHpFz9urfiJEDF52-xCSwtE


📢 @thealibigdeli_channel

#tips
اگر سردرگمی دارید که چطور متن های markdown بنویسید، مثل ReadMe برای گیتهاب یا نوت برداری توی obsidian، میتونید از این راهنما استفاده کنید تا متن های مارک‌داون بهتری بنویسید:

docs.github. com



@Rs_tutorial >~ /#Arj
Forwarded from Linuxor ?
امروزه اگه بخواین یه وب اپلیکیشن بالا بیارین، برای اکثر موارد ناچارا مجبور می‌شید NGINX رو یاد بگیرید اما مسیر یادگیری خاصی نداره، یعنی ممکنه کلی چیز یاد بگیرید و بعدا مثلا برید توی یه شرکتی ببینید اونا اصلا دارن یه کار دیگه با NGINX می‌کنن...

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

github.com/trimstray/nginx-admins-handbook

@Linuxor
Forwarded from Linuxor ?
برای نامگذاری متغییر ها توی برنامه نویسی همیشه کلی وقت می‌زاریم و خوب در نمی‌آد، یه اسم خوب متغییر باید طوری باشه که اگه یه برنامه نویس دیگه خوندش ابهامی نداشته باشه، اینجا لیست قوانینش رو نوشته یه نگاهی بهش بندازین:

github.com/kettanaito/naming-cheatsheet

@Linuxor
Forwarded from TheAliBigdeli Channel
نکته‌ای برای نام‌گذاری مقادیر بولین و وضعیت‌ها:

برای مقادیر بولین، اسم رو به شکل سؤال بنویس تا خوندنش طبیعی‌تر بشه 👇
به جای active بنویس is_active
به جای verified بنویس is_verified
به جای access بنویس has_access
به جای edit بنویس can_edit یا is_editable
به جای deleted بنویس is_deleted

اگه حالت‌ها بیش از دو تا هستن (مثلاً pending / approved / rejected)،
از Enum استفاده کن تا کد خواناتر و ایمن‌تر بشه.

همچنین می‌تونی بعضی وضعیت‌ها رو با property‌ها نمایش بدی:

@property
def should_be_canceled(self):
return self.status in ["pending", "failed"]

@thealibigdeli_channel

#cleancode
Forwarded from Linuxor ?
This media is not supported in your browser
VIEW IN TELEGRAM
خیلیا می‌خوان وبسایت بسازن، اما فقط پایتون بلدن، لایبری Reflex نجات دهنده شماست، فقط با کد پایتون می‌تونید وبسایت هایی مشابه بالا بسازین، البته برای کارای دم دستیه، انتظار زیادی ازش نداشته باشین، برنامه وب خوب می‌خواین باید وب یاد بگیرین... این خیلی از جاها کار آدمو راه می‌ندازه و خیلی ضعیف نیست اکثر کامپوننت هارو داره

یادگیریش رو از اینجا شروع کنید:

reflex.dev/docs/getting-started/introduction

@Linuxor
Forwarded from tech-afternoon (Amin Mesbahi)
💡♻️ مفهوم و کاربرد API-First Development

توسعه‌ی نرم‌افزار رو میشه مثل ساختمون، بدون نقشه و طرح معماری ساخت! نگید نمیشه؛ چون خیلیا می‌سازن و شده! 😂 تیم‌ها شروع می‌کنن به دیوارکشی (توسعه فرانت‌اند و بک‌اند)، ولی وقتی می‌رسن به اتصالات (Integration)، می‌بینن لوله‌کشی و سیم‌کشی (API) شبیه خونه‌ی پت‌ومت در اومده که از پریز برق آب میاد، لوله برق داره یا درِ پارکینگ به جای کوچه، به پذیرایی همسایه باز می‌شه؛ ساختمونه هم بین ساختمون‌های مجاورش شبیه جوجه کلاغ وسط صد تا جوجه اردکه!

رویکرد سال‌های دور (دلار هزار تومنی) این بود که API یه "محصول جانبی" برای ارتباط با سایر سیستم‌ها محسوب می‌شد؛ یعنی اول بک‌اند نوشته می‌شد، بعد یه قسمتی از اون رو به‌صورت API در معرض استفاده قرار می‌دادن. ریشه‌های این روش، عموما توی خاک سیستم‌های داده‌محور (Data-First) رشد می‌کرد؛ و کمتر "مصرف‌کننده‌محور" (Consumer-Centric) بود.
از طرفی زیاد دیدیم که تیم‌ها معطل هم برای آماده شدن API می‌مونن! یا اعصابشون سر تغییراتی که تیم مقابل روی APIهاش بعد از تفاهم اولیه داده خورد می‌شه! فرانت می‌گه "API تون درست کار نمی‌کنه"، بکند می‌گه "شما درست صداش نمی‌زنین"، و QA هم وسط این دعوا نرخ تعیین می‌کنه! یه بخش بزرگ از این سردردها از نداشتن یه زبون مشترک و قرارداد واضح بین تیم‌هاست.

از طرف دیگه، خیلی وقت‌ها می‌بینیم که بکند کدش رو نوشته، بعد مستندات رو می‌نویسه، بعد معلوم می‌شه مصرف‌کننده یه چیز دیگه می‌خواسته! حالا برگردیم و دوباره بنویسیم؟ یا همینجوری با کثیف‌کاری وصلش کنیم؟ شنیدن جمله "ما بعداً مستندات رو کامل می‌کنیم!" چیز غریب و نادری نیست! ولی واقعیت اینه که توی تیم‌های بالغ، اول API Spec رو می‌نویسن، بعد کد. اگر هم خیلی بالغ باشن، این Spec رو به عنوان یه قرارداد (Contract) بین تیم‌ها در نظر می‌گیرن و با ابزارهای خودکار، صحت پیاده‌سازی و انطباق عینی با طرح و نقشه‌ی اولیه رو کنترل می‌کنن.

🧭 مفهوم API-First یعنی چی؟

مفهوم API-First یعنی قبل از نوشتن کد، اول API رو طراحی کنیم (عموما توسط معمار این اتفاق می‌افته) یعنی بشینیم، فکر کنیم، بنویسیم که چه endpointهایی داریم، چه input/output هایی، چه status codeهایی، چه headerهایی... و همه‌ی این‌ها رو توی یه فایل OpenAPI Spec یا مشابهش ثبت کنیم.
این یعنی API ما از ابتدا مستند شده، با بیزنس، با پروداکت، با تیم‌های همکار می‌شه سناریوسازی و مرور کرد؛ تغییر داد و منطبقش کرد با نیاز واقعی؛ و بعد به کد! بعتر هم برای تغییرات، اول API Spec تغییر می‌کنه و بعد کد. چه اتفاق میوفته؟

- پیش‌بینی‌پذیری: همه می‌دونن قراره چه داده‌ای رد و بدل بشه.
- موازی‌سازی توسعه: تیم‌های مختلف می‌تونن هم‌زمان پیش برن؛ یکی Mock بسازه، یکی پیاده‌سازی واقعی.
- مستندسازی خودکار: چون API از اول با استانداردهایی مثل OpenAPI تعریف میشه، مستندات همیشه با واقعیت هم‌راستا می‌مونن.
- کیفیت بالاتر: چون قبل از کدنویسی، درباره طراحی و naming و consistency فکر می‌کنی.

اینطوری API Spec شما اولا توی سورس‌کنترل نگهداری می‌شه، همواره نسخه تست، استیج رو به صورت live در دسترسی داریم، API Owner هر دامنه مشخصه؛ هر کی عشقش کشید به هر شکلی یه API نمی‌نویسه، breaking changeها و کانفلیکت‌ها قبل از تغییر در API آشکار می‌شن و کلی مزیت دیگه که از حوصله پست تلگرامی خارجه.

رویکرد API-First فقط یک روش نیست، یک تغییر فرهنگی در سازمان، و تغییر استراتژیک در توسعه نرم‌افزاره. این رویکرد، API رو از یک "افزونه" به یک "محصول اصلی" تبدیل می‌کنه که برای تجربه توسعه‌دهنده، سرعت و کیفیت نهایی خیلی حیاتیه. وقتی API-First باشیم، سیستم‌های ما در برابر تغییرات مقاوم‌تر، انعطاف‌پذیرتر و آماده‌تر برای Integration Economy خواهند بود. یکی از شرکت‌هایی که بر اساس رویکرد API First کار می‌کنه زالاندو است که اتفاقا خیلی سخاوتمندانه، یا به توصیف دقیق‌تر، هوشمندانه، دستورالعمل و راهنمای خودش رو سال‌هاست به صورت کدباز منتشر کرده و به نظر من بسیار مستند پخته و خوبیه.

پیشنهاد می‌کنم API رو با ساده‌سازی‌هایی که go, fastAPI, flask, .NET یه موضوع خیلی ساده نبینیم، طراحی و نگهداری بد، مصیبت‌های خودش رو در بلندمدت نشون می‌ده، موقع اینتگریشن‌های بعدی نشون می‌ده و اون وقته که متوجه می‌شیم ای کاش از ابتدا مشورت گرفته بودیم و صرف «کار کردن» API به خودمون نمره قبولی نمی‌دادیم! حتمن این روش پرهزینه‌تر و نیازمند زمان‌ آماده‌سازی و توسعه بیشتریه، ولی عملا سرمایه‌گذاری زمان رشد و اینتگریشن خواهد بود.

Zalando RESTful API and Event Guidelines
Please open Telegram to view this post
VIEW IN TELEGRAM
رابرت کیوساکی، نویسنده پدر پولدار پدر فقیر:
استارتاپ بزنید و طلا، نقره و بیت کوین ذخیره کنید!


لینک محتوا
https://startup360.ir/robert-kiyosaki-warning-forget-retirement-startup-gold-bitcoin/
Forwarded from Linuxor ?
می‌دونستین تنجین (Tengine) یه نسخه‌ی تقویت‌شده از Nginx هستش که شرکت علی‌بابا ساخته تا بتونه سایت‌ها و سرویس‌های خیلی شلوغ خودش رو بهتر مدیریت کنه! اگه بخوایم ساده تر بگیم، همون کاری که Nginx می‌کنه (یعنی پاسخ دادن سریع به درخواست‌های وب و پخش کردن بار بین چند تا سرور)، تنجین هم انجام می‌ده، فقط حرفه‌ای‌تر و با امکانات بیشتر؛ مثلاً بدون اینکه سرور رو خاموش کنی، می‌تونی تنظیماتش رو عوض کنی، از پروتکل‌های جدید مثل HTTP/3 استفاده کنی یا ترافیک کاربرا رو هوشمندتر بین چند تا سرور تقسیم کنی.


برای نصبش باید کامپایلش کنید (توضیحات کامل ترو خودش داده که چه دستوراتی رو بزنید) :

tengine.taobao.org

@Linuxor
Forwarded from Job Experiences
⚠️ اپلیکیشن Spontaneous چیست؟

↙️ در مسیر سنتی اپلای برای شغل‌ها، شروع‌کننده شرکت است و آگهی شغلی را منتشر می‌کند. سپس شما آن آگهی را می‌بینید و تصمیم به اپلای برای آن می‌گیرید. اما در مسیر دیگری که به آن spontaneous applications یا unsolicited applications می‌گویند، شرکت آگهی خاصی منتشر نمی‌کند. معمولاً فقط یک آدرس ایمیل قرار می‌دهد و اعلام می‌کند که هر زمان کسی مایل به همکاری بود، می‌تواند رزومه همراه با توضیح مختصری از سوابق و علاقه‌اش به شرکت را از این طریق ارسال کند.

📈 طبق گزارش لینکدین، در سال ۲۰۲۴ بیش از ۳۳٪ استخدام‌های ارشد در اروپا از طریق همین مسیر انجام شده‌اند. به‌خصوص در فضای استارتاپ‌ها - که تهیه و انتشار آگهی‌های شغلی نیازمند زمان و هزینه جداگانه است - این روش بسیار رایج و پذیرفته‌شده است.

💬 بنابراین اگر وارد وب‌سایت یک استارتاپ یا شرکت شدید و در صفحه شغلی‌شان با بخشی به نام «درخواست خودخواسته» یا «ما همیشه به دنبال استعداد هستیم» مواجه شدید، حتی اگر موقعیت موردنظرتان در لیست آگهی‌ها نبود، نگران نباشید. رزومه‌تان را به همراه یک توضیح مختصر ارسال کنید و منتظر تماس شرکت بمانید.

✈️ @sharif_work
Please open Telegram to view this post
VIEW IN TELEGRAM
1👌1
Forwarded from ‌BenDev
حتما حتما حتما تست هاتون (integration test) رو تا جایی که می‌شه واقعا با ابزار هایی که رو پروداکشن استفاده می‌شه تست کنید

مثلا اگر پستگرس دارین رو پرداکشن بهتره تستتون هم روی پستگرس باشه تا sqlite

اگر پروداکشن دارین s3 استفاده می کنید تست هم روی localstack باشه

این دفعه دومیه که این اتفاق داره برام می‌افته
تست برای اینکه سریع رو راحت باشه با sqlite بوده بردم رو پستگرس یهو دیدم ۱۰ تا تست fail شدن همشون هم واقعا باگ بوده

همین اتفاق برای s3 هم افتاد
برای تست داشتیم از همون فایل پایتون استفاده می‌کردیم

بردم رو لوکال استک الان باگ پیدا کردم.

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

@BenDevelop