یه پست در لینکدین منتشر شد که خیلی بازخورد های مختلف و بیشتر منفی داشت.
یکسری نکات درمورد تجربه هام گفتم اگر دوست داشتید چک کنید شاید چیز جدید بود براتون.
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
سلام دوستان
ما توی تیممون نیاز به یک شخص داریم که قسمتی از کار رو برامون پروژه ای انجام بده
پروژه هم بک اندی هستش و نیاز داریم ای پی ای هایی که نوشته میشه به یک پنل آماده متصل کنه
مواردی که لازمه برای انجام این پروژه تسلط داشته باشید
nestjs
mongodb
redis
socketio
react
دوستانی که مایل به همکاری هستن راه های ارتباطی :
ehsan@raychat.io
@ehsan_younesi
بخش فرصت های شغلی هم میتونید چک کنید.
https://raychat.io
#Work
ما توی تیممون نیاز به یک شخص داریم که قسمتی از کار رو برامون پروژه ای انجام بده
پروژه هم بک اندی هستش و نیاز داریم ای پی ای هایی که نوشته میشه به یک پنل آماده متصل کنه
مواردی که لازمه برای انجام این پروژه تسلط داشته باشید
nestjs
mongodb
redis
socketio
react
دوستانی که مایل به همکاری هستن راه های ارتباطی :
ehsan@raychat.io
@ehsan_younesi
بخش فرصت های شغلی هم میتونید چک کنید.
https://raychat.io
#Work
رایچت
پلتفرم گفتگوی آنلاین با مشتریان - رایچت
تجربه جدید گفتگوی آنلاین، فروش و پشتیبانی اینجا آغاز می شود
👍2
سلام دوستان ارادت.
چند روز پیش یک توییت زدم که برام عجیب بود حتی برنامه نویس هایی با چند سال سابقه چه #Frontend و چه#Backend با مفهوم Serialization و Deserialization آشنایی ندارند و باز خورد جالبی گرفت.
https://twitter.com/imanhpr_media/status/1774890856622809175
تصمیم گرفتم درمورد این موضوع یک ویدیو بسازم و باهم عمیق این موضوع رو یاد بگیریم و برسی کنیم.
در این ویدیو نوع داده String رو عمیق برسی میکنیم بعد به خود Serialization و Deserialization میرسیم و در نهایت با توضیح درمورد Encoding و Decoding و ارتباط این ۳ موضوع با هم عمیق صحبت میکنیم.
بیشتر در این ویدیو از زاویه #CS به مسله نگاه میکنیم ولی به طوری که بتونیم در development هم استفاده کنیم. یک سری best practices و optimization صحبت میکنیم و کد میزنیم.
ویدیو بعدی هم ادامه این ویدیو هست و بیشتر development و مثال هست که یکی از سایت های داخلی با توجه به مفاهیمی که اینجا یاد میگیرم برسی میکنیم.
چه تازه کار باشید و چه veteran developer دونستن اینجور مفاهیم به شما کمک میکنه که تو مصاحبه ها هم اعتماد به نفس خیلی بیشتری داشته باشید و درکل بهتر باشید.
چند روز پیش یک توییت زدم که برام عجیب بود حتی برنامه نویس هایی با چند سال سابقه چه #Frontend و چه#Backend با مفهوم Serialization و Deserialization آشنایی ندارند و باز خورد جالبی گرفت.
https://twitter.com/imanhpr_media/status/1774890856622809175
تصمیم گرفتم درمورد این موضوع یک ویدیو بسازم و باهم عمیق این موضوع رو یاد بگیریم و برسی کنیم.
در این ویدیو نوع داده String رو عمیق برسی میکنیم بعد به خود Serialization و Deserialization میرسیم و در نهایت با توضیح درمورد Encoding و Decoding و ارتباط این ۳ موضوع با هم عمیق صحبت میکنیم.
بیشتر در این ویدیو از زاویه #CS به مسله نگاه میکنیم ولی به طوری که بتونیم در development هم استفاده کنیم. یک سری best practices و optimization صحبت میکنیم و کد میزنیم.
ویدیو بعدی هم ادامه این ویدیو هست و بیشتر development و مثال هست که یکی از سایت های داخلی با توجه به مفاهیمی که اینجا یاد میگیرم برسی میکنیم.
چه تازه کار باشید و چه veteran developer دونستن اینجور مفاهیم به شما کمک میکنه که تو مصاحبه ها هم اعتماد به نفس خیلی بیشتری داشته باشید و درکل بهتر باشید.
X (formerly Twitter)
ImanHpr (@imanhpr_media) on X
واقعا باورش برام خیلی سخته که خیلی از بچه های #FrontEnd و #BackEnd با سابقه چند سال درکی از serialization و deserialization ندارند.
البته این هم بی تاثیر نیست که ورود به بازار کار راحت تر شده و خیلیا اکثرا بک گراند قوی کامپیوتری ندارد.
البته این هم بی تاثیر نیست که ورود به بازار کار راحت تر شده و خیلیا اکثرا بک گراند قوی کامپیوتری ندارد.
👍9
Node Master
سلام دوستان ارادت. چند روز پیش یک توییت زدم که برام عجیب بود حتی برنامه نویس هایی با چند سال سابقه چه #Frontend و چه#Backend با مفهوم Serialization و Deserialization آشنایی ندارند و باز خورد جالبی گرفت. https://twitter.com/imanhpr_media/status/1774890856622809175…
YouTube
Serialization و Deserialization چیست ؟
در این ویدیو به صورت عمیق با هم مفهوم Serialization و Deserialization برسی میکنیم. یک نمونه کد کوچیک رو برسی میکنیم و در نهایت درمورد Encoding های مختلف صحبت میکنیم.
00:00 - intro
01:22 - table of content
02:46 - What is String
07:20 - Serialization And…
00:00 - intro
01:22 - table of content
02:46 - What is String
07:20 - Serialization And…
👍16
Node Master
سلام دوستان ارادت. امروز آپدیت جدید 20.12 LTS که به تازگی برای #NodeJS منتشر شده رو باهم برسی میکنیم. به نسبت این آپدیت تغییرات بیشتری از آپدیت های قبلی مثل 20.11 و 20.12 داشته و چنتا حرکت خوب هم بلاخره از Node درمورد single exec app ها دیدیم. در بخش آخر…
این پست برای دوستانی هست که این ویدیو آپدیت 20.12 LTS مربوط به #NodeJS رو ندیند.
اگر در برنامه خودتون نیاز دارید که hash یک دیتا رو داشته باشیم فقط یک stream api برای این کار وجود داشت که استفاده از این api برای payload های کوچیک overhead زیادی داره و اما برای فایل های بزرگ واقعا api خوبی هست.
اما با این API جدید که در اختیار ما قرار گرفته overhead خیلی کمتری روی runtime داره و برای payload های کوچیک قطعا سریعتر و بهتر هست.
و این که ظاهرا مشکل type هم که در ویدیو گفته بودم فیکس شده. چون پکیج @types/node از تایم رکورد ویدیو از 20.12.2 به 20.12.5 آپدیت شده.
#Update
اگر در برنامه خودتون نیاز دارید که hash یک دیتا رو داشته باشیم فقط یک stream api برای این کار وجود داشت که استفاده از این api برای payload های کوچیک overhead زیادی داره و اما برای فایل های بزرگ واقعا api خوبی هست.
import { createHash } from "node:crypto";
const data = "this is my data";
const sha1 = createHash("SHA1");
const hexDigest = sha1.update(data).digest("hex");
console.log(hexDigest);اما با این API جدید که در اختیار ما قرار گرفته overhead خیلی کمتری روی runtime داره و برای payload های کوچیک قطعا سریعتر و بهتر هست.
import { hash } from "node:crypto";
const data = "this is my data";
const hexDigest = hash("SHA1", data, "hex");و این که ظاهرا مشکل type هم که در ویدیو گفته بودم فیکس شده. چون پکیج @types/node از تایم رکورد ویدیو از 20.12.2 به 20.12.5 آپدیت شده.
#Update
👍10
واقعا از همه شما دوستان متشکرم بابت حمایتتون و لطف زیادی که به من داشتین.
همزمان چنل تلگرام شدیم ۷۰۰ نفر و یوتیوب هم شدیم ۲۰۰ نفر و این خیلی برای من با ارزشه.
امیدوارم همگی موفق باشید و این که واقعا خیلی خیلی خوشحالم که تونستم مفید باشم.
کوچیک شما ایمان ❤️
راستی رفقای جدید. ما یک گروه برای صحبت کردن درمورد نکات فنی برای کمک به همدیگه داریم. خوشحال میشیم جوین بشید.
https://news.1rj.ru/str/nodemastergp
همزمان چنل تلگرام شدیم ۷۰۰ نفر و یوتیوب هم شدیم ۲۰۰ نفر و این خیلی برای من با ارزشه.
امیدوارم همگی موفق باشید و این که واقعا خیلی خیلی خوشحالم که تونستم مفید باشم.
کوچیک شما ایمان ❤️
راستی رفقای جدید. ما یک گروه برای صحبت کردن درمورد نکات فنی برای کمک به همدیگه داریم. خوشحال میشیم جوین بشید.
https://news.1rj.ru/str/nodemastergp
Telegram
Node Master Group
هدف از این گروه صحبت و پرسش پاسخ درمورد نکات مربوط به برنامه نویسی میباشد.
از بحث های حاشیه ای به شدت دوری کنید لطفا.
Admin: @NapoleoN_N1
@NodeMaster
از بحث های حاشیه ای به شدت دوری کنید لطفا.
Admin: @NapoleoN_N1
@NodeMaster
👍16
چند مدتی هست #Deno ورژن 1.42 منتشر شده و در این ورژن jsr.io رو به عنوان repo اصلی برای package های 3rd party خودش قرار داده و این بزرگترین حرکت این آپدیت بوده.
بزودی باهم این ویژگی برسی عمیق میکنیم.
https://deno.com/blog/v1.42
#Update
بزودی باهم این ویژگی برسی عمیق میکنیم.
https://deno.com/blog/v1.42
#Update
Deno
Deno 1.42: Better dependency management with JSR | Deno
Deno 1.42 revolutionizes dependency management with the seamless integration of JSR, enhancing Node/npm compatibility and introducing significant performance improvements.
👍4
بلاخره وقت پیدا کردم یکم کتاب بخونم تا با همدیگه دوباره موضوعات عمیق رو برسی کنیم.
همین اول راه این رو پیدا کردم. که توییت کردم.
https://twitter.com/imanhpr_media/status/1778104041865711766?t=uKyyZV5Oo9j6HwO5Q6DWHQ&s=19
همین اول راه این رو پیدا کردم. که توییت کردم.
https://twitter.com/imanhpr_media/status/1778104041865711766?t=uKyyZV5Oo9j6HwO5Q6DWHQ&s=19
👍3
جایزه Turing award سال 2023 هم مشخص شد. آقای Avi Wigderson به خاطر سال ها تحقیق درمورد الگوریتم های ایجاد داده های random . این مقاله به نظرم جالب اومد دوست داشتید مطالعه کنید.
شاید براتون عجیب بیاد که به عنوان مثال کد زیر خیلی ساده باشه.
ولی این جایزه که معادل جایزه نوبل هست و مبلغ یک میلیون دلار هم شامل میشه برای پشت پرده این کد به ظاهر ساده هست که دهه ها تلاش شده.
#News
https://www.newscientist.com/article/2425914-mathematician-wins-turing-award-for-harnessing-randomness/
شاید براتون عجیب بیاد که به عنوان مثال کد زیر خیلی ساده باشه.
import { randomBytes } from "node:crypto";
const buf = randomBytes(8)ولی این جایزه که معادل جایزه نوبل هست و مبلغ یک میلیون دلار هم شامل میشه برای پشت پرده این کد به ظاهر ساده هست که دهه ها تلاش شده.
#News
https://www.newscientist.com/article/2425914-mathematician-wins-turing-award-for-harnessing-randomness/
New Scientist
Mathematician wins Turing award for harnessing randomness
Avi Wigderson has won the 2023 Turing award for his work on understanding how randomness can shape and improve computer algorithms
👍13
Node Master
https://youtu.be/53J2n0zpcys
سلام رفقا ارادت. امروز در این ویدیو در ادامه مبحث Serialization and Deserialization قرار شده بود که باهم یک وب سایت داخلی رو چک کنیم. در این ویدیو باهم وب سایت digikala.com رو برسی میکنیم و یک بهینه سازی کوچک انجام میدیم و البته با یک encoding جدید به اسم unicode-escape آشنا میشیم و تاثیرش رو در api response ها به شکل مستقیم میبینیم به طوری که به طرز چشمگیری میتونیم حجم ترافیک مصرفی اینترنت کاربر و کلا ترافیک شبکه رو به طرز خیلی زیادی کاهش بدیم با همین تکنیک ساده!
ممنونم از digikala که فرصت همچین یادگیری و کنجکاوی برای ما فراهم کرد.
https://youtu.be/aPCqfRjf4BM
ممنونم از digikala که فرصت همچین یادگیری و کنجکاوی برای ما فراهم کرد.
https://youtu.be/aPCqfRjf4BM
YouTube
برسی و بهینه سازی #دیجیکالا با استفاده از encoding
امروز باهم در ادامه ویدیو قبل یعنی Serialization and Deserialization اومدیم و یکی از api response های #دیجیکالا رو باهم برسی کردیم و سعی کردیم با استفاده از نکاتی که در ویدیو قبل یاد گرفتیم باهم بهترش کنیم
ممنون از #دیجیکالا که همچین فرصتی رو برای ما فراهم…
ممنون از #دیجیکالا که همچین فرصتی رو برای ما فراهم…
👍11
همونطور که در عکس میبینید #CPP یک زبان Multi-paradigm هست. انجین اصلی #NodeJS و موتور #V8 که کار Parse کردن #JavaScript رو انجام میده در حقیقت یک برنامه پیچیده هستن که با #CPP نوشته شده. حالا این موضوع باعث ایجاد یکی از بزرگترین کنجکاوی ها برای من هست و هنوز جواب دقیق رو نمیدونم و فقط براساس حدس هست.
اگر یکم با زبان هایی مثل #C و #CPP کار کرده باشید مخصوصا C قشنگ با استایل procedural و imperative آشنا میشید. حالا اگر به #NodeJS نگاه کنیم که یک سیستم Event-Driven هست سوال برای ما ایجاد میکنه که چطور این تغییر و شیفت در نوع پارادایم ایجاد شده؟
بزارید ساده تر بگم یعنی چطور با استفاده از یک سیستم procedural یا imperative یا OOP یک سیستم Event-Driven طراحی میکنیم؟ به نظر من قطعا اینجا به نوعی با Observer pattern طرف هستیم ( که ظاهرا میشه همون Event-loop در js )
یک مثال ساده تر در توسعه #FrontEnd میبینیم. که از #JavaScript که imperative هست به سیستمی مثل #React رسیدیم که declarative هست.
درکل این شیفت بین پارادایم ها موضوع جالبی برای مطالعه هست و قسمت سخت سوال پیدا کردن خط مرزی بین اونا هست که چطور انجام میشه.
اگر یکم با زبان هایی مثل #C و #CPP کار کرده باشید مخصوصا C قشنگ با استایل procedural و imperative آشنا میشید. حالا اگر به #NodeJS نگاه کنیم که یک سیستم Event-Driven هست سوال برای ما ایجاد میکنه که چطور این تغییر و شیفت در نوع پارادایم ایجاد شده؟
بزارید ساده تر بگم یعنی چطور با استفاده از یک سیستم procedural یا imperative یا OOP یک سیستم Event-Driven طراحی میکنیم؟ به نظر من قطعا اینجا به نوعی با Observer pattern طرف هستیم ( که ظاهرا میشه همون Event-loop در js )
یک مثال ساده تر در توسعه #FrontEnd میبینیم. که از #JavaScript که imperative هست به سیستمی مثل #React رسیدیم که declarative هست.
درکل این شیفت بین پارادایم ها موضوع جالبی برای مطالعه هست و قسمت سخت سوال پیدا کردن خط مرزی بین اونا هست که چطور انجام میشه.
👍15
باتوجه به این که Array هم در #JavaScript یک Object هست کاملا این syntax درسته. یعنی فانکشن ما میتونه با استفاده از this اگر به عنوان یکی از index های array تعریف شده باشه به خود array اورجینال که در حقیقت یک object هست دسترسی داشته باشه.
این نکات رو بیشتر از زاویه fun fact یا عمیق تر شدن نگاه کنید. هیچ کد پروداکشنی پیدا نمیکنید این استایل کد ببینید.
const myArr = [
function myfn() {
console.log(this[1]);
},
2,
];
myArr[0]();
این نکات رو بیشتر از زاویه fun fact یا عمیق تر شدن نگاه کنید. هیچ کد پروداکشنی پیدا نمیکنید این استایل کد ببینید.
👍25
آپدیت جدید برای MikroORM اومده و ساپورت از Microsoft Sql Server رو اضاف کرده.
https://mikro-orm.io/blog/mikro-orm-6-2-released
https://mikro-orm.io/blog/mikro-orm-6-2-released
mikro-orm.io
MikroORM 6.2: Say hello to SQL Server (and libSQL) | MikroORM
I am pleased to announce MikroORM v6.2. This release is special, after a very long time, two new SQL drivers are added, namely the Microsoft SQL Server (@mikro-orm/mssql package) and libSQL driver (@mikro-orm/libsql package). And there is more!
👍7
اگر با #NodeJS کار میکنید و میخواید performance یک بخش کد رو برسی کنید یک روش خیلی کلاسیک و مرسوم به شکل کد زیر هست. البته این نکته هم بگم که روی مرورگر هم همچین API داریم که میتونه برای بچه های #FrontEnd هم جذاب باشه.
خب این نکته رو باید در نظر گرفت که متد Date.now برای این کار مناسب نیست.
- میتونه در scale دقت کافی نداشته باشه.
- کلا Date به صورت Non-Monotonic Time که این میتونه دردسر ساز بشه و این هم در scale بیشتر تاثیر داره
حالا تعریف Monotonic Time چیه ؟
به صورت کلی به این معنی هست که میشه این زمان رو دستکاری کرد یعنی زمان رو عقب و جلو برد. یعنی به عنوان مثال در زمانی که مقدار startTime مشخص شد و تا وقتی که endTime برسیم این وسط یکی اگر بیاد ساعت سیستم رو دست بزنه یک ساعت ببره عقب زمان منفی به ما نشون میده و در این حالت اصلا زمان منفی معنی نداره. در کل Date Object تحت تاثیر مستقیم ساعت سیستم عامل هست.
حالا شاید این سناریو یکم دور از ذهن بنظر بیاد ولی در حالتی مثل تغییر ساعتی که هر ۶ ماه یکبار در سال انجام میشه میتونه تاثیر بزاره ولی خب باز هم خیلی ممکنه به چشم نیاد. به این حالت میگن Non-Monotonic. حالا اگر بتونیم یه راهی داشته باشیم که این وابستگی ها رو حذف کنیم و راهی داشته باشیم که وقتی زمان رو اندازه گیری میکنیم نتونیم به عقب برگردیم بهش میگیم Monotonic Time.
یک مثال واقعی تر رو بخوام بگم این مدل ساعت ها رو مثل یک stopwatch در نظر بگیرید که مثلا از لحظه شروع دویدن یک دونده استارت میخوره و تا خط پایان ادامه داره. ( اینجا به جا دونده شما #NodeJS رو در نظر بگیرید )
حالا بزارید کد بالا رو اصلاح کنیم با یک کد بهتر
نکته ای که دونستنش در این سناریو جالبه این موضوع هست که Date.now در حقیقت شروع زمان ( شروع دویدن ) رو Unix Epoch (January 1, 1970, UTC) در نظر میگیره اما performance.now از لحظه ای که #NodeJS اجرا شده.
موضوع بعدی این هست که Date.now با دقت Milliseconds داره ولی performance.now دقت Sub-milliseconds و با دستکاری ساعت سیستم هم اتفاقی نمیافته چون Monotonic هست.
اگر دوست دارید دقیق بدونید #NodeJS process شما دقیقا در چه زمانی با دقت Sub-millisec اجرا شده میتونید اینطور متوجه بشید.
function loop() {
const startTime = Date.now();
for (let i = 0; i <= 1e5; ++i) {
console.log(i);
}
const endTime = Date.now();
console.log("time : ", endTime - startTime);
}
loop();خب این نکته رو باید در نظر گرفت که متد Date.now برای این کار مناسب نیست.
- میتونه در scale دقت کافی نداشته باشه.
- کلا Date به صورت Non-Monotonic Time که این میتونه دردسر ساز بشه و این هم در scale بیشتر تاثیر داره
حالا تعریف Monotonic Time چیه ؟
به صورت کلی به این معنی هست که میشه این زمان رو دستکاری کرد یعنی زمان رو عقب و جلو برد. یعنی به عنوان مثال در زمانی که مقدار startTime مشخص شد و تا وقتی که endTime برسیم این وسط یکی اگر بیاد ساعت سیستم رو دست بزنه یک ساعت ببره عقب زمان منفی به ما نشون میده و در این حالت اصلا زمان منفی معنی نداره. در کل Date Object تحت تاثیر مستقیم ساعت سیستم عامل هست.
حالا شاید این سناریو یکم دور از ذهن بنظر بیاد ولی در حالتی مثل تغییر ساعتی که هر ۶ ماه یکبار در سال انجام میشه میتونه تاثیر بزاره ولی خب باز هم خیلی ممکنه به چشم نیاد. به این حالت میگن Non-Monotonic. حالا اگر بتونیم یه راهی داشته باشیم که این وابستگی ها رو حذف کنیم و راهی داشته باشیم که وقتی زمان رو اندازه گیری میکنیم نتونیم به عقب برگردیم بهش میگیم Monotonic Time.
یک مثال واقعی تر رو بخوام بگم این مدل ساعت ها رو مثل یک stopwatch در نظر بگیرید که مثلا از لحظه شروع دویدن یک دونده استارت میخوره و تا خط پایان ادامه داره. ( اینجا به جا دونده شما #NodeJS رو در نظر بگیرید )
حالا بزارید کد بالا رو اصلاح کنیم با یک کد بهتر
import { performance } from "node:perf_hooks";
function loop() {
const startTime = performance.now();
for (let i = 0; i <= 1e5; ++i) {
console.log(i);
}
const endTime = performance.now();
console.log("time : ", endTime - startTime);
}
loop();نکته ای که دونستنش در این سناریو جالبه این موضوع هست که Date.now در حقیقت شروع زمان ( شروع دویدن ) رو Unix Epoch (January 1, 1970, UTC) در نظر میگیره اما performance.now از لحظه ای که #NodeJS اجرا شده.
موضوع بعدی این هست که Date.now با دقت Milliseconds داره ولی performance.now دقت Sub-milliseconds و با دستکاری ساعت سیستم هم اتفاقی نمیافته چون Monotonic هست.
اگر دوست دارید دقیق بدونید #NodeJS process شما دقیقا در چه زمانی با دقت Sub-millisec اجرا شده میتونید اینطور متوجه بشید.
import { performance } from "node:perf_hooks";
console.log(performance.timeOrigin);👍17
همکاری در پوزیشن توسعه دهنده بک اند
ما یکشرکت فناور مستقر در پارک علم و فناوری دانشگاه تهران هستیم. ما به دنبال یک همکار توسعه دهنده در پوزیشن بک اند با استک nest هستیم و توانایی های مورد انتطارمون:
تسلط بر typenoscript و فریمورک nest
توانایی کار با git
توانایی تست نویسی
توانایی داکیومنتیشن
توانایی کار گروهی و حل مساله
Naghshtech@gmail.com
@Ali_ramez
#Work
ما یکشرکت فناور مستقر در پارک علم و فناوری دانشگاه تهران هستیم. ما به دنبال یک همکار توسعه دهنده در پوزیشن بک اند با استک nest هستیم و توانایی های مورد انتطارمون:
تسلط بر typenoscript و فریمورک nest
توانایی کار با git
توانایی تست نویسی
توانایی داکیومنتیشن
توانایی کار گروهی و حل مساله
Naghshtech@gmail.com
@Ali_ramez
#Work
👍2
سلام دوستان ارادت امیدوارم حالتون خوب باشه. نسخه 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