Md Daily – Telegram
Md Daily
725 subscribers
239 photos
15 videos
21 files
283 links
راجب مقالات و مستندات فنی یا غیر فنی که میخونم و علایقم اینجا مینویسم :)


گروه کانال: https://news.1rj.ru/str/MdDailyGap

کورس ها: https://news.1rj.ru/str/MdDaily/395

وبلاگ: https://mddaily.ir
Download Telegram
چند وقت پیش دنبال یه اپ حسابداری بودم که کار اصلیشو فقط یعنی ثبت هزینه و در آمد به دور از هرگونه پچیدگی انجام بده :)

چیزی که میخواستم رو پیدا نکردم،‌ پس تصمیم گرفتم منم نسخه ی خودم رو بسازم 🤷‍♂️

پس پروژه ی md fnancial رو استارت زدم. فعلا کار اصلیش یعنی ثبت هزینه و در آمد رو انجام میده و بهتون مجموعش رو نشون میده ولی خب هنوز خیلی کار داریم. با فلاتر نوشته شده و برای دیتابیس از ObjectBox استفاده میکنه، به زودی سینک با فضا های ابری هم بهش اضافه میشه و خروجی پلفتورم های مختلف رو ازش میگیرم.

رود مپ پروژه رو تو گیت هاب گذاشتم و آروم آروم داره جلو میره. خوشحال میشم ایده ها و پیشنهادتتونم بشنوم .

🔗 https://github.com/mdpe-ir/md_financial

🆔 @MdDaily
🔥18👍7👌1🤝1
🌟 معرفی ObjectBox: یک پایگاه داده Embedded با کارایی بالا برای برنامه‌های مدرن

📦 دیتابیس ObjectBox یک پایگاه داده NoSQL تعبیه شده و ACID-compliant هست که برای سرعت، کارایی و سهولت استفاده طراحی شده.
این پایگاه داده برای محیط‌های محدود از نظر منابع و برنامه‌های با کارایی بالا ساخته شده و در سناریوهایی که نیاز به ذخیره‌سازی سریع داده‌ها، دسترسی آفلاین و عملیات با تأخیر کم دارند، بسیار عالی عمل می‌کنه.

واژه ACID مخفف چهار ویژگی بسیار مهم در پایگاه داده‌هاست که تضمین می‌کنه اطلاعات شما به طور صحیح و قابل اعتماد ذخیره و مدیریت بشن.
این ویژگی‌ها برای اطمینان از یکپارچگی داده‌ها، حتی در صورت بروز خطا یا قطعی، ضروری هستن:

🔸 بخش Atomicity: هر کاری که انجام می‌دید یا کامل انجام میشه یا اصلاً انجام نمیشه.
🔸 بخش Consistency: هر کاری باید با قوانین پایگاه داده هماهنگ باشه.
🔸 بخش Isolation: هر کار به‌صورت جداگونه انجام میشه و روی کارهای دیگه تأثیر نمی‌ذاره.
🔸 بخش Durability: هر تغییری که ایجاد می‌کنید به‌طور دائم ذخیره میشه و حتی اگر مشکلی پیش بیاد، اطلاعات از بین نمیره.


چه در حال ساخت برنامه‌های موبایل، سیستم‌های IoT یا راه‌حل‌های محاسباتی Edge باشید، ObjectBox یک راه‌حل سبک و کاربرپسند برای مدیریت داده‌ها بدون سربار پایگاه‌های داده رابطه‌ای سنتی ارائه میده.

---

🎯 حالا ObjectBox دقیقاً چیه؟

یک پایگاه داده شیءگرا که به‌طور مستقیم اشیاء رو ذخیره می‌کنه و نیاز به (ORM) رو از بین می‌بره. با حذف ORM، عملکرد سریع‌تر و توسعه ساده‌تری رو تجربه می‌کنید.

این پایگاه داده به‌ویژه برای موارد زیر مناسب هست:

اپلیکیشن‌های موبایل: برای ذخیره‌سازی داده‌های محلی با سرعت بالا.

