Node Master – Telegram
Node Master
1.03K subscribers
24 photos
2 files
156 links
Group Chat: @nodemastergp
Admin: @napoleon_n1
Download Telegram
خیلی خیلش تشکر میکنم از شما دوستان که به بنده افتخار دادین و ۲۰۰ نفر شد چنل 🎉
و این که یک خواهش از شما دوستان داشتم.
اگر مطالب کانال براتون مفیده من داخل لینکدین هم اینها رو به اشتراک میزارم. واقعا ممنون میشم اگر اونجا لایک و repost کنید. دوباره ازتون تشکر میکنم واقعا باورم نمیشه ۲۰۰ نفر شدیم 🎉
https://www.linkedin.com/feed/update/urn:li:activity:7137731168061333504/
👍13
قرار بر این بود که درمورد تمام موضوعات BackEnd صحبت کنیم. ولی خب تا به امروز فقط درمورد Runtime های مربوط به js بیشتر NodeJS صحبت کردیم. امروز نگاهی به یکی از ویژگی های بسیار خوب #postgres اشاره میکنیم.
شما میتونید یک فیلد با تایپ JSON تعریف کنید و دیتا رو به صورت شبیه به document در mongodb ذخیر کنید. نکته جالب این هست که میتونید هم روی این JSON ها Index ایجاد کنید هم query های خوبی بزنید و کلا چون به صورت native روی postgres پیاده سازی شده تقریبا هرکاری میتونید کنید.

CREATE TABLE orders (
id serial NOT NULL PRIMARY KEY,
info json NOT NULL
);

INSERT INTO orders (info)
VALUES('{ "customer": "imanhpr", "items": {"product": "food","qty": 24}}'),
('{ "customer": "ali", "items": {"product": "bike","qty": 1}}'),
('{ "customer": "hasan", "items": {"product": "car","qty": 2}}');

شما به این طریق میتوانید یک table ایجاد کنید که در کنار ساختار نرمال خودش میتونه یک json document در خودش داشته باشه به عنوان فیلد که میشه اون رو به هرشکلی که میخواید query بزنید. حالا به مثال های زیر توجه کنید.
فرض کنید فقط میخواهیم نام های مشتریان رو از این json ها بکشیم بیرون.
SELECT info ->> 'customer' as customer FROM orders;

به ->> دقت کنید. این اپراتور شبیه به dot در js در عمل میکنه یا زبان ها دیگه. البته دو مدل داریم
-> اپراتور به صورت jsonb دیتا رو برمیگردونه.
->> اپراتور به صورت text دیتا رو به شما میرسونه.
حالا ما میخوایم که qty که خودش داخل یک داکیومنت دیگه هست رو برگردونیم
SELECT info ->> 'customer' AS customer ,
info -> 'items' ->> 'qty' AS qty
FROM orders;

نکته این هست که اپراتور ->> دیتا رو به صورت text برمیگردونه درصورتی که این فیلد عدد ذخیره میکنه و ممکنه بخوام عملیات شرطی یا aggregate هایی که روی اعداد میشه زد انجام بدم. برای این کار میتونیم از CAST استفاده کنیم. شبیه به Type Casting در زبان ها برنامه نویسی مثل java , go و حتی typenoscript هست.
SELECT info ->> 'customer' AS customer,
info -> 'items' ->> 'qty' AS qty
FROM orders
WHERE CAST(info -> 'items' ->> 'qty' AS INTEGER) >= 2;

در ایجا شرط گذاشتیم اونهایی که بزرگتر یا مساوی 2 باشند که اگر اجرا کنید به زیبایی کار میکنه.

ذخیره کردن JSON در Postgres در یک حالت هایی به شدت قدرتمند هست و نیاز شما به mongodb رو حذف میکنه. البته این جمله رو در همه مواقع صدرصد فرض نکنید و باید با توجه به پیچدگی مسئله تصمیم بگیرید.
در پست بعد یک مسئله مطرح میکنم که به عنوان BackEnd Dev باید بدونید چون که میتونه سوال مصاحبه باشه و خیلی در دیزاین دیتابیس بهتون کمک میکنه و مزیت ذخیره کردن JSON در Postgres رو با یک مثال که در دنیای واقعی استفاده میشه خواهید دید.

