Node Master – Telegram
Node Master
1.03K subscribers
24 photos
2 files
156 links
Group Chat: @nodemastergp
Admin: @napoleon_n1
Download Telegram
سلام به همگی دوستان که جدید اومدن خیلی خیلی خوش اومدین.
قدیمی ها دمتون گرم مرسی که همیشه همراه من بودین.

لینک گروه بچه ها ما اینجا هست خوشحال میشم اگر دوست داشتید به کامینیوتی کوچیک ما جوین بشید.
https://news.1rj.ru/str/NodeMasterGP
👍9
خیلی از دوستانی که من میشناسم اکثرا به صورت self thought بودن و از رشته های دیگ وارد برنامه نویسی شدن.
بخاطر همین موضوع ممکنه یکم سردرگمی برای دوستان پیش بیاد درمورد مفاهیم پایه ای تر مربوط به Computer science و البته شما چه frontend یا backend باشید هرچقد در این مفاهیم عمیق تر باشید در بازار کار به شما Competitive advantage میده و کار پیدا کردن برای شما خیلی راحت تر میشه و این موضوع رو هم قشنگ حس میکنید.

نکته بعدی این که این مسیر به هیچ عنوان یک مسیر یک شب یک ماه و یک ساله نیست و سال ها زمان بر هست و این شما هستین که تصمیم میگرید چقدر برای شما کافی هست با توجه به علاقه شما. میتونید این ها رو ندونید و درآمد قابل قبولی هم داشته باشید ولی اگر قصد پیشرفت دارید این مفاهیم از واجبات هست.

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

- همیشه هروقت کسی از من درمورد مسیر Backend سوال میپرسه من تاکید خیلی زیادی روی database و database design دارم.
https://downloadly.ir/elearning/video-tutorials/complete-intro-to-databases/
https://downloadly.ir/elearning/video-tutorials/complete-intro-to-sql-postgresql/
و اگر سطح خوبی دارید و میخواید deep تر بشید قطعا این چنل یوتیوب یک طلا درمورد database ها هست بیشتر از زاویه آکادمیک به مسائل نگاه میکنه و خب برای باتجربه تر ها خیلی مناسب هست.
https://www.youtube.com/@CMUDatabaseGroup

- موضوع بعدی networking هست. شما چه frontend باشی یا backend باید و باید OSI Model رو به صورت قلبی درک کرده باشی و البته در حد پایه ای network رو بشناسین شاید شما بگی من فرانت هستم لازم نداره. ممکنه این موضوع مستقیم تاثیری روی کار شما نداشته باشه ولی وقتی همکار devops شما اگر ازتون سوالی پرسید میتونید باهاش همکاری کنید مثل مجسمه خشک به همکارتون نگاه نمیکنید و این خیلی نکته مثبتی هست.
https://downloadly.ir/elearning/video-tutorials/introduction-to-computer-networking-2-hour-crash-course/
این دوره خیلی کوتاه هست و برای خیلی ها کافی هست و بیشتر نیازی نیست پیش برید ولی برای همه لازم هست. بقیه بیشتر برای عمیق تر شدن و علاقه هست.
https://downloadly.ir/elearning/video-tutorials/comptia-network-n10-008-full-course-practice-exam-1/
https://www.goodreads.com/book/show/59147607-computer-networking-global-edition

این کتاب که پایین میزارم یک خورده قدیمی هست و اگر میخواید مطالعه کنید یکم دقت کنید. درکل کتاب باارزشی هست.
https://www.goodreads.com/book/show/505564.The_TCP_IP_Guide

در ادامه از این دو repo سعید کنید الهام بگیرد برای مطالعه و deep تر شدن.
https://github.com/ossu/computer-science
https://github.com/jwasham/coding-interview-university

مفاهیم دیگه ای که در آینده با هم منابع مهمشون رو برسی میکنیم مثل سیستم عامل و مفاهیم low level تر مثل Computer architecture.

یک نکته دیگ این که اگر حس میکنید من میتونم به شما کمکی کنم در هرموردی میتونید PV به من پیام بدین و من خیلی خوشحال میشم اگر بتونم کمکی کنم.

#Course #Book #Guide
👍31
دنبال یک بهانه بودم که دوتا از بزرگترین و مهم ترین کتاب های computer science رو معرفی کنم.

خودم کامل نتونستم هردو رو بخونم چون به شدت سنگین هستن و وقت گیر.

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