دستگاه‌های IoT و Edge: اولویت با حالت آفلاین، سبک‌وزن و بهینه‌سازی شده برای دستگاه‌های کم‌منبع.

تحلیل بلادرنگ: پردازش حجم عظیمی از داده‌ها با کارایی بالا و حداقل تاخیر.

---

⚙️ حالا ObjectBox چطوری کار می‌کنه؟

1️⃣ پایگاه داده شیءگرا
🛠 اشیاء بدون نیاز به کوئری‌های پیچیده SQL یا ORM، مستقیماً ذخیره و بازیابی میشن. این کار توسعه رو سریع‌تر می‌کنه و احتمال خطاهای زمان اجرا رو کاهش میده.

2️⃣ طراحی Embedded
📲 به‌عنوان بخشی از برنامه شما اجرا میشه بدون نیاز به یک سرور پایگاه داده خارجی. برای سیستم‌های توزیع‌شده، اپلیکیشن‌های موبایل و دستگاه‌های IoT که منابع محدودی دارن، ایده‌آله.

3️⃣ ایندکس‌گذاری با پرفورمنس بالا
⚡️ مکانیزم‌های ایندکس‌گذاری بهینه‌شده‌ای رو فراهم می‌کنه که جستجوها و کوئری‌ها رو سریع می‌کنه.

4️⃣ همگام‌سازی داده‌ها
🔄 پشتیبانی از حالت اولویت با آفلاین به برنامه‌ها اجازه میده بدون اتصال به اینترنت 🌐 کار کنه و از سینک بین دستگاه‌ها هم پشتیبانی می‌کنه.

5️⃣ سازگاری بین پلتفرم‌ها
💻 روی Android, plain-Java, Kotlin (Linux and Windows), POSIX, MacOS, iOS, Go, Python, Dart/Flutter, and C/C++ کار می‌کنه.

6️⃣ پشتیبانی از Vector Search
🧠 پشتیبانی داخلی برای اپلیکیشن‌های AI و ML که نیاز به جستجوهای مبتنی بر بردار دارن.

---

📌 از کجا شروع کنم؟

🌐 وبسایت: ObjectBox
📂 مخزن گیت‌هاب: ObjectBox SDK
🤖 اینترنت اشیا و همگام‌سازی: ObjectBox Sync

---

🆔 @MdDaily
👍5🔥2
سلام سلام :)

شب یلدای همگیتون مبارک باشه رفقا ❤️

پ ن:
الانکه شبا بلند تر شده ، بتکد ها میتونن بیشتر کد بزنن

🆔 @MdDaily
❤‍🔥121
#دل_نوشته

وقتی رو پروژه monolithic کار میکنی احتمالا میدونی الان کجایی و داری برا حرکت های بعدی برنامه ریزی میکنی. ولی وقتی میری رو microservice علاوه بر اینکه نمیدونی الان تو کدوم code editor و ide ای هستی و باید به کدوم پنجره سوئیچ کنی، نمیدونی کجا رو هم باید به کجا وصل کنی.

🆔 @MdDaily
👍5😁4👌2😨1
Md Daily
#دل_نوشته وقتی رو پروژه monolithic کار میکنی احتمالا میدونی الان کجایی و داری برا حرکت های بعدی برنامه ریزی میکنی. ولی وقتی میری رو microservice علاوه بر اینکه نمیدونی الان تو کدوم code editor و ide ای هستی و باید به کدوم پنجره سوئیچ کنی، نمیدونی کجا رو…
حالا که بحث میکرو سرویس باز شد، قبلا یه پست با موضوع سوال مصاحبه System Design: طراحی کوتاه کننده URL نوشته بودم.
بیایم همینو از تئوری خارجش کنیم و با استفاده از go و معماری clean در قالب میکرو سرویس با هدف آشنایی با مفاهیم پیاده سازیش کنیم :)