#Tip #Postgres
👍7
Node Master
https://www.linkedin.com/posts/alitorki_hirring-opentowork-activity-7137716965212655616-ser6?utm_source=share&utm_medium=member_android
از این به بعد موقعیت های شغلی هم با تگ #Work برای Nodejs میزارم براتون
👍7
Node Master
قرار بر این بود که درمورد تمام موضوعات BackEnd صحبت کنیم. ولی خب تا به امروز فقط درمورد Runtime های مربوط به js بیشتر NodeJS صحبت کردیم. امروز نگاهی به یکی از ویژگی های بسیار خوب #postgres اشاره میکنیم. شما میتونید یک فیلد با تایپ JSON تعریف کنید و دیتا رو…
خب بریم سراغ مسئله واقعی که ممکنه براتون روی پروژه هاتون خیلی پیش بیاد و استفاده از این تکنیک میتونه کارتون رو راحت تر کنه.
یک فروشگاه آنلاین مثل دیجیکالا رو در نظر بگیرید که محصولات زیادی برای فروش از دسته بندی های مختلف دارد. حالا شما قصد دارید ویژگی های خاص برای هر دسته از محصول رو ذخیره کنید و این هم در نظر بگیرید که ویژگی هایی که برای موبایل ذخیره میشود کاملا با ويژگی هایی که برای دفتر نقاشی ذخیره میشود متفاوت است.
حالا از شما میخواهند که دیتابیسی طراحی کنید که در قبال هر محصول خاص ویژگی های خاص خودش با مقادیر خاصش رو ذخیره کنید. مثال‌:
موبایل :
- صفحه نمایش
- شبکه ارتباطی
- پردازنده

دفتر
- نوع کاغذ
- تعداد برگ
دو روش برای انجام دادن این کار وجود داره. اولین روش رو که بالاتر اشاره کردیم. دومین روش که روش سخت تری هست و در دیتابیس های SQL استفاده میشه چالش داره و سوال مصاحبه ای هست.
سعی کنید روش SQL رو پیدا کنید و زیر این پست کامنت بزارید.

راهنمایی : یک پترن خیلی پر استفاده در SQL هست با نام مشخص.
#challenge
👍4
یک بلاگ پست زیبا از github که درمورد استفاده از MySql به عنوان یک دیتابیس اصلی در اون حجم توضیح میده.