https://x.com/imanhpr_media/status/1854096388641996939?t=g2nNlKxcScFHFab8BUeELA&s=09

#Book
👍5
به تمامی دوستان چه تازه کار و چه کسانی که سال ها تجربه دارند پیشنهاد میکنم حتما مفاهیم 12factor رو مطالعه کنند. خیلی از قدیمی تر ها این مفاهیم رو با سال ها کسب تجربه و به سختی به دست آوردن و همچین منبعی که به صورت خیلی خلاصه این ها رو به تمیز ترین شکل ممکن توضیح میده واقعا خیلی با ارزش هست.
https://12factor.net/

#Resource
👍15
Node Master
به تمامی دوستان چه تازه کار و چه کسانی که سال ها تجربه دارند پیشنهاد میکنم حتما مفاهیم 12factor رو مطالعه کنند. خیلی از قدیمی تر ها این مفاهیم رو با سال ها کسب تجربه و به سختی به دست آوردن و همچین منبعی که به صورت خیلی خلاصه این ها رو به تمیز ترین شکل ممکن…
سناریویی رو تصور کنید که یک پروژه مالی Deploy دارید و قصد دارید آپدیت جدید Production رو Deploy کنید و این سرویس هم ترافیک زیادی رو دریافت میکنه.
اتفاقی که میافته این هست که Process قدیمی Kill میشه و یک Process با آپدیت جدید باز میشود که خیلی ساده هست.
حالا موضوعی که باید توجه ویژه بشه این هست که این سرویس ترافیک زیادی داره و Kill کردن Process به صورت یهویی ممکنه در روند Transaction های موجود اختلال ایجاد کنه که به هیچ عنوان قابل قبول نیست.
در بهترین حالت برای حل این چالش باید راهی داشته باشیم که تمام Transaction های جاری نهایی بشن ولی هیچ Request جدید از سمت کلاینت ها دریافت نشه. حالا برای پیاده سازی این موضوع باید چیکار کنیم؟
راه حل خیلی ساده هست.
در این حالت به عنوان مثال با فرض این که application ما از طرف kubernetes سیگنال SIGTERM دریافت میکنه کافیه که server.close رو استفاده کنیم و در callback مربوط بهش از Process خارج بشیم.
وقتی server.close اجرا میشه سرور دیگه ریکوست جدید دریافت نمیکنه و سعی میکنه response برای request های درحال پردازش ارسال کنه و در نهایت بعد از به پایان رسیدن تمامی request ها وارد callback میشه.
import http from "node:http";
import process from "node:process";

const server = http.createServer((_, res) => res.end("NodeMaster"));

process.on("SIGTERM", () => {
server.close((err) => {
if (err) process.exit(1);
process.exit(0);
});
});

server.listen(3000);

کلا این مفهوم Graceful shutdown رو باید همیشه در Apllication هایی که توسعه میدین رو در نظر بگیرید و این موضوع رو داخل 12factor هم میبینید که بهش اشاره شده.
گاهی اوقات توجه نکردن به Graceful shutdown میتونه با توجه به داشتن Side effect خیلی ترسناک بشه مثل کار کردن با در پروژه های realtime که میتونه باعث data lost بشه.
👍21
Node Master
console.log("Welcome To Node Master")
با سلام خدمت همگی دوستان.
من فکر میکردم امروز یک ساله میشه چنل ولی ظاهرا ۳ روز پیش بوده.😂

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

واقعا همیشه دوست داشتم یک کامینیوتی برنامه نویسی عضو باشم که بچه ها فعال باشن و بحث ها عمیق داشته باشیم که با کمک شما تونستم به این آرزو در این یک سال برسم و واقعا از شما خیلی خیلی ممنونم🔥

امیدوارم تونسته باشم در این مدت براتون مفید بوده باشم و این برای من خیلی با ارزش هست.

در ادامه باهم دیگه قوی تر جلو میریم چیز های جدید و عمیق تر یاد میگیرم و بابت این موضوع خیلی خیلی هیجان دارم و خوشحال.

برای همه شما آرزو موفقیت و خوشبختی دارم.

داداش کوچک شما ایمان ❤️
Please open Telegram to view this post
VIEW IN TELEGRAM
👍42
یک پکیج خیلی کوچیک و کاربردی که میتونید در پروژه های خودتون و حتی Github action استفاده کنید تا اگر مشکل امنیتی در ورژن مورد استفاده شما در #NodeJS وجود داره با خبر بشید و در صورت نیاز آپدیت کنید
فقط کافی هست که با npx این پکیج رو ران کنید.
npx is-my-node-vulnerable

