tech-afternoon – Telegram
tech-afternoon
1.23K subscribers
174 photos
6 videos
6 files
166 links
تِک‌افترنون، رویدادی گاه‌به‌گاه است با موضوعات حول معماری و توسعه نرم‌افزار، این کانال هم برای اشتراک اخبار، آموزش، نکاتی حول مهندسی نرم‌افزار، دیتابیس‌، تکنولوژی و مدیریت تولید محصولات نر‌م‌افزاری خواهد بود.
youtube.com/@AminTechTalks/videos
امین مصباحی
Download Telegram
طی ۲۴ ساعت گذشته، و احتمالا چند روز آینده، خیلی‌هامون ذهنمون درگیر شرایط و اخبار ایرانه (چه ایران باشیم؛ چه از دور دنبال‌کننده اخبار و نگران وضعیت عزیزانمون)

در شرایطی که اخبار نگران‌کننده‌ای در جامعه وجود داره، حفظ تمرکز و آرامش برای ما اهمیت زیادی داره. حالا چیکار کنیم که تعادل رو حفظ کنیم و به کارمون برسیم؟ (۵ پیشنهاد به خودم و شما)

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

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

۳. تمرین تکنیک‌های آرام‌سازی: فعالیت‌هایی مثل مدیتیشن، تمرینات تنفسی عمیق یا اگر یوگا بلد باشیم! می‌تونه به کاهش استرس و افزایش تمرکز کمک کند. یا حتی پیاده‌روی بدون خوندن یا فکر کردن به اخبار.

۴. ارتباط با عزیزان: با خانواده و دوستان خودمون در ارتباط باشیم ولی نه برای دنبال کردن اخبار و پیش‌بینی آنچه ازش بیخبریم! بلکه برای رد و بدل حس حمایت متقابل، و از بین بردن احساس تنهایی (آدم‌ها در کنار همدیگه، خصوصا خانواده هم شجاع‌ترن هم آرام‌تر)

۵. تمرکز بر موارد قابل کنترل: به جای نگرانی درباره مسائلی که خارج از کنترل ما هستن، روی وظایف (وظایفمون چه به عنوان یک مهندس و چه به عنوان یک انسان، یک عضو خانواده‌) و پروژه‌های کاری خودمون تمرکز کنیم تا احساس موفقیت و پیشرفت داشته باشیم، این حس مثل دارو برای اضطراب ناشی از اخبار نگران‌کننده است.

می‌دونم که توصیه زیاد می‌شنویم وعمل کردن بهش سخته، با اینکه دیروز می‌خواستم بعد از کار، یه مطلب آماده کنم، ولی این اخبار نگذاشت! لذا شاید این ۵ پیشنهاد به خودم و شما یه یادآوری باشه که بتونیم آرامش بیشتری داشته باشیم 😊
به امید روزهایی که فقط خبرهای خوب بشنویم و مخابره کنیم 🌱
👍11🙏1
E1-Overview on platform engineering
Amin Mesbahi
🎧 پست شنیداری ۱: مهندسی پلتفرم
اولین پست شنیداری تک‌افترنون، با موضوع مهندسی پلتفرم


مهندسی پلتفرم چیه؟
مهندسی پلتفرم به فرآیند طراحی، ساخت و نگهداری زیرساخت و پلتفرم پایه‌ای اشاره داره. مهندسان پلتفرم مسئول ایجاد ابزارها، چارچوب‌ها و سیستم‌های بنیادی هستند که توسعه‌دهنده‌های نرم‌افزار و سایر ذینفع‌ها مثل معمارهای سولوشن/نرم‌افزار می‌تونن از اون‌ها برای ساخت و تحویل محصولات نرم‌افزاری استفاده کنند.

امیدوارم دوست داشته باشین و با کامنت‌هاتون به بهتر شدن پست‌های شنیداری بعدی کمک کنید...

مدت: ۲۸ دقیقه
👍6🔥2
💡📌 بدهی فنی، Debt Week، code stewardship و تأثیرش بر تیم