برای سیستم کشینگش هم از ردیس استفاده نمیکنیم و میریم سیستم کشینگ خودمون رو با الگوریتم LRU پیاده سازی میکنیم و البته که از GRPC قرار استفاده کنیم.

🆔 @MdDaily
👍52😢1
دوازدهمین رویداد ابر ها با موضوع Effortless Infrastructure جمعه ی همین هفته در تهران به همراه قهوه، صبحانه، ارائه و گفتگوی کاری در کنار متخصصین برگزار میشه.

اگه هم با کد تخفیف A12S1 ثبت نام کنید، شامل تخفیف میشه.

لینک ثبت‌نام:
abrh.ir/enjoy

پ ن:
یک ظرفیت حضور رایگان اختصاصی از طرف کانال هم وجود داره، اگر کسی تمایل داشت همین زیر اعلام کنه تا ثبت نامش انجام بشه :)




🆔 @MdDaily
👍2
Md Daily
حالا که بحث میکرو سرویس باز شد، قبلا یه پست با موضوع سوال مصاحبه System Design: طراحی کوتاه کننده URL نوشته بودم. بیایم همینو از تئوری خارجش کنیم و با استفاده از go و معماری clean در قالب میکرو سرویس با هدف آشنایی با مفاهیم پیاده سازیش کنیم :) برای سیستم…
خلاصه بخوام بگم، تو این مجموعه، یه سیستم کوتاه کننده لینک (همون URL) رو با استفاده از معماری میکروسرویس‌ها، gRPC و Go می‌سازیم و در عین حال چیزای مهمی مثل API Gateways و کش کردن رو هم بررسی می‌کنیم.

معماری میکروسرویس چیه؟

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

خوبی‌های میکروسرویس‌ها:

* مقیاس‌پذیری: هر سرویس می‌تونه جداگونه مقیاس پیدا کنه.
* انعطاف‌پذیری: سرویس‌ها می‌تونن از تکنولوژی‌ها و زبون‌های مختلف استفاده کنن.
* تحمل خطا: اگه یه سرویس خراب شه، معمولاً بقیه کارشون مختل نمی‌شه.
تیم‌ها می‌تونن سرویس‌ها رو جدا جدا توسعه بدن و منتشر کنن.

کی از میکروسرویس استفاده نکنیم:

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

چرا از API Gateways استفاده می کنیم؟

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

کارهای اصلی یه درگاه API:

* مسیریابی: درخواست‌ها رو به میکروسرویس درست می‌فرسته.
* احراز هویت و مجوز: چک می‌کنه ببینه کیه و اجازه چی داره.
* تبدیل درخواست: درخواست‌ها و جواب‌ها رو به فرمت‌های مختلف تبدیل می‌کنه.
* محدود کردن تعداد درخواست‌ها: جلوی زیاد اومدن درخواست‌ها و خراب شدن سرویس‌ها رو می‌گیره.

درگاه API در مقابل reverse proxy

این دوتا شبیه همن، ولی فرق دارن:

* هدف: درگاه API برای مدیریت API و هماهنگ کردن میکروسرویس‌هاست، ولی reverse proxy فقط درخواست‌های HTTP رو به سرورهای بکند می‌فرسته.
* احراز هویت: درگاه‌های API هویت کاربر رو چک می‌کنن، ولی reverse proxy معمولاً این کار رو نمی‌کنه.
* تبدیل درخواست: درگاه‌های API می‌تونن درخواست‌ها رو تغییر بدن و جواب‌ها رو جمع کنن، ولی reverse proxy معمولاً درخواست‌ها رو بدون تغییر می‌فرسته.
* ویژگی‌های مخصوص API: درگاه‌های API قابلیت‌هایی مثل محدود کردن تعداد درخواست‌ها، کش کردن، و نظارت رو دارن، اما reverse proxy ندارد.


خلاصه که درگاه API خیلی کامل‌تر و مناسب میکروسرویس‌هاست، ولی reverse proxy فقط روی فرستادن درخواست‌ها و تقسیم بار تمرکز داره.

چرا gRPC برای میکروسرویس‌ها؟