https://www.npmjs.com/package/is-my-node-vulnerable
👍12
یک بخش جدید به داکیومنت #NodeJS از ورژن 22 اضافه شده برای TypeScript.
خودش پیشنهاد میکنه از tsx استفاده کنیم برای NodeJS.

به صورت کلی فاصله زیادی داریم تا #NodeJS هم مثل #Bun و #Deno به صورت کامل و Stable از #TypeScript ساپورت کنه. داخل این داکیومنت در این مورد توضیحات مربوطه داده شده.
درکل برای پروژه Production درکل tsx یا ts-node گزینه منطقی تری هست.
https://nodejs.org/docs/latest-v22.x/api/typenoscript.html
#Update
👍11
درود خدمت شما دوستان.
const lst = []
lst.map()

موضوعی که امروز در این ویدیو میخواهیم عمیق درموردش صحبت کنیم این هست که چرا همین یک خط کد کوچک در بالا باعث میشه سرور #NodeJS نابود بشه و کلا نتونه هیچ Response رو به کاربر بده.
در این مسیر نگاهی میکنیم به یکی خفن ترین ویژگی های #NodeJS یعنی Readable استریم ها و یاد میگیریم که چطور با استفاده از اون ها یعنی
Readable.from()

یک برنامه بسیار Optimize تری داشته باشیم.
https://youtu.be/N0akLbvhShE?si=f623-vxXz-brA4ag
👍13
درود دوستان ارادت.
امیدوارم حالتون خوب باشه.
// lib code
func doSomething() <-chan int {
ch := make(chan int)

go func() {
defer close(ch)
time.Sleep(2 * time.Second)
ch <- 102

}()

return ch
}

// main code
func main() {
result := <-doSomething()
fmt.Println(result)
}

همیشه مفهوم Concurrency برای ما Developer ها مثل یک Super Power هست و البته به دست آوردن این Super Power هم کار راحتی نیست.
قبلا کتاب Learning Go رو من مطالعه میکردم و یک پاراگراف از این کتاب برای من خیلی جذاب بود چون نگرش من درمورد این موضوع و این Super Power تا حد خیلی زیادی تغییر داد.
در این ویدیو سعی میکنیم یک طرز تفکر و یک رویکرد رو برسی کنیم که بتونیم در آینده زیر ساخت مناسبی برای شنا کردن در دریای عمیق Concurrency ها در آینده داشته باشیم.
نکته اصلی این ویدیو مفهوم و طرز تفکری هست که از اون پاراگراف در کتاب یاد گرفتم و امیدوارم تونسته باشم به خوبی اون رو منتقل کنم.

https://youtu.be/fbh_r9CKmMU
👍14
درود دوستان ارادتتتت.
خیلی وقت بود میخواستم این ویدیو رو بگیرم. روزی که من #Python گذاشتم کنار و حرفه ای شروع به کد زدن #JavaScript و #NodeJS کردم همیشه هروقت باکسی بحث برنامه نویسی میشد من این رو میگفتم که جای یک چیزی مثل Context Manager مثل پایتون در اکوسیستم #JavaScript واقعا خالی هست. وقتی #TypeScript ورژن 5.2 منتشر شد و این syntax رو برای بار اول دیدم واقعا خوشحال شدم
async function main() {
using resource1 = getResource()
await using resource2 = await getResource()
}

در این ویدیو به Explicit Resource Management در زبان های برنامه نویسی #python , #golang و #cpp میکنیم. با یک پترن خیلی قدیمی به اسم RAII پترن آشنا میشیم و در نهایت میرسیم به ارتباط RAII پترن در C++ در #Typenoscript .
این ویدیو قرار هست در دو پارت منتشر بشه و پارت دوم رو کامل درمورد مثال های عملی #Typenoscript گذاشتیم و تمرکز ویدیو اول هم بیشتر نگاه به زبان های دیگر و برسی این موضوع که چرا به "using" نیاز داریم.

https://youtu.be/0CG_WA6Yu9o?si=QYunevpiEyWp6gWW
👍13
چند روزی هست #NodeJS نسخه 22.12 LTS منتشر شده و شاهد یکی از بزرگترین قدم های #NodeJS برای آینده هستیم.
در این ورژن میشه ماژول های ESM رو در CJS بدون استفاده از --experimental-require-module فلگ استفاده کرد. این موضوع باعث میشه که اکوسیستم بیشتر سمت ESM بره و استفاده از CJS کمتر بشه.

