سلام دوستان ارادت امیدوارم حالتون خوب باشه. نسخه 22 برای #NodeJS منتشر شد و در این ویدیو با هم این آپدیت رو برسی میکنیم.
نکاتی که در این ویدیو خواهید دید.
- برسی drop شدن assert keyword در import assertions
- فلگ بسیار کاربردی --watch از حالت experimental خارج شد.
- استفاده از WebSocket client بدون نیاز به flag
- برای ویژگی جدید node --run
- برسی فانکشن جدید glob در node:fs
- مهمترین آپدیت یعنی قابلیت import کردن پکیج های ESM در CJS به صورت Sync که خیلی کاربردی هست و به کدبیس های Legacy کمک میکنه.
https://youtu.be/1kboVUp0F5w?si=O3RbwypIEZRJuRhE
نکاتی که در این ویدیو خواهید دید.
- برسی drop شدن assert keyword در import assertions
- فلگ بسیار کاربردی --watch از حالت experimental خارج شد.
- استفاده از WebSocket client بدون نیاز به flag
- برای ویژگی جدید node --run
- برسی فانکشن جدید glob در node:fs
- مهمترین آپدیت یعنی قابلیت import کردن پکیج های ESM در CJS به صورت Sync که خیلی کاربردی هست و به کدبیس های Legacy کمک میکنه.
https://youtu.be/1kboVUp0F5w?si=O3RbwypIEZRJuRhE
YouTube
برسی آپدیت 22 در #NodeJS
سلام دوستان ارادت. در این ویدیو با هم نگاهی دقیق به آپدیت 22 در NodeJS میکنیم و باهم ویژگی های جدید این آپدیت رو برسی میکنیم.
00:00 - Intro
01:12 - Good To Know
02:34 - Drop Assert Keyword
07:52 - Abort Signal
08:30 - Watch Flag
10:05 - Standard WebSocket…
00:00 - Intro
01:12 - Good To Know
02:34 - Drop Assert Keyword
07:52 - Abort Signal
08:30 - Watch Flag
10:05 - Standard WebSocket…
👍15
Node Master
سلام دوستان ارادت امیدوارم حالتون خوب باشه. نسخه 22 برای #NodeJS منتشر شد و در این ویدیو با هم این آپدیت رو برسی میکنیم. نکاتی که در این ویدیو خواهید دید. - برسی drop شدن assert keyword در import assertions - فلگ بسیار کاربردی --watch از حالت experimental…
خواستم تشکر کنم بابت گذاشتن این پست داخل چنلت. ایدی خودت رو پیدا نکردم گفتم اینجا تشکر کنم🧡
https://news.1rj.ru/str/Never_Forget_Semicolon
https://news.1rj.ru/str/Never_Forget_Semicolon
Telegram
Semicolon
RIP 🏴
👍6
یکی از نکاتی که به برای بچه های #BackEnd و #FrontEnd به اندازه هم میتونه کاربردی باشه استفاده از static method های Array.from و Array.fromAsync. این نکته هم بگم که Array.fromAsync به تازگی با توجه به آپدیت #V8 در نسخه 22 برای #NodeJS منتشر شده و در نسخه های قبل در دسترس نیست.
حالا کار این متد ها به چه شکل هست با .from شروع میکنیم. شما اگر یک iterable obj داشته باشید شاید بخواید این Object رو تبدیل به Array کنید و معمولا از این تکنیک استفاده میشه.
این استایل از برنامه نویسی بیشتر به نوعی imperative programming محسوب میشه و در زبان های procedural programming خیلی دیده میشه. با این حال که #JavaScript یک زبان Multi-paradigm هست و این استایل کد زدن مجاز هست ولی خیلی در کامینیوتی مرسوم نیست و کلا بیشتر کد های declarative و ترکیب OOP و Functional استفاده میشه. ( هرچند Functional خالص سخت هست در #JavaScript )
حالا اگر بخوایم کد بالا رو یطوری داشته باشیم که مرسوم تر باشه بین برنامه نویس های #JavaScript، در این سناریو متد های Array.from و Array.fromAsync به کمک ما میاد تا کد ما declarative تر بشه.
حالا برای تبدیل کد بالا کافی هست این کار رو کنید و بووم تمام!
اگر بخوام درمورد Array.fromAsync هم بگم این هست که دقیقا به همین شکل کار میکنه و تنها تفاوتش این هست که با async iterable ها و generator ها سازگار هست.
حالا همین رو به این شکل تبدیل میکنیم.
هنوز یک قسمت جالب از داستان مونده بزارید با مثال بهتون نشون بدم.
اگر اینجا دقت کنید میبینید که میتونه سناریو مناسبی برای استفاده از Promise.all باشه ولی استفاده نشده به نظرتون تفاوت چیه؟
با استفاده از Promise.all تمام Promise ها به صورت همزمان تلاش به resolve شدن دارن یعنی داره concurrent انجام میشه اما در این سناریو بدون بلاک شدن event loop به ترتیب Promise ها resolve میشن.
راستی این ویژگی هم از نسخه 1.38 روی #Deno در دسترس بوده و این برای من خیلی جذابه که تیم #Deno اینقدر خوب دارن عمل میکنن. مدتی هست هر حرکتی در اکوسیستم اتفاق میافته #Deno از پرچم داران در سرعت آپدیت و رو به جلو حرکت کردن هست.
#Tip
حالا کار این متد ها به چه شکل هست با .from شروع میکنیم. شما اگر یک iterable obj داشته باشید شاید بخواید این Object رو تبدیل به Array کنید و معمولا از این تکنیک استفاده میشه.
const arr = [];
for (const v of iterableObj) {
arr.push(v);
}
این استایل از برنامه نویسی بیشتر به نوعی imperative programming محسوب میشه و در زبان های procedural programming خیلی دیده میشه. با این حال که #JavaScript یک زبان Multi-paradigm هست و این استایل کد زدن مجاز هست ولی خیلی در کامینیوتی مرسوم نیست و کلا بیشتر کد های declarative و ترکیب OOP و Functional استفاده میشه. ( هرچند Functional خالص سخت هست در #JavaScript )
حالا اگر بخوایم کد بالا رو یطوری داشته باشیم که مرسوم تر باشه بین برنامه نویس های #JavaScript، در این سناریو متد های Array.from و Array.fromAsync به کمک ما میاد تا کد ما declarative تر بشه.
حالا برای تبدیل کد بالا کافی هست این کار رو کنید و بووم تمام!
const arr = Array.from(iterable);
اگر بخوام درمورد Array.fromAsync هم بگم این هست که دقیقا به همین شکل کار میکنه و تنها تفاوتش این هست که با async iterable ها و generator ها سازگار هست.
const arr = [];
for await (const v of asyncIterable) {
arr.push(v);
}
حالا همین رو به این شکل تبدیل میکنیم.
const arr = await Array.fromAsync(asyncIterable);
هنوز یک قسمت جالب از داستان مونده بزارید با مثال بهتون نشون بدم.
Array.fromAsync(
new Set([Promise.resolve(1), Promise.resolve(2), Promise.resolve(3)]),
).then((array) => console.log(array));
// [1, 2, 3]
اگر اینجا دقت کنید میبینید که میتونه سناریو مناسبی برای استفاده از Promise.all باشه ولی استفاده نشده به نظرتون تفاوت چیه؟
با استفاده از Promise.all تمام Promise ها به صورت همزمان تلاش به resolve شدن دارن یعنی داره concurrent انجام میشه اما در این سناریو بدون بلاک شدن event loop به ترتیب Promise ها resolve میشن.
راستی این ویژگی هم از نسخه 1.38 روی #Deno در دسترس بوده و این برای من خیلی جذابه که تیم #Deno اینقدر خوب دارن عمل میکنن. مدتی هست هر حرکتی در اکوسیستم اتفاق میافته #Deno از پرچم داران در سرعت آپدیت و رو به جلو حرکت کردن هست.
#Tip
👍22
من یک نظر دارم که استفاده از switch statement به شدت کد رو کثیف میکنه و هروقت کد #backend یا #frontend میبینم که استفاده شده حس خوبی نمیگیرم.
چندین سال هست که به جرات میتونم بگم شاید ۱۰ بار switch statement استفاده نکردم مگر روی legacy کدی باشم که همچین استایلی کد زده شده باشه.
دوست دارم نظر شما هم بدونم که چه فکر میکنید.
https://x.com/imanhpr_media/status/1785700265280102807?t=kv4Mr2FE8_CIDVl__IqclQ&s=09
چندین سال هست که به جرات میتونم بگم شاید ۱۰ بار switch statement استفاده نکردم مگر روی legacy کدی باشم که همچین استایلی کد زده شده باشه.
دوست دارم نظر شما هم بدونم که چه فکر میکنید.
https://x.com/imanhpr_media/status/1785700265280102807?t=kv4Mr2FE8_CIDVl__IqclQ&s=09
X (formerly Twitter)
ImanHpr (@imanhpr_media) on X
unpopular opinion:
در برنامه نویسی استفاده از switch statement میتونه در بیشتر اوقات نشونه code smell باشه و حتی آماتور برنامه نویس رو نشون بده.
این حرفم به این معنی نیست که اصلا خوب نیست. فقط بیشتر اوقات جای اشتباه استفاده میشه.
در برنامه نویسی استفاده از switch statement میتونه در بیشتر اوقات نشونه code smell باشه و حتی آماتور برنامه نویس رو نشون بده.
این حرفم به این معنی نیست که اصلا خوب نیست. فقط بیشتر اوقات جای اشتباه استفاده میشه.
👍11👎6
سوال مصاحبه درمورد #NestJS
شما وقتی با #NestJS و #TypeScript در حال توسعه #BackEnd هستید خب به صورت روتین از Injectable ها در #NestJS استفاده میکنید.
حالا با فرض این که ما یک EmailService داریم که Injectable هست و میخوایم در سرویس پایین اون رو inject کنیم و استفاده کنیم. به کد پایین دقت کنید.
اینجا همه چی درست و عادی کار میکنه ولی اگر یکم با دقت بیشتری نگاه کنید این کد خیلی غیر عادی هست. باتوجه به این موضوع که در هنگام transpile شدن کد #TypeScript به #JavaScript تایپ ها حذف میشه.
حالا سوال اینجا هست که #NestJS چطور با استفاده از یک type یعنی EmailService متوجه میشه باید چه سرویسی رو inject کنه؟ در حقیقت اینجا از یک type یک logic داره که در برنامه ما استفاده میشه و برسی این black magic میتونه جذاب باشه.
نظراتتون رو کامنت کنید.
#Tip
شما وقتی با #NestJS و #TypeScript در حال توسعه #BackEnd هستید خب به صورت روتین از Injectable ها در #NestJS استفاده میکنید.
حالا با فرض این که ما یک EmailService داریم که Injectable هست و میخوایم در سرویس پایین اون رو inject کنیم و استفاده کنیم. به کد پایین دقت کنید.
@Injectable()
class MyService {
constructor(private readonly emailService : EmailService)
}
اینجا همه چی درست و عادی کار میکنه ولی اگر یکم با دقت بیشتری نگاه کنید این کد خیلی غیر عادی هست. باتوجه به این موضوع که در هنگام transpile شدن کد #TypeScript به #JavaScript تایپ ها حذف میشه.
حالا سوال اینجا هست که #NestJS چطور با استفاده از یک type یعنی EmailService متوجه میشه باید چه سرویسی رو inject کنه؟ در حقیقت اینجا از یک type یک logic داره که در برنامه ما استفاده میشه و برسی این black magic میتونه جذاب باشه.
نظراتتون رو کامنت کنید.
#Tip
👍13
#Work
https://www.linkedin.com/posts/sina-abd_%D8%B3%D9%84%D8%A7%D9%85-%D8%AF%D9%88%D8%B3%D8%AA%D8%A7%D9%86-%D9%85%D8%A7-%D8%AF%D8%B1-%D9%85%D8%AC%D9%85%D9%88%D8%B9%D9%87-%D8%A7%D8%B3%D8%AA%D8%A7%D8%B1%D8%AA%D8%A7%D9%BE-%D9%85%D9%81%DB%8C%D8%AF-%D9%86%DB%8C%D8%A7%D8%B2-activity-7188140632916324352-EsUH?utm_source=share&utm_medium=member_desktop
https://www.linkedin.com/posts/sina-abd_%D8%B3%D9%84%D8%A7%D9%85-%D8%AF%D9%88%D8%B3%D8%AA%D8%A7%D9%86-%D9%85%D8%A7-%D8%AF%D8%B1-%D9%85%D8%AC%D9%85%D9%88%D8%B9%D9%87-%D8%A7%D8%B3%D8%AA%D8%A7%D8%B1%D8%AA%D8%A7%D9%BE-%D9%85%D9%81%DB%8C%D8%AF-%D9%86%DB%8C%D8%A7%D8%B2-activity-7188140632916324352-EsUH?utm_source=share&utm_medium=member_desktop
Linkedin
sina abdolmaleki on LinkedIn: سلام دوستان
ما در مجموعه استارتاپ مفید نیاز داریم به نیروی senior… | 51 comments
ما در مجموعه استارتاپ مفید نیاز داریم به نیروی senior… | 51 comments
سلام دوستان
ما در مجموعه استارتاپ مفید نیاز داریم به نیروی senior Back-End NodeJs Developer
اگر شرایط زیر رو دارید خوشحال میشیم به تیم ما ملحق بشین… | 51 comments on LinkedIn
ما در مجموعه استارتاپ مفید نیاز داریم به نیروی senior Back-End NodeJs Developer
اگر شرایط زیر رو دارید خوشحال میشیم به تیم ما ملحق بشین… | 51 comments on LinkedIn
👍2
یکی دیگ از api های کاربردی node:perf_hooks استفاده از فانکش mark هست. این فانکشن تقریبا کاربردی شبیه به فانکشن .now داره که در پست قبلی مربوط به این موضوع توضیح داده بودم ولی یکم دست ادم رو برای log گرفتن و داشتن metadata های مختلف باز میزاره. به عنوان مثال به این کد دقت کنید.
به عنوان مثال یک فانکشن داریم که داره یک کار خیلی پیچیده انجام میده و این فانکش زمان بر هست استفاد از .now ممکنه جالب نباشه چون در code base های بزرگ trace کردن یکم چالش میشه. این api ها یجورایی پشت پرده ابزار هایی مثل elastic apm یا sentry هستن ولی دونستن این api های خام میتونه بهتون دید خوبی بده هرچند به صورت روزمره استفاده نکنید.
در ادامه با استفاده از فانکشن mark اومدم یدونه مارک مشخص کردم که در نهایت نتیجه یک instance از PerformanceMark هست که همچین خروجی رو هم میبینیم بعد از log ها.
در اینجا ما name رو میبینیم که اسم mark ما هست و نیازی به توضیح نداره. در حقیقت startTime هم دقیقا لحظه ای هست که اون mark رو ما call کردیم. از لحظه اجرا برنامه تا mark اول 25ms طول کشیده و بعد از 3 ثانیه mark دوم کال میشه که در نتیجه startTime دوم رو 3027ms میبینیم. اینجا یک نکته وجود داره که حدود 3ms از 3 ثانیه بیشتر شده که این خودش نشونه اتفاقات دیگ در runtime باشه و البته موضوع مهم تر این که تضمینی وجود نداره که async job شما دقیقا در تایمی که تعریف کردیم resolve بشه.
نکته بعدی این که mark به عنوان arg دوم یک object میگیره که شما میتونید توضیحات بیشتری اضافه کنید و البته مقدار startTime هم دستکاری کنید که پیشنهاد میکنم این کار نکنید مگر دقیقا میدونید دارید چیکار میکنید.
حالا شما اگر این کد رو اجرا کنید اینبار detail دیگه null نیست و metaData obj رو ما میبینیم در لاگ.
طبق گفته داکیومنت در هنگام استفاده از mark همیشه و همیشه مقدار duration برابر با صفر هست و در حقیقت PerformanceMark یک subclass از performanceEntry هست که در آینده بیشتر باهاش آشنا خواهیم شد.
نکته بعدی این که مقدار entryType هم همیشه در این سناریو برابر با mark هست.
پست قبل مربوط به این موضوع : https://news.1rj.ru/str/NodeMaster/197
#Tip #NodeJS
import { performance } from "perf_hooks";
import { setTimeout } from "timers/promises";
function myLogic() {
// Complex logic
return setTimeout(3000, "Hello NodeMaster");
}
const perf1 = performance.mark("start_perf_check");
await myLogic();
const perf2 = performance.mark("end_perf_check");
console.log(perf1);
console.log(perf2);به عنوان مثال یک فانکشن داریم که داره یک کار خیلی پیچیده انجام میده و این فانکش زمان بر هست استفاد از .now ممکنه جالب نباشه چون در code base های بزرگ trace کردن یکم چالش میشه. این api ها یجورایی پشت پرده ابزار هایی مثل elastic apm یا sentry هستن ولی دونستن این api های خام میتونه بهتون دید خوبی بده هرچند به صورت روزمره استفاده نکنید.
در ادامه با استفاده از فانکشن mark اومدم یدونه مارک مشخص کردم که در نهایت نتیجه یک instance از PerformanceMark هست که همچین خروجی رو هم میبینیم بعد از log ها.
PerformanceMark {
name: 'start_perf_check',
entryType: 'mark',
startTime: 25.279009,
duration: 0,
detail: null
}
PerformanceMark {
name: 'end_perf_check',
entryType: 'mark',
startTime: 3027.833827,
duration: 0,
detail: null
}در اینجا ما name رو میبینیم که اسم mark ما هست و نیازی به توضیح نداره. در حقیقت startTime هم دقیقا لحظه ای هست که اون mark رو ما call کردیم. از لحظه اجرا برنامه تا mark اول 25ms طول کشیده و بعد از 3 ثانیه mark دوم کال میشه که در نتیجه startTime دوم رو 3027ms میبینیم. اینجا یک نکته وجود داره که حدود 3ms از 3 ثانیه بیشتر شده که این خودش نشونه اتفاقات دیگ در runtime باشه و البته موضوع مهم تر این که تضمینی وجود نداره که async job شما دقیقا در تایمی که تعریف کردیم resolve بشه.
نکته بعدی این که mark به عنوان arg دوم یک object میگیره که شما میتونید توضیحات بیشتری اضافه کنید و البته مقدار startTime هم دستکاری کنید که پیشنهاد میکنم این کار نکنید مگر دقیقا میدونید دارید چیکار میکنید.
const metaData = { func: myLogic.name };
const perf1 = performance.mark("start_perf_check", {
detail: metaData,
});
await myLogic();
const perf2 = performance.mark("end_perf_check", { detail: metaData });حالا شما اگر این کد رو اجرا کنید اینبار detail دیگه null نیست و metaData obj رو ما میبینیم در لاگ.
طبق گفته داکیومنت در هنگام استفاده از mark همیشه و همیشه مقدار duration برابر با صفر هست و در حقیقت PerformanceMark یک subclass از performanceEntry هست که در آینده بیشتر باهاش آشنا خواهیم شد.
نکته بعدی این که مقدار entryType هم همیشه در این سناریو برابر با mark هست.
پست قبل مربوط به این موضوع : https://news.1rj.ru/str/NodeMaster/197
#Tip #NodeJS
Telegram
Node Master
اگر با #NodeJS کار میکنید و میخواید performance یک بخش کد رو برسی کنید یک روش خیلی کلاسیک و مرسوم به شکل کد زیر هست. البته این نکته هم بگم که روی مرورگر هم همچین API داریم که میتونه برای بچه های #FrontEnd هم جذاب باشه.
function loop() {
const startTime…
function loop() {
const startTime…
👍4
خب ظاهرا در جهت ورژن جدید Express 5 حرکت های جدی داره صورت میگره که میتونید در این github issue اون رو پیگیری کنید.
https://github.com/expressjs/discussions/issues/233
#NodeJS
https://github.com/expressjs/discussions/issues/233
#NodeJS
GitHub
Express 5.0 - last push! · Issue #233 · expressjs/discussions
This issue includes a reference to all the PRs/issues or pending tasks for Express and dependencies needed to finally ship Express@5. Rules (WIP): If something is completed, just marked If there is...
👍8
یکی دیگ از API های جالبه 'node:perf_hooks' استفاده از measure فانکشن هست که به ما در نهایت یک PerformanceMeasure obj برمیگردونه. این پست خیلی به پست قبل مرتبط هست پس حتما اول اون رو بخونید.
https://news.1rj.ru/str/NodeMaster/206
به مثال پست قبل اگر دقت کنید ما با استفاده از mark یک سری مارک مشخص میکنیم تا اون لحظه رو به صورت دقیق ثبت کنیم. حالا اگر بخوایم در دقیق ترین حالت ممکن duration رو اندازه گیری کنیم اینجا measure به کمک ما میاد.
در اینجا ما به عنوان arg اول یک نام برای measure مشخص میکنیم و در نهایت اسم startMark و endMark رو بهش پاس میدیم و نتیجه به صورت زیر میگیریم.
کلاس PerformanceMeasure مثل PerformanceMark پست قبل یک subclass از performanceEntry هست و entryType در این حالت همیشه measure هست.
حالت های دیگ استفاده از این فانکشن بدون endMark هست که در این حالت خود فانکشن مثل endMark عمل میکنه و در صورتی که هیچ mark در نظر نگیریم startTime با مقدار 0 هست و duration لحظه ای رو نشون میده که از شروع برنامه گذشته تا به اون measure رسیده.
#Tip #NodeJS
https://news.1rj.ru/str/NodeMaster/206
به مثال پست قبل اگر دقت کنید ما با استفاده از mark یک سری مارک مشخص میکنیم تا اون لحظه رو به صورت دقیق ثبت کنیم. حالا اگر بخوایم در دقیق ترین حالت ممکن duration رو اندازه گیری کنیم اینجا measure به کمک ما میاد.
import { performance } from "perf_hooks";
import { setTimeout } from "timers/promises";
function myLogic() {
// Complex logic
return setTimeout(3000, "Hello NodeMaster");
}
const perf1 = performance.mark("start_perf_check");
await myLogic();
const perf2 = performance.mark("end_perf_check");
const mes = performance.measure(
"logicDuration",
"start_perf_check",
"end_perf_check"
);
console.log(mes);در اینجا ما به عنوان arg اول یک نام برای measure مشخص میکنیم و در نهایت اسم startMark و endMark رو بهش پاس میدیم و نتیجه به صورت زیر میگیریم.
PerformanceMeasure {
name: 'logicDuration',
entryType: 'measure',
startTime: 21.1939,
duration: 3004.3700479999998
}کلاس PerformanceMeasure مثل PerformanceMark پست قبل یک subclass از performanceEntry هست و entryType در این حالت همیشه measure هست.
حالت های دیگ استفاده از این فانکشن بدون endMark هست که در این حالت خود فانکشن مثل endMark عمل میکنه و در صورتی که هیچ mark در نظر نگیریم startTime با مقدار 0 هست و duration لحظه ای رو نشون میده که از شروع برنامه گذشته تا به اون measure رسیده.
#Tip #NodeJS
Telegram
Node Master
یکی دیگ از api های کاربردی node:perf_hooks استفاده از فانکش mark هست. این فانکشن تقریبا کاربردی شبیه به فانکشن .now داره که در پست قبلی مربوط به این موضوع توضیح داده بودم ولی یکم دست ادم رو برای log گرفتن و داشتن metadata های مختلف باز میزاره. به عنوان مثال…
👍4
#Work
https://www.linkedin.com/posts/mojtaba-zolfaghary_aekagvaevahyabraecaeiaesahy-aepaebaesaewaexaepaet-activity-7195744419856211969-eIgE?utm_source=share&utm_medium=member_desktop
https://www.linkedin.com/posts/mojtaba-zolfaghary_aekagvaevahyabraecaeiaesahy-aepaebaesaewaexaepaet-activity-7195744419856211969-eIgE?utm_source=share&utm_medium=member_desktop
Linkedin
#آگهی_شغلی #استخدام #دولوپر | Mojtaba Zolfaghary | 165 comments
#آگهی_شغلی #استخدام #دولوپر
سلام، ما به دنبال جذب یک Backend Developer مسلط به Node.js هستیم که درک خوبی از فریمورک express.js داشته باشه و همچنین با React هم آشنا باشه.
این موقعیت شغلی برای یک شرکت کانادایی است و حقوق اون به صورت دلاری و رقابتی تعیین میشود.…
سلام، ما به دنبال جذب یک Backend Developer مسلط به Node.js هستیم که درک خوبی از فریمورک express.js داشته باشه و همچنین با React هم آشنا باشه.
این موقعیت شغلی برای یک شرکت کانادایی است و حقوق اون به صورت دلاری و رقابتی تعیین میشود.…
👍2
Node Master
یکبار داشتم تست مینوشتم و داشتم type ها رو assert میکردم که به این موضوع خوردم که چند ساعتی داشتم دنبالش میگشتم که داستان چیه و در نهایت متوجه شدم که اگر string رو با String class مستقیم بسازید typeof مربوط بهش میشه object و نه string. const text1 = new S…
چند وقت پیش یک همچین پستی گذاشته بودم که در هنگام تست نوشتن با همچین کدی روبرو شده بودم
جواب این false میشه و یکم برام عجیب بود دوستان هم توضیحات خوبی دادن منطقی و درست بود ولی کامل جوابم رو نگرفتم که چرا اینطوره.
شما اگر قصد دارید با استفاده از function هایی مثل String, Boolean, Number عملیات type conversion انجام بدید اگر از new استفاده کنید در حقیقت typeof برابر با object میشه و کاملا منطقی هست به این دلیل که باهاش مثل constructor function رفتار میشه. حالا object که از این حالت بدست میاد شبیهه به primitive ها رفتار میکنه ولی در همچین سناریویی تفاوت خودش رو نشون میده. دلیل این رفتار هم بخاطر موضوعات تاریخی مربوط به #JavaScript هست و این موضوع هم درنظر داشته باشید که در code base های بروز اصلا منطقی نیست از این موضوع استفاده کنید و کاملا از این موضوع فرار کنید. فقط گاهی ممکن هست بهش بر بخورید پس دونستن این موضوع میتونه بهتون کمک کنه
#Tip
3 === new Number(3)
جواب این false میشه و یکم برام عجیب بود دوستان هم توضیحات خوبی دادن منطقی و درست بود ولی کامل جوابم رو نگرفتم که چرا اینطوره.
شما اگر قصد دارید با استفاده از function هایی مثل String, Boolean, Number عملیات type conversion انجام بدید اگر از new استفاده کنید در حقیقت typeof برابر با object میشه و کاملا منطقی هست به این دلیل که باهاش مثل constructor function رفتار میشه. حالا object که از این حالت بدست میاد شبیهه به primitive ها رفتار میکنه ولی در همچین سناریویی تفاوت خودش رو نشون میده. دلیل این رفتار هم بخاطر موضوعات تاریخی مربوط به #JavaScript هست و این موضوع هم درنظر داشته باشید که در code base های بروز اصلا منطقی نیست از این موضوع استفاده کنید و کاملا از این موضوع فرار کنید. فقط گاهی ممکن هست بهش بر بخورید پس دونستن این موضوع میتونه بهتون کمک کنه
#Tip
👍18
سلام و ارادت دوستان.
این پست تبلیغ نیست.
یکی از دوستان من مدتی هست داره فعالیت میکنه و کلی ویدیو آموزشی یوتیوب گذاشته و الان دوره #NestJS ایشون کامل هست.
و این که یکسری مجموعه وبینار هم برگزار میکنه و در حال حاظر درحال برسی Design pattern ها هستن.
یک سر به چنلش بزنید اگر حس کردید میتونه کمکتون کنه حتما ازش سوال بپرسید خوشحال میشه.
https://news.1rj.ru/str/mostafaeffatiofficial
این پست تبلیغ نیست.
یکی از دوستان من مدتی هست داره فعالیت میکنه و کلی ویدیو آموزشی یوتیوب گذاشته و الان دوره #NestJS ایشون کامل هست.
و این که یکسری مجموعه وبینار هم برگزار میکنه و در حال حاظر درحال برسی Design pattern ها هستن.
یک سر به چنلش بزنید اگر حس کردید میتونه کمکتون کنه حتما ازش سوال بپرسید خوشحال میشه.
https://news.1rj.ru/str/mostafaeffatiofficial
Telegram
Mostafa Effati Channel
اگه میخوایید برید به عمیقترین نقطه دریای بک اند, پس با من همراه باش 💪
ارتباط مستقیم با من:
@mostafa_effati
گروه مرتبط با کانال برای بحث و تبادل اطلاعات :
@MostafaEffatiGroup
ارتباط مستقیم با من:
@mostafa_effati
گروه مرتبط با کانال برای بحث و تبادل اطلاعات :
@MostafaEffatiGroup
👍17
اگر در پروژه خودتون CI/CD دارید برای نصب dependency های پروژه #NodeJS خودتون اگر از #NPM استفاده میکنید یادتون باشه که از ci استفاده کنید
هدف از استفاده این command برای استفاده در محیط هایی مثل CI میباشد یا در حالتی که میخواید یه نصب تمیز داشته باشید روی محیطی که دارید اجرا میکنید برنامتون رو.
تفاوت هایی که این روش با npm install داره چیه ؟
- حتما و حتما باید package-lock.json داخل پروژه شما باشه.
- اگر package-lock.json نبود با در حقیقت نصب ما ادامه پیدا نمیکنه و package-lock.json جدید آپدیت ایجاد نخواهد شد.
- اگر node_modules وجود داشته باشه ( در سناریو هایی که فراموش میشه به عنوان مثال در .gitignore بزاریم ) قبل از نصب حذف میشه و یک node_modules جدید ایجاد میشود.
- هیچ وقت package.json آپدیت نمیکنه و دقیقا همون چیزی هست که ما موقع ci میخوایم.
معادل این روش رو تقریبا میتونید روی pnpm هم به این شکل داشته باشید.
و معادل این روش در Yarn
به صورت کلی اگر در محیط production میخواید پروژه خودتون رو اجرا کنید باید یطوری dep ها رو نصب کنید که از package-lock این عملیات صورت بگیره. هم سریعتر هست و هم تضمین بر این که dep hell نخواهید داشت.
npm ci
هدف از استفاده این command برای استفاده در محیط هایی مثل CI میباشد یا در حالتی که میخواید یه نصب تمیز داشته باشید روی محیطی که دارید اجرا میکنید برنامتون رو.
تفاوت هایی که این روش با npm install داره چیه ؟
- حتما و حتما باید package-lock.json داخل پروژه شما باشه.
- اگر package-lock.json نبود با در حقیقت نصب ما ادامه پیدا نمیکنه و package-lock.json جدید آپدیت ایجاد نخواهد شد.
- اگر node_modules وجود داشته باشه ( در سناریو هایی که فراموش میشه به عنوان مثال در .gitignore بزاریم ) قبل از نصب حذف میشه و یک node_modules جدید ایجاد میشود.
- هیچ وقت package.json آپدیت نمیکنه و دقیقا همون چیزی هست که ما موقع ci میخوایم.
معادل این روش رو تقریبا میتونید روی pnpm هم به این شکل داشته باشید.
pnpm install --frozen-lockfile
و معادل این روش در Yarn
yarn install --frozen-lockfile
به صورت کلی اگر در محیط production میخواید پروژه خودتون رو اجرا کنید باید یطوری dep ها رو نصب کنید که از package-lock این عملیات صورت بگیره. هم سریعتر هست و هم تضمین بر این که dep hell نخواهید داشت.
👍12
دوستان ofood پوزیشن خالی Nodejs
#Work
https://twitter.com/mh_daneshvar/status/1793312352286232933?t=dVDwvqfRzUWSf64mvIhflA&s=19
#Work
https://twitter.com/mh_daneshvar/status/1793312352286232933?t=dVDwvqfRzUWSf64mvIhflA&s=19
X (formerly Twitter)
Mohammad Hassan Daneshvar (@mh_daneshvar) on X
بچهها جون
ما توی افود نیاز به چند تا دولوپر Node.js درجه یک داریم که:
- تکنیکالی قابل قبول باشن
- بسیار یادگیرنده باشن
- بسیار فروتن باشن
اگه تجربهی کار با میکروسرویس و DDD داشته باشین که براتون غش میکنم!
رزومههای نازنینتون رو برام بفرستین:
danesh…
ما توی افود نیاز به چند تا دولوپر Node.js درجه یک داریم که:
- تکنیکالی قابل قبول باشن
- بسیار یادگیرنده باشن
- بسیار فروتن باشن
اگه تجربهی کار با میکروسرویس و DDD داشته باشین که براتون غش میکنم!
رزومههای نازنینتون رو برام بفرستین:
danesh…
برای #NodeJS آپدیت 20.14 LTS منتشر شد. ویژگی جدید خاصی به این آپدیت اضافه نشده و بیشتر باگ فیکس بوده.
https://nodejs.org/en/blog/release/v20.14.0
https://nodejs.org/en/blog/release/v20.14.0
nodejs.org
Node.js — Node v20.14.0 (LTS)
Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.
👍3
🔥یک خبر خیلی داغ مربوط به ۲ دقیقه پیش.
سازمان حج و زیارت هک شد.
یعنی کلا اطلاعات شخصی ما ایرانی ها داخل سرویس ها ایرانی open source هست و هردوطرف کارفرما و برنامه نویس صدرصد مقصر این موضوع هستند به نظر من.
https://news.1rj.ru/str/irleaks/24
سازمان حج و زیارت هک شد.
یعنی کلا اطلاعات شخصی ما ایرانی ها داخل سرویس ها ایرانی open source هست و هردوطرف کارفرما و برنامه نویس صدرصد مقصر این موضوع هستند به نظر من.
https://news.1rj.ru/str/irleaks/24
Telegram
IRLeaks
📢 سازمان حج و زیارت هک شد!
به طور خلاصه موارد زیر از حجاج و زائرین طی سالهای ۱۳۶۳ الی ۱۴۰۳، در اختیار ما قرار دارد:
- نام، نامخانوادگی، نام پدر، تاریخ تولد، محل تولد، شماره شناسنامه، کد ملی، سریال کارت ملی، وضعیت تاهل، شغل
- اطلاعات تماس (آدرس منزل و…
به طور خلاصه موارد زیر از حجاج و زائرین طی سالهای ۱۳۶۳ الی ۱۴۰۳، در اختیار ما قرار دارد:
- نام، نامخانوادگی، نام پدر، تاریخ تولد، محل تولد، شماره شناسنامه، کد ملی، سریال کارت ملی، وضعیت تاهل، شغل
- اطلاعات تماس (آدرس منزل و…
👍9
یکی از ویژگی های جدیدی و کاربردی که در #ES2024 اضافه شده و هم برای بچه های #Frontend و هم #Backend میتونه مفید باشه.
یکی از pattern های معروف برای ایجاد یک async function در #JavaScript به این صورت هست.
معمولا از این ویژگی وقتی استفاده میشه که قصد داریم یک wrapper برای یک CPS Style Async Function بنویسیم.
قبلا در مورد این که CPS Style چیست و چرا مفصل صحبت کردیم و میتونید از این لینک مطالعه کنید.
https://news.1rj.ru/str/NodeMaster/19
حالا با این API جدید میتونیم کد بالا به این صورت refactor کنیم
با استفاده از static method جدیدی که به Promise اضافه شده یعنی Promise.withResolvers میتونیم از شر constructor خلاص بشیم. ( یجورایی میشه گفت factory pattern حساب میشه )
یک موضوع شاید براتون سوال پیش که چرا گفتم از شر constructor خلاص بشیم. آیا مشکلی داره؟ جواب طبق سایر جواب ها برنامه نویسی میتونیم بگیم بستگی داره. ولی من حس میکنم با توجه به تغییراتی که من میبینیم به مفهوم Aggregation در OOP خیلی احترام بیشتری داره گذاشته میشه.
این آپدیت خیلی جدیده و در حال حاظر در #NodeJS ورژن 22 هستش.
البته دوباره این رو باید بگم که #Deno پرچم داری کرده و از ورژن 1.38 این ویژگی رو زودتر اضافه کرده.
#Tip
یکی از pattern های معروف برای ایجاد یک async function در #JavaScript به این صورت هست.
function job() {
return new Promise((resolve, reject) => resolve(2));
}معمولا از این ویژگی وقتی استفاده میشه که قصد داریم یک wrapper برای یک CPS Style Async Function بنویسیم.
قبلا در مورد این که CPS Style چیست و چرا مفصل صحبت کردیم و میتونید از این لینک مطالعه کنید.
https://news.1rj.ru/str/NodeMaster/19
حالا با این API جدید میتونیم کد بالا به این صورت refactor کنیم
function job() {
const { promise, reject, resolve } = Promise.withResolvers();
resolve(2);
return promise;
}با استفاده از static method جدیدی که به Promise اضافه شده یعنی Promise.withResolvers میتونیم از شر constructor خلاص بشیم. ( یجورایی میشه گفت factory pattern حساب میشه )
یک موضوع شاید براتون سوال پیش که چرا گفتم از شر constructor خلاص بشیم. آیا مشکلی داره؟ جواب طبق سایر جواب ها برنامه نویسی میتونیم بگیم بستگی داره. ولی من حس میکنم با توجه به تغییراتی که من میبینیم به مفهوم Aggregation در OOP خیلی احترام بیشتری داره گذاشته میشه.
این آپدیت خیلی جدیده و در حال حاظر در #NodeJS ورژن 22 هستش.
البته دوباره این رو باید بگم که #Deno پرچم داری کرده و از ورژن 1.38 این ویژگی رو زودتر اضافه کرده.
#Tip
Telegram
Node Master
مفهوم CPS Style چیست و در NodeJs به چه صورت هست؟
خب دوستان همین الان بگم که خیلی از افرادی که با Node کار کردن تمام مدت از این استایل استفاده کردن حتی بدون این که اسمش رو بدونن.
بزارید با مثال و کد توضیح بدم خیلی راحت متوجه میشید.
function doSomething() {…
خب دوستان همین الان بگم که خیلی از افرادی که با Node کار کردن تمام مدت از این استایل استفاده کردن حتی بدون این که اسمش رو بدونن.
بزارید با مثال و کد توضیح بدم خیلی راحت متوجه میشید.
function doSomething() {…
👍9
دیتابیس های Sql مثل postgres و mysql مشکل scale ندارند.
بیشتر skill issue باعث میشه scale نشن.
این بلاگ پست با بلاگ پست گیت هاب که درمورد migrate کردن به mysql ورژن 8 یا 7 بود خیلی با ارزش هست
بیشتر skill issue باعث میشه scale نشن.
این بلاگ پست با بلاگ پست گیت هاب که درمورد migrate کردن به mysql ورژن 8 یا 7 بود خیلی با ارزش هست
👍6
Forwarded from 🎄 DevTwitter | توییت برنامه نویسی
یوتیوب چطوری از 2.49 میلیارد کاربر با MYSQl پشتیبانی میکنه؟
تو این مقاله میتونید بخونید
https://newsletter.systemdesign.one/p/vitess-mysql
@DevTwitter
تو این مقاله میتونید بخونید
https://newsletter.systemdesign.one/p/vitess-mysql
@DevTwitter
👍4
اگر تا حالا فکر کردین که چطور فریمورک ها رو برای ما developer های عادی توسعه میدن جواب شما یک magic هست به اسم #Metaprogramming . این کار مثل برنامه نویسی معمولی که ما انجام میدیم تکنیک های مختلف داره که یکی از اونها رو در این پست باهم برسی کردیم.
https://news.1rj.ru/str/NodeMaster/115
البته لازم به ذکر هست یکسری Pattern به صورت کلی وجود داره که بین زبان های مختلف مشترک هست و به نوعی پیاده سازی های مختلف ازش دیده میشه و البته یکسری زبان ها هم یکسری تکنیک های مخصوص به خودشون رو هم دارن که اون ها رو خاص تر میکنه.
حالا یکی از این جادو های کاربردی #Metaprogramming این هست که اگر یک Instance از یک Object داریم که یک Parrent Class داره چطور فقط و فقط متوجه بشیم که چه Attr هایی مخصوص به اون Child Class هست و Attr های Parrent رو نادیده بگیریم. و جواب این سوال خیلی سادس :
در #JavaScript با استفاده از Object.getOwnPropertyNames و Reflect.ownKeys(myObj) میتونیم متوجه بشیم که کدام Atter ها مربوط به Instnace ما یعنی myObj هستند. به این خاطر هست که Atter های Parrent یعنی x و y رو کامل نادیده گرفته میشه و فقط در name رو ما به عنوان Attr میبینم که مستقیما روی Child Instance ما تعریف شده و نه روی Parrent. شاید این مثال یکم پیچیده باشه بخاطر ماهیت Object ها در #JavaScript هست. همین رو اگر بخوایم در #Python برسی کنیم شاید یکم قابل درک تر باشه و البته مثال های دیگ هم در #JavaScript میشه زد ولی خب به نظرم بهتره بزاریم برای کنجکاوی خودتون.
یک نکته خیلی جذاب کلا خارج از بحث که به نظرم ارزش توجه کردن داره استفاده از set برای رسیدن به نتیجه ای شبیه به مثال #JavaScript هست. و اینجا به عنوان مثال مستقیم یکی از کاربرد های Set Object و Set theory رو مستقیم و خیلی کوچیک میبینید.
نکته ای که خیلی مهم باید توجه بشه این هست که بین تکنیک استفاده از ownKeys و getOwnPropertyNames تفاوت هایی وجود داره که اگر استقبال بشه عمیق تر وارد این موضوع میشیم.
#Tip
https://news.1rj.ru/str/NodeMaster/115
البته لازم به ذکر هست یکسری Pattern به صورت کلی وجود داره که بین زبان های مختلف مشترک هست و به نوعی پیاده سازی های مختلف ازش دیده میشه و البته یکسری زبان ها هم یکسری تکنیک های مخصوص به خودشون رو هم دارن که اون ها رو خاص تر میکنه.
حالا یکی از این جادو های کاربردی #Metaprogramming این هست که اگر یک Instance از یک Object داریم که یک Parrent Class داره چطور فقط و فقط متوجه بشیم که چه Attr هایی مخصوص به اون Child Class هست و Attr های Parrent رو نادیده بگیریم. و جواب این سوال خیلی سادس :
const myPrototype = { x: 1, y: 2 }; // Parrent
const myObj /* Child */ = Object.create(myPrototype);
myObj.name = "point"; // Instance Prop
console.log(Object.getOwnPropertyNames(myObj)); // [ 'name' ]
console.log(Reflect.ownKeys(myObj)); // [ 'name' ]
console.log("x in myObj :", "x" in myObj);در #JavaScript با استفاده از Object.getOwnPropertyNames و Reflect.ownKeys(myObj) میتونیم متوجه بشیم که کدام Atter ها مربوط به Instnace ما یعنی myObj هستند. به این خاطر هست که Atter های Parrent یعنی x و y رو کامل نادیده گرفته میشه و فقط در name رو ما به عنوان Attr میبینم که مستقیما روی Child Instance ما تعریف شده و نه روی Parrent. شاید این مثال یکم پیچیده باشه بخاطر ماهیت Object ها در #JavaScript هست. همین رو اگر بخوایم در #Python برسی کنیم شاید یکم قابل درک تر باشه و البته مثال های دیگ هم در #JavaScript میشه زد ولی خب به نظرم بهتره بزاریم برای کنجکاوی خودتون.
class Parrent:
def __init__(self) -> None:
self.x = 1
self.y = 2
class Child(Parrent):
def __init__(self) -> None:
super().__init__()
self.name = "point"
myObj = Child()
parrentAttrs = set(dir(Parrent()))
childAtters = set(dir(Child()))
print(childAtters.difference(parrentAttrs))
یک نکته خیلی جذاب کلا خارج از بحث که به نظرم ارزش توجه کردن داره استفاده از set برای رسیدن به نتیجه ای شبیه به مثال #JavaScript هست. و اینجا به عنوان مثال مستقیم یکی از کاربرد های Set Object و Set theory رو مستقیم و خیلی کوچیک میبینید.
نکته ای که خیلی مهم باید توجه بشه این هست که بین تکنیک استفاده از ownKeys و getOwnPropertyNames تفاوت هایی وجود داره که اگر استقبال بشه عمیق تر وارد این موضوع میشیم.
#Tip
Telegram
Node Master
خب first class function یعنی چی؟
به این موضوع هست که شما میتونید با function ها مثل بقیه object ها رفتار کنید. یعنی در متغیر ذخیرشون کنید یک لیستی از function ها داشته باشید و یا حتی در runtime فانکشن جدید بسازید و return کنید.
این موضوع خیلی نکته قوی هست…
به این موضوع هست که شما میتونید با function ها مثل بقیه object ها رفتار کنید. یعنی در متغیر ذخیرشون کنید یک لیستی از function ها داشته باشید و یا حتی در runtime فانکشن جدید بسازید و return کنید.
این موضوع خیلی نکته قوی هست…
👍8