مفهوم gRPC یک چارچوب RPC با کارایی بالا است که برای سیستم‌های توزیع‌شده مدرن طراحی شده و مزایای قابل توجهی نسبت به APIهای HTTP سنتی ارائه میده. به جای فرمت‌های مبتنی بر متن مانند JSON، این چارچوپ از پروتکل بافرها (Protobuf) برای سریال‌سازی فشرده و کارآمد استفاده میکنه (داده ها را به صورت باینری ارسال و دریافت میکنه) که باعث کاهش پهنای باند و سربار پردازش میشه. gRPC که بر پایه HTTP/2 ساخته شده، از ویژگی‌هایی مثل چندگانه سازی (multiplexing)، (streaming) و ارتباط با تأخیر کم پشتیبانی میکنه.

برخلاف APIهای REST HTTP استاندارد، gRPC از تایپ ها پشتیبانی میکنه، تولید خودکار کد برای کلاینت‌ها و سرورها به زبان‌های مختلف و امنیت داخلی با TLS رو هم فراهم می‌کنه. این امر gRPC را سریع‌تر، کارآمدتر و مقیاس‌پذیرتر می‌کنه، به ویژه برای میکروسرویس‌ها و سیستم‌هایی که به ارتباط بین سرویسی کارآمد نیاز دارن.

ساده و خلاصش شده اینکه شما یه فایل به نام .proto ایجاد میکنید و توش تعریف میکنید چه داده هایی قرار ارسال یا دریافت بشه و نوع هرکدوم از داده ها چی هستند بعدش با استفاده از کامپایلر (Protocol Buffer) میاد بسته به زبانی که دارید باهاش برنامه نویسی میکنید فایل های مورد نیاز رو تولید میکنه . یک بخشی از سرویس به عنوان کلاینت و یه بخشی از سرویس به عنوان سرور عمل میکنه. که توی این مثال api getway ما نقش client داره و کوتاه کننده ی لینک نقش server رو بازی میکنه. چطوری؟ جلوتور با مثال بهش می رسیم

جمع بندی:
ما به یه api getway نیاز داریم که کاربر بتونه با استفاده از http بهش متصل بشه و endpoint داشته باشه و درخواست ها را با استفاده از پروتکل grpc به سرویس کوتاه کننده ی لینک برسونه و جواب برگشتی رو به کاربر نشون بده.


🆔 @MdDaily
👍6👌1🆒1
Md Daily
خلاصه بخوام بگم، تو این مجموعه، یه سیستم کوتاه کننده لینک (همون URL) رو با استفاده از معماری میکروسرویس‌ها، gRPC و Go می‌سازیم و در عین حال چیزای مهمی مثل API Gateways و کش کردن رو هم بررسی می‌کنیم. معماری میکروسرویس چیه؟ میکروسرویس یه جور روش طراحی نرم‌افزاره…
داشتم فکر میکردم برای این اموزشش رو به صورت ویدیویی توی چنتا قسمت بگیرم.

نظرتون چیه؟

با ویدیویی راحت تر هستید یا همین شکل به صورت متنی جلو بریم.

پ ن :
اگه با ویدیویی موافق هستید پستو لایک کنید
👍281👏1
Md Daily
داشتم فکر میکردم برای این اموزشش رو به صورت ویدیویی توی چنتا قسمت بگیرم. نظرتون چیه؟ با ویدیویی راحت تر هستید یا همین شکل به صورت متنی جلو بریم. پ ن : اگه با ویدیویی موافق هستید پستو لایک کنید
بالاخره بعد از کلی رکورد draft تونستم به یه نسخه ی اوکی برسم، این اولین ویدیوی کانال هست.

دامنه ی mddaily.ir هم گرفته شده و به زودی وبلاگ جدید کانال هم برای آموزش هایی که توی تلگرام انتشارشون سخته رو نمایی میشه :)
9🔥3👏2❤‍🔥1
Media is too big
VIEW IN TELEGRAM
قسمت اول آموزشی از ساخت url shorten با میکرو سرویس

