Learning With M
1.65K subscribers
45 photos
15 videos
3 files
68 links
سلام.
من مسعود دانش پور هستم.
همسر، پدر، پسر، برادر، انسان و مهندس نرم افزار.👻

اینجا جایی هست که من تلاش می کنم موضوعاتی که برای یک مهندس نرم افزار مهم و لازمه رو بازگو کنم.

آکادمی یادگیری با M :
https://academy.daneshpour.ir
Download Telegram
همونطور که احتمالا در جریان هستید، تیم .Net به دلیل اینکه Swashbuckle به درستی آپدیت نمی شد و مشکلاتش رفع نمی شد، از .Net 9 این لایبرری رو حذف کردند.
این یعنی اگر شما پروژه جدید با .Net 9 بسازید و پروژه رو اجرا کنید، به جای صفحه Swagger با 404 رو برو می شید. در عوض تیم .Net، پیاده سازی OpenAPI رو اضافه کردن. برای همینه که توی program.cs شما فقط کد های زیر رو می بینید :

builder.Services.AddOpenApi()
app.MapOpenApi();


و این یعنی اگر صفحه openapi/v1.json رو باز کنید با یک فایل json مواجه میشید که وظیفه تولید مستندات OpenAPI رو داره.

💎 خب،از اونجایی که برای ارتباط بهتر استفاده کنندهای API های ما یا تست خودمون، اگر یک UI مثل Swagger داشته باشیم خیلی راحت تریم باید به فکر جایگزین باشیم.


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

این شما و این Scalar.
این جناب Scalar یک پروژه اوپن سورس هست که خیلی کلاینت های مختلفی از جمله .Net داره که به شما کمک میکنه یک کلاینت تر و تمیز و با قابلیت هایی به مراتب بهتر از Swashbuckle برای کار با API های خودتون داشته باشید.

پیاده سازی و نصب راحتی داره، فقط کافیه که اول به پروژه اضافش کنید :

dotnet add package Scalar.AspNetCore 


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

app.MapScalarApiReference();


هممون هم حواسمون هست که ابزار ها فقط برای محیط های Development و Staging هستند و نباید برن روی Production !

شما از چه ابزاری روی .Net 9 دارید استفاده می کنید ؟ چالش چی تو دست و بالتون دارید ؟ 😂
👍21👏1
عزیزان زحمت کشیدن حق مسلممون رو بهمون برگردوندند.

گویا واتس آپ به درد نخور و گوگل پلی رفع فیلتر شد !
🤣12👍9
#فان 😆

پ.ن ۱ : کدی که سخت نوشته میشه، معمولا غلطه دیزاین شده که انقدر سخت نوشته شده.

پ.ن ۲: از نظر من کد خوب خودشو توصیف می کنه و کامنت معنی نمیده. کامنت فقط برای توضیح خود متد اونم روی اینترفیسش که امپلیمنتیشن رو نمیبینیم به درد می خوره.

نظر شما چیه؟
👍134🔥1🤡1
Forwarded from tech-afternoon (Amin Mesbahi)
🧠 مروری بر Semantic Kernel، نرم‌افزار، ولی باهوش!

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

مایکروسافت هم که به لطف سرمایه‌گذاری‌های هوشمندانه‌ای که روی استارتاپ‌ها و شرکت‌های مستعد داشته، اوضاع خیلی خوبی داره. یادمون نره همون‌طور که برنامه‌نویسی وب یا معماری سرویس‌گرا، ۲۵ سال پیش چیزهای مدرنی بودن ولی الان بدیهی و پیش‌پا افتاده به شمار میان؛ استفاده از AI توی نرم‌افزارها هم تا چند وقت دیگه (خیلی خیلی کمتر از ۲۵ سال، حتی کمتر از ۵ سال دیگه) یه موضوع بدیهی خواهد بود.

🎅 دو تا خاطره توی کامنت این مطلب می‌گذارم (خاطره است و اگر نخونید چیزی از مطلب رو از دست ندادید)

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

کتابخونه‌ Semantic Kernel که فقط هم برای دات‌نتی‌ها نیست و پایتون و جاوا رو هم پشتیبانی می‌کنه؛ یک کتابخونه‌ی متن‌بازه که به عنوان میان‌افزار (middleware) عمل می‌کند.

یعنی چی؟ یعنی این کتابخونه به توسعه‌دهنده کمک می‌کنه تا به سادگی مدل‌های هوش مصنوعی مختلف رو با کدهای موجودش ترکیب کنه و عامل‌های هوشمند (AI agents) بسازه، (بدون داشتن درک عمیق از دل و روده‌ی AI یا LLM)