https://nodejs.org/en/blog/release/v22.12.0

#Update
👍11
یکی از بچه های فعال تو گروه خودمون داخل شرکتشون دنبال یک همکار جدید میگردن.

دوست داشتین رزومه خودتون بفرستین.

https://jobinja.ir/companies/concept-x/jobs/AT2K?_gl=1*z5obhf*_ga*MTU2MzU0NzAzOC4xNzEzMDkxOTU2*_ga_T8HC2S1534*MTczNDQ2MDE1MC41LjEuMTczNDQ2MTMyNS4yNS4wLjA.

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

جدا از این مسائل ولی هروقت اگر حس کردید من میتونم بهتون کمک کنم pv به من پیام بدین قطعا جواب میدم.

امیدوارم موفق باشین❤️
👍42
Node Master
دلیل این که این کد جذابه این موضوع هست که بعضی قسمت های #NodeJS دسترسی هایی خیلی نزدیک به زبانی مثل C بهت میده. و اون Api نزدیک به Api های low level داخل C هست. نمونه دیگ از این موضوع میتونه وقتی باشه که یک فایل یا سوکت به صورت خام باز میکنید و یکدونه file…
syscall-nodemaster.png
36.2 KB
قبلا در این مثال اشاره کوچکی به File Denoscriptor ها باهم کردیم. امروز با هم یکم عمیق تر میشیم. قبل از هرچیزی بهتر است این موضوع را درک کنیم که وقتی از "File" در اینجا صحبت میکنیم منظور از فایل های ویدیویی و موسیقی و عکس و باینری به تنهایی نیست. در اینجا باید از زاویه دید سیستم عامل به کلمه "File" و معنی اون نگاه کنیم تا بتونیم درک مناسبی داشته باشیم. از زاویه دید OS هر File میتونه یک Directory یا نمونه های بالا که گفتم یا حتی انواع IO Device های مختلف مثل Mouse و Keyboard و البته socket رو نباید فراموش کرد.
شاید گیج شده باشید یا براتون سوال پیش اومده باشه که چرا باید یک File از زاویه دید OS معادل همچین چیز هایی باشه؟ جواب خیلی ساده هست داشتن یک Abstraction خوب با یک Interface یکسان برای کار کردن با انواع مختلف IO Device ها قدرت خیلی زیادی میده و البته توسعه رو خیلی آسون تر میکنه. البته ما به عنوان Backend developer مستقیما با این sys call ها کار نمیکنیم و زبان های برنامه نویسی سطح بلاتر این موضوع رو هنوز Abstract تر کردن و یک Interface ساده تری به ما دادن. درواقع این موضوع کار توسعه دهنده زبان های برنامه نویسی دیگ رو راحت تر کرده تا برای ما بتونن راحت تر یک Interface تمیز و خوب توسعه بدن.

حالا میرسیم به این که FD چیست؟
- یک عدد postive int کوچک میباشد که برای هر Process این عدد ها Unique هستن و Process ما با استفاده از این آیدی هایی که از Kernal اومده میتونه با IO Device های مختلف صحبت کنه. به عنوان مثال FD 123 در یک Process با یک سوکت اشاره داره و در یک Process دیگ به یک text file.

- به صورت کلی File Denoscriptor ها بخشی از POSIX Api هستن و سیستم عامل های UNIX-like دارن.
- روی ویندوز داستان ظاهرا متفاوت هست و یک مفهومی به اسم Handle دارن که جزیاتش رو زیاد نمیدونم و در آینده باهم یادمیگیرم.

اگر هنوز یکم درک موضوع Abstraction که بالاتر اشاره کردم براتون سخته. مثال جذاب زیر براتون روشن میکنه داستان رو.
package main

import (
"fmt"
"net"
"os"
)

const MY_TXT = "NodeMaster Is Alive!"
const WRITE_NET = "WRITE TO TCP SOCKET"
const WRITE_FILE = "WRITE TO FILE"

func main() {
fd, _ := os.OpenFile("myTest.txt", os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644)
nt, _ := net.Dial("tcp", "localhost:3000")
fmt.Println(WRITE_NET)
nt.Write([]byte(MY_TXT))
fmt.Println(WRITE_FILE)
fd.Write([]byte(MY_TXT))
fmt.Println(nt)
fmt.Println(fd)
}

