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
🔥 امشب منتظر قسمت دوم پادکست دواپس باشید :)

منتشر شد :)
❤‍🔥5🔥2
Audio
💫 دومین اپیزود دواپس با سید مهدی عزیز

🔗 می‌تونید قسمت قبلی رو از اینجا گوش بدید

00:00 مقدمه
01:40 چیشد که به اینجا رسیدیم؟
12:46 چطوری فیدبک باعث رشد شد
18:48 تبدیل باگ به تست
19:44 معرفی کوبار
23:00 توی کوبر عمیق تر بشیم
46:45 جمع بندی



توی هر اپیزود سعی میکنیم بهتر بشیم و ببخشید اگه کمو کاستی هایی وجود داشت :)


🆔 @MdDaily 🫱🏻‍🫲🏻 @seyedmahdidiary
🔥10👍2
چرا parseInt(0.0000005) تو جاوا اسکریپت عدد "5" رو برمی‌گردونه؟

قبلا تو یه این پست یه اتفاق بی منطق تو JS رو با منطق پشتش راجبش نوشتم. حالا وقتشه بریم سراغ یه مورد دیگه :)

از تابع parseInt() برای تبدیل رشته به عدد صحیح تو JS استفاده میشه و خب تا اینجا همه چیز طبیعیه تا وقتی که این کد رو اجرا کنیم:

parseInt(0.0000005)


و بجای اینکه یه عدد کوچیک بده، به ما 5 رو بر میگردونه.

دقیقا پشت صحنه داره چی میشه؟

تابع parseInt() فقط به خود عدد نگاه نمیکنه. اول مقدار را به یک رشته تبدیل می‌کنه. پس، وقتی 0.0000005 رو بهش می‌دیم، جاوا اسکریپت اون رو به طور خودکار به رشته "5e-7" تبدیل میکنه .

حالا، parseInt() شروع به خوندن رشته از سمت چپ می‌کنه و در اولین کاراکتر غیرعددی متوقف میشه. در "5e-7"، اول "5" را میبینه، پس همونجا متوقف میشه و "5" را بر میگردونه. قسمت نماد علمی (e-7) رو هم کلا ایگنور میکنه و رقم های اعشاری رو نادیده میگیره .

خلاصش اینه که:

تابع parseInt() اول عدد رو به متن تبدیل می‌کنه.
فقط اولش رو می‌خونه تا به یه عدد برسه.
هر چی بعدش باشه براش مهم نیست.

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

🆔 @MdDaily
🔥7🆒4👍3
دارم دوره ی هدف گذاری متمم رو گوش میکنم نکات جالبی گفته و میخوام این نکات رو بذارم کنار مقاله ی How I Make Learning New Things Feel Easy and Avoid Burnout و حاصلش بشه این پست :)

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

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

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

خوشبختانه، یادگیری یه مهارت پیچیده، زمان کمتری از اون چیزی که فکر می‌کنی می‌گیره.

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


دقت کن که کلمه "هدفمند" رو استفاده کرده. این همون کلمه‌ای هست که اریکسون تو مقاله تحقیقاتیش استفاده کرده. یعنی باید فعالانه درگیر یادگیریت باشی. ۲۰ ساعت تماشای آموزش‌های یوتیوب کافی نیست.

اما چطوری:

1. یادگیری رو تبدیل به عادت روزانه کن
20 ساعت، فقط 40 دقیقه در روز به مدت یک ماهه.
نیازی نیست که تمام وقتت رو پشت میز بنشینی و از وقت با ارزش با خانواده و دوستانت دور بمانی. این فقط منجر به خستگی ذهنی میشه.یک زمان مشخص در روز انتخاب کن و اون زمان رو سرسختانه محافظت کن. نذار هیچ چیز دیگه حواست رو تو اون مدت زمان مشخص پرت کنه.

2. کوچک و مشخص شروع کن
وقتی سعی می‌کنیم چیزی جدید یاد بگیریم، اغلب بیش از حد از عهده‌مون برمی‌داریم. با چیزی مشخص، ملموس و قابل دسترس شروع کن.

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

3. مهارت رو تجزیه کن
یک مهارت معمولاً مجموعه ای از مهارت های کوچکتره که برای تشکیل اون مهارت ترکیب می کنیم.

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

4. به اندازه کافی یاد بگیر تا بتونی خودت رو تصحیح کنی
توانایی تصحیح اشتباهات نیازمند درک تفاوت بین خوب و بده.

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

5. حواس‌پرتی‌ها رو حذف کن
آخرین مورد اما نه کم‌اهمیت‌ترین، حذف همه حواس‌پرتی‌هاست.

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

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

🆔 @MdDaily
👍932🔥1🤔1
Md Daily
دارم دوره ی هدف گذاری متمم رو گوش میکنم نکات جالبی گفته و میخوام این نکات رو بذارم کنار مقاله ی How I Make Learning New Things Feel Easy and Avoid Burnout و حاصلش بشه این پست :) خیلی خلاصه بخوام بگم، دو مدل هدف داریم: عملکردی و یادگیری. هدف عملکردی یعنی فقط…
جا داره چنتا نکته ی دیگه به این پست اضافه کنم. توی بحث هدف گذاری ای که مببتی بر اعداد و خروجی باشه مواظب باشید از یه جایی به بعد صرفا به خاطر اینکه به اون عدده برسید اون کار را انجام ندید مگر نه به احتمال زیاد یادگیری به پایین ترین حد خودش میرسه. مثلا اپ دولینگو، از یه جایی به بعد واردش نمی شید که یادگیریتون رو کامل کنید واردش میشید چون امتیازتون کم نشه.