یکم بیشتر؟ چشم. مثلا شما می‌خواهید از مدلی که یه بابایی یا یه شرکتی، رایگان یا پولی، روی کامپیوتر خودتون یا روی کلاد، وجود داره و مثلا بهش یه متن می‌دید و می‌گید با صدای فلان خواننده بخونه؛ یا یه متن می‌دید می‌گید یه عکس بر اساسش بسازه؛ یا سوال و جواب عادی؛ یا سوال و جوابی که مبنای پاسخش دیتای توی دیتابیس شماست؛
مثلا شما یه نرم‌افزار سنتی فروشگاه آنلاین لباس داری؛ کاربر می‌گه برام یه ست لباس مهمونی برای فصل پاییز و سقف قیمت فلان، برای یک خانم ۳۰ ساله با سایز M پیشنهاد کن، این یه متنه، ولی Semantic Kernel این امکان رو می‌ده به راحتی از دل دیتای ساختار یافته دیتابیس، فرض کنید جدولی که نام کالا، قیمت، رنگ و سایز رو داره، کوئری مورد نیاز رو بسازه. چجوری؟ با دیتایی که توی مدل زبانی داره می‌فهمه رنگ‌های مناسب با پاییز، یا نوع لباس‌های مورد نیاز برای یک مهمانی (شلوار، پیراهن، پالتو، کفش، شال‌گردن برای پاییز و یک خانم نیازه) اینا رو از دل دیتابیس می‌کشه بیرون و متن هم از نتیج خروجی که احتمالا یه لیست از آبجکت کالا است بسازه که: فلانی‌جون اگر اینو اونو اون‌یکی رو ست کنی برای پاییز خوبه و به بودجه‌ات هم می‌خوره!

🧞‍♂️ این یه روزی جادو بود، یه روز رویا بود، یه روز محال بود؛ الان با وجود امکانات ساختاری وکتورها و کتابخونه‌ها به راحتی شدنیه، حتی با تغییرات کم در کدهای فعلی!

این Semantic Kernel در حقیقت یه پُله بین دنیای برنامه‌نویسی سنتی و مدل‌های زبانی بزرگ (LLM).
فعلا هم با زبون‌های C#، Python و Java قابل استفاده است. یه لایه‌ی میانی که درخواست‌های مدل‌های AI رو به توابع تعریف‌شده توی کد ترجمه می‌کنه و پاسخ‌ها را مدیریت می‌کنه (تبدیل متن به یه کلاس، و ساخت متن با استفاده از دیتای ساختاریافته).

مدل‌های هوش مصنوعی مثل GPT و DALL-E و… تحول بزرگی توی نحوه تعامل ما با نرم‌افزار ایجاد کردن. اما استفاده از این مدل‌ها توی محیط‌های واقعی چالش‌هایی هم داره:
🔤 مدیریت درخواست‌ها: چجوری درخواست‌های پیچیده کاربر رو به توابع کدنویسی ترجمه کنیم؟ (مثلا ورودی‌های متد GetProductsByDescription)

🔤 اتصال به سیستم‌های موجود: چجوری هوش مصنوعی با APIها، دیتابیس‌ها، یا فرآیندهای کسب‌وکاری تعامل داشته باشه؟

🔤 امنیت و مقیاس‌پذیری: چجوری میشه این قابلیت‌ها رو به‌صورت ایمن (جلوگیری از نشت اطلاعات یا دسترسی به داده‌هایی که نباید بهش دسترسی داشته باشع) و توی مقیاس بزرگ ارائه کرد؟

و Semantic Kernel برای پاسخ به این چالش‌ها طراحی شد؛ و هدفش ساده‌سازی یکپارچه‌سازی هوش مصنوعی در پروژه‌های واقعیه.

👀 چی کار می‌شه باهاش کرد حالا؟
- ایجاد ربات‌ها و عامل‌های هوشمند: مثل چت‌بات‌هایی که به‌صورت پویا تصمیم می‌گیرن یا فرآیندها رو خودکار می‌کنن.

- یکپارچه‌سازی آسون با کد موجود: با استفاده از قابلیت Function Calling، می‌شه مدل‌های AI رو به کدهای موجود متصل کرد.

- اتوماسیون فرآیندهای کسب‌وکار: مثل پردازش خودکار درخواست‌های مشتری‌ها یا مدیریت منابع سازمانی.

- مدیریت آسون هوش مصنوعی: فراهم کردن قابلیت مشاهده و نظارت بر عملکرد مدل‌های مختلف.

