Pure Coder
783 subscribers
196 photos
34 videos
8 files
163 links
⭕️آدرس سایت:
https://purecoder.ir

⭕️گروه پرسش و پاسخ:
@purecoder_gp

⭕️پشتیبانی:
@PureCoder_support
@MohammadTaherri
Download Telegram
Mohammad Taheri
گذر یار | تجربه ی اینترنت آزاد، امن و سریع 🪩 ⚙️با ربات گذریار همه‌چیز به‌صورت کاملاً خودکار و لحظه‌ای انجام می‌شه. ✔️به محض ثبت سفارش، کانفیگ شما ساخته می‌شه و آماده استفاده‌ست. دور زدن تمام تحریم ها: تحریم های گردل، npm و ... . 🌍 دسترسی راحت به: یوتیوب📱،…
این ربات توسط Pure Coder آزمایش شده و مورد تاییده.

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

اگه قبلن هم کانفیگ تست گرفتین، میتونید بگین که براتون تمدید کنن..

پ.ن: اپ V2rayN نصب کنید و اپ های دیگه استفاده نکنید!

ورود به ربات...
8
اینو جواب بدین ببینم هوش کدومتون بیشتره😜🤓

منبع: tizhoushan.ir


@purecoder_ir
1
🔥Value Type vs Reference Type

وقتی میگیم
int a = 4;
int b = a;

مقدار یا value ی a توی b کپی میشه و از حالا به بعد هر دو ولیوی 4 رو دارن. یعنی یک فضا از حافظه به a اختصاص داده میشه و توش مقدار ۴ قرار میگیره و یک فضا هم به b اختصاص داده میشه و توش مقدار ۴ قرار میگیره.
حالا اگه بگیم:
int a = 4;
int b = a
b = 5;

مقدار b برابر با ۵ میشه و مقدار a برابر با ۴ باقی میمونه. چون حافظه ی اختصاص داده شده به این دو var کاملن از هم مستقل هستن و مستقل از هم تغییر میکنن.
به این ترتیب به این type ها value type گفته میشه.

وقتی که یک value type رو با عملیات = توی یک value type دیگه میریزیم، عملیات کپی انجام میشه و مقدار مورد نظر توی حافظه ی اختصاص داده شده به. Var دوم کپی میشه و راه دو var از هم جدا میشه.
حالا وقتی میگیم:

Person p = new Person();
p.age = 66;

اینجا کلید new باعث میشه که یه دونه person ساخته بشه و توی حافظه قرار بگیره، ولی رفرنسش یا به عبارتی ادرسش توی حافظه ی اختصاص داده شده به p قرار میگیره.

حالا اگه بگیم:
Person p1 = p:

همون ادرس یا رفرنس توی p1 هم کپی میشه.
پس کلن یه دونه person توی حافظه داریم و دو تا var داریم که هر دو به همون اشاره میکنن. در نتیجه اگه بگیم:

P1.age = 99;

مقدار age اون person ای که توی حافظه بوده تغییر میکنه و چون p و p1 هر دو به یک ابجکت رفرنس داشتن، مقادیر p.age و p1.age هر دو برابر با ۹۹ میشه.

به این type ها reference type میگن.

وقتی که یک reference type رو با عملیات = توی یک reference type دیگه میریزیم، فقط رفرنس ها کپی میشن. یعنی به هر دو var دو حافظه ی مستقل اختصاص داده میشه، ولی مقداری که توی هر دو حافظه قرار میگیره یکسان و برابر با رفرنس ابجکت مورد نظر توی حافظه هست.
پس موقع اختصاص یک value type به value type دیگه، خود value کپی میشه و موقع اختصاص یک reference type به یک reference type دیگه، این رفرنسه که کپی میشه!!!


پست بعدی...

@purecoder_ir
🔥63👍1👌1
Forwarded from Hamed
📕 Clean Code in C#

یک خبر عالی! 🥳
ترجمه فارسی کامل کتاب #Clean Code in C نوشته Jason Alls به‌صورت رسمی آماده شد! این کتاب یکی از منابع فوق‌العاده برای یادگیری اصول کدنویسی تمیز، Refactoring و ارتقای کیفیت نرم‌افزار در #C به‌حساب میاد.