سلام به همه 😊
این ۵ تا کارت رو برای بررسی و توضیح بدهی فنی (که همه‌مون رو پیر کرده) و تاثیر داشتن debt week پرداختم.

امیدوارم بخونید، به آمار و اعداد ۲ اسلاید آخر نگاه بندازید و تجربه خودتون از بدهی فنی و روش مقابله باهاش توی کامنت بنویسید و گپ بزنیم در موردش 😉
🔥6👌6
🧩 یه افزونه برای VS Code اینبار Error Lens

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

حدود ۵ میلیون دانلود داشته و ۵ ساله که فعاله. (چرا این اعداد مهمه؟ چرا باید به توسعه‌دهنده اصلی افزونه دقت کنیم؟ چون توسعه و پخش افزونه، ولو کاربردی و جالب، یکی از تله‌ها رخنه‌های امنیتی است)

📌 دریافت و نصب Error Lens
🖥 ریپازیتوری گیت‌هاب
👍4
📚 معرفی کتاب: T-SQL Fundamentals

این کتاب که الان ویراست چهارمش در دسترسه، یکی از بهترین کتاب‌ها برای درک عمیق SQL است. درسته که مایکروسافت منتشر کرده و از نظر محصولی متمرکز بر SQL Server است، ولی یادمون نره که پایه و اساس RDBMSها تفریبا یکیه، مثل خودروهای بنزینی که فارغ از سازنده و مدل، توی هر دوره‌ای خصوصیات ساختاری مشابهی دارن و در کارایی و امکاناته که با هم متفاوت می‌شن.

مثلا درک صحیح از Set Theory یا Predication Logic یا درک دقیق از ساختار انواع ایندکس‌ها یا منطق پردازش دستورات SQL توی MySQL و Oracle و SQL Server و PostgreSQL مشابه هم هستن.

اگر دولوپر یا دیتا آنالیست هستید، خوندنش رو توصیه می‌کنم، اگر هم از انجین دیگه‌ای استفاده می‌کنید و دنبال منبع خوب برای مفاهیم پایه هستید باز هم منبع خوبیه. (منظورم از مفاهیم پایه، مقدمات select نویسی نیست، اینه که query optimizer چجوری دستورات و تحلیل می‌کنه و چی باعث‌ میشه کوئری خوب یا بد بشه!)

ادامه در کامنت...
اگر شما هم پیشنهاد و نظری داری بنویسید
👍9🔥1
tech-afternoon
Amin Mesbahi – E1-Overview on platform engineering
سلام به همگی :)
چند روز پیش اولین مطلب شنیداری رو منتشر کردم، با ارائه نظرتون، به بهبود مطالب بعدی کمک بزرگی می‌کنید (نظرسنجی بی‌نام است)
متشکرم
Anonymous Poll
56%
شنیدم، و خوب بود
0%
شنیدم، خوب بود ولی موضوعش مرتبط با علاقم نبود
6%
شنیدم، موضوعش با علاقم مرتبط بود، ارائه خوب نبود
33%
گذاشتم که بعدن بشنوم
6%
نشنیدم
0%
پست شنیداری رو کلن دوست ندارم
👏6
🟩 اندر احوالات Green Threads در نرم‌افزار

تردها و انواعشون
تردها (Threads) واحدهای اجرای کد هستن که می‌تونن به‌صورت هم‌زمان یا به‌توالی روی پردازنده اجرا بشن. این کار باعث می‌شه برنامه‌ها بتونن چندین کار رو به‌طور موازی انجام بدن. حالا تردها دو نوع کلی دارن:

⚙️ تردهای سیستم‌عاملی (Kernel Threads):
این تردها توسط سیستم‌عامل مدیریت می‌شن و هر ترد یک بخش از CPU و منابع سیستم رو به خودش اختصاص می‌ده. این تردها می‌تونن به‌طور هم‌زمان روی چندین هسته پردازنده اجرا بشن و از چند هسته CPU استفاده کنن، به همین خاطر توی پردازش‌های سنگین و چند هسته‌ای خیلی کاربردی می‌شن.