- اتصال به مدل‌های مختلف AI (مثل OpenAI، یا مدل‌هایی که روی ماشین خودتون دارید)

- پشتیبانی از Vector Store‌ها


اگر دوست دارید این موضوع ادامه بدم:
ری‌اکشن 🤓
Please open Telegram to view this post
VIEW IN TELEGRAM
🤓18👍7
قانون هایروم (Hyrum’s Law)-بخش دوم

به عبارت دیگر، در صورتی که رابط (interface) به تعداد کافی استفاده‌کننده داشته باشد، مجموع استفاده‌کنندگان خواسته یا ناخواسته به بخش‌های مختلف پیاده‌سازی وابسته خواهند شد. نتیجه‌ی چنین اتفاقی، سخت‌تر شدن اعمال تغییرات در پیاده‌سازی رابط‌ها است زیرا از این نقطه به بعد، پیاده‌سازی نه تنها باید با بخش مستندشده و شفاف رابط‌ها (explicitly documented interface) تطبیق داشته باشد بلکه باید با بخش پنهان و غیرشفاف رابط‌ها (implicit interface) که ناشی از روش استفاده‌‌ از آنهاست نیز هم‌خوانی داشته باشد. ما معمولن این پدیده را «سازگاری با خطا برای خطا« (bug-for-bug compatibility) می‌نامیم [«سازگاری با خطا برای خطا» یا «سازگاری با خطا» تکنیکی است که در آن خطاها یا رفتارهای نادرست نسخه‌‌ی قبلی یک نرم‌افزار در نسخه‌ی جدید آن با آگاهی و خودخواسته باقی گذاشته می‌شوند. مترجم]

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

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

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

هویرام کیست؟

هویرام رایت (Hyrum Wright) دانشمند ارشد (Principal Scientist) ادوبی (Adobe) است و قبل از آن، مهندس نرم‌افزار در گوگل بود. او روی ابزارها و زیرساخت مدیریت تغییر کد در مقیاس بزرگ کار می‌کند و سال‌های زیادی را صرف بهبود کتابخانه‌های زیربنایی و مبتنی بر سی‌پلاس‌پلاس گوگل کرده است. او یکی از نویسندگان کتاب Software Engineering at Google نیز است.

منبع:
www.hyrumslaw.com

گزیده:
پسری از پدر برنامه‌نویس‌اش پرسید «بابا، واسه چی خورشید از شرق طلوع می‌کنه و در غرب غروب؟»
پدرش پاسخ داد:
پسرم داره کار می‌کنه کاری به کارش نداشته باش! 😀