همراهی و نظرات انگیزشی شما کلی انرژی و دلگرمی به این پروژه می‌ده. ممنون از حمایتتون! ❤️

https://github.com/hheydarian/clean-code-in-csharp-persian
🔥82🏆1
🔥Value Type vs Reference Type

پست قبلی...

وقتی که یه value type رو به یه فانکشن یا متد پاس میدیم چی میشه؟

void DoSomething(int a)
{
a = 6;
}

اینجا یه فانکشن داریم که توی ورودی یه value type میگیره. حالا اگه:

     int myVar = 10;
DoSomething(myVar);

این فانکشن رو کال کنم و myVar رو‌ بهش پاس بدم، مقدار یا value ی myVar توی a کپی میشه و مسیر دو تا variable از هم جدا میشه. یعنی یه variable به اسم myVar دارم و یه دونه variable هم به اسم a که اسکوپ کوچیکتر داره. این var ها value شون کپی هم هست ولی روی هم دیکه تاثیر نمیگذارن. یعنی بعد از اجرای فانکشن مقدار myVar برابر با ۱۰ باقی میمونه.

حالا اگه یه reference type رو به یه فانکشن یا متد پاس بدیم چی؟

void DoSomething(Person p)
{
p.Age = 99;
}

اگه این فانشکن رو به شکل زیر کال کنم:

Person person = new Person();
person.Age = 66;

DoSomething(person);

بعد از اجرای فانکشن، مقدار Age ابجکت person برابر با ۹۹ میشه.
چرا؟

چون وقتی که یه reference type رو به یه فانکشن پاس میدیم، این رفرنسه که کپی میشه. پس دو تا var به اسم های person و‌ p داریم که هر دو یک مقدار داخل خودشون دارن و اون مقدار هم رفرنس یا ادرس ابجکت Person توی حافظه ست. پس عملیاتی که که توی فانکشن روی p اعمال میشه، روی person هم تاثیر میگذاره، چون هر دو به یک ابجکت توی حافظه اشاره میکنن.

پس موقع پاس دادن یک value type به یه فانکشن یا متد، خود value توی پارامتر ورودی فانکشن کپی میشه و موقع پاس دادن یه reference type به یه متد هم این رفرنسه که توی اون پارامتر کپی میشه.
@purecoder_ir
🔥61
شما اگه توی کل عمرت فقط و فقط قرمه سبزی خورده باشی و بگی من عاشق قرمه سبزیم، میشه به این عشق و علاقه تردید کرد. تا وقتی که چندتا غذای دیگه رو امتحان نکنی و همچنان بر علاقه ی خودت استوار نباشی. نمیشه به علاقت اعتبار داد.

خب این یه مثال الکی بود. ولی توی ماجرای شغل میشه بهش نگاه کرد. بعضی از ماها یه حرفه رو انتخاب میکنیم و تا اخر با همون ادامه میدیم و به صورت خود گول زنکی فک میکنیم که خیلی عاشقیم.

از کجا معلوم؟
تا وقتی فقط یه حرفه رو امتحان کردیم چه اطمینانی به خالص بودن علاقه ی ما هست؟

یکی از مولفه هایی که میشه باهاش علاقه رو سنجید، خلاقیته‌. دروغ زشتی که بعضی از ماها به خودمون میگیم اینه که من اصلن ادم خلاقی نیستم🥲🥲

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

پس دیگه این دروغ رو به خودت نگو که من خلاق نیستم. اگه خلاق نیستی باید جات رو تغییر بدی.
👍11
👍18
⛔️ترجمه ممنوع

💡فانکشن که مشخصه چیه.

🔥متد هم نوع خاصی از فانکشنه. متد، فانکشنیه که توی یه کلاس قرار میگیره و فقط روی ابجکت های ساخته شده از اون کلاس قابل کال شدنه.
البته دو نوع متد وجود داره: instance و static.