باتوجه به این که scale کردن دیتابیس هایی مثل postgres و mysql چالش های زیادی دارن این بلاگ پست ارزش خیلی زیاده داره
https://github.blog/2023-12-07-upgrading-github-com-to-mysql-8-0/
(متاسفانه وقت ندارم با جزیات باهم برسیش کنیم ولی خب خودتون بخونید واقعا خوبه)
👍4
Node Master
Photo
برای این سوال ساده ترین روشی که سریع به ذهن آدم میرسه این هست که برای هر دسته بندی یک table درست کنیم یعنی ۱۰۰۰ دسته بندی برابر است با ۱۰۰۰ table که یکم فکر کنیم میبینیم منطقی نیست! پس باید یک روش دیگه باشه.
اینجا هست که پترن Entity attributes value میاد به نجات ما. البته دوستان برای دونستن دقیق این که چرا به همچین پترنی میرسیم این هست که باید relational database design بلد باشید. فارغ از این موضوع که من nosql میزنم من mongo استفاده میکنم. database design واجب است و باید بلد باشید چون حتی در دنیای nosql هم برای مدل سازی بهتون کمک میکنه. حالا بریم این پترن رو بیشتر توضیح بدیم با مثال
اول entity های ما همون دسته بندی ها هستن مثل موبایل
دوم attributes ها همان ویژگی های موبایل هست مثل صفحه نمایش و cpu
سوم value ها همان مقادیر attributes های ما هستند یعنی 3 inch و snapdragon.
حالا اگر بخوایم relational به مسله نگاه کنیم میگیم که هر دسته بندی n تا attr دارد و هر attr هم n تا value دارد ( اگر این قسمت رو متوجه نشدید database design بهتون کمک میکنه )
اینجا اگر دقت کنیم یک رابطه n to m تشکیل شده و داخل عکس میتونید مشاهده کنید این موضوع رو.
اینطور که یک جدول دسته بندی داریم و یک جدول attr و value ها را در کنار table واسط استفاده میکنیم ( برای دونستن این که چرا table واسط استفاده میکنیم دوباره میرسیم به database design )
این روش یک سری محدودیت هایی داره که صحبت درموردشون خیلی طولانی میشه و درکل نکته جالب اینجاس که میتونیم این مسله رو با mongodb یا postgres json type خیلی راحت تر حل کنیم.
به این صورت که یک داکیومنت embed کنیم و attr ها به عنوان key و value ها به عنوان value در json doc در نظر بگیریم و key ها رو به هیچ عنوان مقدار concrete در نظر نگیریم.
بیشتر عمیق شدن رو بزاریم برای بعد و یک جمع بندی کنیم که دوستان به عنوان back-end dev شما باید اصول طراحی دیتابیس حداقل پایه رو خیلی خیلی خوب بلد باشید. این روزا متاسفانه orm ها بلایی سر برنامه نویس ها اورده که معمولا این نکات رو درنظر نمیگیرن و این نکات روی سیستم ها در scale خیلی خیلی تاثیر گذار هست و شما وظیفه دارید این ها رو بدونید.
من دوره فارسی معمولا معرفی نمیکنم به کسی ولی دیتابیس دیزاین این دوره رو حتما ببینید و بعد در postgres یا mysql تمرین کنید:
https://faradars.org/courses/fvsft105-database
این رو از من داشته باشید که ابزار مهم نیست ( postgres , mysql ,mongodb, cassandra ) و مهم نحوه استفاده از این ابزار ها هست ( Database design , system design, design patterns ) که شما رو از بقیه متفاوت میکنه یاد گرفتن ابزار خیلی راحته ولی نحوه استفاده درست و صحیح زمان بر و تمرین زیاد میخواد.
#tip
👍6
به تازگی Deno به صورت Beta ویژگی Deno.cron رو اضافه کرده که میتونید بدون 3rd party یک cron job با runtime داشته باشید. برای یک پروژه نیاز به cron job داشتم و تصمیم گرفتم از این قابلیت استفاده کنم. تجربه ای که داشتم واقعا خوب و راحت بود و حالا در آینده جزیات بیشتری به اشتراک خواهم گذاشت.

برای ایجاد cron job با در Deno میتونید این کار رو کنید
Deno.cron("Sample cron job", "*/10 * * * *", () => {
console.log("This will run every 10 minutes");
});

و بعد به دلیل بتا بودن این قابلیت میتونید با فلگ زیر کد رو اجرا کنید.
deno run -A --unstable-cron jobs.ts

#tip #deno
👍1
طبق عادت همیشگی داشتم پروژه Node روی گیتهاب چک میکردم و آخرین کامیت که ۳ ساعت پیش خورده خیلی جالب بود برام.
اینطور که شاهده کم کم باید شاهد اومدن http3 روی std برای #NodeJS باشیم باتوجه به این commit که دارن پروتکل quic رو جلو میبرن!

https://github.com/nodejs/node/commit/fc102f2180dfc8e1654ce672185f5bf97ec21b53

#Update
Forwarded from Programmer Jokes
👍7
یکی از نکاتی که میتونه ما رو برنامه نویس بهتری کنه اینه که از اکوسیستم های دیگه هم خبر داشته باشیم و صرفا در حباب stack خودمون نمونیم. حتی در حد بیسیک هم خوبه نیاز نیست چنتا تکنولوژی رو استاد باشید.
در بلاگ رسمی #golang یک پست خیلی با ارزش منتشر شده از Survey رسمی خودشون روی اکوسیستم #golang
خیلی طولانی و کامل هست.
بنظرم نگاهی بندازید من خودم هم اگر نکته ای دیدم اینجا میگم.
https://go.dev/blog/survey2023-h2-results
👍2
#استخدام برنامه نویس