توی این قسمت سعی کردم مفاهیم رو از پایه توضیح بدم و یکم زمان آموزش زیاد شد :)

بیشتر از همه تجربه ی جالبی بود برای خودم ضبط این قسمت، چون اولین تجربم از ساخت محتوای آموزش ویدیویی بود و چیزای جالبی از کار با kdenlive و نحوه ی ساخت محتوا یاد گرفتم 🙂‍↕️

ببخشید اگه کموکاستی هایی هست، هر قسمت بهتر میشیم :)

🆔 @MdDaily
❤‍🔥12👍2🔥2🎉2👌1
This media is not supported in your browser
VIEW IN TELEGRAM
چرا نباید به بنچمارک ها اعتماد کنیم؟

چند وقته میبینم اول لینکدین و بعد توئیتر و تلگرام این سبک ویدیو ها از مقایسه ی سرعت زبان ها درحال نشر هستند. ولی نباید. معیارتون رو برای انتخاب زبان مناسب و حتی مقایسشون این سبک ویدیو ها بذارید. طرفدارای یه زبان میگن: "زبان X از زبان Y سریع‌تره!" آره بابا، یه سری تست و بنچمارک نشون میده که یه ذره سرعت اجرا یا مصرف حافظه تو زبونا فرق می‌کنه. ولی بیخیال، واسه 99 درصد برنامه‌ها این فرق‌ها مثه اینه که موقع کدنویسی جوراب قرمز بپوشی یا آبی! مهم معماری، الگوریتم و استراتژی بهینه‌سازیه که کارو راه میندازه. یه سیستم بد طراحی‌شده، چه با Rust نوشته بشه چه با Ruby، آخرش بد و ناکار آمد هستش. نکته ی دیگه که راجب این سبک مقایسه وجود داره اینکه دقیقا معلوم،نیست تحت چه شرایطی و با چه سیستمی طبق چه نوع پیاده سازی ای این تست ها گرفته شده. خلاصه که تا وقتی بنچمارک توسط خودتون با شرایط یکسان گرفته نشده خیلی اعتماد نکنید و معیارتون برای انتخاب و مقایسه زبان ها اینها نباشه :)

🆔 @MdDaily
👍16👌51
گیت (Git) یه شمشیر دولبس

یه روز توی یکی از پروژه‌هامون داشتم کار می‌کردم. سیستم CI/CD ما طوری طراحی شده بود که دو برنچ اصلی داشتیم:

develop: برای آپدیت‌های روی سرور دولوپ

main: برای آپدیت‌های روی پروداکشن


تا اینجا همه چیز طبیعی پیش می‌رفت. من روی سه پروژه مختلف با دوتا برنچ جداگانه مشغول بودم. برای اینکه کدهای هر پروژه با کدهای برنچ develop تداخل نداشته باشه، قبل از مرج کردن، با دستور زیر کدها رو به‌روزرسانی می‌کردم:

git merge develop

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

چرا؟

از آنجایی که به جای مرج کردن با برنچ origin/develop (برنچ به‌روز موجود در مخزن GitHub) از برنچ local قدیمی استفاده کردم، کدها با یکدیگر تداخل پیدا کردند. دستور درست باید این بود:

git merge origin/develop

من به خاطر عادت استفاده از دکمه‌ی ↑ برای زدن آخرین دستور تایپ شده، به جای تایپ دوبارش🥲 به این تفاوت توجه نکردم.

راه‌حل چی بود؟

برای حل این مشکل، دوباره توی همون پروژه‌ها دستور درست مرج رو اجرا کردم و بعد از اون شروع به بازبینی دقیق تمام بخش‌های تحت تاثیر قرار گرفته و رفع conflict ها کردم. در این فرآیند هم از Goland و هم از VSCode استفاده کردم؛ ولی باید بگم که در VSCode کار با conflict ها خیلی راحت‌تر انجام می‌شه.

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