پس اگه مستقل بود و به هیچ ابجکت یا کلاسی گره نخورده بود بهشون میگیم فانکشن و اگه به یه ابجکت یا کلاس گره خورده بود، میگیم متد. (Instance Method یا Static Method )

تروخدا به اینا تابع نگید🤦‍♂🤦‍♂ بگید فانکشن یا متد.

مدرس های عزیز مخصوصن شماها به اینا تابع نگید. شما بگید هزار نفر یاد میگیرن میگن🤦‍♂🤦‍♂😂

وقتی شروع کردی به ترجمه ی این ها و به فانکشن گفتی تابع، اون موقع دیگه برای متد واژه ی مستقل پیدا نمیکنی و گیر میوفتی.
اینا واژگان تخصصی ان، نباید ترجمه بشن‌‌‌‌.

موارد دیگه که باید رعایت کنید:

کانستراکتور نه سازنده.
ابجکت نه شی.
ابجکت ارینتد نه شی گرا.
فانکشنال پروگرمینگ نه برنامه نویسی تابع محور 🤦‍♂🤦‍♂😭
یونیت تست نه تست واحد.
ترد نه نخ🤦‍♂ مگه سیگاره😂
و ... .

خیلی زیادن.

@purecoder_ir
👍16👎7😁2
🔥حامد عزیز توی کانال زیر در مورد دات نت صحبت میکنه و محتواهای خیلی خوبی میگذاره👇

@dndevelop

🔥اگه به دات نت علاقه دارین حتمن عضو کانالش بشین و از محتواهای خوبش استفاده کنید😍

🤓البته بعضی محتوا ها، ازجمله کتاب هایی که ترجمه کرده (مثل کتاب کلین کدش) برای همه میتونه مفید باشه و اختصاص به دات نت نداره.

کلن فعالیتش توی گیتهاب هم زیاده و میتونید یه سری به گیتهابش هم بزنید:
https://github.com/hheydarian

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

به کسی برنخوره😅😅🤦‍♂. این طبق مشاهدات شخصی خودم بوده و کاملن نظر شخصیه و ممکنم هست اشتباه کنم و ایرادی هم نداره و طبق چیزی که دیدم میگم که این دو از نظر عمق دانش افرادی که داخلش کار میکنن از بقیه سرتر هستن. این به معنی بد بودن بقیه نیست. بهتر بودن یه چیز به معنی بد بودن بقیه چیزها نیست😅.

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

کانال حامد رو هم فراموش نکنید.
حتمن بدردتون میخوره.

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

دیسلایک هم بزنید چون تعریف کردم از دو تا چیز 😂😂😜😜

@purecoder_ir
10🔥2👌1
😱نشخوار فکری

1⃣تفکر عمیق (Ruminating):
اشتباهات گذشته رو بارها و بارها توی ذهنت مرور میکنی.

2⃣فاجعه سازی(Catastrophizing):
بدترین سناریوی ممکن رو محتمل ترین حالت تصور میکنی.

3⃣فلج تحلیلی (Paralysis by analysis):
بین گزینه ها گیر میکنی و هیچ وقت دست به کار نمیشی.

4⃣ ذهن خوانی (Mind-reading) :
با خودت فرض میکنی که دیگران چی فکر میکنن و اکثرا فکر خوبی نیست.

5⃣در جست وجوی تایید مداوم (Reassurance seeking):
مدام از دیگران میپرسی که آیا کارت رو درست انجام میدی.

6⃣نگرانی از آینده (Future - tripping):
در مورد چیزهایی که ممکنه در آینده اشتباه پیش برن وسواس به خرج میدی.

7⃣مارپیچ مقایسه (Comparison spirals):
زندگی خودت رو با ویترین زندگی دیگران مقایسه میکنی.

@purecoder_ir
8
This media is not supported in your browser
VIEW IN TELEGRAM
جهان - من =

یه بار یه جایی یه سوالی مطرح شد که از نظر شما یه برنامه نویس خوب کیه؟

یه نفر گفت کسیه که خوب بتونه داکیومنت بخونه.

یه نفر گفت کسیه که خوب بتونه از ابزارهای موجود استفاده کنه.