🌱 گرین تردها (Green Threads):
این نوع تردها در سطح برنامه و توسط خود برنامه یا یک کتابخونه مدیریت می‌شن و به سیستم‌عامل متکی نیستن. در واقع، این تردها همگی داخل یک ترد سیستم‌عاملی اجرا می‌شن، و به همین خاطر وزن کمتری دارن و منابع کمتری مصرف می‌کنن. اما چون به یک ترد سیستم‌عاملی وابسته هستن، نمی‌تونن هم‌زمان روی چندین هسته اجرا بشن.

————————-

🫧 گرین تردها توی چه زبان‌ها و تکنولوژی‌هایی استفاده می‌شن؟

▫️گو (Go): گرچه دقیقاً به اون‌ها گرین ترد نمی‌گن، ولی گوروتین‌ها توی Go توسط رانتایم Go مدیریت می‌شن و خیلی سبک و انعطاف‌پذیرن (یکی از نقطه‌قوت‌های گو که من رو جذب کرد همین پرفرمنس عالی گرین‌تردینگ در گو بود، عملا همه چیز گرین‌ترد است).

▫️جاوا: نسخه‌های اولیه جاوا از گرین تردها استفاده می‌کردن، چون این تردها پرتابل بودن. ولی جاوا بعدها به‌خاطر محدودیت‌های گرین تردها به سمت تردهای سیستم‌عاملی رفت.

▫️پایتون: تردهای پیش‌فرض پایتون وابسته به سیستم‌عامل هستن، کتابخونه‌هایی مثل Gevent و Greenlet به پایتون اجازه می‌دن تا رفتار مشابهی با گرین تردها داشته باشه.

▫️روبی: برخی نسخه‌های روبی، مثل JRuby، از گرین تردها پشتیبانی می‌کنن.

▫️ارلنگ (Erlang): پردازش‌های ارلنگ هم مشابه گرین تردها عمل می‌کنن و مدیریت اون‌ها داخل محیط اجرایی این زبان انجام می‌شه.

▫️دات‌نت (NET.)
توی NET.، گرین تردها به‌طور پیش‌فرض وجود ندارن (در مورد نسخه ۹ توضیح مبسوطی توی کامنت خواهم نوشت) چون این فریم‌ورک بیشتر روی تردهای سیستم‌عاملی تکیه داره. ولی چند امکان مهم داره که ویژگی‌های مشابهی رو فراهم می‌کنن:

- Async/Await و الگوی Task-Based Asynchronous Pattern (TAP)
- پورت‌های کامل I/O: این ویژگی، مخصوصاً روی ویندوز، برای مدیریت بهینه عملیات I/O به کار می‌ره و بدون ایجاد چندین ترد، امکان هم‌زمانی رو فراهم می‌کنه.
- کتابخانه‌های شخص ثالث: توی NET. یه سری کتابخونه وجود داره که سعی می‌کنن قابلیت مشابه Fiber رو ایجاد کنن، ولی خیلی خوب نیستن جدی‌شون نگیرید 😁
به‌طور کلی، .NET از تردهای سبکی مثل گرین تردها پشتیبانی نمی‌کنه، ولی با ابزارهایی مثل async/await و Thread Pool می‌تونین به نتایج مشابهی برسین!

————————

💡 استفاده‌ گرین تردها چیه؟

💎 اپلیکیشن‌های I/O محور: گرین تردها برای برنامه‌هایی که بار زیادی از عملیات ورودی و خروجی دارن، خیلی مناسبه، مثل برنامه‌هایی که اغلب منتظر دریافت داده از شبکه یا دیسک هستن.

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

💎 محیط‌های تک هسته‌ای: اگه یه برنامه روی سیستم تک‌هسته‌ای اجرا بشه، گرین تردها می‌تونن بدون نیاز به سربار تردهای سیستم‌عاملی، هم‌زمانی موثری رو فراهم کنن.

💬 نظر، تجربه، بحث، خوشحال می‌شم توی کامنت بنویسید...
👍6🔥3
🐍 چرا پایتون ۳.۱۳ سریع‌تر و کاراتر شده؟

