<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های mohammad rostami</title>
        <link>https://virgool.io/feed/@miscoder</link>
        <description>برنامه نویس سابق موبایل ( android ) که از طریق react native وارد دنیای javascript شد و الان به عنوان backend developer در علی بابا در حال کاره.</description>
        <language>fa</language>
        <pubDate>2026-06-07 10:37:57</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/5673/avatar/pvB0a4.png?height=120&amp;width=120</url>
            <title>mohammad rostami</title>
            <link>https://virgool.io/@miscoder</link>
        </image>

                    <item>
                <title>چرا باید تایپ ده انگشتی یاد بگیریم ؟</title>
                <link>https://virgool.io/javacup/%DA%86%D8%B1%D8%A7-%D8%A8%D8%A7%DB%8C%D8%AF-%D8%AA%D8%A7%DB%8C%D9%BE-%D8%AF%D9%87-%D8%A7%D9%86%DA%AF%D8%B4%D8%AA%DB%8C-%DB%8C%D8%A7%D8%AF-%D8%A8%DA%AF%DB%8C%D8%B1%DB%8C%D9%85-kilzxwxdgxgy</link>
                <description>بزارید اینطوری شروع کنم، فرض کنید که شما یه سلاح  مثل AK-47 دارید، اما استفاده از اون رو طبق اصول و قواعد خاصی یاد نگرفتید.نمیدونید چه طوری تمییزش کنید. نمیدونید چطوری میتونید سریع تر پرش کنید و نمیدونید چطوری نشونه گیری کنید. فقط بلدید ازش استفاده کنید. خیلی هم سریع ازش استفاده میکنید و خوب هم باهاش شلیک میکنید.خوب حالا من از شما سوال میکنم که اگه دشمن شما هم همین سلاح رو داشته باشه، برتری شما در میدان نبرد نسبت به اون چیه ؟ راهی هست که بتونین بهتر نشونه گیری کنید ؟ راهی هست که بتونید از امنیت سلاحتون اطمینان داشته باشید ؟ چیکار کنیم که موقع استفاده از اسلحه کمترین نیرو به بدن وارد بشه و بتونیم ساعت ها با همین اسلحه تو میدون نبرد دوام بیاریم. تازه فکر اینو کردین که اگه این اسلحه رو از دست بدین و یه اسلحه دیگه پیدا کنید چطوری ازش استفاده کنید ؟ شما قواعد رو بلد نیستید برای همین اگر اسلحتون عوض بشه مدت ها طول میکشه تا بتونین با اسلحه ی دیگه ای به خوبی الان آدم بکشید :) کیبرد همون اسلحه شماست اگه صبح تا شب پای سیستم هستید باید بتونید از کیبردتون به بهترین نحو استفاده کنید به طوری که بدنتون آسیب نبینه. بسیار سریع و چابک باشید. با کمترین انرژی بتونین دکمه ها رو فشار بدین بدون اینکه مجبور بشید قبل از لمس اون کلید خاص نگاهش کنید. شما باید بتونین تقریبا بدون حرکت دادن مچ های دستتون به کل کیبرد دسترسی داشته باشید.شما باید همیشه سرتون رو به مانیتور باشه و نه روی صفحه ی کیبورد. بزارید مغزتون به کمکتون بیاد و نه چشماتون. تازه اگه کیبرد جدید گرفتید باید بتونین مثل کیبرد قبلیتون سریع ازش استفاده کنید. بزارید مغزتون به کمکتون بیاد وقتی که تایپ ۱۰ انگشتی رو یاد بگیرید، هر انگشتی بر روی صفحه کلید یک یا چند وظیفه ی خاص داره و به مرور مغز شما عادت میکنه که هر انگشتی رو در چه مواقعی و در کجای صفحع کلید قرار بده و بعد از یه مدت با چشمان بسته هم میتونید کد بزنید. چون دیگه نیازی به نگاه کردن صفحه کلید ندارید. در واقع یاد گیری تایپ ده انگشتی مزایای زیادی داره : ۱ : سرعت تایپ کردن شما رو بسیار زیاد میکنه۲: کمک میکنه تا بتونین به هر کیبردی سریع عادت کنید۳: چون دستتون رو کمتر جابه جا میکنید دیرتر خسته میشید. ۴: چون به کیبرد نگاه نمیکنید، گردنتون همیشه روبروست و همین باعث میشه که بدن سالم تری داشته باشید. تجربه ی من اگه سالیان سال باشه که به همین صورت فعلی تایپ میکنید تغییر به تایپ ۱۰ انگشتی برای شما میتونه بسیار زمان بر باشه. پس اینو فراموش نکنید که اول از همه باید صبور باشید. حداقل ۱ ماه روزی ۱ ساعت زمان بزارید تا دستتون راه بیفته.در مورد خود من این مشکل بزرگ وجود داشت که اوایل که تایپ ده انگشتی رو شروع کرده بودم،اصرار داشتم که ده انگشتی هم کد بزنم. ولی واقعا این کار نشدنی بود چون اولش خیلی خیلی کند بودم . پس تصمیم گرفتم موقع یاد گرفتن تایپ ده انگشتی، با ده انگشتم تایپ کنم و موقع کد زدن به همون روش قبلی کد بزنم.بعد از یه مدت کم کم موقع کد زدن به ذهنم میرسید که الان این دکمه رو باید با این انگشتم بزنم و کم کم تایپ ده انگشتی رو به صورت کامل موقع کد زدن پیاده کردمیه موضوع دیگه اینکه بهتون پیشنهاد میکنم به عنوان تایم های تفریح تون تمرین تایپ ۱۰ انگشتی کنید. یعنی فکرتون یه جای دیگه باشه اما در حال تایپ کردن باشید. این موضوع باعث میشه که تایپ کردن وارد ناخوداگاهتون بشه و برای درست تایپ کردن نیازی به فکر کردن نداشته باشید.یه موضوع دیگه اینکه سعی کنید استمرار داشته باشید. هر موقع که بیکار شدید یا هر موقع که معطل دانلود چیزی بودید یه سشن تست تایپ ده انگشتی انجام بدید.چه وب سایت هایی میتونن کمک کنن ؟ من اول از همه با وب سایت typingclub.com شروع کردم و تا لول های ادونس رفتم اما مشکلم این بود که تایپ کردن کلمات انگلیسی رو یاد گرفته بودم و نه تایپ کردن کاراکتر های انگلیسی رو. مثلا واژه ی clean رو سریع مینوشتم چون بارها نوشته بودمش. اما مثلا به تنهایی نمیتونستم کاراکتر n رو بنویسم. در واقع ذهنم به واژه ها عادت کرده بود. بعدتر از keybr.com استفاده کردم که با استفاده از یک الگوریتم کلمات بی معنی ساخته میشه و شما برای نوشتن اون کلمات باید جای تک تک کارکتر ها رو دقیق یاد بگیرید. به بیان دیگه بهتون پیشنهاد میدم شما هم اول از typingclub.com شروع کنید و بعد از یه مدت که راه افتادید از keybr.com استفاده کنید. فارسی چی میشه ؟در مورد فارسی میتونم بهتون بگم که به طرز عجیبی بعد از یادگیری تایپ ده انگشتی به زبان انگلیسی، خیلی سریع تونستم فارسی رو هم یاد بگیرم بدون اینکه تمرین کنم. فک میکنم برای شما هم همینطور باشه. چون ناخوداگاه شما جای تک تک کاراکتر ها رو به ذهن سپرده و نیازی به یادگیری مجدد ندارید. یه مقدار خیلی کم تمرین کمک میکنه تا توی فارسی هم خیلی خوب راه بیفتید.امیدوارم این موضوعی که مطرح کردم بهتون کمک کنه.</description>
                <category>mohammad rostami</category>
                <author>mohammad rostami</author>
                <pubDate>Thu, 23 Jul 2020 14:55:40 +0430</pubDate>
            </item>
                    <item>
                <title>آیا Deno میتونه ؟</title>
                <link>https://virgool.io/@miscoder/%D8%A2%DB%8C%D8%A7-deno-%D9%85%DB%8C%D8%AA%D9%88%D9%86%D9%87-na45avvkhq1z</link>
                <description>خوب بالاخره نسخه ی استیبل Deno معرفی شد. نمیدونم Deno رو میشناسید یا نه. ولی خوب Deno برای این بوجود اومده که اشتباهات Node.js رو جبران کنه. اینو من نمیگم ! اینو آقای Ryan Dahl میگه. همونی که برامون Node.js رو ساخته. اتفاقا Deno هم دستپخت ایشونه. اساسا هر دوی این Runtime ها مشابه هم هستن. -  هر دو از موتور V8 جاوااسکریپت استفاده میکنن. اگه نمیدونین v8 چی هست خیلی مختصر میتونم بگم که وظیفش تبدیل کد جاوااسکریپت به کد های ماشین هست.-  هر دو از مکانیسم ٍevent loop استفاده میکنن. در مورد Node.js اینکار با libuv اتفاق می افته و در مورد Deno با tokyo زبانی که Node.js باهاش توسعه داده شده ++c هست و در مورد Deno هم Rust.تا اینجای کار که تفاوت محسوسی دیده نمیشه . پس میشه گفت که Deno نسخه ی متعالی Node.js هست.اما آیا واقعا هست ؟ آیا میتونه ؟ویژگی های جذاب Deno رو براتون میشمارم : -  دینو قابلیت اجرای sandbox داره. منظور اینه که به صورت پیش فرض نمیتونین توی یه اپلیکیشنی که با Deno توسعه داده شده به io یا نتورک دسترسی داشته باشید. بلکه باید حتما اجازه ی این دسترسی ها رو بدید. این موضوع باعث میشه که بر خلاف Node.js امنیت بیشتری داشته باشیم . -  دنو به صورت پیش فرض از تایپ اسکریپت استفاده میکنه. دیگه خبری از ts-node نیست. و خب این خیلی جذابه. اگه دولپر بکندی باشید میدونین که type safety تو بکند چقدر مهمه ! البته باید بگم که دینو همچنان جاوااسکریپت رو هم ساپورت میکنه. پس اگه هنوز به تایپ اسکریپت مهاجرت نکردید بازم میتونین از دینو استفاده کنید.-  اگه تو دنو Uncaught Exception اتفاق بیفته سرویس از کار میافته ! به عنوان یه برنامه نویس بکندی میدونین که دراپ شدن سرویس خیلی بهتر از با خطا کار کردن همون سرویسه . چون ممکنه باعث مشکلاتی بشه که هزینه های سنگینی روی دستتون بزاره. -  توی دنو میتونین کل کدتون رو باندل کنین. یه چیزی تو مایه های کارایی که فرانتندیها با وب پک میکنن.-  دیگه خبری از npm نیست! بله درست شنیدید ! دنو از ریپازیتوری npm پشتیبانی نمیکنه. به عبارتی دیگه node_modules وجود نداره. حتی package.json هم وجود نداره. ممکنه بگید که پس چطوری ماژول اضافه کنیم ؟ ورژنینگ چی میشه پس ؟ شما میتونید ماژول رو به راحتی از طریق سورس گیت پروژه و هر url ای امیپورت کنید import * as log from &quot;https://deno.land/std/log/mod.ts&quot;;ورژنینگ رو هم توی همین url میتونین هندل کنید.خوب حالا که این ویژگی های کول رو براتون شماردم. بزارید یکم دقیق تر هر کدوم رو بررسی کنیم :۱ : آخه مگه وظیفه ران تایمه که بخواد سکوریتی رو این مدلی هندل کنه ؟اینکارو نمیتونیم تو کانتینر ها انجام بدیم ؟ من ندیدم هیچ ران تایمی رو که از این کارا بکنه ! نمیگم بده. ولی خوب واقعا بود و نبودش فرقی نداره. من ترجیح میدم داکر این کارها رو برام انجام بده! ۲ : دنو تایپ اسکریپت ساپورت میکنه . دمش گرم. ولی خوب هر پروژه ای Node.js ای هم میتونه تایپ اسکریپت رو ساپورت کنه. الان من از فرم ورک Nest.js استفاده میکنم. همه ی پروژه هام دیگه روی تایپ اسکریپته و این مورد هم تو دنو دردی رو از من دوا نمیکنه.۳ : در مورد Uncaught Exception هم حرفی ندارم بزنم :) میتونم تو کل پروژه هندلش کنم که هر موقع اتفاق افتاد سرویس بسته بشه. ۴ : دنو باندل میکنه . خیلی هم خوب. ولی سمت سرور نیازی داریم اصلا ؟ نمیدونم واقعا مزیت به حساب میاد و یا خیر۵ : این مورد ساپورت نکردن npm خیلی موضوع مهمیه . من فک نمیکنم با این حجم فوق العاده ی کامیونیتی npm بشه باهاش رقابت کرد. ضمن اینکه اصلا کلا این استایل مدیریت ماژول ها همین الانشم تو go برای من خیلی جذاب نیست. احتمال بروز خطا رو زیاد میکنه. من راه حل هایی رو دیدم که مثلا با وب پک میان پکیج npm ای رو به ماژول دنو تبدیل میکنن. ولی خوب صادقانه پشتوانه ی Node.js همین فرانتند دولپر هایی هستن که سال هاست دارن با جاوااسکریپت کار میکنن.مجاب کردن این کامیونیتی بسیار گسترده برای پورت کردن ماژول هاشون برای دنو فک میکنم کار  سختی باشه . در آخر نتیجه گیری من اینه که فک میکنم دنو آینده ای لااقل به این زودی ها نداره. از نظر پرفورمنسی هم تفاوت چشمگیری با Node.js نداره. فرم ورک های Node.js هم بعد از حدود ده سال  چنان پایدار هستند که فرم ورک های تازه وارد دنو توانایی رقابت باهاشون رو ندارن. من فک میکنم دنو هنوز درد بزرگی  رو دوا نمیکنه. پس دلیلی برای مهاجرت به دنو نمیبینم.ممنونم که خوندین :) </description>
                <category>mohammad rostami</category>
                <author>mohammad rostami</author>
                <pubDate>Sun, 17 May 2020 15:12:01 +0430</pubDate>
            </item>
                    <item>
                <title>معرفی مختصر فرم ورک NestJS</title>
                <link>https://virgool.io/JavaScript8/%D9%85%D8%B9%D8%B1%D9%81%DB%8C-%D9%85%D8%AE%D8%AA%D8%B5%D8%B1-%D9%81%D8%B1%D9%85-%D9%88%D8%B1%DA%A9-nestjs-s9szih1aikts</link>
                <description>اگه تا بحال با نود کار کرده باشید حتما میدونین که چقدر نوشتن یه پروژه با نود میتونه جذاب و سریع باشه . اما خاطرتون باشه که همون لحظه ای که پروژه داره بزرگ میشه و تیم هم اسکیل میشه، کم کم مشکلات شروع میکنه به پدیدار شدن . هر برنامه نویسی سبک کد زدن خودشو داره و از طرفی بعضی از برنامه نویس ها  بسیار تنبل تشریف دارن و ممکنه فقط بخوان تسک رو انجام بدن و به impact ای که کدشون در آینده میتونه داشته باشه توجهی نداشته باشن . بخصوص اگر از تایپ اسکریپت استفاده نکرده باشید، کار رو برای برنامه نویس هایی که بعدا به تیم اضافه میشن بسیار سخت کردید چرا که تایپ وریبل ها مشخص نیست و کد زدن رو برای کسی که قبلا با این کد کار نکرده سخت و پیچیده میکنه. به عبارت دیگه onboard کردن دولپر‌های جدید زمانبرتر میشه. تجربه‌ی برنامه نویس‌های این تکنولوژی ثابت کرده که کد زدن با Node.js تا یک زمانی آسونه و با زیاد شدن حجم کدها و اسکیل شدن پروژه و افزوده شدن برنامه نویس‌های جدید به پروژه، پیچیدگی بیشتر و بیشتر میشه.گراف نمایی از پیچیدگی و حجم یک اپلیکیشن که با Node.js نوشته میشه این یعنی نوشتن یه پروژه‌ی اینترپرایز با نود نیاز به یه معماری اصولی و قابل اسکیل کردن داره. در عین حال کد زدن با نود همچنان باید جذاب و سریع باشه. راستش ما هم توی تیممون با همین مشکل روبرو شدیم و  تصمیم گرفتیم که برای حل این مشکل یه boilerplate روی express بسازیم  (دلیلمون هم ساده بود چون ما نمیخواستیم از یه فرم ورک دیگه‌ای استفاده کنیم که دست مارو برای استفاده از تکنولوژی‌های دیگه ببنده برای همین اکسپرس رو انتخاب کردیم) ما میخواستیم تا حد ممکن ساختار ماژولار داشته باشیم و از مزایای OOP استفاده کنیم و همچین dependency injection رو برای ایزوله کردن ماژول‌ها و تست راحت‌تر و دلایل دیگه توی پروژمون لحاظ کنیم .همچنین قصد داشتیم ارتباط بین سرویس‌ها رو با rpc هندل کنیم تا از مزایای ماکروسرویس بودن هرچه بیشتر در معماریمون استفاده کنیم. خلاصه بعد از یه مدت کوتاهی این boilerplate ما  به یه شبه فرم ورک با کلی کد تست نشده تبدیل شده بود که اصلا برای استفاده در پروداکشن reliable نبود. و همین باعث شد که تصمیم گرفتیم چرخ رو دوباره اختراع نکنیم و این شد که به سراغ NestJS اومدیم.معرفی NestJS: بزارید Nest رو از زبون خودش براتون معرفی کنم: نست (NestJS) بستریه که برای ساخت بهتر و مقیاس پذیر اپلیکیشن‌های سمت سرور توسعه داده شده و  از تایپ اسکریپت استفاده میکنه ( البته شما هنوز میتونید از جاوا اسکریپت هم استفاده کنید ) تا به شما اجازه بده که از ویژگی‌های  OOP (برنامه نویسی شی گرا)‌,  (برنامه نویسی فانکشن محور) FP استفاده کنید. نست به صورت پیش فرض از اکسپرس  به عنوان http server استفاده میکنه  اما  شما میتونید از Fastify به جای اکسپرس برای سرعت بیشتر استفاده کنید‌. در واقع اگه بخواهید میتونید هر نوع http server ای رو که بخواهید برای نست استفاده کنید و موقع کد زدن به api اون http server مستقیم دسترسی داشته باشید‌. در واقع نست برخلاف باقی فرم ورک‌های نود دست شما رو برای استفاده از ابزار‌های مختلف باز میزاره‌. چه طوری‌؟ به لطف معماری بی نظیرش که همه چیز توش ماژول‌های ایزوله هست و مثلا اگه شما میخواهید از Logger خودتون استفاده کنید، به راحتی این کار امکان پذیره‌. یا مثلا شما یه فرم ورک http برای خودتون نوشتید که سرعت فوق العاده‌ای داره، نست میتونه به جای اکسپرس از اون استفاده کنه‌. فوق العاده نیست‌؟به طور کلی اگه بخوام ویژگی‌های جذاب نست رو براتون توضیح بدم میتونم به چند مورد زیر اشاره کنم‌: تکنیک Dependency injection‌: اگه با این تکنیک آشنایی دارین میدونید که چقدر موثر میتونه باشه‌. ساختار ماژولار نست به کمک DI ممکن شده‌. در واقع کل معماری نست بر این اساس شکل گرفته‌. ساختار ماژولار‌: معماری نست بر اساس ساختار ماژولار شکل گرفته. شما میتونید قطعات کد رو بر اساس کاراییشون در ماژول‌های مختلفی قرار بدین: مثلا ماژول User, که هر چیزی که مربوط به کاربر باشه رو درون خودش داشته باشه‌. انعطاف پذیری‌: در موردش صحبت کردم اما به طور خلاصه نست به شما امکان این رو میده که از هر ابزاری که نیاز داشته باشید به صورت یکپارچه در کل سیستم استفاده کنید‌.شباهت به فرم ورک هایی که میشناسید: نست خیلی شبیه به فرم ورک نسبتا فراموش شده‌ی انگولار برای فرانتند دولپر هاست‌. از طرفی اگه شما برنامه نویس .NET یا spring جاوا باشید‌، میتونید به راحتی با نست کار کنید. داکیومنت‌: داکیومنت نست بی نظیره. شما فقط با خوندن داکیومنت نست آماده میشید که به صورت کامل باهاش کار کنید. هیچ نکته ای در داکیومنتش فراموش نشده و نیازی نیست که برای درک بهتر نست کد هاشو مطالعه کنید و یا توی stackovrflow دنبال راه حل باشید. خواندن داکیومنت به معنی واقعی کافیه‌.همونطور که گفتم نست برای ما بسیار کارامد اومد و به کمکش تونستیم یه ساختار دقیق و منظم داشته باشیم. از طرفی نست به صورت پیش فرض از ساختار ماکروسرویس پشتیبانی میکنه .حتی شما میتونید از یه کد monolithic شروع کنید و بعد‌ها هر کدوم از ماژول‌ها رو به یه سرویس مجزا تبدیل کنید که نحوه‌ی ارتباطشون با هم از طریق grpc باشه‌. این‌ها رو گفتم اما حالا چطوی شروع کنیم‌؟ شروع کار با نست: برای شروع کار طبیعتا باید node رو به صورت پیش فرض نصب داشته باشید. و از cli مخصوص نست استفاده کنید. برای نصب cli : npm i -g @nestjs/cli
