Dev Fuel – Telegram
Dev Fuel
143 subscribers
41 photos
12 videos
28 links
تو این چنل قراره در مورد تکنولوژی های مختلف برنامه نویسی ، خصوصا JS با هم کلی چیز یاد بگیریم.
(بیشتر حول محور بک اند).
Download Telegram
Channel created
به نام خدا.
تصمیم به فعالیت در این چنل و فضای مجازی گرفته ام ، امیدوارم که به درستی هم ادامه بدم.
👍2👏1
خب ، شروع کارمون با gRPC باشه. چیزی که کنجکاو شدم راجع بهش بدونم و هرچیزی که یاد گرفتم رو اینجا به اشتراک می‌ذارم.

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

* یه نکته دیگه هم اینکه من به احتمال زیاد از هوش مصنوعی برای رفع ایرادات و کامل تر کردن توضیحاتم استفاده کنم.
👍21👏1
خب من قبل اینکه کاملا بپردازم به gRPC ، یه چیزایی رو قبلش توضیح میدم برای اونایی که نمیدونن. یه سری موارد پایه از REST API و ارتباط بین سیستم‌ها ، به شکل ساده.

اول از همه :
💡 ارتباط بین سیستم‌ها چیه و چرا نیازه؟
وقتی شما یک اپ یا چند تا سرویس داری (فرقی نداره اپ موبایل، وب یا سرویس‌های بک‌اند)، اینا باید با هم حرف بزنن.
برای این حرف زدن، یک پروتکل (قرارداد ارتباطی) لازمه.

مثلاً:
مرورگر با سرور حرف می‌زنه (مثلاً وقتی یک صفحه باز می‌کنی)
یک میکروسرویس به سرویس دیگه پیام می‌ده (مثلاً سرویس پرداخت به سرویس سفارش)
خب ما در این میان نیاز داریم به یک سبک ، که بتونیم داده ها رو بین این دو انتقال بدیم و این ها با هم حرف بزنند درسته؟
ما می‌تونیم از REST API استفاده کنیم.

🤔حالا REST API چیه؟

-یه سبک طراحی API روی HTTP :
-می‌گه چطور URL ها و متدها رو طراحی کنی تا منابع (resource) رو مدیریت کنی.
-داده‌ها عموماً JSON هستن (REST محدود به JSON نیست، ولی در عمل برای وب و موبایل اکثراً از JSON استفاده می‌شه چون human-readable و استاندارد de-facto شده.
(می‌تونه XML، HTML یا حتی باینری هم باشه)).
-ساده و عمومی هست (برای مرورگر، موبایل، هر چی).

😦مشکل REST API چیه؟

بنده خدا مشکل خاصی نداره ، خیلی هم پر طرفداره به شدت هم استفاده میشه از این سبک ، ولی :

- حجم JSON زیاده (نسبت به باینری)
-مدیریت استریم (داده‌های زنده) سخت
-معمولا رو HTTP/1.1 هست → connection reuse و multiplexing نداره

حالا اینجاست که پای gRPC میاد وسط.
👍2
🤔حالا gRPC چیه ؟
ایشون یک سیستم RPC مدرن و متن‌باز هست که توسط Google توسعه داده شده و اجازه می‌ده سرویس‌ها سریع، کارآمد و ایمن با هم ارتباط برقرار کنند. حالا یا به شکل شبکه داخلی یا خارجی.
*منظور از شبکه داخلی، همون شبکه خصوصی یا داخلی سازمانه که سرویس‌ها داخلش با هم ارتباط دارن.

🤔ویژگی هاش چیه؟
-از HTTP/2 برای انتقال داده استفاده می‌کنه.
-پیام‌ها رو به صورت باینری (با استفاده از Protocol Buffers یا همون ProtoBuf) رد و بدل می‌کنه.
-ارتباط‌ها رو سینکرون یا استریم (data streaming) می‌کنه.
-و Cross-language هست (مثلاً یک سرویس با Go بنویسی و با Node.js صداش بزنی).

🧐و ایشون دقیقا چه مشکلی رو برای ما حل می‌کنه ؟
فرض کنید یه سیستم میکروسرویس دارید و می‌خواید سرویس ها به صورت استاندارد و سریع با هم حرف بزنند.
اگه بخوایم به شکل REST API این کار رو انجام بدیم 🤓:

-جواب می‌ده، ولی حجم داده‌های JSON بزرگه و پارس کردنش زمان‌بره.
-مدیریت استریم داده در REST خیلی دست و پا گیره.
-نیاز داری قرارداد (Contract) بین سرویس‌ها شفاف و type-safe باشه.

😮حالا اگه از gRPC استفاده کنیم چی میشه اونوقت؟
سریع‌تر از REST چون از داده‌های باینری (ProtoBuf) استفاده می‌کنه و روی HTTP/2 سوار شده که بهینه‌تره.
- قراردادها (با ProtoBuf) تضمین می‌کنه سرویس‌ها اشتباه داده نفرستن یا انتظار داده‌ی اشتباه نداشته باشن.
- پشتیبانی از استریم دو طرفه .
- ارتباط راحت بین زبان‌های مختلف.

خب ، با توجه به توضیحاتی که در پیام قبل و در این پیام دادم ، فکر کنم تا به حال متوجه شده باشید که gRPC چیه و فرقش با REST API چیه.
و شاید سوال پیش بیاد که پس gRPC فقط برای ارتباط بین سرویس هاست و کاربرد دیگه ای نداره؟

چرا داره ، gRPC فقط محدود به برقراری ارتباط بین سرویس ها نمیشه و مثلا با قابلیت stream که داره می‌تونیم در چت های زنده ،استریم ویدیو ، بازی های آنلاین و ... هم استفاده کنیم.
ما حتی می‌تونیم برای ارتباط با مرورگر به واسطه gRPC-web با مرورگر هم ارتباط بر قرار کنیم .

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

پس میشه گفت gRPC بزرگترین کاربردش ارتباط بین سرویس هاست و gRPC یکی از بهترین گزینه‌ها برای ارتباط بین سرویس‌ها به‌ویژه در معماری‌های میکروسرویس یا سیستم‌هایی با چند زبان برنامه‌نویسیه.
1👍1
خب حالا یه مثال کوچیک از نحوه استفاده از gRPC نزنیم؟
فرض کنید یک میکروسرویس برای پرداخت یک سفارش داریم.

برای اینکه این از gRPC استفاده کنیم نیازه یک فایل با پسوند .proto بسازیم ، و با سینتکس مخصوص خودش سرویسمون رو تعریف کنیم. سپس ابزار protoc (کامپایلر proto) اون رو برامون تبدیل می‌کنه به کد مخصوص اون زبانی که سرویسمون رو داریم باهاش می‌سازیم. (مثلا TS)

syntax = "proto3";

package payment;

// پیام ورودی سرویس پرداخت
message PaymentRequest {
string order_id = 1;
double amount = 2;
string currency = 3;
}

// پیام خروجی سرویس پرداخت
message PaymentResponse {
bool success = 1;
string transaction_id = 2;
string message = 3;
}

// تعریف سرویس
service PaymentService {
// متد ساده برای انجام پرداخت
rpc ProcessPayment(PaymentRequest) returns (PaymentResponse);
}

توضیح این تکه کد :
سرویس ما اسمش هست PaymentService
یه تابع داره به اسم ProcessPayment
ورودی‌ش PaymentRequest هست (شامل order_id و مبلغ و واحد پول)
خروجی‌ش PaymentResponse هست (موفق بود یا نه، آیدی تراکنش و یه پیام)

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

📄داکیومنت gRPC
https://grpc.io/

