درود.
اینجا قراره خیلی راحت و بدون تشریفات خاصی، چیز هایی که یاد میگیرم، چالش های برنامهنویسی، پروژهها و کار هایی که انجام میدم و حتی روزمرگیهام رو بنویسم. ی فضای دور از کانال آموزشیِ کلاسیک یا رسانه خبری، اسمش رو میذارم باغچهی دیجیتال (
قرار نیست همه چیز "خشک" و "فنی" باشه، همونقدر که از کدنویسی و پروژههام و.. میگم، ممکنه از چیزهایی بنویسم که صرفاً سلیقه، اعتقاد شخصی و یا حتی تعصبات من باشه.
خوش اومدین به باغچه دیجیتالی من.
➖➖➖➖➖➖➖➖➖
📚• #FReading@Melfex | مطالب خواندنی
👤• #FromFarshad@Melfex | پینوشت
⌨️• #DevEdu@Melfex | محتوای تخصصی توسعه
اینجا قراره خیلی راحت و بدون تشریفات خاصی، چیز هایی که یاد میگیرم، چالش های برنامهنویسی، پروژهها و کار هایی که انجام میدم و حتی روزمرگیهام رو بنویسم. ی فضای دور از کانال آموزشیِ کلاسیک یا رسانه خبری، اسمش رو میذارم باغچهی دیجیتال (
DIGITAL GARDEN ) XD. قرار نیست همه چیز "خشک" و "فنی" باشه، همونقدر که از کدنویسی و پروژههام و.. میگم، ممکنه از چیزهایی بنویسم که صرفاً سلیقه، اعتقاد شخصی و یا حتی تعصبات من باشه.
خوش اومدین به باغچه دیجیتالی من.
➖➖➖➖➖➖➖➖➖
📚• #FReading@Melfex | مطالب خواندنی
👤• #FromFarshad@Melfex | پینوشت
⌨️• #DevEdu@Melfex | محتوای تخصصی توسعه
50⚡22🤡6❤4💘3👍2🥰2🍌2💋2💔1
مدتیه دارم روی زیرساخت و سر فصلهای ی دوره و پروژه جدید کار میکنم که فکر کنم جاش خیلی خالیه و حس میشه : « دوره جامع و
تفاوت این دوره با آموزش و دورههای مشابه، توی "عمیق" بودنشه. قرار نیست در نهایت فقط چندتا متد رو کال کنیم. برنامه و ساختار دوره بصورت زیر هست:
١ فاز
٢ فاز
٣ پروژه نهایی و
در حال حاضر دارم روی نهایی کردن تجهیزات ضبط و ستاپ میکروفن و هویت بصری دوره کار میکنم تا خروجی کار، هم از نظر محتوا و هم از نظر کیفیت فنی، در تراز استاندارد های مطلوب باشه. از نظرم تجربه فان و پر از مورد جالب و جدید قراره باشه، خصوصا از این نظر که قراره تبدیل به اولین تجربهام بشه :).
Edit 02/03:
پن؛ نه دلودماغ و نه شرایطش هست، به امید روز های بهتر.. :).
MASTERCLASS ساخت بات تلگرامی ».تفاوت این دوره با آموزش و دورههای مشابه، توی "عمیق" بودنشه. قرار نیست در نهایت فقط چندتا متد رو کال کنیم. برنامه و ساختار دوره بصورت زیر هست:
١ فاز
STRUCTURAL مستقل از زبان؛ بصورت خیلی دقیق و ریز پروتکل تلگرام رو کالبد شکافی و درک عمیق از API تلگرام، مدیریت آپدیتها، تفاوت عملیاتی پولینگ و وبهوک و کار با متدهای خام ایجاد میکنیم و در نهایت قصد دارم اول بفهمیم "چرا" و "چطور" ی بات واحد کار میکنه، قبل از اینکه "چطور" کدش رو بنویسیم.٢ فاز
DEEP DIVE روی AIOGRAM 3.X؛ بعد از رسیدن به ی درک معقول از مفاهیم اولیه، شیفت میکنیم روی یکی از قدرتمند ترین فریمورک پایتونی یعنی آیوگرام، ازROUTERوMIDDLEWAREهای پیشرفته گرفته تا مدیریتSTATEها وFSMتوی مقایس بالا. البته سعی بر اینه که جوری مانور بدیم که مفاهیم ارائه شده صرفا فقط صرف آیوگرام رو پوشش نده و در نهایت بتونیم با درک جامع ایجاد شده، با تمامی فریمورک های موجود تا حد خیلی خوبی ارتباط برقرار کنیم.
٣ پروژه نهایی و
REAL-WORLD APP؛در نهایت و ته ماجرا ی بات کامل کد نویسی و به صورت کامل دیپلوی میکنیم.
در حال حاضر دارم روی نهایی کردن تجهیزات ضبط و ستاپ میکروفن و هویت بصری دوره کار میکنم تا خروجی کار، هم از نظر محتوا و هم از نظر کیفیت فنی، در تراز استاندارد های مطلوب باشه. از نظرم تجربه فان و پر از مورد جالب و جدید قراره باشه، خصوصا از این نظر که قراره تبدیل به اولین تجربهام بشه :).
Edit 02/03:
پن؛ نه دلودماغ و نه شرایطش هست، به امید روز های بهتر.. :).
1🔥9🍓3🤡1💋1💘1
سی و اندی روز هست که فیلترنت غالبِ غالبِ غالب هست.
اولش یکم دست و پا زدم؛ متدهای رایگان، کانفیگهای پولی، تونلهای موقت و..، به هر حال چند ساعت وصل شدم به اینترنت بینالملل. ولی بعدش؟! دیگه حتی رغبتی به اتصال محدود و لگدار هم نداشتم.
خواستم بگم چقدر سریع عادت میکنیم و بر میگردیم به غارنشینی دیجیتال :)
👤• #FromFarshad@Melfex
اولش یکم دست و پا زدم؛ متدهای رایگان، کانفیگهای پولی، تونلهای موقت و..، به هر حال چند ساعت وصل شدم به اینترنت بینالملل. ولی بعدش؟! دیگه حتی رغبتی به اتصال محدود و لگدار هم نداشتم.
خواستم بگم چقدر سریع عادت میکنیم و بر میگردیم به غارنشینی دیجیتال :)
👤• #FromFarshad@Melfex
💔9
این چند وقت که اینترنت حسابی قفل بوده و هست ی جورایی اجبارا رفتم توی فاز "
از اونجایی ترک عادت موجب مرض هست اما تصمیم گرفتم بهجای اینکه مثل همیشه چندتا کار رو همزمان پیش ببرم، روی فلاتر و الپیک فوکوس کنم. فلاتر رو خیلی جدی و حرفهای تر دارم دنبال میکنم و الپیک رو هم استارتش رو زدم، این وسط برای امرار معاش و صد البته سرگرمی چندتا پروژه بات ( بازو :)) ) بله هم گرفتم و انجام دادم.
قطع اینترنت یجورایی نعمت شد و مجبورم کرد عمیقتر شم و خلاصه این دوره آفلاین بودن برام تبدیل شد به ی دوره "باغچه دیجیتالی" واقعی. بدون سر و صدا، بدون اسکرول سوشالمدیا ها، فقط یادگیری و کار عمیق.
👤• #FromFarshad@Melfex
DEEP WORK". از اونجایی ترک عادت موجب مرض هست اما تصمیم گرفتم بهجای اینکه مثل همیشه چندتا کار رو همزمان پیش ببرم، روی فلاتر و الپیک فوکوس کنم. فلاتر رو خیلی جدی و حرفهای تر دارم دنبال میکنم و الپیک رو هم استارتش رو زدم، این وسط برای امرار معاش و صد البته سرگرمی چندتا پروژه بات ( بازو :)) ) بله هم گرفتم و انجام دادم.
قطع اینترنت یجورایی نعمت شد و مجبورم کرد عمیقتر شم و خلاصه این دوره آفلاین بودن برام تبدیل شد به ی دوره "باغچه دیجیتالی" واقعی. بدون سر و صدا، بدون اسکرول سوشالمدیا ها، فقط یادگیری و کار عمیق.
👤• #FromFarshad@Melfex
🔥5❤1💋1💘1
اگه توسعهدهنده بات تلگرامی هستید، توی شرایط فعلی پروژه
بعد از دانلود پروژه، کافیه:
• توی ویندوز فایل
• توی لینوکس
ران کنید. سپس توی سورسکدتون بیس یو آر ال پیشفرض تلگرام رو به
📦 github.com/laraXgram/Simula
⌨• #DevEdu@Melfex
Simula یکی از کاملترین راهحلها برای شبیهسازی لوکال Telegram Bot API هست. میتونید بدون نیاز به اینترنت، کل روند توسعه و تست بات رو روی لوکال هاست خودتون انجام بدید.بعد از دانلود پروژه، کافیه:
• توی ویندوز فایل
run-web.bat• توی لینوکس
run-web.shران کنید. سپس توی سورسکدتون بیس یو آر ال پیشفرض تلگرام رو به
http://127.0.0.1:8081 تغییر و توکن بات رو 123456:TESTTOKEN ست کنید.📦 github.com/laraXgram/Simula
⌨• #DevEdu@Melfex
⚡6❤1🔥1
اگه شما هم مثل من کمالگرایی زیادی توی یادگیری دارید، این جمله رو به خاطر بسپارید؛
خطر تلنبار کردن سطحی دانش خیلی زیاد هست، چون:
• اعتماد بهنفس کاذب میده
• هیچکدوم از مهارتها به حد حرفهای نمیرسه
• باعث فرسودگی و نهایتا رها کردن میشه
من چیکار میکنم؟! از قانون ٨٠/٢٠ استفاده میکنم:
• ٨٠ درصد یادگیری رو صرف ی مهارت اصلي میکنم
• ٢٠ درصد باقی مونده رو واسه آشنایی علوم/ابزار مکمل
👤• #FromFarshad@Melfex
عمق رو نباید فدای گستردگی کرد!
خطر تلنبار کردن سطحی دانش خیلی زیاد هست، چون:
• اعتماد بهنفس کاذب میده
• هیچکدوم از مهارتها به حد حرفهای نمیرسه
• باعث فرسودگی و نهایتا رها کردن میشه
من چیکار میکنم؟! از قانون ٨٠/٢٠ استفاده میکنم:
• ٨٠ درصد یادگیری رو صرف ی مهارت اصلي میکنم
• ٢٠ درصد باقی مونده رو واسه آشنایی علوم/ابزار مکمل
👤• #FromFarshad@Melfex
🔥4👏2❤🔥1💘1
به پيشنهاد یکی از دوستان، شروع کردم به خوندن کتاب "عادت های اتمی". کتاب خیلی خوبی به نظر میرسه و تصمیم گرفتم از این به بعد هر کتابی رو که میخونم، جملات و پاراگرافهای مهم از نظر خودم رو هم اینجا کوت کنم.
از این پس میتونید با هشتگ هر کتاب، این پاراگرافها رو دنبال کنید.
📚• #FReads@Melfex
از این پس میتونید با هشتگ هر کتاب، این پاراگرافها رو دنبال کنید.
📚• #FReads@Melfex
❤3👍1
• معجزه ۱٪ بهتر شدن؛
• عادتها، بهره مرکب خودسازی؛
• زمان، متحد تو یا دشمن تو؛
📚• #FReading@Melfex | #عادت_های_اتمی
اگر بتوانی هر روز فقط ۱٪ بهتر شوی، در پایان سال ۳۷ برابر بهتر خواهی شد. انتخاب ۱٪ بهتر یا ۱٪ بدتر در لحظه بیاهمیت به نظر میرسد، اما در طول یک عمر، همین انتخابهای کوچک تعیین میکنند که چه کسی هستی و چه کسی میتوانستی باشی.
• عادتها، بهره مرکب خودسازی؛
عادتها بهره مرکب خودسازی هستند. همانطور که پول با بهره مرکب چند برابر میشود، تأثیر عادتهای تو نیز با تکرارشان چندبرابر میشود. یک عادت اتمی، یک عادت کوچک است که بخشی از یک سیستم بزرگتر است. همانطور که اتمها بلوکهای سازنده مولکولها هستند، عادتهای اتمی هم بلوکهای سازنده نتایج شگفتانگیزند.
• زمان، متحد تو یا دشمن تو؛
زمان، فاصله بین موفقیت و شکست را چند برابر میکند. هر چیزی به زمان بدی، همین را برایت چند برابر پس میدهد. عادتهای خوب، زمان را متحد تو میکنند. عادتهای بد، زمان را دشمن تو.
📚• #FReading@Melfex | #عادت_های_اتمی
❤3🔥1
اگه این روزها اندروید استدیو و بلید
1⃣• برای فلاتر میرور ست کنید؛
Pub Host:
Fluuter Storage:
2⃣• کشهای موجود اندروید رو دیلیت و از نو بگیرید؛
3⃣• محتویات دایرکتوری
- ی پوشه
- فایل داخل کامنت رو داخل فولدر پیست کنید.
4⃣• ی پروژه جدید فلاتری ایجاد کنید و وارد دایرکتوری
- فایل
- توی لاین آخر،
5⃣• داخل دایرکتوری فعلی (
و تمام! از حالا به بعد میتونید بدون دردسر بیلد کنید، برای پروژههای بعدی هم فقط نیاز هست مرحله ۴ رو تکرار کنید.
⌨• #DevEdu@Melfex
Gradle و میرورهاش دهن شما رو هم آسفالت کرده، کافیه مراحل زیر رو یکبار طی کنید تا نجات پیدا کنید.1⃣• برای فلاتر میرور ست کنید؛
Pub Host:
https://dart.devneeds.irFluuter Storage:
https://flutter.devneeds.ir2⃣• کشهای موجود اندروید رو دیلیت و از نو بگیرید؛
flutter precache --force --android3⃣• محتویات دایرکتوری
gradle. رو دیلیت کنید؛- ی پوشه
init.d بسازید.- فایل داخل کامنت رو داخل فولدر پیست کنید.
4⃣• ی پروژه جدید فلاتری ایجاد کنید و وارد دایرکتوری
android/gradle/wrapper بشید؛- فایل
gradle-wrapper.properties رو باز کنید.- توی لاین آخر،
services.gradle.org رو به maven.myket.ir/gradle تغییر بدید.5⃣• داخل دایرکتوری فعلی (
gradle ) ی ترمینال باز کنید و دستورات زیر رو وارد کنید؛flutter clean
flutter pub get
./gradlew.bat assembleDebug
و تمام! از حالا به بعد میتونید بدون دردسر بیلد کنید، برای پروژههای بعدی هم فقط نیاز هست مرحله ۴ رو تکرار کنید.
⌨• #DevEdu@Melfex
❤4
اگه شما هم از سنگین شدن، اکانت اجباری، لودینگهای رو مخ و مودی بودن ابزارهایی مثل
• کاملاً آفلاین کار میکنه. هیچ کلاد، اکانت یا سینک اجباری نداره و تمام دیتای پروژه روی سیستم خودت میمونه.
• گیتفرندلی واقعی؛ درخواستها رو به جای یه فایل جیسون بزرگ یا دیتابیس داخلی، با فرمت متنی ساده
• افزونهها و قابلیتهای
📦 github.com/usebruno/bruno
⌨• #DevEdu@Melfex
Postman یا Insomnia خسته شدید، وقتشه سیستم تست اِیپیآیتون رو به Bruno مهاجرت بدید. برونو ی ابزار تست API کاملاً اوپنسورس و سبکه که چند ویژگی متمایزش واقعاً نجاتدهندهست:• کاملاً آفلاین کار میکنه. هیچ کلاد، اکانت یا سینک اجباری نداره و تمام دیتای پروژه روی سیستم خودت میمونه.
• گیتفرندلی واقعی؛ درخواستها رو به جای یه فایل جیسون بزرگ یا دیتابیس داخلی، با فرمت متنی ساده
bru. ذخیره میکنه. این یعنی میتونی پوشه کالکشن رو مستقیم کنار سورسکد پروژه بذاری و با گیت خیلی تمیز کامیت و مرج کنی.• افزونهها و قابلیتهای
Environment کاملاً رایگان هست و بر خلاف خیلی از ابزارها، ویژگیهای تیمورک رو پشت Paywall قایم نکرده.📦 github.com/usebruno/bruno
⌨• #DevEdu@Melfex
👍3🆒1
تو به بلندای اهدافت پرواز نمیکنی؛ تو به سطح هویت/سیستمت سقوط میکنی.
مشکل از اراده نیست، مشکل از سیستمهاست. هر کاری که امروز انجام میدیم، ی رأی به سمت کسی هست که میخوایم بشیم. هر بار که ورزش میکنیم، داریم به خودمون ثابت میکنیم «من یه آدم فعال هستم».
از امروز به جای «دوست دارم کتاب بخونم» بگو «من کتابخونم». چون وقتی هویت عوض بشه، رفتارها برای همیشه قفل میشن.
📚• #FReading@Melfex | #عادت_های_اتمی
⚡3👏1💋1
چند ساعت پیش یکی از بچهها سورسکد بات تلگرامیش رو ارسال کرد که دیباگ و بررسیش کنم. چالشی که داشت، یکی از همون به اصطلاح باگهای خاموش توی سطح پروداکشن بود؛ با وجود اینکه سمت کلاینت فقط یکبار ریکوئست ارسال شده بود و هیچ لوپ اضافهای هم داخل کد وجود نداشت، اما پراسس و تراکنشهای باتش چندین بار تکرار میشدن.
بررسی لاجیک و سینتکس پایتون هیچ ایراد و باگی رو نشون نمیداد و ریشه مشکل بر میگشت به ضعف توی درک استراکچرال پروتکل تلگرام و غفلت از ریکوئستهای تکراری داخل وبهوکها.
سناریو از این قراره که وقتی بات شما زیر ترافیکخودمم امشب این اصطلاح رو یاد گرفتم، LOL ) نباشن، این ریکوئستهای تکراری وارد بیزینسلاجیک میشه و همون فاجعهی پراسس مجدد رخ میده.
برای فیکس کردن این کثیف کاری توسعهدهندهی قبلی، دست بردن توی هندلرهای اصلی بدترین انتخاب ممکن بود، درعوض، با استفاده از پترنهای استاندارد، این چالش رو توی لایهی بیس حل کردم؛ بهجای استیتهای متزلزل، از آپدیت آیدی توی ردیس استفاده کردم و با ی میدلور عملیات چک کردن آپدیت آیدی رو انجام دادم که اگه آپدیت تکراری باشه، میدلور پروسه رو همونجا دراپ و صرفا ی ریسپانس فیک به تلگرام برگردونه تا استریم ارسال مجدد متوقف بشه.
همونطور که قبلا توی سرفصلهای دوره پیش رو اشاره کردم؛ توسعه بات صرفا کال کردن ی متد نیست، درک عمیق رفتار پروتکلها و هندل کردن اصولی همیناصلا هم تبلیغی واسه دوره نیست 😆 ).
⌨• #DevEdu@Melfex | #TelegramBot
بررسی لاجیک و سینتکس پایتون هیچ ایراد و باگی رو نشون نمیداد و ریشه مشکل بر میگشت به ضعف توی درک استراکچرال پروتکل تلگرام و غفلت از ریکوئستهای تکراری داخل وبهوکها.
سناریو از این قراره که وقتی بات شما زیر ترافیک
Heavy لود قرار میگیره، یا سرور تلگرام به هر دلیلی ( مثل نتورک تایماوت یا کندی کوئری دیتابیس و.. ) ریسپانس 200 رو در زمان مقرر دریافت نمیکنه، مکانیزم Retry تلگرام فعال و همون آپدیت رو مجدد سمت سرور شما ارسال میکنه. اگه ساختار هندلرهای شما Idempotent ( یعنی مقاوم در برابر ریکوئستهای تکراری نباشه، برای فیکس کردن این کثیف کاری توسعهدهندهی قبلی، دست بردن توی هندلرهای اصلی بدترین انتخاب ممکن بود، درعوض، با استفاده از پترنهای استاندارد، این چالش رو توی لایهی بیس حل کردم؛ بهجای استیتهای متزلزل، از آپدیت آیدی توی ردیس استفاده کردم و با ی میدلور عملیات چک کردن آپدیت آیدی رو انجام دادم که اگه آپدیت تکراری باشه، میدلور پروسه رو همونجا دراپ و صرفا ی ریسپانس فیک به تلگرام برگردونه تا استریم ارسال مجدد متوقف بشه.
همونطور که قبلا توی سرفصلهای دوره پیش رو اشاره کردم؛ توسعه بات صرفا کال کردن ی متد نیست، درک عمیق رفتار پروتکلها و هندل کردن اصولی همین
Edge کیسها هست که مرز ها رو مشخص میکنه ( ⌨• #DevEdu@Melfex | #TelegramBot
🔥6👏2❤🔥1🍓1
اگه شما هم از اون دسته توسعهدهندگان هستید که برای هندل کردن چندتا تسک همزمان توی لینوکس، ترمینالتون پر از تبهای باز و درهمریخته میشه، یا از حفظ کردن شورتکاتهای عجیبوغریب و کانفیگهای بیپایانِ تیماکس خسته شدید، وقتشه سوییچ کنید روی
زلیج یه ترمینال مالتیپلکسرِ مدرنه که با زبان راست نوشته شده و اومده تا همون کاری که تیماکس میکرد رو بدون دردسر و کانفیگهای اولیه براتون انجام بده. چندتا ویژگی خفنش که باعث شد سوئیچ کنم:
• اوت-آف-د-باکس کار میکنه؛ برخلاف ابزارهای قدیمی که باید ساعتها وقت بذارید و فایل کانفیگ براشون بنویسید تا تازه قابل استفاده بشن، زلیج از همون ثانیه اول یه
• پنلهای شناور و تبهای هوشمند؛ خیلی راحت میتونید محیط ترمینالتون رو به هر شکلی که میخواید تقسیمبندی کنید، اون هم با چیدمان کاملاً ریسپانسیو.
• پرفورمنس بالا؛ به لطف راست به شدت سبکه و حتی زیر سنگینترین لودها و پروسههای سیستم هم کم نمیاره و کرش نمیکنه.
📦 github.com/zellij-org/zellij
⌨• #DevEdu@Melfex
Zellij.زلیج یه ترمینال مالتیپلکسرِ مدرنه که با زبان راست نوشته شده و اومده تا همون کاری که تیماکس میکرد رو بدون دردسر و کانفیگهای اولیه براتون انجام بده. چندتا ویژگی خفنش که باعث شد سوئیچ کنم:
• اوت-آف-د-باکس کار میکنه؛ برخلاف ابزارهای قدیمی که باید ساعتها وقت بذارید و فایل کانفیگ براشون بنویسید تا تازه قابل استفاده بشن، زلیج از همون ثانیه اول یه
UI کاربردی و منوی راهنمای کلیدها رو پایین صفحه بهتون میده.• پنلهای شناور و تبهای هوشمند؛ خیلی راحت میتونید محیط ترمینالتون رو به هر شکلی که میخواید تقسیمبندی کنید، اون هم با چیدمان کاملاً ریسپانسیو.
• پرفورمنس بالا؛ به لطف راست به شدت سبکه و حتی زیر سنگینترین لودها و پروسههای سیستم هم کم نمیاره و کرش نمیکنه.
📦 github.com/zellij-org/zellij
⌨• #DevEdu@Melfex
❤2👏1🎄1🦄1
خیلی وقتها به اسم بالا بردنِ بهرهوری، روزها وقتمون رو صرف پیدا کردن بهترین تم ادیتور، کانفیگ کردن دقیق
• محیط کارت باید "به اندازه کافی خوب" باشه، نه بینقص.
• اگه کانفیگ کردنِ یه ابزار بیشتر از ارزشی که تو طول هفته برات خلق میکنه زمان میبره، درجا رهاش کن.
• یه محیط ساده و خستهکننده که توش روزی هزار خط کد بزنی، شرف داره به یه سیستم به شدت شخصیسازی شده که فقط به دردِ اسکرینشات گرفتن و
از ابزارها برای خلق کردن استفاده کنید، نه اینکه خود ابزارها بشن پروژه اصلیتون.
👤• #FromFarshad@Melfex
Zsh، یا شخصیسازی ریزبهریز محیط دسکتاپ میکنیم. ذهن ما این کارها رو به عنوان "کار مفید" ثبت میکنه، در صورتی که در واقعیت داریم از انجام دیپوورک و کد زدن واقعی فرار میکنیم. یادمون باشه؛ وسواس روی ابزارها، توهمِ پیشرفت میده. • محیط کارت باید "به اندازه کافی خوب" باشه، نه بینقص.
• اگه کانفیگ کردنِ یه ابزار بیشتر از ارزشی که تو طول هفته برات خلق میکنه زمان میبره، درجا رهاش کن.
• یه محیط ساده و خستهکننده که توش روزی هزار خط کد بزنی، شرف داره به یه سیستم به شدت شخصیسازی شده که فقط به دردِ اسکرینشات گرفتن و
Neofetch میخوره!از ابزارها برای خلق کردن استفاده کنید، نه اینکه خود ابزارها بشن پروژه اصلیتون.
👤• #FromFarshad@Melfex
👏3❤🔥1💋1🦄1