$ nest --versionاگر کامند nest --version بدون مشکل کار کرد، همه چیز آمادست. حالا میتونیم یه اپلیکیشن ساده درست کنیم. برای اینکار کافیه که در ترمینال عبارت زیر رو وارد کنیم: $ nest new hello-world بعد از چند ثانیه همه چیز آمادست. از اونجایی که نست از decorator ها زیاد استفاده میکنه  بهتون پیشنهاد میکنم که از vscode برای محیط کد زدن استفاده کنید. این عبارتی که گفتم شاید الان صحیح نباشه، اما قدیما که از webstorm استفاده میکردم حسابی با decorator ها مشکل داشتم، الان رو نمیدونم : )حالا برای ران شدن سرور کامند زیر رو روی دایرکتوری اپلیکیشن وارد کنید:‌$ cd hello-world
$ npm run startتبریک میگم. شما یه اپلیکیشن در حال اجرا بر روی نست دارید: حالا چی‌؟ شاید از خوندن این متن چیز زیادی دستگیرتون نشه‌. سعی دارم که نست رو به صورت کامل در یک سری آموزش بهتون معرفی کنم اما پیشنهاد میکنم یه سر به داکیومت جذابش بزنید و کار رو شروع کنید. به صورت کلی استفاده از این فرم ورک نیاز به دانش متوسطی از Node.js داره و اگر شما فکر میکنید که یه روزی قراره پروژه‌تون خیلی بزرگ بشه و کلی برنامه نویس همزمان روش کار کنن، بهتون پیشنهاد میکنم حتما ازش استفاده کنید. اینم فراموش نکنید که ما اینجا نیستیم که چرخ رو از اول اختراع کنیم. اگه براتون سرعت بسیار مهمه، نیازی نیست که حتما فرم ورک خودتون رو توسعه بدین، چون اگر از fastify در کنار نست استفاده کنید میتونید به کانکرنسی فوق العاده و سرعت بینظری  برسید (بنچمارک)  که برای بسیاری از پروژه‌های اینترپرایز کافیه. در واقع شما اونجایی به مشکل برمیخورید که فکرشم نمیکنید. و اون نقطه دقیقا زمانیه که شما اسکیل شدین و نود به لحاظ سرعت هیچ مشکلی نداره اما توی maintenance و افزودن فیچر جدید توی کدتون به مشکل برمیخورید. اونچه که خوندید برگرفته از اطلاعات شخصی بنده و داکیومنت نست و این مقاله بود. اگه مشکلی داشتین یا سوالی در مورد این نوشته داشتین خیلی خوشحال میشم کمکتون کنم.</description>
                <category>mohammad rostami</category>
                <author>mohammad rostami</author>
                <pubDate>Sat, 19 Oct 2019 20:02:04 +0330</pubDate>
            </item>
            </channel>
</rss>