MHRCODE | برنامهنویسی با طعم توتفرنگی
Open in Telegram
آدرس ها: گروه: @MhrCodeGP ویرگول: virgool.io/@mhrlife مدیوم: medium.com/@mhrlife
Show more3 403
Subscribers
No data24 hours
-27 days
-2030 days
Posts Archive
اسلایس Slice در گولنگ! یک بار برای همیشه!
اسلایسها آرایه نیستن. بهتره فرقشون رو زودتر یادبگیریم تا مجبور نباشیم از راه سخت (دیباگ کردن یک باگ روی پروداکشن!) یادش بگیریم. اسلایسها در گولنگ به ما اجازه میدن به شکل داینامیک سایز به آرایه ها دسترسی داشته باشیم. اما باز هم توی خودشون از آرایه استفاده میکنند. توی این ویدیو اول یکم با پایههای ارایه توی گولنگ آشنا میشیم و سعی میکنیم ساختاری مشابه Sliceها با ارایه پیاده سازی کنیم و کد اسلایس رو هم یک نگاه میندازیم.
https://youtu.be/_72DZnwRG10
اصل Interface Segregation - کدت رو مجبور به کار بی ربط نکن!
یکی از جذابیتهای برنامهنویسی اینه با استفاده از Interfaceها اجزای مختلف کدمون رو به شکل extendable پیادهسازی کنیم. اما این وسط پیادهسازیهای مختلف یک Interface میتونن در بخشهای جزئی با هم تفاوت داشته باشن که اگه این منطق هارو با اینترفیس اصلی قاطی کنیم باعث میشه کلی کد داشته باشیم که اضافه هستن و مجبور به نوشتنشون شدیم. توی این ویدیو یادمیگیریم چطور با Interface Segregation جلوی این موضوع رو بگیریم.
https://youtu.be/yHsUH4kMkpM
دوستان به لطف شما کانال اماده مانیتایز شدن هست.
شما جایی رو میشناسید که کارای ادسنس رو انجام بده؟ اگه اره ممنون میشم بهم معرفی کنید
ممنون از همه تون بابت مشارکتتون، خیلییی سوالای جذاب و خوبی بودن و بهم ایده داد برای ادامه مسیر کانال چه مطالب نیاز کامیونیتی فارسی رو بیشتر رفع میکنه ♥️
سلام دوستان روز زیبایی داشته باشید
توی ویدیو بعدی میخوام حالت Q&A به سوالاتی که دارید چه در مورد برنامه نویسی، چه محیط کاری، شرکتهای که توشون بودم، اینده برنامه نویسی با وجود هوش مصنوعی و... جواب بدم
اگه هر سوالی یا دغدغه ای داشتید توی همین ترد لطفا ارسال کنید، سوال بد هم نداریم، خود سانسوری و اینا هم نکنید.😅
پوینترها به زبان خیلییی ساده 🔥 Pointerها در #Golang
پوینترها یا اشارهگر ها یا همون Pointer در اصل یک ساختمان داده هست که آدرس حافظه رو توی خودش نگه میداره و با کمک dereference کردن بهمون اجازه میده به مقدار اون آدرس در حافظه دسترسی پیدا کنیم و ویرایشش کنیم. توی این ویدیو تمام اصطلاحات و پایههای که برای کار با پوینترها در گولنگ نیازدارید رو با مثال توضیح دادم. در نهایت هم به این سوال جواب دادم:
چرا جای اینکه مقدار متغیر رو بدیم به توابع، پوینترشون رو ندیم که سریع تر باشه و حافظه کمتری ارسال بشه؟https://youtu.be/nEgf3LpZbNo
هرآنچه در مورد Concurrency در Golang نیاز است بدانید 🔥
از گوروتینها گرفته تا چنلها و Select Case و Context و... سوالاتیه که این چند وقتیه دیدم خیلی ذهن هم برنامه نویسهای تازه کار گولنگ هم کسایی که چند وقتی هست کار میکنن بوجود اومده و توی این ویدیو سعی کردم به تمام این ها بپردازم. طوری که حتی اگر کسی هستید که به گولنگ آشنایی نداره و فقط براش جالبه، تا کسی که چندین وقته گو میزنه بتونه ازش استفاده کنه.
https://youtu.be/yhMXwezyVd4
با Redis بازیمون رو Scale کردیم 🔥 مقیاس پذیر کردن هر پروژهای
بازی مولتی پلیر لایوی که نوشتیم رو scalable کردیم! و جای اینکه روی یک سرور بالا باشه با 3 سرور اوردیمش بالا. توی این ویدیو در مورد نیازمندی هایی صحبت میکنم که کدمون لازم داره تا بتونه scale بشه. توی یک پروژه واقعی که بازیمون بود چطور با کمک ردیس یکی یکی این مشکلات رو حل کردیم.
https://youtu.be/0F1H3qt-tNY
اگه موافق این حرکت نیستید یک حرکت دیگه هم توی ذهنم بود که شاید بهتره. فقط ویدیوهایی که فارسیشون توی کانال هست رو انگلیسی کنم که کامیونیتی فارسی اولویت باشه مثل همیشه. این رو خودم بیشتر پایه ام. یعنی بخاطر کانال دوم چیزی کانال اول از دست نمیده
اسلایسها (Slice) توی گولنگ چطور کار میکنن؟ ( به انگلیسی)
در کنار چنل خودمون یه چنل کوچولوی انگلیسی ساختم که ویدیوهای خیلی کوتاه گولنگی که شاید توی کامیونیتی فارسی خیلی خواهان نداشته باشه رو انگلیسی بگیرم که امتحان کنم شاید جالب بود. اگه دوس داشتید و لایک و کامنت بذارید خیلی خوشحالم میکنه
https://www.youtube.com/watch?v=EzeJg36vhnw
آپدیت بازی: لیدربورد و یک سری تغییرات دیگه
در راستای مقیاس پذیرشدن بازی یک سری تغییرات انجام دادم که کدش رو میتونید توی گیت ببینید. به شکل خلاصه از پاب ساب ردیس و لیستها برای ارتباط بین اجزای مختلف استفاده شده و با استفاده از وب هوک هم اسکیل شده. اینطوری میتونیم سرور های جدید به بازی اضافه کنیم و اسکیل کنیم.
همچنین چند تا فیچر ساده اضافه کردم و تعدادی سوال اضافه کردم که بازی کردنه مزه بده.
@KingsCompBot
اگه پایه هستید یه تست بریم هم مطمئن شیم مقیاس پذیریش کامل داره انجام میشه و مشکل نمیخوریم هم یکم بازی کنیم :)
https://github.com/mhrlife/kingscomp
کد رو هم میتونید اینجا ببینید
دیزاین پترنهای ابری: Asynchronous Request-Reply ✉️
فرض کنید یک جاب مثل پردازش ویدیو دارید! حالت معمولی بین چند ثانیه تا چند دقیقه طول میکشه و وقتی ترافیک زیادی روش باشه چند ساعت! ما نمیتونیم با یک درخواست به سرور این جاب رو اجرا کنیم و جوابش رو به کاربر بدیم پس برای حلش از پترن Async Request-Reply استفاده میکنیم. توی این ویدیو به توضیحات این پترن ابری مهم میپردازیم و در نهایت با هم دیگه پیاده سازیش میکنیم.
https://youtu.be/8v-gwThFs0o
با هم بازی ساختیم 🎮 خلاصهای از سیستم Real-Time بازی لایو تلگرامی
توی چند تا لایو یوتیوبی یک بازی مولتیپلیر لایو ساختیم که کلی اتفاقای Real-time توش میوفته، برای راحتی کار یک سیستم Event Driven طراحی کردیم که توش مکالمه بین سرور بازی و کاربرا مثل آب خوردن باشه. توی این ویدیو در مورد اینکه چیکار کردیم و خروجیش چطوره صحبت میکنیم و اینکه در آینده چه تغییراتی باید بکنه.
https://youtu.be/WDyGqSTSzy0
این ارشیو لایو ها هست و میتونید ببینید. پیشنهادم اینه حتما اول لایو چهارم رو ببینید که خلاصه اتفاقای جذاب رو توش گفتیم
https://www.youtube.com/playlist?list=PLUKW34GJxYOZ0GqhUrpz9VhCv0ZIeGxw2
ورژن اولیه بازی اومد بالا. ممنون از همه کسایی که توی لایو بودن
ربات اصلی بازی اینه:
https://t.me/KingsCompBot
به مدت چند روز بالاست که تست کنیم و ایده بدیم توی گروه. حتما حتما باگی بود یا ایده ایی داشتید توی گروه بگید:
https://t.me/MhrCodeGp
و در نهایت لینک گیت پروژه اینجاست اگه خواستید باگی که دیدید رو فیکس کنید عالی میشه :)
https://github.com/mhrlife/kingscomp
از اینجا به بعد مسئله اینه بازی رو ادامه بدیم یا نه. اگه بنظرتون جذابه ویا ایده ایی دارید توی گروه حتما بگید.
استریم چهارم توسعه بازی تلگرامیمون شروع شد 🔥
توی این قسمت منطق سوال جواب رو میسازیم و براش تست مینویسیم، به شکل real-time هم بدون وبسوکت کلاینت کاربرا رو اپدیت میکنیم.
https://youtube.com/live/66VXxZx_nQs?feature=share
یکم وقتم خالی شد قبلش زمانش رو اوردم یک ساعت جلوتر، از ساعت 2ظهر استارتشو میزنیم.
استریم قسمت چهارم امروز ساعت 3 بعدازظهر خواهد بود:
https://youtube.com/live/66VXxZx_nQs?feature=share
توی کامیت جدید بازی تلگرامیمون من چند کار انجام دادم که نرسیدم استریمش کنم، اما توی استریم بعدی یک ساعت اول توضیح میدم معماریشو، چطور تستش کردم و روش ادامه میدیم بازی رو میسازیم.
به شکل خلاصه ما یک سیستم مدیریت لابیها رو داریم، به ازای هر لابی یک گوروتین وظیفه داره تمام eventهای اتفاق افتادهی بازی رو مدیریت کنه و اگه نیازداشت بازی کاربرها رو آپدیت کنه. (خیلی ساده با صدا زدن یک فانکشن)
اما کاربرها چطور real-time متوجه میشن باید کلاینتشون آپدیت بشه؟ یک endpoint داریم برای اینکار و کانکشن کاربر رو به مدت یک دقیقه باز نگه میداریم و اگه اپدیتی داشت بهش اطلاع میدیم، اگه نه دوباره ریکوئست میزنه. اگه براتون سواله لانگ پولینگ چیه این ویدیو رو حتما ببینید، برای این بازی سراغ وبسوکت نمیریم.
سیستم ایونتمون هم همچنین یک هش داره که کارو خیلی راحت میکنه، این هش رو هرسری برای بکاند میفرسته و اگه هش ارسالی با وضعیت فعلی لابی فرق داشت همون جا در لحظه بهش اطلاعات جدید رو میده، اگه نه همون یک دقیقه کانکشن رو باز نگه میداره.
گم سرورمون خیلی جالبه، اگه سیستم بیاد پایین براساس وضعیت فعلی ردیس خودش رو آپدیت میکنه و به ازای هرلابی یه بازی جدید میاره بالا که مدیریتش کنه، و کلیم تست داره برای اینکه بدون اینکه هرسری لابی جدیدی بسازیم مطمئن بشیم فیچرهای ریل تایم دارن درست کار میکنن.
https://github.com/mhrlife/kingscomp/commit/4c536a53bc125838ff3c8fb68da18828ce0ca86e