☑️ویدیو یه مثال ساده پیاده‌سازی gRPC در NestJS رو نشون می‌ده.
https://www.youtube.com/watch?v=UkWcjVWs2UQ
5
Dev Fuel pinned «خب ، شروع کارمون با gRPC باشه. چیزی که کنجکاو شدم راجع بهش بدونم و هرچیزی که یاد گرفتم رو اینجا به اشتراک می‌ذارم. البته قبلش بگم که کلا هر چیزی که من در این کانال میگم ، قطعا کافی نیست (چه بسا شاید ایراداتی هم داشته باشه و من از شما یاد بگیرم. در کل هدفم…»
وایب کدینگ (Vibe Coding) چیه؟ بریم سمتش؟ 👀
📣 نظر ماکسیمیلیان درباره Vibe Coding:

👨‍💻 ماکسیمیلیان به نقل از شخصی به نام Andrej Karpathy در پلتفرم X، وایب کدینگ رو این‌شکلی توصیف می‌کنه:
«در وایب کدینگ شما کاملاً فراموش می‌کنید که اصلاً کدی وجود داره، چرا که LLMها مثل Sonnet و... خیلی خوب شده‌اند. بنابراین من به سختی به صفحه‌کلید کیبورد دست می‌زنم. من هر چیزی که هوش مصنوعی می‌نویسد را می‌پذیرم و دیگر تفاوت‌ها را نمی‌خوانم. وقتی پیغام‌های خطا را دریافت می‌کنم، معمولاً آن‌ها را بدون هیچ توضیحی فقط کپی‌پیست می‌کنم و معمولاً این مشکل را حل می‌کند.
من در حال ساخت یک پروژه وب هستم اما "واقعاً کدنویسی نیست"... فقط چیزهایی می‌بینم و چیزهایی می‌گویم، چیزهایی اجرا می‌کنم و چیزهایی را کپی‌پیست می‌کنم. بیشتر اوقات کار می‌کند.» ⚙️🤖

ماکسیمیلیان در ادامه توضیح می‌ده که:
بله درسته، شما با وایب کدینگ می‌تونی خیلی چیزها بسازی. بسیاری از کاربران از تجربه خودشون در کدنویسی به شکل وایب کدینگ گفتند.
می‌شه به شکل وایب کدینگ چیزهای خیلی جالبی ساخت، اما نه به‌صورت کامل! و مشکل وایب کدینگ برای افرادی که نمی‌دونند چطور کد بزنند اینه که صفر یا صدی‌ست! یعنی یا می‌تونی باهاش یه چیز رو کامل بسازی یا کلاً نمی‌تونی.
مثلاً ممکنه ۹۰ درصد کد با وایب کدینگ نوشته بشه اما اون ۱۰ درصد نیاز به کدنویسی خود کدنویس داره. ⚠️

🤔 ماکسیمیلیان از تجربه خودش در وایب کدینگ می‌گه:
من به‌صورت استریم وایب کدینگ کردم و سعی کردم یه برنامه ساده با React Native بنویسم ولی شکست خورد! ظاهر برنامه افتضاح بود و کلی باگ داشت.
من حدوداً ۲ ساعت سعی کردم به این شکل کدنویسی کنم و شکست خورد. درسته اگر چند ساعت وقت بیشتری می‌ذاشتم شاید درست می‌شد.
اما مشکل من با وایب کدینگ اینه: من نمی‌خوام چندین ساعت وقت بذارم و فقط بپرسم و بپرسم و بپرسم. من می‌تونم خیلی جلوتر برم اگه خودم کد بزنم. چرا باید از LLM چیزی رو بپرسم که خودم جوابش رو می‌دونم؟ ⌨️💭

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

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

البته که وایب کدینگ برای افرادی که کدنویسی بلد نیستند باارزشه و می‌تونند اون چیزی که دوست دارند رو بسازند. اما وقتی فقط و فقط به‌واسطه وایب کدینگ برنامه‌ای ساخته می‌شه، بعدش من باید مدام نگران این باشم که چه باگ‌هایی ممکنه داشته باشه، چه نواقص امنیتی می‌تونه داشته باشه. 🛡️
البته که ما انسان‌ها هم وقتی خودمون چیزی رو می‌سازیم ممکنه اشتباه کنیم و باگ‌هایی به وجود بیاد. ولی می‌دونیم که کد چطوری نوشته شده، چه ویژگی‌هایی داره و کجاها باید مراقب باشیم.
درسته شاید AI هم بدونه این‌ها رو ولی ممکنه که رعایت نکنه اصلاً!

در نهایت اینکه من دوست دارم کنترل داشته باشم، بدونم دقیقاً چی نوشته شده. باید با پروژه‌م احساس راحتی کنم.
شاید بقیه مردم چنین احساسی نداشته باشند، به‌راحتی کدهای نوشته‌شده توسط AI رو بدون بازبینی استفاده کنند. ولی بعدش واقعاً باید امیدوار باشی که هیچ‌وقت به یک ارور جدی که ممکنه شما رو به دردسر قانونی بندازه برخورد نکنید. ⚖️

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

به نظرم ماکسیمیلیان خیلی بی‌طرفانه و درست گفته و من باهاش موافقم.نظر شما چیه؟🤔

🔗 لینک ویدیو :
https://youtu.be/VQFvugpxNJE?si=YK1i9-0dXDWpQQc3

👨‍💻🔥 Dev Fuel

#vibe_coding
🔥3
وایب کدینگ (Vibe Coding) چیه؟ بریم سمتش؟ 👀

وایب کدینگ (Vibe Coding) یعنی برنامه‌نویسی بدون حس برنامه‌نویسی!
ماکسیمیلیان به نقل از Andrej Karpathy توضیح می‌ده که تو این سبک، دیگه عملاً کدی نمی‌نویسی. فقط به هوش مصنوعی می‌گی چی می‌خوای، اون کد تولید می‌کنه، تو هم اجراش می‌کنی — حتی وقتی ارور می‌گیری، بدون خوندنش کپی/پیست می‌کنی! 🤖

وایب کدینگ واقعاً می‌تونه خیلی کارا رو راه بندازه، ولی فقط تا یه حد. ماکسیمیلیان می‌گه مشکل اصلی اینه که این روش برای کسی که بلد نیست کد بزنه، یا همه‌چی درسته یا هیچی درست نمی‌شه!
۹۰٪ پروژه ممکنه با AI ساخته بشه، اما اون ۱۰٪ نیاز به درک و دانش واقعی داره. 🔧

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

🧭 نتیجه‌گیری؟
هوش مصنوعی باید دستیار باشه، نه تصمیم‌گیر. وقتی تو بدانی چی می‌خوای و چطور باید ساخته بشه، وایب کدینگ می‌تونه کمکت کنه، ولی نمی‌تونه جایت تصمیم بگیره.

⚠️ اگه فقط به AI تکیه کنی، باید امیدوار باشی که بعداً به یه باگ یا مشکل امنیتی بزرگ نخوری — مخصوصاً وقتی حتی ندونی AI چی نوشته!

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

🤖 خلاصه سازی شده متن بالا درباره وایب کدینگ توسط هوش مصنوعی

👨‍💻🔥 Dev Fuel

#vibe_coding #ai_summarized@dev_fuel
3
یه نکته ریز در ران کردن کانتینر داکر
وقتی کانتینری دارید که نیاز به ترمینال (مثل ubuntu یا هر کانتینری با shell) داره، حتما یادتون باشه -i رو هم در کنار -a بزنید، یا همون -ai .

تفاوتشون چیه؟
🔹فلگ ‌-a فقط خروجی (log) کانتینر رو نشون می‌ده، ولی نمیشه چیزی تایپ کرد (ورودی نداره).
🔹فلگ ‌-i علاوه بر نمایش خروجی، ورودی (stdin) رو باز می‌کنه تا بشه تایپ کرد و به کانتینر فرستاد.

❗️ نکته مهم:
کانتینر رو باید از اول با docker run -it ساخت تا ترمینالش درست کار کنه.

#docker #tip
1🔥1
به عنوان یه برنامه نویس ( خصوصا بک اند ) نیازه که راجع به سیستم دیزاین بدونید.

پیشنهاد می‍کنم اگه خیلی آشنایی ندارید و یا تازه کار هستید (حتی اگه تازه کار هم نباشید خیلی به درد میخوره) این دوره رو ببینید دید خیلی خوبی بهتون میده.
من خودم دارم این دوره رو می‍بینم و اگه چیزی برام جالب به نظر اومد حتما اینجا به اشتراک می‍ذارم.

❗️دوره به زبان انگلیسی هست.

https://downloadly.ir/elearning/video-tutorials/system-design-for-beginners/

#cource #system_design
1
❗️از async/await تو حلقه‌های forEach استفاده نکنید!

خیلی وقت ها لازمه توی کد های بک اند مثلا برای پردازش دیتا یا ارسال چند ریکویست به سرویس خارجی و یا ذخیره چندین رکورد و ... ، روی یک آرایه حلقه بزنیم.
استفاده از این کد توصیه نمیشه :
items.forEach(async (item) => {
await this.doSomething(item);
});


چون متد forEach await رو درست مدیریت نمیکنه و ممکنه کد ها به صورت موازی یا ناهماهنگ اجرا بشه. و نمیشه error handling کرد چون درست نمیشه catch کرد.
روش درست :
for (const item of items) {
await this.doSomething(item);
}


و یا میشه برای موازی بودن از :

await Promise.all(items.map(item => this.doSomething(item)));


استفاده کرد.

#tip #js
👍3