نسخه جدید Python 3.13، بهبودهای مهمی در زمینه پرفرمنس و قابلیت استفاده از چندین هسته پردازشی همراه شده که مسیر تازه‌ای برای برنامه‌نویسی باز می‌کنه. دو ویژگی مهم یعنی حالت Free-threaded و کامپایلر JIT رو مرور کنیم؟ همچنین امکان جدید REPL.

GIL و Free-threaded
از قدیم GIL (Global Interpreter Lock) توی پایتون یکی از چالش‌های اصلی بوده. این قفل باعث می‌شه که هر بار فقط یک ترد بتونه کدهای Python رو اجرا کنه. این مسئله زمانی که پردازش‌های سنگین CPU داری یا می‌خوای از پردازنده‌های چند هسته‌ای استفاده کنی، به یه مشکل تبدیل می‌شه. با ارائه حالت Free-threaded به صورت آزمایشی، Python 3.13 این امکان رو می‌ده که پردازش‌های موازی رو بهتر مدیریت کنن و از تمام هسته‌های CPU بهره ببرن. البته هنوز این حالت کاملاً بهینه نیست و روی کارایی پردازش‌های تک ترد اثر منفی داره. اما این یه قدم بزرگ برای Python محسوب می‌شه، چون می‌تونه در آینده به حذف کامل GIL منجر بشه.

کامپایلر JIT و بهینه‌سازی با «کپی و پچ»
کامپایلرهای JIT (Just-In-Time) به کدها اجازه می‌دن تا مستقیماً به کد ماشین تبدیل بشن و سریع‌تر اجرا بشن. تا پیش از این نسخه، بیشتر کامپایلرهای JIT در Python به شکل افزونه‌ و ابزارهای خارجی مثل PyPy در دسترس بودن. اما حالا Python 3.13 با یک کامپایلر JIT جدید به نام «کپی و پچ» ارائه شده که با استفاده از الگوریتم کپی و پر کردن بخش‌های مورد نیاز، مستقیماً کد ماشین رو تولید می‌کنه و از تبدیل‌های میانی صرف نظر می‌کنه. این الگوریتم باعث می‌شه Python به طور پیش‌فرض سریع‌تر عمل کنه و بیشتر از یک پردازنده معمولی استفاده کنه. در نتیجه، این کامپایلر Python رو به فضای زبان‌هایی مثل C و ++C نزدیک‌تر می‌کنه.

امکانات جدید در REPL
محیط REPL (Read-Eval-Print Loop) در Python 3.13 به‌روزرسانی‌های جالبی داشته. حالا قابلیت ویرایش چند خطی داره و دستورات متداول مثل exit و quit بهش اضافه شدن. همچنین، رنگ‌بندی پیش‌فرض و امکان مرور دستورات تاریخچه (F2) و حالت چسباندن (F3) تجربه کار با Python رو ساده‌تر و جذاب‌تر کرده. این تغییرات به Python کمک می‌کنه که برای مبتدی‌ها و حرفه‌ای‌ها به یه محیط کار راحت‌تر و مفیدتر تبدیل بشه. (اگر با REPL آشنایی ندارید توی کامنت خواهم نوشت 😊 )

سایر بهبودها
Python 3.13 به‌روزرسانی‌های مهم دیگه‌ای هم داشته، مثل Garbage Collector بهینه که تأخیرهای ناشی از پاکسازی حافظه رو کاهش می‌ده و پشتیبانی بهتر از دستگاه‌های موبایل.

در مورد توسعه‌دهندگان و شرکت‌هایی که روی Python کار می‌کنن، فان‌روسوم، خالق اصلی Python، پس از چند سال استراحت دوباره به تیم توسعه پایتون در مایکروسافت پیوست و همچنان به شکل فعالی در بهبود Python مشارکت داره. مایکروسافت هم با پشتیبانی از پروژه‌هایی مثل Pyjion که کامپایلر JIT مختص به Python هست، نقش مهمی در این بهبودها داره.