یه نفر دیگه گفت برنامه نویس خوب کسیه که مهارت های نرم خوبی هم در کنار مهارت های فنی داشته باشه.

و ... .

ولی من میگم تعریف از خوب بودن ارتباطی با جایگاه و شغل تو نداره‌.

تاثیر گذار هستی یا نه؟
تا حالا چقدر توی بهتر شدن مسیر بقیه ایفای نقش کردی؟
بدون وجود تو کارها چقدر سخت میشه؟

جهان بدون تو تعریفش تغییر میکنه یا نه؟
جهان بدون تو باید یه چیزی کم داشته باشه، ولو به اندازه ی یک اتم.

بقیه چیز ها ابزارهایی هستن که ما در جهت خوب بودن یا بد بودن ازشون استفاده میکنیم، ولی اون ابزارها به خودی خود و به تنهایی تعیین کننده نیستن!! این ما هستیم که ظرف اون ها رو تعیین میکنیم.

داکیومنت، کتاب، هوش مصنوعی، مهارت نرم، معماری، پترن های مختلف و ... ابزارن. تو تعیین میکنی که میتونی با اون ها در جهان تاثیر مثبت بگذاری یا نه؟

@purecoder_ir
8👍2
میگن مدیرعامل اوراکل شده ثروتمندترین فرد دنیا و ایلان ماسک رو گرفته.

حالا دیگه چطوری توی چشم جاوایی ها نگاه کنیم 😂😂

داستانی شد🤦‍♂🤦‍♂😜
🤣12😁5
توی دارت برای اینکه ببینیم آیا دو تا object reference به object یکسانی اشاره میکنن یا نه، از چی استفاده میکنیم؟ (به عبارت دیگه میخوایم دو تا variable رو مقایسه کنیم و ببینیم که ایا به یک object توی حافظه برمیگردن یا نه؟)
Anonymous Quiz
45%
"==" (Equality) operator
28%
"identical" function
16%
"equals" method
11%
نمیدونم، دیدن جواب
Pure Coder
توی دارت برای اینکه ببینیم آیا دو تا object reference به object یکسانی اشاره میکنن یا نه، از چی استفاده میکنیم؟ (به عبارت دیگه میخوایم دو تا variable رو مقایسه کنیم و ببینیم که ایا به یک object توی حافظه برمیگردن یا نه؟)
فانکشن identical برای مقایسه رفرنس ها به کار میره:
identical(o1, o2);

این فانکشن توی ورودی ۲ تا object میگیره.

ولی چرا "==" درست نیست؟

این operator توی کلاس object وجود داره و همه ی کلاس های دارت هم به صورت implicit از Object ارث بری میکنن. عملکرد پیش فرض این operator توی کلاس object به این شکله که از فانکشن identical استفاده میکنه و همه چیز رو به اون میسپاره. پس عملکرد پیش فرض این operator هم مقایسه کردن رفرنس هاست.

‌پس چرا نادرسته؟

این operator امکان داره توی کلاس های دیگه override بشه و عملکردش تغییر کنه. برای همین همیشه و همیشه reference ها رو برای مقایسه چک نمیکنه.

همون طور که توی مقاله ی زیر گفتیم👇

https://purecoder.ir/three-types-of-equality-in-programming-world/

سه حالت برای مقایسه ی object ها داریم:

Reference
Structure
Identifier

🔥برای پیاده سازی حالت های دوم و سوم باید == رو اوراید کنیم و عملکردش رو تغییر بدیم. پس این operator همیشه و در همه ی شرایط reference رو مقایسه نمیکنه و ممکنه structure و یا identifier رو مورد هدف قرار بده.

پس اگه == ترو داد، همیشه به این معنا نیست که دو تا چیزی که مقایسه کردیم رفرنس یکسانی داشتن. ولی اگه identical ترو داد، چرا !!!

@purecoder_ir
🔥7👍1
🔥اینترفیس ها در جاوا و سی شارپ

🤔خیلی جاها به ما گفتن که اینترفیس ها به ما این امکان رو میدن که قواعدی رو تعیین کنیم و از این حرفا...