خب برای یادگیری git به صورت visual منابع باحالی وجود داره که پیشنهاد میکنم یه سری بهشون بزنید :

https://learngitbranching.js.org/

https://onlywei.github.io/explain-git-with-d3/

https://ohmygit.org/



---

مثل همیشه کنجکاو بمونید :)

🆔 @MdDaily
👍11❤‍🔥4🔥1😢1
چند وقتی بود داشتم Cursor و Windsurf و Github Copilot رو توی پروژه های پروداکشن تست میکردم ببینم کدومشون واقعا باعث افزایش بهره وری میشه و درصد خطای کمتری داره که دیدم ۱۵ ساعت پیش گیت هاب کوپایلت یه آپدیت داده و میخواستم راجب ویژکی های خوبی که اینا دارن ولی Copilot نداره بگم که کلا زمین بازی عوض شد :)

قبل از اینکه برم سراغ آپدیت کوپایلت خیلی خلاصه بریم ببینیم هر کدوم از اینا با چه هدف و شعاری ایجاد شدن.

جزو اولین AI Code Editor هایی که منتشر شد cursor بود که با شعار افزایش بهره وری اومد و زمانی که کوپایلت هنوز نسخه ی رایگان ارائه نکرده بود، پلن رایگان داشت. از نظر قیمتی اشتراک Pro این ادیتور ماهیانه ۲۰ دلار هست.

یکی از اکستنشن های محبوب AI برای برنامه نویسی codeium بود که یکی از رقبای کوپایلت حساب میشه و به تازگی ادیتور جدید خودش رو به نام Windsurf با شعار اولین agentic IDE منتشر کرده که ویژگی منحصر بفردش این بود که وقتی بهش task رو میدادی براش مرحله تعریف میکرد مثلا توی تست های من وقتی بهش گفتم به این پروژه ی بکند Go ای که دارم یه endpoint جدید اضافه کن که ویژگی خروجی اکسل رو اضافه کنه، اول رفت چک کرد ببین پکیج مورد نظر رو نصب دارم یا نه بعد پکیج رو نصب کرد بعد که مطمئن شد پکیج نصبه رفت شروع کرد فایل های پروژه رو خوندن و جاهایی که نیاز به تغییر داشتن رو تغییر داد و مرحله به مرحله برا خودش task تعریف میکرد و میرفت جلو. از مدل های مختلفی هم پشتیبانی میکنه و با پرداخت ۱۵ دلار در ماه بهتون دسترسی به مدل های GPT-4o, Claude Sonnet , DeepSeek-R1, o3-mini رو میده.


اما! همه ی این ها تا قبل از اپدیت جدید کوپایلت بود. توی آپدیت جدید گیت هاب کوپایلت اومده حالت Agent ای که توی Windsurf رو اضافه کرده.
الان مثل cursor و Windsurf از ورودی تصویر هم پشتیبانی میکنه .

یه حالتی توی cursor و Windsurf وجود داشت به نام Next Edit Suggestions این چیکار میکرد؟
مثلا شما یه متغیر یا استراکچریو تعریف نکرده بودی میومدی ازش استفاده میکردی که بعدا تعریفش کنی اینا میفهمیدن و بهت میگفتن اگه میخوای بیا برات تعریفشون کنیم یا مثلا از فلان چیز استفاده کردی ولی import اش نکردی بیا قبل از اینکه تو بخوای انجامش بدی خودم برات import کنم . الان این ویژگی توی آپدیت جدید کوپایلت هم اضافه شده.


و در نهایت ویژگی Prompt Files اضافه شده که شما میتونید یه فایل با فرمت Markdown بنویسید و توش دقیقا به کوپایلت بگید چیکار کنه تا بتونید بهترین نتیجه رو بگیرید.

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

ویدیوی آپدیت کوپایلت :
https://youtu.be/C95drFKy4ss?si=fddJFLYfJ2oM7sed


طرف کامنت گذاشته بود الان همه ی برنامه نویس ها تبدیل به code reviewer شدن 😂

---

مثل همیشه کنجکاو بمونید :)