این نسخه از Python تمرکز زیادی روی بهبود عملکرد و استفاده بهینه از منابع داره و با توجه به این تغییرات، Python می‌تونه برای کاربردهایی مثل هوش مصنوعی، علم داده و توسعه نرم‌افزارهای بزرگ، انتخاب مناسب‌تری باشه. به نظر می‌رسه که این نسخه، شروعی باشه برای یه نسل جدید از Python که به نیازهای مدرن برنامه‌نویسان پاسخ بهتری می‌ده.

اگر براتون جالب بود بگید تا از مزایای دونستن پایتون به عنوان دولوپر غیر پایتونی، به عنوان دیتابیس ادمین، به عنوان دواپس‌کار و... بنویسم 😊
👍3🔥3
بعد از اینکه خندیدید 😁
در مورد دلیل توصیه به استفاده نکردن از Exception صحبت کنیم؟
👍18
tech-afternoon
🎙سلام سلام
لطفا در انتخاب موضوع پست شنیداری بعدی کمک کنید ;)
🎙🎧 الوعده، وفا!
ممنون از همه دوستانی که با نظر یا نقدشون کمک می‌کنن تا در جهت تولید محتوای مفیدتر بیشتر تلاش کنم.
اپیزود دوم آماده شد 🎉

همراه با امواج - روایت شخصی من از تلاش برای به‌روز موندن
این اپیزود که نزدیک به یک ساعت است، و سعی کردم در ۷ فصل تجربه و روش شخصی خودم رو بازگو کنم. امیدوارم مفید باشه. پیشاپیش بابت پیشنهادها و نقدها، و احیانا معرفی پادکست متشکرم
قبلی‌ها و بعدی‌ها رو از کست‌باکس تک‌افترنون می‌تونید دنبال کنید.
👍122
tech-afternoon
بعد از اینکه خندیدید 😁 در مورد دلیل توصیه به استفاده نکردن از Exception صحبت کنیم؟
تعداد لایک‌ها اینقدری بود که در مورد Exception ها صحبت کنیم 😁
این بنچمارک ساده رو نوشتم ( به زودی با توضیحات بیشتر و لینک گیت‌هاب ) که نشون بدم:

۱: بهبود پرفرمنس Exception در دات‌نت ۹
۲: تفاوت چشمگیر استفاده از Exception با روش‌های جایگزین

📌 یادمون باشه، این اعداد مطلقا به معنی «امروز عصر، عصرِ عدم استفاده از Exception» و اراجیف عامه‌پسند نیست!
بلکه هرچیز به جای خودش مناسبه، ما باید تا جای امکان کد با کیفیت‌تری تولید کنیم و به خوبی تستش کنیم. شرایط استثنا رو پیش‌بینی کنیم تا کمتر درگیر Exception شیم. تکنیک‌های جایگزین هم مثل:
‏Result یا Try Patterns که عملا از زبون‌های فانکشنال وام گرفتیم یا Return Codes یا الگوی OneOf و Either باید به درستی استفاده شن.

کتابخونه‌های ErrorOn یا FluentResults یا language-ext جزو همین روش‌های کمکی هستند


🧐 بازم بیشتر بدونیم یا بسه؟
مثلا اینکه Explicit Error Handling در Go چه تفاوتی با رویکرد پایتون و #C‌ داره؟
👍15
💡چرا تیم مایکروسافت اج در حال جایگزینی React با وب کامپوننت‌ها هستند!

تیم مرورگر مایکروسافت اج در تلاش هستند تا کامپوننت‌های رابط کاربری که با React توسعه داده شده رو با web componentها جایگزین کنند تا سرعت و عملکرد بهتری برای کاربرانشون فراهم کنند. ایده اصلی اینه که با استفاده از یک “معماری مبتنی بر مارک‌آپ”، وابستگی به جاوااسکریپت کاهش پیدا کنه و پردازش کمتری در سمت کلاینت صورت بگیره.