یا خیلی چیز های دیگه...

خب اینکار ها رو با کلاس هم میشه انجام داد.

کلن هر کاری که با اینترفیس انجام میدیم، با کلاس هم میشه انجامش داد‌.

پس چرا نیاز به وجود چنین عنصری در زبان های برنامه نویسی بوده؟

1⃣زبان c++ از multiple inheritance پشتیبانی میکرد. یعنی یه کلاس به طور همزمان میتونست از چند کلاس دیگه ارث بری کنه.

2⃣پشتیبانی از multiple inheritance چالشی به اسم diamond problem رو به وجود میاره که زبان هایی که از این قابلیت پشتیبانی میکنن، باید فکری به حالش کنن.

زبان c++ و سایر زبان های پشتیبانی کننده از این قابلیت هر کدوم راهکار هایی رو برای مواجه شدن با این چالش دارن.

✂️اما مساله اینجاست که توسعه دهنده گان جاوا و سی شارپ از بیخ این مساله رو حذف کردن و نمیخواستن خودشون رو درگیر diamond problem کنن. در نتیجه بحث multiple inheritance رو پیچوندن و‌ گفتن که توی زبان ما یک کلاس فقط و فقط میتونه از یک کلاس دیگه ارث بری کنه‌.

😖ولی این مساله یه مشکل اساسی رو بوجود میورد. بعضی مواقع واقعن نیاز داشتیم که کلاسمون از چند کلاس دیگه ارث بری کنه. برای مثال چند تا abstract class داشتیم و میخواستیم که کلاسمون از همشون ارث بری کنه.

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

🔥در واقع یکی از دلایل اصلی وجود اینترفیس ها در این دو زبان، پیچوندن multiple inheritance بوده و نه یه چیز خارق العاده و یا یه جعبه ی جادویی که امکاناتی رو بهمون بده که قبلن کلاس ها بهمون نمیدادن.

@purecoder_ir
🔥8👏1👌1
This media is not supported in your browser
VIEW IN TELEGRAM
+شما استادش بودید؟

+اگر انصاف داشته باشید باید بگویید شاگرد مستعدی بود.

مدرسه ی هنر مزرعه ی بلال نیست که هر سال محصولش بهتر شود. از کواکب آسمان هم یکی میشود ستاره ی درخشان، الباقی سوسو میزنند...


برشی از فیلم کمال الملک
پ.ن: برداشت آزاد ...
@purecoder_ir
8👏1
🥹توی JS نمیشه Object Oriented کد زد!!!

🥸ممکنه اینو خیلی شنیده باشی که جاوا اسکریپت یه زبانیه که نمیشه توش object oriented کد زد!!! مخصوصن جاوا اسکریپت خام و بدون امکاناتی که ES بهش میده.

🙄شاید بگن توش کلاس نداره و از این حرفا!!!

🤬نهههه.خیلیم میشه.

👈جاوا اسکریپت یه چیزی داره به اسم Constructor Function که همون چیزیه که لازم داریم‌. حتمن که نباید یه چیزی به اسم class باشه. اصن اصل object oriented همین Constructor Function بوده.

🍊ابجکت ارینتد یه دونه کلاس بهت میده که یه سری instance variable و یه سری method داره که اون متد ها میتونن از instance variable ها استفاده کنن.

📋حالا در نظر بگیر که یه function داری که داخل خودش یه تعداد local variable تعریف کرده و همچنین یه تعداد nested function هم توی خودش داره. در نتیجه اون nested function ها میتونن از local variable های داخل function استفاده کنن.

🏭در واقعیت object oriented همین کار رو میکنه. یعنی یه فانشکن بزرگ به اسم Constructor Function تعریف میکنه که توی دل خودش یه تعداد local variable و nested function داره. به local variable ها میگه instance variable و به nested function ها میگه method.

🔥حالا زبان های برنامه نویسی اومدن و یه سینتکس خوشکل (class) بهمون دادن که کار مارو ساده تر کنن. درسته که جاوا اسکریپت اون سینتکس قشنگه رو نداره. ولی دلیل نمیشه که بگیم کلن نمیشه توش OO زد. چون چیزی که باید داشته باشه رو داره.

