MHRCODE | برنامه‌نویسی با طعم توت‌فرنگی – Telegram
MHRCODE | برنامه‌نویسی با طعم توت‌فرنگی
3.42K subscribers
22 photos
1 video
116 links
آدرس ها:
گروه: @MhrCodeGP
ویرگول: virgool.io/@mhrlife
مدیوم: medium.com/@mhrlife
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
توی کامیت جدید بازی تلگرامیمون من چند کار انجام دادم که نرسیدم استریمش کنم، اما توی استریم بعدی یک ساعت اول توضیح میدم معماریشو، چطور تستش کردم و روش ادامه میدیم بازی رو میسازیم.

به شکل خلاصه ما یک سیستم مدیریت لابی‌ها رو داریم، به ازای هر لابی یک گوروتین وظیفه داره تمام eventهای اتفاق افتاده‌ی بازی رو مدیریت کنه و اگه نیازداشت بازی کاربرها رو آپدیت کنه. (خیلی ساده با صدا زدن یک فانکشن)

اما کاربرها چطور real-time متوجه میشن باید کلاینتشون آپدیت بشه؟ یک endpoint داریم برای اینکار و کانکشن کاربر رو به مدت یک دقیقه باز نگه میداریم و اگه اپدیتی داشت بهش اطلاع میدیم، اگه نه دوباره ریکوئست میزنه. اگه براتون سواله لانگ پولینگ چیه این ویدیو رو حتما ببینید، برای این بازی سراغ وب‌سوکت نمیریم.

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

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

https://github.com/mhrlife/kingscomp/commit/4c536a53bc125838ff3c8fb68da18828ce0ca86e
14👍2
ورژن اولیه بازی اومد بالا. ممنون از همه کسایی که توی لایو بودن

ربات اصلی بازی اینه:
https://news.1rj.ru/str/KingsCompBot
به مدت چند روز بالاست که تست کنیم و ایده بدیم توی گروه. حتما حتما باگی بود یا ایده ایی داشتید توی گروه بگید:
https://news.1rj.ru/str/MhrCodeGp

و در نهایت لینک گیت پروژه اینجاست اگه خواستید باگی که دیدید رو فیکس کنید عالی میشه :)
https://github.com/mhrlife/kingscomp

از اینجا به بعد مسئله اینه بازی رو ادامه بدیم یا نه. اگه بنظرتون جذابه ویا ایده ایی دارید توی گروه حتما بگید.
31👍4
با هم بازی ساختیم 🎮 خلاصه‌ای از سیستم Real-Time‌ بازی لایو تلگرامی

توی چند تا لایو یوتیوبی یک بازی مولتی‌پلیر لایو ساختیم که کلی اتفاقای Real-time توش میوفته، برای راحتی کار یک سیستم Event Driven طراحی کردیم که توش مکالمه بین سرور بازی و کاربرا مثل آب خوردن باشه. توی این ویدیو در مورد اینکه چیکار کردیم و خروجیش چطوره صحبت میکنیم و اینکه در آینده چه تغییراتی باید بکنه.

https://youtu.be/WDyGqSTSzy0
21👍3
دیزاین پترن‌های ابری: Asynchronous Request-Reply ✉️

فرض کنید یک جاب مثل پردازش ویدیو دارید! حالت معمولی بین چند ثانیه تا چند دقیقه طول میکشه و وقتی ترافیک زیادی روش باشه چند ساعت! ما نمیتونیم با یک درخواست به سرور این جاب رو اجرا کنیم و جوابش رو به کاربر بدیم پس برای حلش از پترن Async Request-Reply استفاده میکنیم. توی این ویدیو به توضیحات این پترن ابری مهم میپردازیم و در نهایت با هم دیگه پیاده سازیش میکنیم.

https://youtu.be/8v-gwThFs0o
25👍4🔥3
آپدیت بازی: لیدربورد و یک سری تغییرات دیگه

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

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

@KingsCompBot

اگه پایه هستید یه تست بریم هم مطمئن شیم مقیاس پذیریش کامل داره انجام میشه و مشکل نمیخوریم هم یکم بازی کنیم :)

https://github.com/mhrlife/kingscomp
کد رو هم میتونید اینجا ببینید
👍11
اسلایس‌ها (Slice) توی گولنگ چطور کار میکنن؟ ( به انگلیسی)

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

https://www.youtube.com/watch?v=EzeJg36vhnw
👍20👎6🔥42
MHRCODE | برنامه‌نویسی با طعم توت‌فرنگی
اسلایس‌ها (Slice) توی گولنگ چطور کار میکنن؟ ( به انگلیسی) در کنار چنل خودمون یه چنل کوچولوی انگلیسی ساختم که ویدیوهای خیلی کوتاه گولنگی که شاید توی کامیونیتی فارسی خیلی خواهان نداشته باشه رو انگلیسی بگیرم که امتحان کنم شاید جالب بود. اگه دوس داشتید و لایک…
اگه موافق این حرکت نیستید یک حرکت دیگه هم توی ذهنم بود که شاید بهتره. فقط ویدیوهایی که فارسیشون توی کانال هست رو انگلیسی کنم که کامیونیتی فارسی اولویت باشه مثل همیشه. این رو خودم بیشتر پایه ام. یعنی بخاطر کانال دوم چیزی کانال اول از دست نمیده
👍474👎3🔥1
با Redis بازیمون رو Scale کردیم 🔥 مقیاس پذیر کردن هر پروژه‌ای