اندرو ریتز، مدیر تیم Edge Fundamentals مایکروسافت، توضیح می‌ده که هدف تیمش تبدیل حدود ۵۰٪ از رابط‌های کاربری وب مبتنی بر React در اج به وب‌کامپوننت‌ها تا پایان سال ۲۰۲۴ است. انگیزه اصلی این پروژه عملکرد ضعیف رابط‌های کاربری مبتنی بر React بود، به ویژه در دستگاه‌های ضعیف یا قدیمی. استفاده گسترده از React در مایکروسافت منجر به ایجاد یک باندل بزرگ و پیچیده شده بود که بر عملکرد تأثیر منفی داشت.

تیم اج در ابتدا از React برای تمایز رابط کاربری خود از کروم استفاده کرده بود، اما حالا با پروژه WebUI 2.0، به دنبال بهبود عملکرد با استفاده از وب کامپوننت‌ها هستند. به عنوان مثال، رابط کاربری “browser essentials” رو که با کلیک بر روی آیکون قلب در نوار مرورگر فعال می‌شود، با وب کامپوننت‌ها بازسازی کردند.

بحث‌هایی توی کامیونیتی توسعه‌دهنده‌ها در مورد سختی استفاده از وب کامپوننت‌ها وجود داره و برخی معتقدند که فریمورک‌هایی مانند SolidJS قابلیت‌ها و سادگی بیشتری ارائه می‌دهند، در حالی که برخی دیگه به پایداری و قابلیت interoperable بین المان‌ها در وب کامپوننت‌ها وزن بیشتری می‌دن. ریتز می‌گوید که تیم او با تمرکز بر استفاده از عناصر داخلی HTML و CSS، تونسته توسعه را ساده‌تر کنه و هماهنگی بهتری بین توسعه‌دهندگان و طراحان ایجاد کنه.

با این حال، پیاده‌سازی وب کامپوننت‌ها برای تیم اج ممکن است آسان‌تر از تیم‌های دیگر باشه، چون فقط نیاز به پشتیبانی از مرورگر خودشون داره و می‌تونن از فریمورک Fluent UI مایکروسافت استفاده کنن. ریتز اشاره می‌کنه که قصد دارن برخی از بسته‌های WebUI 2.0 و الگوهای پلتفرم وب خودشون رو به صورت منبع باز منتشر کنن تا دیگران نیز بتونن ازشون بهره‌مند شن.

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



مقاله کامل رو می‌تونید از اینجا بخونید 🙂
👍3
🎙🔒 موضوع اپیزود بعدی پادکست، طراحی امن باشه؟

مفاهیم secure by design یا safe coding یا SSDLC است.

مخاطب پادکست شما رفقا هستید، پس نظر شما بسیار مهمه و اگر در توان و در ظرف کوچک دانسته‌هام باشه، خوشحال می‌شم چیزی تولید شه که مورد نظر شماست 😊
👍9🔥2
🎙🖥 دورهمی آنلاین در مورد دغدغه عرفان 😁

کامنت امروز عرفان در مورد اینکه مباحث بنیادین چجوری یادمون بمونه، یا اصلا لازمه یا نه و... باعث شد به فکر این بیوفتم که دورهمی آنلاین داشته باشیم:
- موضوعات دیزاین و معماری و الگوهای طراحی و... رو «تا چه حد»، «چجوری»، یاد بگیریم که روشون مسلط باشیم و یادمون نره؟
- اصلا نیازه که همه چیز رو بلد باشیم؟ (چجوری تعادل رو بین نگاه واقع‌بینانه فردی با نگاه واقع‌بینانه نسبت به بازار کار و مصاحبه‌های شغلی پیدا کنیم)
- نقشه راه یادگیری و شغلی رو چجوری تدوین کنیم

اگر دوست دارید شرکت کنید، لطفا اعلام کنید و پیشنهادتون رو هم بگید ممنون می‌شم.

زمان پیشنهادی: فردا جمعه ۲۷ مهر (۱۸ اکتبر) ساعت ۱۹ به وقت تهران، مدت زمان: ۴۵ تا ۶۰ دقیقه.

لینک گوگل میت، حضور همه باعث خوشحالیه و اگر صلاح دونستید به دوستانی که علاقه‌مند به موضوع هستند معرفی کنید 😊
👍10😍1