🆔 @MdDaily
😁6👍3
Md Daily
GIF
+ دواپسمون همش داره ماینکرفت بازی میکنه

- اونایی که میدونن: 💀


داکر یه پروژه ی باحال داره به نام Dockercraft که میتونید مستقیم توی ماینکرفت کانتینر های داکرتون رو مدیریت کنید :)

اما چطوری کار میکنه؟

اومدن از Cuberite، یک سرور ماینکرفت متن‌باز و نوشته‌شده با C++، برای پیاده‌سازی Dockercraft استفاده کردن. این سرور از پلاگین‌های Lua پشتیبانی میکنه، بنابراین یک پلاگین اختصاصی برای تعامل با Docker توسعه دادن.

🔹 اجرای عملیات در سمت سرور

کلاینت ماینکرفت بدون تغییر باقی میمونه و تمام پردازش‌ها سمت سرور انجام میشه. پلاگین Lua که در مسیر world/Plugins/Docker قرار داره، یک تب مدیریتی در WebAdmin سرور ایجاد میکنه:

Plugin:AddWebTab("Docker", HandleRequest_Docker)

این باعث میشه درخواست‌های POST به مسیر http://127.0.0.1:8080/webadmin/Docker/Docker ارسال بشن.

🔹 اتصال به Docker Remote API

رویدادهای داکر از طریق سرویس Goproxy که با Golang نوشته شده پردازش شده و به پلاگین Lua منتقل میشن. این سرویس درخواست‌ها را به سرور ارسال می‌کنه:

func MCServerRequest(data url.Values, client *http.Client) {
req, _ := http.NewRequest("POST", "http://127.0.0.1:8080/webadmin/Docker/Docker", strings.NewReader(data.Encode()))
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
req.SetBasicAuth("admin", "admin")
client.Do(req)
}

🔹 اجرای دستورات از طریق ماینکرفت

پلاگین Lua میتونه از طریق os.execute() با این سرویس ارتباط برقرار کنه. مثلاً موقع ورود یه بازیکن، اطلاعات کانتینرهای داکر بروزرسانی میشن:

function PlayerJoined(Player)
r = os.execute("goproxy containers")
end

این روش امکان مدیریت کانتینرهای Docker را مستقیماً از داخل ماینکرفت فراهم می‌کنه


گیت هاب پروژه:

🔗 https://github.com/docker/dockercraft

---

مثل همیشه کنجکاو بمونید :)

🆔 @MdDaily
❤‍🔥10🤣3👍2🤯2
عشق میاد و میره، اما git commit برای همیشه می‌مونه!

#ولنتاین_برنامه_نویس

🆔 @MdDaily
👍10❤‍🔥22😁2😢21👌1
دانشگاه شاهکاره

دارم با استاد بحث میکنم که BSD هم سیستم عامله و قبول نمیکنه میگه نه نرم افزار کاربردی برپایه ی لینوکسه

بعد خودش لینوکس رو چطوری نوشته؟

Linox

🆔 @MdDaily
🤣22😁1
Forwarded from Python Hints
این موضوع واقعاً گرد ناامیدی نیست، یک نیم‌نگاه به آمار اخراج‌ها یا لیست مشاغلی که دیگه نیروی جونیور نمی‌گیرند بندازید (البته بعضی‌ها زدن جونیور ولی دقت کنید لیست مهارت‌ها رو ببینید.)

مثال بکند میزنم:
قبلاً جونیور رو میاوردند که سنیور وقت آزادتری داشته باشه برای طراحی سیستم و بررسی بخش‌های مختلف و چیزای مهمتر؛ یعنی شرکتی نبود که به سنیور بگه یک لاگین بزن، یک صفحه بزنم اسم کاربر رو برگردونه و ...