بازی مولتی پلیر لایوی که نوشتیم رو scalable کردیم! و جای اینکه روی یک سرور بالا باشه با 3 سرور اوردیمش بالا. توی این ویدیو در مورد نیازمندی هایی صحبت میکنم که کدمون لازم داره تا بتونه scale بشه. توی یک پروژه واقعی که بازیمون بود چطور با کمک ردیس یکی یکی این مشکلات رو حل کردیم.

https://youtu.be/0F1H3qt-tNY
🔥20👍3
هرآنچه در مورد Concurrency در Golang نیاز است بدانید 🔥

از گوروتین‌ها گرفته تا چنل‌ها و Select Case و Context و... سوالاتیه که این چند وقتیه دیدم خیلی ذهن هم برنامه نویس‌های تازه کار گولنگ هم کسایی که چند وقتی هست کار میکنن بوجود اومده و توی این ویدیو سعی کردم به تمام این ها بپردازم. طوری که حتی اگر کسی هستید که به گولنگ آشنایی نداره و فقط براش جالبه، تا کسی که چندین وقته گو میزنه بتونه ازش استفاده کنه.

https://youtu.be/yhMXwezyVd4
🔥249👍2
پوینترها به زبان خیلییی ساده 🔥 Pointerها در #Golang

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



https://youtu.be/nEgf3LpZbNo
18🔥10👍3
سلام دوستان روز زیبایی داشته باشید

توی ویدیو بعدی میخوام حالت Q&A به سوالاتی که دارید چه در مورد برنامه نویسی، چه محیط کاری، شرکت‌های که توشون بودم، اینده برنامه نویسی با وجود هوش مصنوعی و... جواب بدم

اگه هر سوالی یا دغدغه ای داشتید توی همین ترد لطفا ارسال کنید، سوال بد هم نداریم، خود سانسوری و اینا هم نکنید.😅
23👍3🔥3
دوستان به لطف شما کانال اماده مانیتایز شدن هست.
شما جایی رو میشناسید که کارای ادسنس رو انجام بده؟ اگه اره ممنون میشم بهم معرفی کنید
27🔥8👎1
اصل Interface Segregation - کدت رو مجبور به کار بی ربط نکن!

یکی از جذابیت‌های برنامه‌نویسی اینه با استفاده از Interfaceها اجزای مختلف کدمون رو به شکل extendable پیاده‌سازی کنیم. اما این وسط پیاده‌سازی‌های مختلف یک Interface میتونن در بخش‌های جزئی با هم تفاوت داشته باشن که اگه این منطق هارو با اینترفیس اصلی قاطی کنیم باعث میشه کلی کد داشته باشیم که اضافه هستن و مجبور به نوشتنشون شدیم. توی این ویدیو یادمیگیریم چطور با Interface Segregation جلوی این موضوع رو بگیریم.

https://youtu.be/yHsUH4kMkpM
29👍8👎2
اسلایس Slice در گولنگ! یک بار برای همیشه!

اسلایس‌ها آرایه نیستن. بهتره فرقشون رو زودتر یادبگیریم تا مجبور نباشیم از راه سخت (دیباگ کردن یک باگ روی پروداکشن!) یادش بگیریم. اسلایس‌ها در گولنگ به ما اجازه میدن به شکل داینامیک سایز به آرایه ها دسترسی داشته باشیم. اما باز هم توی خودشون از آرایه استفاده میکنند. توی این ویدیو اول یکم با پایه‌های ارایه توی گولنگ آشنا میشیم و سعی میکنیم ساختاری مشابه Sliceها با ارایه پیاده سازی کنیم و کد اسلایس رو هم یک نگاه میندازیم.

https://youtu.be/_72DZnwRG10
🔥28👍5
توی بازی Glory Arena وابستگی پرفورمنس به latancy دیتابیس داشت خیلی زیاد میشد و با چند تا تغییر ساده توی Gorm، یکی از پیچیده ترین تراکنشا ( با کلی کوئری و لاجیک ) از میانگین 150ms رسید به 30ms.

خلاصه تمام این اتفاق ها رو میتونید توی یکی از ویدیوهای قدیمیم ببینید:
https://youtu.be/sUxpHdR86dM?si=TOjmMlDIhyMadGqG
👍20🔥4
سلام به همه دوستان بعد یک تاخیر طولانی

این چند وقته برای هکتون تلگرام روی یک بازی تلگرامی کار کردم که کلی تجربه جالب بدست اوردم، از اینکه چطور از صفر یک محصول رو با سرعت و انعطاف بالا با Golang توسعه بدیم، تا تجربه های جالب optimization با css.

اسم بازی Glory Arena هست و به شکل خلاصه شما یک ترکیب از کارت‌ها دارید که هر کارت قدرت متفاوتی داره. میتونید ترکیبشون کنید و کارت‌های خفن‌تر بسازید و رقابت کنید.

اگه دوس داشتید یک سر بهش بزنید ادرس رباتش اینه:
@GloryArenaBot
27👍5