Node Master
کتاب درمورد #Golang میخوندم و این پارگراف یکی از زیباترین متن هایی بود که تا حالا دیدم. درمورد مفهومی وارد شده از دنیای مسابقات اتومبیل رانی به دنیای نرم افزار به اسم mechanical sympathy صحبت میکنه و میگه راننده ای که دقیق با جزیات میدونه ماشینش چطور کار…
یکی از نکاتی که خیلی بدرد بچه های #BackEnd و #FrontEnd در #JavaScript میخوره استفاده از AbortController Signal هست. گاهی اوقات شما یک Async job رو شروع میکنید حالا به هردلیلی قصد دارید در صورتی که اگر اون async function هنوز reslove نشده اون رو کنسل کنید. در همچین سناریو هایی AbortController به کمک شما میاد.
یکی از مثال هایی که میتونید ببینید به عنوان مثال استفاده از fetch هست.
وقتی شما از AbortContoller استفاده میکنید یک object با دوتا attr میگیرید. یک method برای ارسال سیگنال و یکی خود سیگنال. همینطور که میبینید ما یک setTimout گذاشتیم که بعد از 20ms سیگنال رو ارسال کنه و چون eventloop block نشده ما http request رو با fetch ارسال کنید و بعد از ارسال شدن http request که 20ms گذشته ما سیگنال کنسل رو ارسال میکنیم.
حالا اگر بخوایم یک مثال بزنیم که بیشتر برای #NodeJS هست برای درک بهتر. همونطور که اول گفتم خیلی از Standard api های خود #NodeJS همچین interface رو دریافت میکنن به عنوان مثال Stream و worker_thread ها نمونه ای از این موضوع هستند.
همینطور که میبینید یک ReadStream درست کردم برای خوندن یک فایل و مثل fetch یک abortsignal بهش پاس دادم بعد دوباره با استفاده از setTimeout حدود 20ms بعد سیگنال کنسل فرستادم. و استریم رو قطع کردم. حالا درمورد استریم سناریو های دیگ هم وجود داره برای کنسل کردن که کاری به اون ها در اینجا نداریم و موضوع بحث ما نیست.
چرا باید از این روش استفاده کنیم؟
اگر پروژه کوچیک دارید اصلا ارزش استفاده نداره بخاطر پیچدگی که اضاف میکنه این manage کردن سیگنال ها. ولی اگر پروژه با load زیاد دارید به دلیل این که single thread eventloop داریم هرچقد بتونیم کار های اضافی رو از eventloop کمتر کنیم برنامه بهتری خواهیم داشت. خیلی وقت پیش درمورد mechanical sympathy صحبت کرده بودم. همچین تکنیک های ریزی که برای Optimization استفاده میشه ممکنه به صورت روزمره کاربردی نباشه ولی دونستن اون ها خیلی به ما کمک میکنه که بتونیم برنامه بهتری بنویسم.
#Tip
یکی از مثال هایی که میتونید ببینید به عنوان مثال استفاده از fetch هست.
const ac = new AbortController();
setTimeout(() => {
ac.abort();
}, 20);
const response = await fetch("https://httpbin.org/get", {
signal: ac.signal,
});
وقتی شما از AbortContoller استفاده میکنید یک object با دوتا attr میگیرید. یک method برای ارسال سیگنال و یکی خود سیگنال. همینطور که میبینید ما یک setTimout گذاشتیم که بعد از 20ms سیگنال رو ارسال کنه و چون eventloop block نشده ما http request رو با fetch ارسال کنید و بعد از ارسال شدن http request که 20ms گذشته ما سیگنال کنسل رو ارسال میکنیم.
حالا اگر بخوایم یک مثال بزنیم که بیشتر برای #NodeJS هست برای درک بهتر. همونطور که اول گفتم خیلی از Standard api های خود #NodeJS همچین interface رو دریافت میکنن به عنوان مثال Stream و worker_thread ها نمونه ای از این موضوع هستند.
const ac = new AbortController();
setTimeout(() => ac.abort(), 20);
fs.createReadStream("./samplefile.txt", { signal: ac.signal }).pipe(process.stdout);
همینطور که میبینید یک ReadStream درست کردم برای خوندن یک فایل و مثل fetch یک abortsignal بهش پاس دادم بعد دوباره با استفاده از setTimeout حدود 20ms بعد سیگنال کنسل فرستادم. و استریم رو قطع کردم. حالا درمورد استریم سناریو های دیگ هم وجود داره برای کنسل کردن که کاری به اون ها در اینجا نداریم و موضوع بحث ما نیست.
چرا باید از این روش استفاده کنیم؟
اگر پروژه کوچیک دارید اصلا ارزش استفاده نداره بخاطر پیچدگی که اضاف میکنه این manage کردن سیگنال ها. ولی اگر پروژه با load زیاد دارید به دلیل این که single thread eventloop داریم هرچقد بتونیم کار های اضافی رو از eventloop کمتر کنیم برنامه بهتری خواهیم داشت. خیلی وقت پیش درمورد mechanical sympathy صحبت کرده بودم. همچین تکنیک های ریزی که برای Optimization استفاده میشه ممکنه به صورت روزمره کاربردی نباشه ولی دونستن اون ها خیلی به ما کمک میکنه که بتونیم برنامه بهتری بنویسم.
#Tip
👍13
امروز هم با یک موضوع دیگ اومدم که خیلی برای تیم های #BackEnd و #FrontEnd کاربردی هست مخصوصا اگر تیم بزرگ باشه. اگر در تیم های خودتون پکیج داخلی #JavaScript توسعه دادید. به هردلیلی بخشی از اون API اگر Depricate شده اون رو بهتره در ورژن بعدی حذف نکنید. و بهتره با deprecated tag در jsdoc استفاده کنید و به هم تیمی های خودتون توضیح بدید که چرا نباید از این API استفاده کرد و روش جدید استفاده از معادل API جدید هم حتما فراموش نشه.
حالا بچه های #NodeJS یک قدم میتونن فراتر برن و با استفاده از یک function کمکی به runtime هم بگن که این deprecate شده و وقتی پروژه اجرا میشه با #NodeJS به برنامه نویس با هشدار DeprecationWarning اطلاع میده که موضوع رو برسی کنه.
حالا وقتی پروژه رو اجرا کنید همچین خروجی میبینید.
البته اگر این موضوع کافی نبود میتونید با استفاده از --trace-deprecation فلگ جزیات بیشتری از stack trace ببینید و برید موضوع رو دقیق تر برسی کنید.
#Tip
/**
* @deprecated since version 2.0
*/
function old() {
}
حالا بچه های #NodeJS یک قدم میتونن فراتر برن و با استفاده از یک function کمکی به runtime هم بگن که این deprecate شده و وقتی پروژه اجرا میشه با #NodeJS به برنامه نویس با هشدار DeprecationWarning اطلاع میده که موضوع رو برسی کنه.
import util from "node:util";
/**
* @deprecated since version 2.0
*/
function old() {}
old = util.deprecate(old, "since version 2.0");
export { old };
حالا وقتی پروژه رو اجرا کنید همچین خروجی میبینید.
$ node main.js
(node:163509) DeprecationWarning: since version 2.0
البته اگر این موضوع کافی نبود میتونید با استفاده از --trace-deprecation فلگ جزیات بیشتری از stack trace ببینید و برید موضوع رو دقیق تر برسی کنید.
node --trace-deprecation main.js
#Tip
👍15
Node Master
old = util.deprecate(old, "since version 2.0");
الان دقت کردم این بخش میبینم یک تکنیک گاها کاربردی استفاده شده. مخصوصا برای تست. حتی در مواقع ضروری در production هم از این استفاده میکنن. راهنمایی میکنم گاهی در runtime نیاز هست بدون این که به function یا method اورجینال دست بزنیم باید اون رو جایگزین کنیم. اگر دقت نکنیم خیلی هم میتونه خطرناک باشه.
زیر این پست کامنت بزارید درموردش صحبت کنیم.
بعدا درموردش با جزیات بیشتری صحبت میکنیم.
- این هم بگم که decorator نیست.
زیر این پست کامنت بزارید درموردش صحبت کنیم.
بعدا درموردش با جزیات بیشتری صحبت میکنیم.
- این هم بگم که decorator نیست.
👍3
اگر از #NodeJS به صورت حرفه ای استفاده میکنید. همینطور که میدونید چندسالی هست که #ExpressJS فقط روی حالت maintenance بوده و هیچ آپدیت بزرگی نداشته. قرار بود سال 2020 ورژن 5 از این فریمورک محبوب منتشر بشه ولی خب الان 4 سال گذشته و خبری نیست هنوز!
ظاهرا چند هفته اخیر در github بعضی از افراد تاثیر گذار در این پروژه شروع به صحبت درمورد این پروژه و آینده اون کردن و یک نقشه راه تقریبی برای ورژن های 5 , 6 و حتی 7 هم منتشر کردن که میتونید جزیات بیشتر هم در این issue ببینید.
https://github.com/expressjs/discussions/issues/160
یک دورهمی هم داشتن که صحبت هاشون رو گفتن که میتونید از این لینک یوتیوب مشاهده کنید.
https://www.youtube.com/watch?v=beWATMWGu5Q
همین موضوع باعث شده که کامینیوتی #NodeJS از Express فاصله بگیرین و به سمت Fastify حرکت کنن. در حال حاظر من به شخصه برای پروژه جدید به هیچ عنوان از Express دیگه استفاده نمیکنم و صدرصد Fastify رو ترجیح میدم. به دلایل زیر.
- سرعت بالاتر حدود ۸ برابر
- اکوسیستم مناسب از package های 3rd party که توسط تیم اصلی maintain میشه. و هر نیازی رو برای توسعه backend رفع میکنه.
- هسته کوچک اما کاربردی که خیلی توسعه پذیر هست.
- از همه جالب تر به دلیل ساختاری که داره مهاجرت از monolithic به microservice درصورت شناخت کافی از این فریمورک خیلی راحت تر صورت میگیره.
درکل خبر خوبی بود برای جامعه #NodeJS و باید ببینیم در آینده چه اتفاقی خواهد افتاد.
ظاهرا چند هفته اخیر در github بعضی از افراد تاثیر گذار در این پروژه شروع به صحبت درمورد این پروژه و آینده اون کردن و یک نقشه راه تقریبی برای ورژن های 5 , 6 و حتی 7 هم منتشر کردن که میتونید جزیات بیشتر هم در این issue ببینید.
https://github.com/expressjs/discussions/issues/160
یک دورهمی هم داشتن که صحبت هاشون رو گفتن که میتونید از این لینک یوتیوب مشاهده کنید.
https://www.youtube.com/watch?v=beWATMWGu5Q
همین موضوع باعث شده که کامینیوتی #NodeJS از Express فاصله بگیرین و به سمت Fastify حرکت کنن. در حال حاظر من به شخصه برای پروژه جدید به هیچ عنوان از Express دیگه استفاده نمیکنم و صدرصد Fastify رو ترجیح میدم. به دلایل زیر.
- سرعت بالاتر حدود ۸ برابر
- اکوسیستم مناسب از package های 3rd party که توسط تیم اصلی maintain میشه. و هر نیازی رو برای توسعه backend رفع میکنه.
- هسته کوچک اما کاربردی که خیلی توسعه پذیر هست.
- از همه جالب تر به دلیل ساختاری که داره مهاجرت از monolithic به microservice درصورت شناخت کافی از این فریمورک خیلی راحت تر صورت میگیره.
درکل خبر خوبی بود برای جامعه #NodeJS و باید ببینیم در آینده چه اتفاقی خواهد افتاد.
GitHub
Express Forward · Issue #160 · expressjs/discussions
Hey Everyone! I hope this issue finds you doing well, it has been a few years since I last posted in the project but it has been on my mind for a while that I wanted to do this. Thanks to some grea...
👍16
پیج رسمی #NodeJS در توییتر از mascot logo جدید برای Node رونمایی کرد.
اسمش رو گذاشتن Rocket turtle 🐢🚀
https://twitter.com/nodejs/status/1759953849849167878?t=pfq8FarAeV8nE_RJ7uLGbg&s=19
نکته باحال اون لوگو مشکی Nodejs بالا هست که من خیلی خوشم اومد
اسمش رو گذاشتن Rocket turtle 🐢🚀
https://twitter.com/nodejs/status/1759953849849167878?t=pfq8FarAeV8nE_RJ7uLGbg&s=19
نکته باحال اون لوگو مشکی Nodejs بالا هست که من خیلی خوشم اومد
👍8👎1
Node Master
الان دقت کردم این بخش میبینم یک تکنیک گاها کاربردی استفاده شده. مخصوصا برای تست. حتی در مواقع ضروری در production هم از این استفاده میکنن. راهنمایی میکنم گاهی در runtime نیاز هست بدون این که به function یا method اورجینال دست بزنیم باید اون رو جایگزین کنیم.…
چند وقت پیش یک سوال مطرح شد درمورد یک تکه کد که از چه تکنیکی استفاده شده که کد این بود.
به صورت خلاصه به این تکنیک میگن monkey patch. حالا اگر بخوایم خیلی خلاصه بگیم monkey patch چیست؟ جواب به این صورت هست.
- تغییر یک class یا function در زمان اجرا ( runtime ) بهش میگن monkey patch.
پرکاربرد ترین جایی که از این تکنیک استفاده میشه در test هست که شکل پیشرفته ای ازش میبینیم به اسم mock که اگر تست کار کرده باشید براتون قابل درک هست به راحتی. در مواقع خیلی خاص هم در production استفاده میکنن. در صورتی که خیلی سریع میخوان یک لاجیکی رو جایگزین کنن ( hot fix ) و وقت برای فکر کردن درست حسابی برای راه حل خیلی خوب نیست. البته گاهی اوقات رفتار متد های class های استاندارد مثل String رو هم عوض میکنن که من اصلا دوست ندارم و خیلی وقته کد بیسی ندیدم که این کار رو انجام بدن.
همینطور که در مثال میبینید کد LogicCls هیچ متدی نداره و در خط دوم با استفاده از همین تکنیک در زمان runtime بهش یک method اضافه کردیم که تمامی instance هایی که بعد از این خط ساخته میشن متد sell رو دارن.
حالا فانکشن depricate هم در کتاب خانه util یک فانکشن از ما میگیره و یک فانکشن جدید میسازه و شما باید اون رو با فانکشن یا متد قبلی جایگزین با نسخه که depricate برامون ساخته.
#Tip
#JavaScript #NodeJS
old = util.deprecate(old, "since version 2.0");
به صورت خلاصه به این تکنیک میگن monkey patch. حالا اگر بخوایم خیلی خلاصه بگیم monkey patch چیست؟ جواب به این صورت هست.
- تغییر یک class یا function در زمان اجرا ( runtime ) بهش میگن monkey patch.
پرکاربرد ترین جایی که از این تکنیک استفاده میشه در test هست که شکل پیشرفته ای ازش میبینیم به اسم mock که اگر تست کار کرده باشید براتون قابل درک هست به راحتی. در مواقع خیلی خاص هم در production استفاده میکنن. در صورتی که خیلی سریع میخوان یک لاجیکی رو جایگزین کنن ( hot fix ) و وقت برای فکر کردن درست حسابی برای راه حل خیلی خوب نیست. البته گاهی اوقات رفتار متد های class های استاندارد مثل String رو هم عوض میکنن که من اصلا دوست ندارم و خیلی وقته کد بیسی ندیدم که این کار رو انجام بدن.
class LogicCls{}
LogicCls.prototype.sell = () => console.log("sell") // Add a method to class at runtime
const b = new LogicCls()
b.sell()همینطور که در مثال میبینید کد LogicCls هیچ متدی نداره و در خط دوم با استفاده از همین تکنیک در زمان runtime بهش یک method اضافه کردیم که تمامی instance هایی که بعد از این خط ساخته میشن متد sell رو دارن.
حالا فانکشن depricate هم در کتاب خانه util یک فانکشن از ما میگیره و یک فانکشن جدید میسازه و شما باید اون رو با فانکشن یا متد قبلی جایگزین با نسخه که depricate برامون ساخته.
#Tip
#JavaScript #NodeJS
👍3
یکی از نقاط ضعفی که در #JavaScript وجود داره نبود استاندارد Error های مناسب طبق یک class hierarchy خوب مثل #Java یا #Python هست. حالا در #NodeJS سعی بر این شده که به این وضعیت رسیدگی بشه و وضعیت این Error ها به نسبت خود vanilla js خیلی بهتر هست.
در جهت همین موضوع یکی از Error های خیلی مهم در #NodeJS در حقیقت SystemError ها هستن. اگر دوست دارید درمورد سیستم عامل بیشتر بدونید این Error class شما رو یک خورده به سیستم عامل نزدیک تر میکنه. حالا سوال پیش میاد که SystemError چیست؟ اگر برنامه شما درخواستی داشته باشه از سیستم عامل ولی به هر دلیلی محدودیت هایی وجود داشته باشه #NodeJS با SystemError به شما اطلاع میده.
به این کد دقت کنید. ما در اینجا سعی میکنیم که یک فایلی رو از روی دیسک بخونیم که اصلا این فایل وجود نداره. در حقیقت داریم از سیستم عامل درخواست open syscall داریم که فایل رو بخونه یا ایجاد کنه ( در صورت استفاده از flag مناسب برای syscall که اینجا ست نکردیم) با توجه به این مثال به به محدودیت از سمت سیستم عامل میخوریم. و حاصل این کد یک SystemError هست. حالا در "node:util" یک فانکشن کمکی وجود داره که درصورتی که کد SystemError رو که در err.errorno میتونید بهش دسترسی داشته باشید بهش بدید. اسم که در اینجا ENOENT به من میده. این SystemError ها چون مربوط به سیستم عامل هست به زبان برنامه نویسی خاصی وابستگی ندارند و در همه زبان ها شما میتونید اینها رو ببینید.
#Tip
در جهت همین موضوع یکی از Error های خیلی مهم در #NodeJS در حقیقت SystemError ها هستن. اگر دوست دارید درمورد سیستم عامل بیشتر بدونید این Error class شما رو یک خورده به سیستم عامل نزدیک تر میکنه. حالا سوال پیش میاد که SystemError چیست؟ اگر برنامه شما درخواستی داشته باشه از سیستم عامل ولی به هر دلیلی محدودیت هایی وجود داشته باشه #NodeJS با SystemError به شما اطلاع میده.
import fs from "node:fs/promises";
import util from "node:util";
try {
await fs.readFile("./invalid-file.txt");
} catch (err) {
console.log(err);
console.log(util.getSystemErrorName(err.errno));
}
به این کد دقت کنید. ما در اینجا سعی میکنیم که یک فایلی رو از روی دیسک بخونیم که اصلا این فایل وجود نداره. در حقیقت داریم از سیستم عامل درخواست open syscall داریم که فایل رو بخونه یا ایجاد کنه ( در صورت استفاده از flag مناسب برای syscall که اینجا ست نکردیم) با توجه به این مثال به به محدودیت از سمت سیستم عامل میخوریم. و حاصل این کد یک SystemError هست. حالا در "node:util" یک فانکشن کمکی وجود داره که درصورتی که کد SystemError رو که در err.errorno میتونید بهش دسترسی داشته باشید بهش بدید. اسم که در اینجا ENOENT به من میده. این SystemError ها چون مربوط به سیستم عامل هست به زبان برنامه نویسی خاصی وابستگی ندارند و در همه زبان ها شما میتونید اینها رو ببینید.
#Tip
👍13
سلام دوستان ارادت. این پست تبلیغاتی نیست.
یکی از دوستانم مدتی هست با یک تیم روی یک بازی آنلاین دارن کار میکنن. اگر دوست داشتید به بازیشون یک سر بزنید و از کارشون حمایت کنید.
به گفته یکی از اعضای تیمشون :
🏰 اولین بازی استراتژی آنلاین در تلگرام! 🏰
در این بازی امپراتوری شما همیشه در حال گسترش است، حتی زمانی که آفلاین هستید.
بنا کنید، توسعه دهید، سربازان خود را آموزش دهید، با دیگر بازیکنان متحد شوید و به دشمنانتون حمله کنید و سرزمین هاشون رو فتح کنید.
شما، برترین پادشاه خواهید شد. 🔥
🎮 @CastelGame_bot
یکی از دوستانم مدتی هست با یک تیم روی یک بازی آنلاین دارن کار میکنن. اگر دوست داشتید به بازیشون یک سر بزنید و از کارشون حمایت کنید.
به گفته یکی از اعضای تیمشون :
🏰 اولین بازی استراتژی آنلاین در تلگرام! 🏰
در این بازی امپراتوری شما همیشه در حال گسترش است، حتی زمانی که آفلاین هستید.
بنا کنید، توسعه دهید، سربازان خود را آموزش دهید، با دیگر بازیکنان متحد شوید و به دشمنانتون حمله کنید و سرزمین هاشون رو فتح کنید.
شما، برترین پادشاه خواهید شد. 🔥
🎮 @CastelGame_bot
👍16
یک خبر جدید برای بچه های #JavaScript و #NodeJS.
همونطور که میدونید #Deno برای پکیج های 3RD Party از Deno.land/x استفاده میشه و به صورت decentrilized هست. حالا تیم توسعه دهنده #Deno تصمیم گرفته که که یکی Registry جدید برای پکیج های #JavaScript توسعه بده. در حقیقت یک رقیب برای NPM با رویکردی که بیشتر تمرکز روی #Deno هست. قطعا این آپدیت روی بچه های #FrontEnd به اندازه بچه های #BackEnd تاثیر خواهد گذاشت. چون که Deno واقعا داره تلاش میکنه تا ساپورت خوبی از WebAPI ها داشته باشه و تا الان موفق بوده.
https://jsr.io/waitlist
همونطور که میدونید #Deno برای پکیج های 3RD Party از Deno.land/x استفاده میشه و به صورت decentrilized هست. حالا تیم توسعه دهنده #Deno تصمیم گرفته که که یکی Registry جدید برای پکیج های #JavaScript توسعه بده. در حقیقت یک رقیب برای NPM با رویکردی که بیشتر تمرکز روی #Deno هست. قطعا این آپدیت روی بچه های #FrontEnd به اندازه بچه های #BackEnd تاثیر خواهد گذاشت. چون که Deno واقعا داره تلاش میکنه تا ساپورت خوبی از WebAPI ها داشته باشه و تا الان موفق بوده.
https://jsr.io/waitlist
Deno
Third Party Modules | Deno
A hosting service for Deno noscripts.
👍12
یک خبر دارم براتون درمورد #NodeJS که وب سایت رسمی این Runtime محبوب در حال Redesign توسط تیم رسمی Node هست و میتونید از طریق این pull request آپدیت های مربوط به این موضوع رو دنبال کنید.
https://github.com/nodejs/nodejs.org/pull/6353
البته میتونید از این لینک هم دمو این وب سایت جدید برای #NodeJS رو مشاهده کنید.
https://nodejs-j7xn7o05q-openjs.vercel.app/en
https://github.com/nodejs/nodejs.org/pull/6353
البته میتونید از این لینک هم دمو این وب سایت جدید برای #NodeJS رو مشاهده کنید.
https://nodejs-j7xn7o05q-openjs.vercel.app/en
👍13
سلام دوستان ارادت.
من به تازگی یک مصاحبه شغلی برای #NodeJS به صورت ریموت رفتم. بهم یک تمرین دادند و اون رو حل کردم. مصاحبه #NestJS میخواستن ولی من از استک زیر استفاده کردم و offer رو گرفتم.
NestJS + Fastify + Mikro-Orm + Postgres
راجع بیشتر تایم مصاحبه هم داشتیم درمورد تست نوشتن و تست ها صحبت میکردیم.
اگر دنبال کار میگردین و تجربه ندارید میتونید برید کد های این ریپو رو بخونید نمونه سوالی که در مصاحبه ازتون میپرسن رو ببینید و سعی کنید خودتون حل کنید تا شاید بتونه بهتون کمک کنه.
نکته جالب این هست که docker-compose که نوشته بودم روز مصاحبه بخاطر migration دیتابیس کار نمیکرد و من این رو چک نکرده بودم. با این وجود offer رو گرفتم. من این قسمت رو هم درست نمیکنم تا که یک وقت فکر نکنید همه چی طبق برنامه پیش میره. گاهی پیش میاد همچین اشتباهاتی ولی خب با مصاحبه کننده ها راجع بهش صحبت کردیم و تاثیر منفی نداشت.
به ریپو دست نزدم و دقیقا همون کدی که ارایه دادم رو گذاشتم فقط README رو آپدیت کردم که اگر دوست داشتید پروژه رو بیارید بالا و البته این کد ۲ روز کمتر وقت گذاشته شده و خیلی کارا رو میشد بهتر انجام داد و اتفاقا راجع به این موضوع هم صحبت شد. یعنی شما نیازی نیست کدی که میزنید صدرصد عالی باشه. کد خوب بزنید و بدونید که چطور میشه این کد رو بهتر کرد. چون درمورد یک سری پترن ها ازم سوال شد که پروژه رو تمیز کنیم.
سوالات مهمی که ازم پرسیده شد.
- به صورت کلی Circular Dependency چیست و چطور باید باهاش مواجهه شد.
درمورد راه حلش در NestJs توضیح دادم و به صورت کلی راجع این مشکل در زبان های برنامه نویسی توضیح دادم که معمولا یک کد top level ایجاد میکنم. لینک زیر راه حل مناسب در NestJS هست ولی درکل Circular Dependency یک نوع Anti Pattern هست و میتونه نشونه کد بد باشه. راجع به این موضوع عمیق باید صحبت کرد.
https://docs.nestjs.com/fundamentals/circular-dependency
- در تست ها چرا database fake ایجاد کردی و mock نکردی.
به این دلیل که من بیشتر تست های integration هدفم بود و unit test به همراه behiver test زمان بر بود. اینجا شما باید درمورد رویکرد های کلی تست نویسی مثل Testing Diamond و Testing Pyramid بدونید. لینک زیر مقاله خوبیه.
https://www.linkedin.com/pulse/pyramid-diamond-honeycomb-trophy-find-testing-strategy-fits/
- پترن Repository چطور میتونه باعث بشه کدت تمیز تر بشه؟
میتونیم DAO درست کنیم و وابستگی خودمون رو به ORM ها و به لایه data persistence حذف کنیم. این پترن خیلی در Java Spring Boot مرسوم هست به نوعی کمک به Repository پترن میکنه. این لینک میتونه بهتون کمک کنه.
https://www.digitalocean.com/community/tutorials/dao-design-pattern
اگر یکم تازه کار تر هستید تست های این پروژه رو نگاه کنید. سوال هم داشتید بپرسید اگر جایی حس میکنید تکنیکی کد من رو میتونست بهتر کنه خوشحال میشم بهم بگید.
راستی Star ⭐️ فراموش نشه :)
https://github.com/imanhpr/nest-assignment
من به تازگی یک مصاحبه شغلی برای #NodeJS به صورت ریموت رفتم. بهم یک تمرین دادند و اون رو حل کردم. مصاحبه #NestJS میخواستن ولی من از استک زیر استفاده کردم و offer رو گرفتم.
NestJS + Fastify + Mikro-Orm + Postgres
راجع بیشتر تایم مصاحبه هم داشتیم درمورد تست نوشتن و تست ها صحبت میکردیم.
اگر دنبال کار میگردین و تجربه ندارید میتونید برید کد های این ریپو رو بخونید نمونه سوالی که در مصاحبه ازتون میپرسن رو ببینید و سعی کنید خودتون حل کنید تا شاید بتونه بهتون کمک کنه.
نکته جالب این هست که docker-compose که نوشته بودم روز مصاحبه بخاطر migration دیتابیس کار نمیکرد و من این رو چک نکرده بودم. با این وجود offer رو گرفتم. من این قسمت رو هم درست نمیکنم تا که یک وقت فکر نکنید همه چی طبق برنامه پیش میره. گاهی پیش میاد همچین اشتباهاتی ولی خب با مصاحبه کننده ها راجع بهش صحبت کردیم و تاثیر منفی نداشت.
به ریپو دست نزدم و دقیقا همون کدی که ارایه دادم رو گذاشتم فقط README رو آپدیت کردم که اگر دوست داشتید پروژه رو بیارید بالا و البته این کد ۲ روز کمتر وقت گذاشته شده و خیلی کارا رو میشد بهتر انجام داد و اتفاقا راجع به این موضوع هم صحبت شد. یعنی شما نیازی نیست کدی که میزنید صدرصد عالی باشه. کد خوب بزنید و بدونید که چطور میشه این کد رو بهتر کرد. چون درمورد یک سری پترن ها ازم سوال شد که پروژه رو تمیز کنیم.
سوالات مهمی که ازم پرسیده شد.
- به صورت کلی Circular Dependency چیست و چطور باید باهاش مواجهه شد.
درمورد راه حلش در NestJs توضیح دادم و به صورت کلی راجع این مشکل در زبان های برنامه نویسی توضیح دادم که معمولا یک کد top level ایجاد میکنم. لینک زیر راه حل مناسب در NestJS هست ولی درکل Circular Dependency یک نوع Anti Pattern هست و میتونه نشونه کد بد باشه. راجع به این موضوع عمیق باید صحبت کرد.
https://docs.nestjs.com/fundamentals/circular-dependency
- در تست ها چرا database fake ایجاد کردی و mock نکردی.
به این دلیل که من بیشتر تست های integration هدفم بود و unit test به همراه behiver test زمان بر بود. اینجا شما باید درمورد رویکرد های کلی تست نویسی مثل Testing Diamond و Testing Pyramid بدونید. لینک زیر مقاله خوبیه.
https://www.linkedin.com/pulse/pyramid-diamond-honeycomb-trophy-find-testing-strategy-fits/
- پترن Repository چطور میتونه باعث بشه کدت تمیز تر بشه؟
میتونیم DAO درست کنیم و وابستگی خودمون رو به ORM ها و به لایه data persistence حذف کنیم. این پترن خیلی در Java Spring Boot مرسوم هست به نوعی کمک به Repository پترن میکنه. این لینک میتونه بهتون کمک کنه.
https://www.digitalocean.com/community/tutorials/dao-design-pattern
اگر یکم تازه کار تر هستید تست های این پروژه رو نگاه کنید. سوال هم داشتید بپرسید اگر جایی حس میکنید تکنیکی کد من رو میتونست بهتر کنه خوشحال میشم بهم بگید.
راستی Star ⭐️ فراموش نشه :)
https://github.com/imanhpr/nest-assignment
Documentation | NestJS - A progressive Node.js framework
Nest is a framework for building efficient, scalable Node.js server-side applications. It uses progressive JavaScript, is built with TypeScript and combines elements of OOP (Object Oriented Programming), FP (Functional Programming), and FRP (Functional Reactive…
👍34
سلام دوستان ارادت روزتون بخیر باشه.
اگر دقت کرده باشید مدتی هست کم فعالیت شده اینجا. این روزا به دلیل یک سری اتفاق ها و تغییرات خیلی زیاد در زندگیم وقت نمیکنم محتوا آموزشی تولید کنم و براتون بزارم. خوشبختانه کارام خیلی جلو رفته و همه چی داره خوب پیش میره.
خواستم بهتون بگم بین یک هفته یا حداکثر تا بعد از عید پست آموزشی در چنل نداریم. خوشبختانه در این چند ماه موضوعات مختلفی درمورد #NodeJS صحبت کردیم و یک TODO لیست کامل از موضوعاتی که دوست داریم عمیق تر بشیم رو داریم.
بهتون این قول رو میدم که بعد از این دوره محدود به #NodeJS نیستیم و سعی میکنیم خیلی از زاویه CS به موضوعات نگاه کنیم. یعنی به سمت هدف اصلی خودمون حرکت کنیم.
این مدت که کمتر بودم یک سری برنامه ها رو چیدم و جلو بردم که بتونم کیفیت بهتری این کار رو ادامه بدم. قطعا بعد از این دوره که فعالیت ندارم ویدیو آموزشی با کیفیت خوب و عمیق خواهیم داشت. خواستم بهتون بگم لطفا از چنل left ندین چون قوی تر ادامه میدیم باهم.
داخل گروه همچنان فعال هستم صحبت میکنیم. خیلی خیلی از تک تک شما دوستان متشکر هستم که در مرحله یک این کامینیوتی کوچک و خوبی که داریم همراه بودین و حمایت و تشویق کردین❤️. حالا نوبت به مرحله دو هست که با هم وارد بشیم.
بزودی با محتوا بهتر میبینمتون 😃❤️
ایمان هستم داداش کوچیک همه شما موفق باشید ❤️
اگر دقت کرده باشید مدتی هست کم فعالیت شده اینجا. این روزا به دلیل یک سری اتفاق ها و تغییرات خیلی زیاد در زندگیم وقت نمیکنم محتوا آموزشی تولید کنم و براتون بزارم. خوشبختانه کارام خیلی جلو رفته و همه چی داره خوب پیش میره.
خواستم بهتون بگم بین یک هفته یا حداکثر تا بعد از عید پست آموزشی در چنل نداریم. خوشبختانه در این چند ماه موضوعات مختلفی درمورد #NodeJS صحبت کردیم و یک TODO لیست کامل از موضوعاتی که دوست داریم عمیق تر بشیم رو داریم.
بهتون این قول رو میدم که بعد از این دوره محدود به #NodeJS نیستیم و سعی میکنیم خیلی از زاویه CS به موضوعات نگاه کنیم. یعنی به سمت هدف اصلی خودمون حرکت کنیم.
این مدت که کمتر بودم یک سری برنامه ها رو چیدم و جلو بردم که بتونم کیفیت بهتری این کار رو ادامه بدم. قطعا بعد از این دوره که فعالیت ندارم ویدیو آموزشی با کیفیت خوب و عمیق خواهیم داشت. خواستم بهتون بگم لطفا از چنل left ندین چون قوی تر ادامه میدیم باهم.
داخل گروه همچنان فعال هستم صحبت میکنیم. خیلی خیلی از تک تک شما دوستان متشکر هستم که در مرحله یک این کامینیوتی کوچک و خوبی که داریم همراه بودین و حمایت و تشویق کردین❤️. حالا نوبت به مرحله دو هست که با هم وارد بشیم.
بزودی با محتوا بهتر میبینمتون 😃❤️
ایمان هستم داداش کوچیک همه شما موفق باشید ❤️
👍29
Node Master
سلام دوستان ارادت روزتون بخیر باشه. اگر دقت کرده باشید مدتی هست کم فعالیت شده اینجا. این روزا به دلیل یک سری اتفاق ها و تغییرات خیلی زیاد در زندگیم وقت نمیکنم محتوا آموزشی تولید کنم و براتون بزارم. خوشبختانه کارام خیلی جلو رفته و همه چی داره خوب پیش میره.…
راستی دوستان یادم رفت بگم.
اگر انتقادی یا پیشنهادی دارید.
واقعا ممنون میشم اینجا کامنت بزارید بگید برای بهتر شدن.
و این که اگر موضوع خاصی هم دوست دارید راجع بهش مطلب بخونید و یاد بگیرید اینجا حتما بگید تا داخل برنامه بزاریم برسیش کنیم با هم یاد بگیریم.
موفق باشید❤️
اگر انتقادی یا پیشنهادی دارید.
واقعا ممنون میشم اینجا کامنت بزارید بگید برای بهتر شدن.
و این که اگر موضوع خاصی هم دوست دارید راجع بهش مطلب بخونید و یاد بگیرید اینجا حتما بگید تا داخل برنامه بزاریم برسیش کنیم با هم یاد بگیریم.
موفق باشید❤️
👍11
#Work
https://www.linkedin.com/posts/moeinakrami_%D8%B3%D9%84%D8%A7%D9%85-%D9%86%DB%8C%D8%A7%D8%B2%D9%85%D9%86%D8%AF-%DB%8C%DA%A9-%D8%A8%DA%A9-%D8%A7%D9%86%D8%AF-%D8%AF%D9%88%D9%84%D9%88%D9%BE%D8%B1-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86%D8%AC%D9%86%DA%AF%D9%88-activity-7172455732548624384-6NfP?utm_source=share&utm_medium=member_android
https://www.linkedin.com/posts/moeinakrami_%D8%B3%D9%84%D8%A7%D9%85-%D9%86%DB%8C%D8%A7%D8%B2%D9%85%D9%86%D8%AF-%DB%8C%DA%A9-%D8%A8%DA%A9-%D8%A7%D9%86%D8%AF-%D8%AF%D9%88%D9%84%D9%88%D9%BE%D8%B1-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86%D8%AC%D9%86%DA%AF%D9%88-activity-7172455732548624384-6NfP?utm_source=share&utm_medium=member_android
Linkedin
Moein Akrami on LinkedIn: سلام
نیازمند یک بک اند دولوپر پایتون/جنگو یا نود جی اس هستیم
نیاز به… | 56 comments
نیازمند یک بک اند دولوپر پایتون/جنگو یا نود جی اس هستیم
نیاز به… | 56 comments
سلام
نیازمند یک بک اند دولوپر پایتون/جنگو یا نود جی اس هستیم
نیاز به سابقه کاری نیست فقط نمونه کار داشته باشید
کار به صورت دورکاری_حضوری هست و پروژه ای
ترجیحا… | 56 comments on LinkedIn
نیازمند یک بک اند دولوپر پایتون/جنگو یا نود جی اس هستیم
نیاز به سابقه کاری نیست فقط نمونه کار داشته باشید
کار به صورت دورکاری_حضوری هست و پروژه ای
ترجیحا… | 56 comments on LinkedIn
سلام و درود و ارادت.
امیدوارم هرجا هستید حالتون خوب و شاد باشید.
روز آخر سال هست گفتم هم بهتون تبریک بگم هم تعطیلات خوبی داشته باشید.
هم یک آپدیت بدم که یک سری کارا بردم جلو تا بتونیم باهمدیگه چیزای بیشتری یاد بگیریم.
واقعا این کامینیوتی کوچکی که با هم تشکیل دادیم و رو خیلی دوست دارم و قطعا در سال جدید فعالیت ها خیلی قوی تر و بیشتری خواهیم داشت.
امیدوارم هرجا هستید حال دلتون خوب و سلامت باشید❤️
ایمان هستم کوچیک شما ارادت❤️
امیدوارم هرجا هستید حالتون خوب و شاد باشید.
روز آخر سال هست گفتم هم بهتون تبریک بگم هم تعطیلات خوبی داشته باشید.
هم یک آپدیت بدم که یک سری کارا بردم جلو تا بتونیم باهمدیگه چیزای بیشتری یاد بگیریم.
واقعا این کامینیوتی کوچکی که با هم تشکیل دادیم و رو خیلی دوست دارم و قطعا در سال جدید فعالیت ها خیلی قوی تر و بیشتری خواهیم داشت.
امیدوارم هرجا هستید حال دلتون خوب و سلامت باشید❤️
ایمان هستم کوچیک شما ارادت❤️
👍28
سلام دوستان و ارادت.
خلاصه ویدیو :
- من برگشتم
- تست میکروفون جدیدم.
- جاوا اسکریپت و Node رو عمیق تر میشیم.
- مفاهیم Cs رو حتما شروع میکنیم.
- کمی گپ خودمونی.
امیدوارم هرجا هستید حالتون خوب باشه و تعطیلات خوبی رو گذرونده باشید. کم کم وقتشه با هم آماده بشیم برا سال جدید. امیدوارم همگی موفق باشید رفقا❤️
کوچیک شما ایمان هستم❤️
https://youtu.be/c526-vDCJOo?si=S-JyYvzZQJ3y3KtE
خلاصه ویدیو :
- من برگشتم
- تست میکروفون جدیدم.
- جاوا اسکریپت و Node رو عمیق تر میشیم.
- مفاهیم Cs رو حتما شروع میکنیم.
- کمی گپ خودمونی.
امیدوارم هرجا هستید حالتون خوب باشه و تعطیلات خوبی رو گذرونده باشید. کم کم وقتشه با هم آماده بشیم برا سال جدید. امیدوارم همگی موفق باشید رفقا❤️
کوچیک شما ایمان هستم❤️
https://youtu.be/c526-vDCJOo?si=S-JyYvzZQJ3y3KtE
YouTube
سلام دوباره من برگشتم
https://news.1rj.ru/str/nodemasternodemaster.ir
👍16
قطعا همگی با Template Engine هایی مثل Pug, Handlebars و EJS آشنایی دارید. هرکسی با توجه به سلیقه ای که داره از یکی از اینها استفاده میکنه. من خودم استایل EJS رو به دلیل سادگی و نزدیک بودن به خود #JavaScript خیلی دوست دارم. حالا یک Template Engine جدیدتر داریم به اسم ETA که شباهت خیلی زیادی به EJS داره و با #Deno و #Browser هم سازگار هست و البته حجم کمتری داره و از EJS هم سریعتر هست.
اگر دوست دارید میتونید یک نگاهی بهش بندازید.
https://eta.js.org/
#NodeJS
اگر دوست دارید میتونید یک نگاهی بهش بندازید.
https://eta.js.org/
#NodeJS
👍18
سلام دوستان ارادت.
امروز آپدیت جدید 20.12 LTS که به تازگی برای #NodeJS منتشر شده رو باهم برسی میکنیم.
به نسبت این آپدیت تغییرات بیشتری از آپدیت های قبلی مثل 20.11 و 20.12 داشته و چنتا حرکت خوب هم بلاخره از Node درمورد single exec app ها دیدیم.
در بخش آخر هم قسمت هایی از آپدیت رو با مثال و کد برسی میکنیم.
https://youtu.be/RvUo_Ms9irI?si=2nz7wvS79c8VpIvs
این اولین ویدیو فنی من هست ممنون میشم ببینید و نظر خودتون رو بهم بگید تا بتونم ویدیو ها بهتری بزارم.
موفق باشید❤️👍
امروز آپدیت جدید 20.12 LTS که به تازگی برای #NodeJS منتشر شده رو باهم برسی میکنیم.
به نسبت این آپدیت تغییرات بیشتری از آپدیت های قبلی مثل 20.11 و 20.12 داشته و چنتا حرکت خوب هم بلاخره از Node درمورد single exec app ها دیدیم.
در بخش آخر هم قسمت هایی از آپدیت رو با مثال و کد برسی میکنیم.
https://youtu.be/RvUo_Ms9irI?si=2nz7wvS79c8VpIvs
این اولین ویدیو فنی من هست ممنون میشم ببینید و نظر خودتون رو بهم بگید تا بتونم ویدیو ها بهتری بزارم.
موفق باشید❤️👍
YouTube
برسی آپدیت 20.12 LTS در NodeJS
در این ویدیو سعی کردیم یک نگاه کلی به آپدیت 20.12 LTS در #NodeJS داشته باشیم.
چند مثال ساده برای ویژگی های جدید رو با هم برسی میکنیم.
https://news.1rj.ru/str/nodemaster
چند مثال ساده برای ویژگی های جدید رو با هم برسی میکنیم.
https://news.1rj.ru/str/nodemaster
👍18
Node Master
#Update #News
امروز آپدیت جدید برای #BunJS یعنی 1.1 منتشر شد. بزرگترین خبر مربوط به این آپدیت اضافه شدن ساپورت برای #Windows هست. کلی ویژگی های جدید دیگه بوده و کلی بهبود برای سازگاری بهتر با API مربوط به #NodeJS انجام گرفته.
درکل امسال قراره تابستون خیلی داغی 🔥 برای کامینیوتی #BackEnd و #JavaScript داشته باشیم باتوجه به این که #Deno داره خودش رو برای نسخه ۲ آماده میکنه و در یک ماه آینده ظاهرا باید انتظار منتشر شدن نسخه 22 LTS برای #NodeJS باشیم و ببینیم آیا میتونه #BunJS که مدعی این هست که جای #NodeJS در سال 2024 میخواد بگیره میرسه یا نه؟
https://twitter.com/bunjavanoscript/status/1732945030007099510
باتوجه به Drama های پیش اومده و کل کل بین runtime های مختلف شاهد رقابت خیلی سنگین تری بنظرم امسال هستیم به طوری که این رقابت داره تبدیل به مبارزه UFC میشه 🥊.
نظر شخصی :
به شخصه با #BunJS در حال حاظر حال نمیکنم به دلایل زیر
- سال گذشته حاشیه و Drama در کامینیوتی زیاد ایجاد شد و بخشیش از طرف #BunJS بود.
- هنوز بنظرم خیلی فاصله داره تا بگیم production ready هست. ( همه چیز سرعت نیست و stability بنظرم خیلی مهم تره )
این وسط #Deno میانه روی کرده و آروم و بی سر صدای اضافه خودش رو بهتر کرده و با حرکت آخرش یعنی jsr.io به نظر من خیلی جایگاه بهتری داره ( برای من ). تنها مشکلی که به نظرم داره کامینیوتی کوچیکش هست که برای پروژه زدن یکم کار رو سخت میکنه.
و این که #NodeJS که عنوان Rocket Turtle 🚀 🐢 رو یدک میکشه هم سال قبل با توجه به آپدیت هایی که داد به صورت جدی اعلام کرد که قصد نداره بازار رو به راحتی تسلیم کنه و کنار بکشه به طوری که به صورت مرتب شاهد improvement هستیم.
درکل امسال قراره تابستون خیلی داغی 🔥 برای کامینیوتی #BackEnd و #JavaScript داشته باشیم باتوجه به این که #Deno داره خودش رو برای نسخه ۲ آماده میکنه و در یک ماه آینده ظاهرا باید انتظار منتشر شدن نسخه 22 LTS برای #NodeJS باشیم و ببینیم آیا میتونه #BunJS که مدعی این هست که جای #NodeJS در سال 2024 میخواد بگیره میرسه یا نه؟
https://twitter.com/bunjavanoscript/status/1732945030007099510
باتوجه به Drama های پیش اومده و کل کل بین runtime های مختلف شاهد رقابت خیلی سنگین تری بنظرم امسال هستیم به طوری که این رقابت داره تبدیل به مبارزه UFC میشه 🥊.
نظر شخصی :
به شخصه با #BunJS در حال حاظر حال نمیکنم به دلایل زیر
- سال گذشته حاشیه و Drama در کامینیوتی زیاد ایجاد شد و بخشیش از طرف #BunJS بود.
- هنوز بنظرم خیلی فاصله داره تا بگیم production ready هست. ( همه چیز سرعت نیست و stability بنظرم خیلی مهم تره )
این وسط #Deno میانه روی کرده و آروم و بی سر صدای اضافه خودش رو بهتر کرده و با حرکت آخرش یعنی jsr.io به نظر من خیلی جایگاه بهتری داره ( برای من ). تنها مشکلی که به نظرم داره کامینیوتی کوچیکش هست که برای پروژه زدن یکم کار رو سخت میکنه.
و این که #NodeJS که عنوان Rocket Turtle 🚀 🐢 رو یدک میکشه هم سال قبل با توجه به آپدیت هایی که داد به صورت جدی اعلام کرد که قصد نداره بازار رو به راحتی تسلیم کنه و کنار بکشه به طوری که به صورت مرتب شاهد improvement هستیم.
X (formerly Twitter)
Bun (@bunjavanoscript) on X
We have one goal for 2024
Flip the default backend JavaScript runtime from Node.js to Bun
Flip the default backend JavaScript runtime from Node.js to Bun
👍23
یه پست در لینکدین منتشر شد که خیلی بازخورد های مختلف و بیشتر منفی داشت.
یکسری نکات درمورد تجربه هام گفتم اگر دوست داشتید چک کنید شاید چیز جدید بود براتون.
https://twitter.com/imanhpr_media/status/1775295664240423416?t=IYwKarH9sFWH_6MpZVV0tA&s=19
یکسری نکات درمورد تجربه هام گفتم اگر دوست داشتید چک کنید شاید چیز جدید بود براتون.
https://twitter.com/imanhpr_media/status/1775295664240423416?t=IYwKarH9sFWH_6MpZVV0tA&s=19
X (formerly Twitter)
ImanHpr (@imanhpr_media) on X
درسی که بنظرم باید از این پست لینکدین بگیریم این که.
اول زبان ها برنامه نویسی همشون یک abstraction خوشگل روی interface های زشت سیستم عامل هستن.
رفرنس میدم به عکس معروف کتاب Modern Operating Systems از
Andrew S. Tanenbaum
/2
اول زبان ها برنامه نویسی همشون یک abstraction خوشگل روی interface های زشت سیستم عامل هستن.
رفرنس میدم به عکس معروف کتاب Modern Operating Systems از
Andrew S. Tanenbaum
/2
👍3