میبینم هرجا صحبت از هدف گذاری میشه سریع میرن سراغ هدف گذاری SMART که آره اقا هدف باید قابل اندازه گیری باشه و مشخص و انقدری که یه سری از دوستان روی این نوع هدف گذاری تعصب دارن خود کسی که این ایده رو داده تعصب نداره و دست شما را باز گذاشته :)‌

این نوع هدف گذاری هایی که مثل SMART هستند بیشتر مناسب کسبوکار هستند تا زندگی شخصی همینکه شما تصمیم بگیرید فقط برید تو یه موضوعی تحقیق و گشتو گذار کنید صرفا برای اینکه ببنید نظرتون نسبت بهش چیه یه نوع ای از هدف گذاریه

مورد بعدی اینکه یه جایی از پست گفتم:

4. به اندازه کافی یاد بگیر تا بتونی خودت رو تصحیح کنی
توانایی تصحیح اشتباهات نیازمند درک تفاوت بین خوب و بده.


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

🆔 @MdDaily
❤‍🔥7👍21🔥1
Forwarded from 0xDay
(Register Flags 1/1)
ثبات پرچم یا همان Register Flag چیست؟

رجیستر فلگ چیزی هست که داخل Central Processing Unit (CPU) یا همون پردازنده هست که یک سری Bit رو نگه‌‌داری می‌کنه که این Bit‌ها نمایش دهنده وضعیت‌ عملیلت‌های مختلفی هست که CPU انجام داده.

حالا در معماری X86 رجیستر فلگ 16 بیت (Bit) هست که شامل اطلاعاتی هست که پس از انجام یک کاری انجام شده. به این اطلاعات وضعیت پرچم یا Status Register هم گویند به این دلیل که نتیجه آخرین عملیات اجرا شده توسط CPU رو نشون می‌ده. حالا این فلگ‌ها به بیت‌های مختلفی تقسیم می‌شن که هر Bit نشان دهنده یک Flag یا به اصطلاح نشان دهنده وضعیت است.
رجیستر فلگ‌های مهمی داریم مثل:

1 - Carry Flag 🫥 CF
2 - Zero Flag 🫥ZF
3 - Sign Flag 🫥 SF
4 - OverFlow Flag 🫥 OF
5 - Parity Flag 🫥 PF
6 - Auxiliary Carry Flag 🫥 AF


حالا که با فلگ‌های مهم آشنا شدیم، باید بدونیم نسبت به هر عملیاتی که توسط CPU مثل عملیات حسابی (Arithmetic) - عملیات منطقی (Logical Operations) انجام می‌شه مقدار اون Flag‌ها به 0 یا 1 تغییر می‌کند.

توضیح هر Register Flag:

1 - اگر در فلگ Carry Flag که آن را با CF نشان می‌دهیم، یک Carry از Most Significant Bit (MSB) هنگام جمع (Addition) به دست آوریم یا همینطور تفریق (Subtraction) که یک Borrow در MSB داریم مقدار CF را 1 قرار می‌دهیم اما در غیر این صورت مقدار CF برابر با 0 خواهد بود.

2 - اگر در فلگ ZF نتیجه برابر با 0 بود مقدار ZF می شود 1 اما برای نتیجه‌ای که 0 نیست یا به اصطلاح Non-Zero است مقدار ZF برابر با 0 است.

3 - اگر در فلگ SF مقدار MSB برابر 1 باشد بنابراین مقدار SF هم 1 است اما اگر مقدار MSB برابر با 0 قرار گرفت مقدار SF هم 0 می شود.

4 - اگر در فلگ OF سر ریز بافر رخ دهد مقدار OF برابر با 1 است اما در غیر این صورت مقدار OF برابر با 0 خواهد بود.

5 - اگر در فلگ PF تعداد Low Byte زوج یا همان Even باشد مقدار PF برابر با 1 است اما اگر تعداد Low Byte فرد یا Odd بود بنابراین مقدار PF هم برابر با 0 خواهد بود.

6 - اگر در فلگ AF عملیات حسابی یا همان (Arithmetic Operations) یک Carry یا یک Borrow رخ دهد مقدار AF برابر با 1 است در غیر این صورت مقدار AF برابر با 0 خواهد بود.

References:
- https://en.wikipedia.org/wiki/FLAGS_register
- https://www.geeksforgeeks.org/flag-register-8086-microprocessor/
- https://www.cs.princeton.edu/courses/archive/fall09/cos375/IA32StatusFlags.pdf
- https://stackoverflow.com/questions/73362953/how-is-the-overflow-flag-not-set-after-this-addition
- https://www.eecg.toronto.edu/~amza/www.mindsec.com/files/x86regs.html
- https://www.cs.uaf.edu/2009/fall/cs301/lecture/12_07_flags.html


@ZeroX_0Day
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5
چند وقت پیش دنبال یه اپ حسابداری بودم که کار اصلیشو فقط یعنی ثبت هزینه و در آمد به دور از هرگونه پچیدگی انجام بده :)

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

پس پروژه ی 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