📦کلاس ها یه جعبه ی جادویی نیستن، در اصل همه چیز به همون فانکشن برمیگرده. ولی با یه سری ترفند ها تو رو از یه سیاه چاله عبور میدن و وارد سرزمین عجایبی به اسم Object Oriented میکنن.

😍پس توی JS هم میشه OO زد، به شرط اینکه به دنبال ظاهر نباشی. کاری با زشتی و قشنگیش و ایراد هاش ندارم، که حتمن ایراد هایی بهش وارده. ولی دلیل نداره یه موضوع رو از بیخ رد کنیم.

@purecoder_ir
🔥5👍3🤣1
Forwarded from Fluttery's Journey
خب دوره ی فلاترمون خیلی وقته که تکمیل شده و توی چند پست فصل های مختلفش رو‌ معرفی میکنیم تا برای دوستانی که تصمیم به شرکت دارن یه راهنما باشه.

این دوره شامل ۱۶ فصله که توی ۳ پارت تنظیم شده. فصل های ۱ تا ۷ توی پارت یک قرار دارن که از لینک زیر میتونید دنبالش گنید👇
https://purecoder.ir/course/flutterys-journey/

1⃣فصل اول

توی فصل اول یه مقدمه ی خیلی کوتاه در مورد درخت های مختلف فلاتر و معماری فلاتر میگیم.

در مورد call stack صحبت میکنیم. بعدش Recursive Function ها رو یاد میگیریم و نحوه ی مدیریتشون توی call stack رو با مثال عملی و شکل میبینیم.

همچنین یه مثال خوب دیگه از Recursive Function میزنیم و اونو با روش TDD حل میکنیم و unit test هاش رو تحلیل میکنیم و مرحله به مرحله جلو میبریمش.

در نهایت ولی با Event Loop توی دارت آشنا میشیم و میبینیم که در پشت پرده ی کدهای async ای که میزنیم چی میگذره.

🔥قرار بود توی فصل اول در مورد Composite Pattern هم صحبت کنیم، ولی در ادامه یه فصل کامل رو به این پترن اختصاص دادیم و توی فصل ۷ با دو تا مثال عملی به خوبی شرحش دادیم. یکی از این مثال ها Multi Currency Money بود که توش جمع و تفریق کردن واحد های مختلف پولی باهم و سپس تبدیلشون به یک واحد رو با Composite Pattern مدل کردیم.

5 Dollar + 10 Euro + 30 Dirham

توی این فصل همچنین ارتباط Composite Pattern با Recursive Function رو بررسی کردیم و نحوه ی مدیریتش توی Call Stack رو با شکل دیدیم.

@fluttery_journey

@purecoder_ir
11
Forwarded from Fluttery's Journey
2⃣فصل دوم: Dart UI

🔥خب dart ui یه library خیلی low level عه که فریمورک فلاتر رو به انجین متصل میکنه.

توی این فصل با این المان های Low Level از جمله Engine Layer ها آشنا میشیم.

با مفهوم Frame و نحوه ی schedule کردن Frame اشنا میشیم و API های مختلف Platform Dispatcher رو هم بررسی میکنیم.

بدون استفاده از هیچ ویجتی و با low-level ترین API هایی که dart ui در اختیارمون میگذاره یه دونه UI و یه دونه Animation ساده میسازیم تا با مفاهیم از پایه اشنا بشیم.

با Canvas اشنا میشیم و به ویژه مفاهیم save و restore کردن رو توی canvas یاد میگیریم‌.

🔥مفاهیم این فصل پایه ای برای ادامه دوره ایجاد میکنن و به ویژه موقع کار با Render Tree و Layer Tree و انیمیشن ها توی فصل های بعدی، کاربردشون رو به صورت عملی میبینیم و درک میکنیم.

🆔برای مشاوره یا ثبت نام در دوره به ایدی زیر پیام بدید👇
@PureCoder_support


@fluttery_journey

@purecoder_ir
5👌2