A son asked his father (a #programmer) why the sun rises in the east, and sets in the west. His response? It works, don’t touch!

https://t.me/bibalan_com
https://bibalan.com/?p=4652
👍4
This media is not supported in your browser
VIEW IN TELEGRAM
#فان : استاد تمام فصول، م مدحج !

#هیراچی

#جدی : هرکی بتونه به صورت اصولی هیراچی رو توضیح بده یه جایزه پیش من داره.
🤣15😐5😁2
#پاراگراف_سال_2024

Our souls sometimes feel like a dark night sky, searching, drifting. At times, we all feel lost and disconnected, not because of anything we've done, but simply because we're alive and we're human. It's a natural part of the journey on this planet because we are all human.

But what if these moments of uncertainty, these moments of confusion, are actually opportunities? What if there are moments that help guide us to bigger, brighter, better futures? Some barriers are insurmountable, but there's so many barriers that just exist within us that are barriers that we've created. And just as we build the barriers with work and with patience, we can also break them down. Inside each one of us, there's the potential for a journey that's as beautiful as the world around us. It takes work, but ultimately it's up to us to embrace it. The road ahead can go in lots of different directions, but the first step is leaving the cave. Once you leave the cave of self-doubt and confusion, the outside world is waiting with all of its beauty.

برگرفته از دکلمه ابتدایی :

Armin van buuren & Moby- the road ahead

https://youtu.be/93ELyI4gfTc?si=0wmORIVXjnWrmHi6
3
رضا پدرمون بود، محمدرضا دانش پور.

مادرم همیشه پدر رو رضا صدا می زد. پدرم عاشق یادگیری بود، سال های آخر عمرش به خاطر مشکلات بینایی که داشت، برای یادگیری از پادکست استفاده می کرد. اون الهام بخش ما بود برای یادگیری و رشد.
#بورسیه_رضا، بورسیه ای هست که ما هر سال در روز سالگرد پدرم (19 دی ماه) ثبت نامش رو شروع خواهیم کرد. توی این بورسیه، ما 1 سال کامل دو نفر رو برای تبدیل شدن به یک مهندس نرم افزار خبره که بتونه یک خانواده رو پشتیانی کنه آموزش می دیم. هرچه که در این مسیر یادگرفته ایم رو بدون منت در اختیار 2 نفر منتخب قرار خواهیم داد.

تمرکز #بورسیه_رضا بر روی نوجوان های مستعدی هست که دسترسی آنها به آموزش و رشد به دلایلی مثل : هزینه، سخت افزار، دوری از مراکز آموزشی، نبود امکانات و ... غیر ممکن است، طراحی شده است.

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



برای ثبت نام این دوره می تونید از این بخش اقدام کنید :

https://B2n.ir/rezbrs1403
برای اطلاعات بیشتر و پرسش های بیشتر هم می تونید این بخش رو ببینید :
https://B2n.ir/rezbrs
78🔥13👏6🫡4👍1
جمله روز:

Software development is a learning process; working code is a side effect.

- Alberto Brandolini
👏22👍3👌2🤔1
امروز می‌خوام در مورد Exchange ها در RabbitMQ براتون بگم. Exchange ها مثل پستچی‌های پیام‌رسان عمل می‌کنن و تصمیم می‌گیرن پیام‌ها رو چطوری به صف‌ها (Queue) برسونن. بیاید ببینیم هر کدوم چیکار می‌کنن:

Direct Exchange 🎯
کارش چیه؟
پیام‌ها رو فقط به صف‌هایی می‌فرسته که کلید مسیریابی (Routing Key) دقیقاً همون چیزی باشه که تعیین کردیم.

کی استفاده کنیم؟
وقتی می‌خوایم پیام‌ها رو دقیقاً به یک صف خاص برسونیم. مثلاً پیام‌های "سفارش جدید" فقط به صف "پردازش سفارش" برن.

مثال:
Routing Key: order.created ➡️ Queue: order_queue

Fanout Exchange 📢
کارش چیه؟
پیام‌ها رو به همه صف‌های متصل شده می‌فرسته، بدون توجه به کلید مسیریابی.

کی استفاده کنیم؟
وقتی می‌خوایم یک پیام رو به چندین صف ارسال کنیم. مثلاً ارسال اطلاع‌رسانی به همه گروه های کاربران.

مثال:
پیام: "تخفیف ویژه!" ➡️ Queue: user_group1_queue, user_group2_queue, user_group3_queue

Topic Exchange 🌐
کارش چیه؟
پیام‌ها رو بر اساس الگوهای کلید مسیریابی ارسال می‌کنه. مثلاً می‌تونیم از wildcard (* و #) استفاده کنیم.

کی استفاده کنیم؟
وقتی می‌خوایم پیام‌ها رو بر اساس موضوع‌های مختلف دسته‌بندی کنیم. مثلاً خطاهای سیستم (error.*) یا لاگ‌های عمومی (log.#).

مثال:
Routing Key: error.database ➡️ Queue: error_queue
21👍5
بابا داشتن، یه شانسه.
امید وارم پدرهاتون سایشون بالاسرتون باشه.

دم بچه های علی بابا برای این ویدیو گرم.
This media is not supported in your browser
VIEW IN TELEGRAM
33👎4
برای 678 میخواستم عکس بگیرم، ولی یهو توی یک شب ترکید، الان از 789 براتون عکس گرفتم :)

خب به همین مناسبت و یه دلیل بی خودی برای شادیمون، تا آخر هفته اپیزود جدید پادکست رو منتشر می کنم که در مورد نحوه کار و جزئیات REDIS هست :)
35👍5🙏1💋1
📈تحلیل SWOT

یک ابزار استراتژیک است که به شناسایی نقاط قوت، نقاط ضعف، فرصت‌ها و تهدیدها کمک می‌کند.


اجزای تحلیل SWOT:

📌1. نقاط قوت (Strengths):

   • ویژگی‌ها یا منابعی که سازمان را در مقایسه با رقبا متمایز می‌کند.

   • مثال: برند قوی، تیم متخصص، فناوری پیشرفته.

📌2. نقاط ضعف (Weaknesses):

   • جنبه‌هایی که ممکن است مانع از موفقیت سازمان شود.

   • مثال: کمبود منابع مالی، ضعف در بازاریابی، مشکلات داخلی.

📌3. فرصت‌ها (Opportunities):

   • عوامل خارجی که می‌توانند به رشد و توسعه سازمان کمک کنند.

   • مثال: بازارهای جدید، تغییرات در قوانین و مقررات که به نفع کسب‌وکار باشد.

📌4. تهدیدها (Threats):

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

   • مثال: رقابت شدید، تغییرات اقتصادی نامساعد، تغییرات در سلیقه مشتریان.


#استراتژی
🔸آدرس سایت ناب《 لینک》


@strategicstudiesnab
👍21
سلام سلام
برای یک تحقیقات به نظر شما احتیاج دارم، ممنون میشم در این نظرسنجی شرکت کنید و همچنین تا جای ممکن با دوستانتون به اشتراک بزارید.
#چالش ۱۰۰۰ شرکت کننده! سوال: اگر ۱۰ واحد ارزش برای ماندگاری یا انتخاب یک شرکت داشته باشید، کدام یک انتخاب شماست؟
Anonymous Poll
22%
۷ واحد مالی، ۳ واحد آموزش و رشد.
38%
۶ واحد مالی، ۳ واحد آموزش و رشد، ۱ واحد برند کارفرمایی.
15%
۵ واحد مالی، ۵ واحد آموزش و رشد.
18%
۳ واحد مالی، ۵ واحد آموزش و رشد، ۲ واحد برند کارفرمایی.
5%
۱۰ واحد مالی.
2%
۱۰ واحد آموزش و رشد.
1%
۱۰ واحد برند کارفرمایی.
🔥16
Forwarded from .NET Internals
درمورد DependencyInjection یکی از نکاتی که کمتر میبینم بهش توجه میشه اینه اگر شما یه شئ رو در زمان ریجستر کردن ایجاد کنید دیگه DI کنترلی روی ایجاد و حذفش نداره و این مسئولیت برنامه نویس هست که منابعی رو که توی اون کلاس استفاده میشه رو آزاد کنه.

نکته بد ماجرا اینجا شروع میشه که اگر از این روش برای AddScope استفاده بشه به ازای هر درخواست یه شئ ایجاد میشه و منابع آزاد نمیشه و بقیه ماجرا که خودتون بهتر میدونید!

بهترین روش اینه که بذارید خود DI کارشو انجام بده و درمورد خاص که راهی وجود نداره حتما اینترفیس IDisposable رو پیاده کنید.

شما ازین روش استفاده میکنید؟
11👎1
Learning With M pinned «سلام سلام
برای یک تحقیقات به نظر شما احتیاج دارم، ممنون میشم در این نظرسنجی شرکت کنید و همچنین تا جای ممکن با دوستانتون به اشتراک بزارید.
#چالش ۱۰۰۰ شرکت کننده! سوال: اگر ۱۰ واحد ارزش برای ماندگاری یا انتخاب یک شرکت داشته باشید، کدام یک انتخاب شماست؟
»
حسن از خوبای مهندسی نرم افزاره.
3
Forwarded from Code With HSN
Media is too big
VIEW IN TELEGRAM
کلید موفقیت اُکالا در Distributed Transaction ها SAGA Orchestration است
👈🏻 چطور همچین پترنی رو توی دنیای میکروسرویس‌ها طراحی کنیم، اونم تو مقیاس بزرگی مثل اکالا؟ جواب این ویدیو است 🌟

💡 حالا مشکل کجاست؟
وقتی توی دنیای مونولیت هستیم، خیلی راحت با یک SQL Transaction همه‌چیز رو کنترل می‌کنیم.
اما توی دنیای میکروسرویس‌ها چی؟ 😟
پای چندین دیتابیس وسطه (از انواع مختلف).
دیگه خبری از اون روش‌های ساده نیست.
اینجاست که باید بریم سراغ Two-Phase Commit یا SAGA Pattern.

🎯 این ویدیو چی بهت یاد میده؟
1️⃣ عملیات Commit و Rollback با پروتکل Two-phase commit
2️⃣ عملیات Commit و Rollback با SAGA Choreography پترن
3️⃣ عملیات Commit و Rollback با SAGA Orchestration پترن

🎥 لینک‌ها:
📌 ویدیو: تماشا کنید
📌 پلی‌لیست دیزاین پترن‌ها: مشاهده کنید
📌 لینکدین من: بازکردن
مدت زمان ویدیو: 38 دقیقه

☕️ اگه ویدیو رو دوست داشتید میتونید از این لینک منو مهمون یک قهوه کنید ❤️

💬 نظرات و سوالاتتون رو هم تو کامنت‌ها بگید، خوشحال میشم کمک کنم!
🔥183🤣1
چند دقیقه ای طلایی از استاد سپندارند عزیز.