اینجا یک برنامه #Golang خیلی ساده داریم که یک فایل معمولی باز میکنیم و یک tcp socket و MY_TXT رو داخل هردو این ها Write میکنیم و چندتا لاگ ساده داریم که کارمون راحت تر باشه برای پیدا کردن syscall ها برنامه رو build بگیرید و با command زیر برنامه رو اجرا کنید.
در حقیقت وقتی سوکت و یک فایل متنی روی دیسک باز میکنیم اون پشت syscall مربوطه به ما یک File Denoscriptor میده که میتونیم با اون کار هامون رو انجام بدیم.
strace ./main

این strace به ما کمک میکنه که syscall هایی که برنامه ما انجام میده رو trace کنیم. در عکس بالا ما چندین write syscall رو میبینیم که به عنوان arg اول یک File Denoscriptor میگیره و به عنوان arg دوم یک بافر دیتایی که ما میخوایم داخلش بنویسیم.
در شماره یک که ما عدد 6 رو میبینیم این 6 در حقیقت به یک tcp socket اشاره داره و در شماره دو داخل عکس عدد 3 به File denoscriptor مربوط به text file ما روی دیسک اشاره داره. همینطور که میبینید حتی داخل عکس هم بدون دونستن این موضوع اگر نگاه فقط به singture فاکنکشن write کنید از روی file denoscriptor ها به هیچ عنوان متوجه نمیشید که مقصدی که داخلش write میکنیم آیا یک socket هست یا یک فایل روی دیسک یا هر IO Device دیگه ای و دقیقا همین موضوع اون چیزی هست که ما میخوایم و میشه همون Abstraction که بالاتر درموردش صحبت کردیم.

یک نکته این که درسته در #Golang و #Java ما Writer و Reader اینترفیس داریم و حتی اگر سیستم عامل همچین قابلیتی به ما نمیداد دوباره همچین interface هایی وجود داشت ولی کار توسعه دهنده های این زبان ها بسیار سخت تر بود برای ایجاد این interface ها.
حالا دوتا نکته که دوست دارم داخل گروه نظرتون رو بگید و درموردشون صحبت کنیم.
1. داخل عکس بالا چندتا write دیگ هم داریم که عدد 1 رو به عنوان File denoscriptor استفاده کردن. حالا این عدد 1 چی هست؟ داخل گروه خوشحال میشم درموردش صحبت کنیم.
2. چرا از #Golang استفاده کردیم برای مثال؟

بعد از مدت ها این اولین پست من هست امیدوارم براتون مفید باشه و خیلی خیلی ممنونم که همیشه همراه من بودید و امیدوارم همگی موفق باشید رفقا.
👍14
Iman Hosseini Pour
syscall-nodemaster.png
یه فکت درمورد لینوکس هست که میگه:
"همه چیز در لینوکس File هست"
همین یک جمله کافی هست که متوجه بشیم تقریبا وقتی میخوایم با هرچیزی کار کنیم به نوعی با File Denoscriptor ها سرکار داریم. داخل پست قبل داخل عکس بالا یک نکته ای اشاره کرده بودم که File Denoscriptor عدد 1 چی هست؟ باهم جوابش رو اینجا برسی میکنیم.
وقتی یک Process جدید در سیستم عامل ساخته میشه File Denoscriptor های 1,2,3 به صورت رزرو شده هستن و به به Process اختصاص داده میشوند.

0 = stdin
1 = stdout
2 = stderr
داخل عکس پست قبل هرجا از
fmt.Println()

استفاده کرده بودیم در حقیقت داشتیم روی FD 1 مینوشتیم. به صورت خلاصه هروقت console.log میزنیم داریم روی FD 1 مینویسیم. یعنی کنسول هم یک فایل هست. این موضوع منطقی هم هست چون وقتی یک ترمینال باز میکنید اگر
tty

بزنید بهتون آدرس terminal باز شده رو بهتون میده که وقتی Process روش باز میکنید از طریق FD 1 و 2 شما به برنامتون input و output میفرستید و میبینید.
با این تفاسیر وقتی Terminal ما یک file هست پس میتونیم با node:fs داخلش بنویسیم.
import fs from "node:fs";
fs.writeSync(1, Buffer.from("Hello NodeMaster\n"));
👍14