این‌ها تسک‌های جونیور بود و سنیور نهایتاً review می‌کرد؛ الان تمام اینکارهارو یک الگوریتم هوش مصنوعی می‌کنه، سنیور در لحظه مسئله رو می‌شکنه و از AI می‌پرسه کد رو تحویل می‌گیره و کپی و تمام ...
همین مسیر رو ادامه میده و در نهایت حالات مختلف تست نویسی که به ذهنش میرسه رو هم دونه دونه از AI می‌خواد بنویسه بازم دابل چک می‌شه و تمام.

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

حالا شما بیا به من بگو من جونیور هستم، جنگو و جنگو رست و پستگرس رو بلدم.
اولین سوالاتی که توی ذهن من میاد:
سلری چطور ؟ کار با redis چی ؟ تست نویسی چطور ؟ پروفایلینگ چی میشه پس ؟ لاگ نویسی خوب چی ؟ (دوتا پست قبلتر یک مشکل رو مثال زدم و قدیما یک آموزش گذاشتم) و ...

اگر شما نتونی اینکارها رو انجام بدی و نشناسی؛ خب تمام مدل‌های AI از شما بهتر کد می‌زنند و وقت کمتری هم میگیره اگر قرار باشه من هی برم سراغش و بهش بگم چیکار کنه و چطوری بزن و ...


دو گروه اینجا بهشون بر میخوره (توی آمار‌های مختلف هم همین رو نشون داده؛ به دیتاهای آمریکای شمالی نگاه کنید) :

۱- پکیج فروش‌ها: دیگه پکیجی که فقط جنگو یاد بده بدون پروژه‌ای که استاندارد باشه بی‌ارزش می‌شه و کاسبی خراب (این نیروها استخدام نمی‌شوند و کمتر کسی سراغ این آموزش‌ها میره)

۲- افرادی که شغل برنامه‌نویسی رو برای راحتی استفاده کردند؛ جدی میگم بسیار شنیدم که می‌گن بابا کار شما که چیزی نیست ۸ ساعت پشت کامپیوتر می‌شینی بعدم میری خونه ۱۲ ساعت عشق و حال و پارتی و ....

والا ما یک مهمونی هم میخوایم بریم باید ۷ روز قبل خبر داشته باشیم که بتونیم اون ۴-۵ ساعت مهمونی رو توی ۷ روز جبران کنیم تسک عقب افتاده نداشته باشیم.

چرا اینارو مجدداً اینجا می‌گم:

من از آموزش دادن به کسی سودی نمی‌برم، هرکسی هم با من کار کرده می‌دونه تمام دانشم تمام وقت در دسترس تمام نیروهای زیردستم هست، هیچ ترسی ازینکه کسی جام رو بگیره ندارم و ازین موضوع و رشد کردن نیروهام بسیار لذت می‌برم.

برای همین بجای اینکه بگم آقای X خانم Y بیاید برنامه‌نویسی یاد بگیرید ماهی ۲۰۰ میلیون درآمد دارید (دیدی اینو میگه بعد پکیج آموزشی ۳۰۰ هزارتومنی میذاره) میگم این مسیر سختی‌هاش زیاد شده، دیگه فقط با سینتکس یاد گرفتن نمی‌تونید شغل پیدا کنید، کسی که الان شروع می‌کنه از صفر حداقل ۲ سال وقت می‌ذاره. اگر قرار نیست جدی بگیرید برنامه‌نویسی رو پیشنهاد می‌کنم برید دنبال کار مورد علاقتون.

مکانیک - برق کار - آشپز - باریستا و ... همگی مشاغل کاملاً قابل احترام هست و توی ۲ سال وقتی علاقه‌ هم باشه قطعاً موفق تر خواهید بود.


در نهایت، این متن باید به شمایی که برنامه‌نویسی رو انتخاب کردید انگیزه بده که برنامه‌نویسی رو جدی بگیرید و از وقت اینستاگرام و پارتی و ... بزنید و روی تخصص تمرکز کنید.
اگر نه که رشته یا تخصص رو اشتباه انتخاب کردید.
🔥5👍4👏1👌1
#میم

قبل و بعد یادگیری برنامه نویسی:

🆔 @MdDaily
🤣15👍6😁2🔥1