Senior Backend NodeJs

تجربه حداقل ۳ سال در توسعه و پیاده‌سازی برنامه‌های وب با استفاده از Node.js
تسلط کامل بر مفاهیم اساسی JavaScript و فریم‌ورک Express.js
تجربه در طراحی و پیاده‌سازی API‌ها با استفاده از RESTful یا GraphQL
تجربه در کار با پایگاه‌های داده مانند MongoDB یا MySQL

شرایط شغلی
حضوری - شنبه تا چهارشنبه ساعت 9 الی 17
موقعیت مکانی شرکت
تهران خ شیراز جنوبی
حقوق؛ توافقی - باتوجه به میزان توانایی
و تجربه
@fatemekia_1375
#Work
Forwarded from Geeking Around
تفاوت Symbolic reference و Direct reference توی JVM

داشتم یه مطالعه‌ای راجب اینکه JVM چطور کار میکنه میکردم، که دیدم توی یه یه قسمتی از کار JVM میاد Symbolic reference هارو به Direct reference تبدیل میکنه (توی Class Loader > Linking > Resolution این اتفاق میوفته). که باعث شد یکم رفتم خوندم ببینم تفاوت‌شون چیه.

داستان از این قراره، Symbolic reference در واقع یک String هست که میشه باهاش هر field، method یا class ای رو uniquely پیدا کرد باهاش. تشکیل شده از اسم، دیسکریپتور اون field، method یا class.
وقتی JVM داره Byte code رو execute میکنه و به یک Symbolic reference برخورد میکنه (اینطور تصور کنین که شما یک پکیجی نصب کردین روی اپ‌تون و دارید یکی از method هاشو import میکنین توی class خودتون و ازش استفاده میکنین) JVM میره اون field، method یا class رو پیدا میکنه (اگر نیاز باشه Loadش میکنه) و به جای اون Symbolic reference یک Direct reference میزاره. حالا این Direct reference چیه؟ آدرس یا پوینتر اون field، method یا class توی مموری! به همین سادگی‌:))

سری بعدی که JVM به همون Symbolic reference بخوره، دیگه این فرایند رو تکرار نمیکنه، از همون Direct refernceای که قبلاً پیدا کرده بود استفاده میکنه.

اگر میخواین کل فرایند اینکه JVM چطور کار میکنه رو بخونین این پست خیلی خوب توضیح داده.
https://www.freecodecamp.org/news/jvm-tutorial-java-virtual-machine-architecture-explained-for-beginners/
Geeking Around
تفاوت Symbolic reference و Direct reference توی JVM داشتم یه مطالعه‌ای راجب اینکه JVM چطور کار میکنه میکردم، که دیدم توی یه یه قسمتی از کار JVM میاد Symbolic reference هارو به Direct reference تبدیل میکنه (توی Class Loader > Linking > Resolution این اتفاق…
دوستان این چنل یکی از نزدیک ترین دوستانم هست (همکارم که کنارم میشینه).
چیزای عمیقی رو برسی میکنه و کلا باهم همیشه خیلی چیزا رو برسی میکنیم و از هم خیلی چیزا یاد گرفتیم.
این چنلش تازگی پابلیک کرده دوست داشتید جوین بشید.
👍1
Node Master
#include <iostream> int main() { std::cout << "Let The Performance Begin!\n"; return 0; } به عنوان برنامه نویس BackEnd شما صرفا نباید یک framework developer باشید. باید به درجه ای برسید که بیت به بیت دیتایی که دارید کار باهاش انجام میدید رو بشمارید.…
class BuggyCls {
#age;
set age(value) {
this.#age = value;
}

get age() {
return this.#age;
}

sum2() {
return this.#age + 2;
}
}

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

نکته : مربوط به یکی از مباحثی هست که من قبلا اینجا اشاره ای کرده بودم

#Think #Tip
👍2