<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های اشکان</title>
        <link>https://virgool.io/feed/@ashcan</link>
        <description>فول ستک اگه آدمیزاد بود</description>
        <language>fa</language>
        <pubDate>2026-06-07 04:41:53</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/83902/avatar/avatar.png?height=120&amp;width=120</url>
            <title>اشکان</title>
            <link>https://virgool.io/@ashcan</link>
        </image>

                    <item>
                <title> وب پک قسمت ششم... مرگ وب پک به دست ویت</title>
                <link>https://virgool.io/@ashcan/%D9%88%D8%A8-%D9%BE%DA%A9-%D9%82%D8%B3%D9%85%D8%AA-%D9%BE%D9%86%D8%AC%D9%85-%D9%85%D8%B1%DA%AF-%D9%88%D8%A8-%D9%BE%DA%A9-%D8%A8%D9%87-%D8%AF%D8%B3%D8%AA-%D9%88%DB%8C%D8%AA-wuele7b1op7d</link>
                <description>سلام من اشکان هستم و بعد از یک وققه طولانی تصمیم گرفتم با نوشتن مطلبی در ادامه مطالب آموزش وب پک شاید دوباره نوشتن و ساخت ویدیو رو شروع کنم.قصه از اینجا شروع شد که یکی از دوستان سری آموزش وب پک ۵ رو خونده بود و باعث شد که توجه من به ویرگول جلب بشه و این سوال برام پیش بیاد که &quot;مگه کسی هنوز از وب پک استفاده میکنه؟&quot;خوب البته که وب پک زمانی تنها گزینه پیش روی ما برای ساخت پروژه ها و برنامه نویسی بود، با بیش از ۷۴ میلیون دانلود در ماه! و البته بسیار کند و تنظیم کردنش به معنای حقیقی کلمه دردناک بود، بعدها باندلرهای دیگه ای هم مثل parcel و... اومدن که هرکدوم قصدشون این بود که کار کاربر رو کمی آسونتر کنند اما امروز ما گزینه ای پیش رومون داریم که استفاده از وب پک رو کاملا غیر ضروری میکنه. در واقع این روزها هدف فریم ورک ها و پلتفرم ها و همه ابزارها اینه که کار برنامه نویس اونقدری آسون بشه که درگیر ستاپ و تنظیمات اولیه نشه و در واقع حتی کدهای بویلرپلیت هم اونقدر زیاد شدن که برای هر زبان برنامه نویسی و تقریبا هر نوع پروژه ای میشه کد استارتری رو پیدا کرد که نخوایم چرخ رو از اول اختراع کنیم.در مورد وب پک اما نکته اینه که ما واقعا زمانی گزینه دیگه ای پیش رو نداشتیم! مجبور بودیم که با وب پک کدمون رو باندل کنیم و از قابلیت HMR یا Hot Module Reloading جذابش استفاده کنیم(قابلیتی که اجازه میداد بلافاصله بعد از سیو کردن یا آپدیت کردن پروژه بروزر ریفرش بشه و تغییری که دادیم رُ سریعا ببینیم) و عجب پروسه سخت و عجیبی بود برای اینکه ساده ترین کارها رو بتونیم فقط ستاپ کنیم ساعت ها وقت بگذاریم که محیطی رو به وجود بیاریم که بشه یک برنامه ساده بنویسیم.خوب خبر خوب اینه که دیگه نیازی به وب پک ندارید نه تنها شما بلکه فریمورک ها و لایبراری هایی که توی هسته خودشون از وب پک استفاده میکردند همه یا تغییرش دادند یا مشغول برنامه ریزی برای فرار از دست این موجود دست و پا گیر هستند.اما یک تاریخچه جزیی...یک آقای چینی به نام Evan You که سابقا کارمند گوگل هم بوده یک فریمورک سمت کاربر یا اصطلاحا Front-end به نام Vue طراحی میکنه که هسته اون مثل ری اکت قدرت گرفته از وب پک بود. اسم ویو هم یک کلمه فرانسویه که معنیش میشه View یا منظره. ایشون مدتی قبل، از دست وب پک عاصی میشه و تصمیم میگیره یک باندلر جدید بنویسه که هم کاربری اون آسون باشه و هم سرعتش بالاتر باشه بنابر این میاد یک ابزاری میسازه که خیلی سریع بوده و به تبعیت از Vue اسمش رو از کلمه فرانسوی دیگه ای عاریه میگیره که معنی سریع و چابک میده یعنی Vite. خیلی وسوسه انگیزه که این کلمه رو وایت تلفظ کنیم اما تلفظ صحیح و فرانسوی اون ویت هست /vit/.البته  CLI ویو هنوز یه ویت مهاجرت نکرده و قطعا این اتفاق کمی زمانبر ولی غیر قابل اجتنابه اما بیاید کمی با هم مقایسه کنیم سرعت ویت و وب پک رو برای ایجاد پروژه های مختلف فارغ از اینکه تمام دردسرهایی که شما با استفاده از وب پک درگیرشون می شدید از دوشتون برداشته شده و همه چیز به صورت اتوماتیک توسط ویت هندل میشه فقط قصد داریم سرعت بیلد یک پروژه، سرعت بالا اومدن سرور در محیط دولوپمنت و زمان لود صفحه در محیط دولوپمنت رو بین ویت و وب پک مقایسه کنیم: برای ساخت یک پروژه Vue:میخواید براتون جذاب تر کنم قضیه رُ؟ ویت به قول معروف اوت آو د باکس (یعنی همینطور از سر خوش) تایپ اسکریپت رو ساپورت میکنه و بله  JSX  رو هم میفهمه... یعنی شما یک فایل tsx بنویسید و ویت خودش براتون در عرض چند میلی ثانیه پارسش میکنه.توی هسته خودش ویت از ۲ تا ابزار مهم استفاده میکنه: یکی ESBuild در حین دولوپمنت و یکی هم Rollup زمان باندل نهایی (پروداکشن).و اینکه ویت ۲ تا کمبود داره در حال حاضر اول اینکه پشتیبانی ویت از SSR فعلا در فاز آزمایشیه و استفاده از SSR ویت برای پروداکشن فعلا توصیه نمیشه و دوم اینکه اگرچه ویت، تایپ اسکریپت رو پارس میکنه اما تایپ چک نمیکنه و شما برای این کار باید به قابلیت های ادیتورتون تکیه کنید که اکثر اونها بخصوص وی اس کد بصورت پیشفرض این کار رو براتون انجام میدن.در نهایت اینکه اگر پروژه فعلی شما برای وب پک کانفیگ شده پس دست بهش نزنید و با اون ادامه بدید اما اگر میخواید یک پروژه جدید بنویسید حتما ویت رو امتحان کنید.دوست دارید با هم از ویت استفاده کنیم؟  کامنت بگذارید و بگید که چه نوع پروژه ای با ویت بسازیم؟ مثلا ری اکت یا ویو یا threejs یا هرچی. بر اساس کامنت شما من ویدیو ساخت پروژه با ویت رو همین روزها می سازم.مثل همیشه ممنون از همراهی شما.</description>
                <category>اشکان</category>
                <author>اشکان</author>
                <pubDate>Sun, 23 Jan 2022 15:20:59 +0330</pubDate>
            </item>
                    <item>
                <title>قراردادهوشمند چیه و چقدر هوشمنده؟</title>
                <link>https://virgool.io/@ashcan/%D9%82%D8%B1%D8%A7%D8%B1%D8%AF%D8%A7%D8%AF%D9%87%D9%88%D8%B4%D9%85%D9%86%D8%AF-%DA%86%DB%8C%D9%87-%D9%88-%DA%86%D9%82%D8%AF%D8%B1-%D9%87%D9%88%D8%B4%D9%85%D9%86%D8%AF%D9%87-ejfvsc0obmji</link>
                <description>در پایان این پست شما قراره بدونید که قراردادهای هوشمند یا اسمارت کانترکتها چی هستند؟ و چرا اونقدرهایی هم که میگن هوشمند نیستند و چرا بیت کوین یک جورهایی خسته کننده ست.سلام من اشکان هستم و شما سومین پست من، از سری پست های مرتبط با شبکه بلاکچین، کریپتو، اسمارت کانترکت و موارد مرتبط با اونها رو از دید برنامه نویسی مطالعه میکنید. طبق معمول اینجا نه قراره سیگنال بدیم نه مشاوره خرید و فروش و نه اینکه رشد و افت قیمت بیت کوین و آلت کوین ها برامون اهمیت داره، همه چیزی که ما بهش اهمیت میدیم تکنولوژی و ابداعات پشت صحنه این پروژه هاست.واقعا اگر یک فیچر از این تکنولوژی های مرتبط با رمزارزها و بلاکچین و... باشه که منو دیوونه کرد همین اسمارت کانترکته! بله بیت کوین هم خیلی باحاله و بلاکچین هم جالبه و این حرفا اما... اما دقیقا وقتی که من اسمارت کانترکت رو درک کردم بود که فهمیدم میخوام این راه رو ادامه بدم چون این مفهوم (اسمارت کانترکت) سنگ بنای همه فیچرهای خفنیه که این روزها میشنویم مثل NFT مثل tokenها مثل ICOها یا صرافی های غیر متمرکز و... خلاصه همه این خفنیجات بر پایه اسمارت کانترکت تعریف میشن.پس بیاید با این سوال شروع کنیم که اسمارت کانترکت چی هست؟برای اینکه بفهمیم اسمارت کانترکت چیه اول باید بفهمیم چرا بیت کوین بسیار بدوی و خسته کننده ست و پاسخ این سوال هم اینه که بیت کوین هیچ تعاملی با آدمیزاد نداره و فقط بلده پول بین مردم جابجا کنه همین!اما اسمارت کانترکت ها میتونن با کدها تعامل داشته باشند اگر شما بجای کد بگذارید روبات (که یکم به مفهوم آدمیزاد نزدیکش کرده باشیم) این یعنی چی؟ چکار مثلا میشه باهاش کردبرای مثال ما میتونیم بر اساس این کارایی اپلیکیشن های غیر متمرکز بسازیم یا Decentralized Apps اگر کلمه Dapp به گوشتون خورده باشه مخفف همین ترکیبه که یعنی من به عنوان یک دولوپر میتونم کدی بنویسم و بگذارمش روی یک سرور اشتراکی، یک کامپیوتری که همه شبکه بلاکچین مربوطه میتونن بهش دسترسی داشته باشند و اون کد رو اجرا کنند، ببینید فرق داره با وقتی که ما مثلا کدمون رو میذاریم روی آروان یا آمازون بعد سروره که میترکه اپلیکیشن ما هم باهاش میاد پایین.کد شما توی شبکه بلاکچینه، همه میتونن بخوننش (مثل دیتای ترنزاکشن های بیت کوین) ولی طبق خواص شبکه بلاکچین این کد append only هست یعنی کسی نمیتونه کد شما رو پاک یا دستکاری کنه.من یک کد مینویسم و میذارمش روی یک backendی که هیچ مالکی نداره، روی یک بکندی که همه بهش دسترسی دارند و میتونن اون رو همراه با امنیت فوق العاده ای که بلاکچین در اختیارمون میذاره وریفای کنند و اجرا کنند.فوق العاده نیست؟ میدونید مثلا چه کارهایی میشه باهاش انجام داد؟ مثلا شما میتونید یک قلک برای خودتون بسازید و یک اسمارت کانترکت بنویسید که 2 تا دستورالعمل داره اول اینکه پول که دریافت کردی ذخیره ش کن و دوم اینکه بعد از 30 سال این پول رو به من برگردون! دقت کنید شما هیچ مورد امنیتی عجیب و غریب یا قواعد پیچیده و آتنتیکیشن و... نیاز ندارید شما چند خط کد مینویسید و میفرستید توی بلاکچین و این دیگه می مونه توی شبکه برای همیشه! هیچکس نمیتونه تغییری توش ایجاد کنه، پول بفرستید به اون روبات و 30 سال براتون نگهش میداره و هیچ احدالناسی حتی خودتون هم نمیتونه تا 30 سال دیگه پول شما رو دست بزنه و شما میتونید 100 درصد مطمئن باشید که بعد از 30 سال حتما این کد اجرا میشه و به شما پول رو منتقل میکنه.فهمیدید من وقتی میگفتم خیلی خفنه در مورد چی صحبت میکردم؟ اگر هنوز نگرفتید قضیه چیه به مثال دیگه میزنم. فرض کنید شما از طریق یک وب سایت اجاره (از این مدل های کپی airbnb یا حتی خودش) یک ویلا درخواست کردید. این وب سایت واسط بین شما به عنوان کسی که برای 1 هفته مثلا توی فریدون کنار دنبال ویلا میگرده و صاحب اون ویلا خواهد بود. پس شما باید پول رو بدید به این وب سایت و اعتماد کنید که سایت با این آدم مرتبطه و وقتی شما رسیدید فریدون کنار صاحب خونه در رو به روی شما باز میکنه.این وسط شما به این سایت اعتماد کردید و صاحب ویلا هم به این سایت اعتماد کرده.حالا بیاید سایت رو با یک اسمارت کانترکت جایگزین کنیم مثلا یک اسمارت کانترکت مینویسیم که این برنامه (روبات یا هرچی) از طریق IOT (اینترنت اشیا) به در خونه بتونه دستور باز شدن یا قفل شدن بده یا مثلا دسترسی به تلویزیون یا دستگاه چایی ساز بتونه بده و زمان این دسترسی ها رو بر اساس مقدار پولی که بهش واریز شده تنظیم کنه! به همین راحتی شما میتونید واسطه رو از سر راه حذف کنید هم اعتمادتون به این شبکه بیشتر از یک فرده و هم هزینه ها رو کم کردید. پول واریز میشه، یک پسورد یک بار مصرف جنریت میشه و برای خریدار فرستاده میشه و وقتی طرف رسید به خونه با زدن پسورد در رو باز میکنه. حالا بشینید فکر کنید که چه کارهای دیگه ای انجام داد بی نهایت کار وجود داره بی نهایت ایده و موقعیت وجود داره که شما میتونید با چند خط کوتاه برنامه روی شبکه بلاکچینی که از اسمارت کانترکت ها پشتیبانی میکنه اجرا کنید مثلا فرض کنید شما میتونید اسمارت کانترکتی بنویسید که به وای فای خونه تون دسترسی ایجاد کنه و هر زمان یکی از همسایه ها بخواد استفاده کنه با پرداخت رمزارز به این اسمارت کانترکت بتونه موقتا از اینترنت شما استفاده کنه آقا من هرچی بگم کم گفتم چون من اصلا آدم بازاری ای نیستم و مطمئنم خیلی از شما میتونید ایده های خیلی بهتر از این بدید که به راحتی قابل اجرا هستند.البته من اول پست نوشتم که اسمارت کانترکت ها خیلی هم باهوش نیستند چون محدودیت های خاص خودشون رو هم دارند. بزرگ ترین محدودیتی که دارند هم اینه که نمیتونن هر کاری رو که بخوان انجام بدن و اگر خوب بهش فکر کنید اونها فقط میتونند توی شبکه غیر متمرکزی که توش قرار دارند فعالیت کنند، مثلا اگر من و شما با هم شرط ببندیم که فردا بارون میاد یا نه و پولمون رو بریزیم توی یک اسمارت کانترکت و قراردادش رو جوری ببندیم که فردا یک سنسور باران رو چک کنه و بر اساس جواب اون کل پول رو به حساب یکی از ما برگردونه. مشکل اینجاست که در این وضعیت اسمارت کانترکت ما داره به جواب یک سنسور باران اعتماد میکنه یعنی به یک شکل از هوشمندی خارج از شبکه بلاکچین خودش پس اون قضیه قابل اعتماد بودن رو ما از دست میدیم، امنیت رو از دست میدیم چون داریم به یک چیزی خارج از شبکه اعتماد میکنیم که خودش امنیت نداره و جوابش میتونه دستکاری بشه پس خیلی مهمه که ما بدونیم اگر قراره از شبکه اصطلاحا trustless بلاکچین خارج بشیم و به یک شبکه trustful متصل بشیم داریم اون قضیه امنیت رو از دست میدیم.البته برای این هم راه حلی وجود داره مثلا مفهومی داریم به نام Oracle در بلاکچین که ورودی اسمارت کانترکت ها رو به عهده میگیرند که شاید بعدا در موردش صحبت کنیم اما هدف این بود که شما بدونید اسمارت کانترکتها چی هستند و به شما چه امکاناتی میدهند و چطور میتونند مفهوم دلال یا واسطه رو از معاملات روزمره حذف کنند و احتمال کلاهبرداری یا خطا رو به صفر برسونند وقتی قراردادی نوشته میشه هیچ دولت و شخص و واسطه و هکری نمی تونه اخلالی توی اون به وجود بیاره.و در پایان بلاکچین های مختلفی وجود دارند که از اسمارت کانترکت ها پشتیبانی میکنند که البته معروف ترینشون اتریوم هست اما کاردانو و پولکادات و کوساما و کازماس و خیلی های دیگه هم هستند که شاید توی یک مقاله دیگه بیایم اینها رو با هم مقایسه کنیم اما فعلا مهم اینه که بدونیم مفاهیم اولیه و کانسپت بین اینها مشترکه.لطفا اگر نظری پیشنهادی انتقادی دارید برام بنویسید.</description>
                <category>اشکان</category>
                <author>اشکان</author>
                <pubDate>Sat, 24 Apr 2021 13:01:46 +0430</pubDate>
            </item>
                    <item>
                <title>بیت کوین نخرید</title>
                <link>https://virgool.io/@ashcan/%D8%A8%DB%8C%D8%AA-%DA%A9%D9%88%DB%8C%D9%86-%D9%86%D8%AE%D8%B1%DB%8C%D8%AF-nfvl1mj6umnq</link>
                <description>اتریوم هم نخرید در واقع هیچ رمزارزی نخرید!جدی میگمنخرید!سلاممن اشکان هستم و در این پست میخوام در مورد رمزارز، بیت کوین و بلاکچین و ارتباط اونها با یک برنامه نویس صحبت کنم.گفتم که هیچ رمزارزی نخرید... چون من خودم دوست ندارم شما چیزی بخرید... دوست ندارم قیمت ها بالاتر از این بره. خودم یک مقداری رمزارز دارم و قرار نیست در مورد مارکتینگ و خرید و فروش اینجا صحبت کنم ولی اینو میخوام بگم که دوست ندارم قیمت ها بالاتر از این بره.بالعکس ترجیح میدم که قیمت ها پایین تر بیاد که بتونم بیشتر بخرم ولی هدف این پست اصلا این موضوع نیست، هدف از این پست اینه که بفهمیم چرا بعضی از ما داریم رمزارزها رو نادیده میگیریم، وقتی میگم بعضی از ما در واقع بیشتر دارم در مورد برنامه نویس ها صحبت میکنم.ما به عنوان یک برنامه نویس داریم تکنولوژی رو نادیده میگیریم! آینده داره به ما لبخند میزنه و ما بی تفاوت از کنارش عبور میکنیم.ما برنامه نویسیم و اکثرا &quot;بیزنس من&quot; نیستیم، وقتی میبینیم قیمت رمزارزها با سرعت بالا میره به خودمون میگیرم این دنیای رمزارزها قماره حتی میگیم اسکمه یا بدتر شر و وره.در واقع یه جورایی هم دارید درست فکر میکنید اگر اعتقاد دارید این قضیه تجارت کریپتو چرت و پرته در واقع آره! هست! منم با شما موافقم.اکثر آدمایی که امروز توی دنیای کریپتو هستن یا قماربازن یا اسکمر یا از اون قماشی که ارزون میخرن و گرون میفروشن و یه باد توی غبغب میندازن و ادای سرمایه گذارها رو در میارن یا ادعا میکنن که کوین خودشون رو ساخته ن و قراره خیلی گرون بشه و مثل بازار بیتکوین ممکنه شما از بازار کوین اونها هم جا بمونین.واقعا از صمیم قلب میگم که از نظر من همه اینها حقیقت داره!این اتفاقا داره میفته و خیلی هم حال به هم زنه اما!اما ما برنامه نویسیم و قراره زیر پوست این قضیه رو ببینیم پس بیاید یک لحظه قیمت و نمودار و این چرندیات رو فراموش کنیدمیخوایم فقط در مورد فناوری صحبت کنیم، اون چیزی که ما به عنوان برنامه نویس باید بهش اهمیت بدیم.میخوام براتون یک مثال بزنم، یک کریپتو... مثلا بیتکوین (چون از همه معروف تره)چی داره بیتکوین رو میچرخونه؟ چجوریه که دولت ها نمیتونن بیتکوین رو کنترل کنن؟چجوریاست که تا حالا کسی بیتکوین رو هک نکرده؟چی باعث شده که مردم اینقدر عاشق بیتکوین بشن؟ چیه که این پول رو تا این حد امن کرده؟همه اینها مسائلی هستن که بوسیله برنامه هایی به زبان C یا ++C یا Go یا Haskell یا سالیدیتی و... حل شدن! برنامه هایی که در واقع ایده های خفن آدمهای بسیار باهوشی رو پیاده سازی کردن.ما برنامه نویس هایی هستیم که در عصر کریپتوکارنسی و اسمارت کانترکت و بلاکچین زندگی میکنیم.مفاهیمی که بوسیله برنامه های کامپیوتری پیاده سازی شدن! نه شن و ماسه! نه طلا و مس! نه محاسبات مکانیک و نه هیچ چیزی خارج از دنیای ادیتورها! عصری که میشه کدهایی نوشت که اون کدها مثل سکه های طلا داره دست به دست میشه...لحظه ای فکر کنید که چه اتفاقی داره میفته! کدهای ما پول رایج این عصر هستند... یا قراره که بشن!مردم بجای اسکناس و دلار دارن چند خط کد رو به حساب هم انتقال میدن! کدهایی که ارزشی به مراتب بالاتری نسبت به واحد پول رسمی کشورها پیدا کرده.ما در عصر نرم افزار زندگی میکنیم و پول هایی داریم که مهم نیست اسمشون چیه مهم نیست ارزششون چقدره مهم اینه که از چند خط کد ساخته شدن! این دیوونه تون نمیکنه؟میدونید چرا اینها رو گفتم؟ چون همونطور که اول اشاره کردم خیلی از دولوپرها اصلا نمیگیرن قضیه چیه! بابا شما دستگاه چاپ اسکناس هستین!و همونطور که گفتم درک میکنم که مشکل تون چیه اما توجه کنید که پشت پرده چه اتفاقاتی داره میفته.هزاران رمزارز دیگه در کنار بیتکوین وجود دارند و قبول دارم که اکثرشون چرت و پرتن و به قول معروف شت کوین و محکوم به شکست اما اگه شما برنامه نویس خوبی هستید وظیفه تون اینه که توی کد اونها سرک بکشید، بو بکشید، وایت پیپرشون رو بخونید و کشف کنید آیا یک رمزارز بخصوص خوبه یا شت کوین.همین الان کلی پلتفرم آماده وجود داره که شما میتونید توی اونها پول خودتون رو بسازید.میتونید اسمارت کانترکت خودتون رو خلق کنید میتونید به قولی یک سایدچین بسازید، میتونید یک چیزی خلق کنید که به اون NFT گفته میشهاین nft توسط هنرمندی به نام بیپل (بر وزن ریپل) به قیمت 69 میلیون دلار فروخته شدهاگه نمیدونید این هایی که گفتم یعنی چی جمع کنید برید سراغشون! به عنوان یک برنامه نویس باید بدونید که داره چه اتفاقاتی میفته مگر اینکه قصد بازنشستگی داشته باشید.اینکه دیسنترالایزیشن یا غیرتمرکزسازی یعنی چی؟ مکانیزم کانسنسز یا وفاق عمومی یعنی چی؟ پروف آو ورک یا اثبات کار چیه؟ پروف آو استیک یا اثبات سهام چی میگه؟ یا کدومشون بهتره؟ همه اینها رو باید خوب درک کنید چون پایه اونها کدهاییه که به وسیله برنامه نویسها نوشته شده.ببینید یک بازار بزرگ کاری انتظار شما رو میکشه یک بازار که به وسیله صنعت بلاکچین ایجاد شده و قبول دارم که این بازار پر از آدمای شارلاتانه اما یک روزی میرسه که قضیه جدی میشه، اونها میرن کنار و جهان سعی میکنه هرچه بیشتر از دارایی ها و مکانیزمهای فعلیش رو وارد این صنعت کنه.امروز شانس شماست که وارد این صنعت بشید و حداقل مفاهیم اون رو درک کنید، راه آسون که فراره انتخاب خوبی نیست. بدونید که بیتکوین شاید با اصل و نسب ترین باشه اما ساده ترین و احمق ترین کوین موجود بازاره و توی پست های بعدی توضیح میدم که در این بازار کریپتو چه امکانات و ایده هایی وارد شده که آینده رو مال خودشون میکنن. مهم نیست که چقدر ریال یا دلار توی حسابتون دارید مهم اینه که پول اینترنتی در آینده ممکنه ارز فیات رو نابود کنه و آدم هایی که پشت میزهاشون دارن این پول رو میسازن آدمهای خیلی باهوشی هستند، مهندسین، برنامه نویس ها و ریاضی دان هایی که دارن این جریان رو هدایت میکنن از همون نوع آدم هایی هستند که من و شما دوستشون داریم و بهشون احترام میگذاریم پس هیچ عذری برای ما پذیرفته نیست ما دقیقا همون آدمهایی هستیم که باید سوار این موج بشیم و روی این پلتفرم ها ایده هامون رو عملی کنیم چون ماییم که میفهمیم قضیه چیه ماییم که درک میکنیم پشت پرده ی ساخت و انتقال، خط به خط چه اتفاق هایی داره میفته.پس بلند شید و تبدیل به یک نود از این شبکه بشید! یک بلاک بشید و به این بلاکچین اضافه بشید، یک داده بشید و چیزی به این بانک اطلاعاتی اضافه کنید شمایید که میتونید اسکمرها و آدم هایی که فهمی از این قضیه ندارند رو از سر راه کنار بزنید و هزاران شغل جدید تولید کنید.میدونید تکنولوژی یه چیزی توی دل خودش داره... این که چه شما باهاش موافق باشید یا نه راه خودش رو میره. همین الان که دارید این مطلب رو میخونید میلیونها دلار داره از این طریق جابجا میشه و بانک هایی هستن که دارن خودشون رو آماده میکنن که شبکه بلاکچین رو بپذیرند این اتفاقیه که میفته چه شما بگید خوبه چه بگید بده اینها اجتناب ناپذیر هستند.خوب طولانی شد دوست داشتم اینها رو ویدیویی ضبط کنم ولی فعلا حالش و امکاناتش رو ندارم لطفا توی کامنت ها بنویسید نظتون چیه، لایک کنید اگه دوست داشتید و دنبال کنید اگر صلاح میدونید.</description>
                <category>اشکان</category>
                <author>اشکان</author>
                <pubDate>Mon, 12 Apr 2021 12:53:14 +0430</pubDate>
            </item>
                    <item>
                <title>بلاکچین</title>
                <link>https://virgool.io/blockchain-kioosk/%D8%A8%D9%84%D8%A7%DA%A9%DA%86%DB%8C%D9%86-roaavm0lrbhx</link>
                <description>این روزها میشنوید که یک ویدیو یا عکس روی شبکه بلاکچین به قیمت های چند میلیون دلاری فروخته میشه.مثلا توییت جک دورسی که اولین توییتی بوده که منتشر شده به قیمت دو و نیم میلیون دلار توسط یک ایرونی خریداری شده.شاید فکر کنین این دیوونگیهشاید بگید که احمقانه ستاما به هر حال ما باید درک کنیم که چه اتفاقی میفته که یک محتوای دیجیتال تا این حد ارزش پیدا میکنه.سلاممن اشکانمتصمیم گرفتم یک سری پست در مورد اکوسیستم بیتکوین، بلاکچین، اسمارت کانترکت و... برای دولوپرها بسازمقرار نیست اینجا در مورد خرید و فروش و مارکت و... صحبت کنیم فقط در مورد تکنولوژی و اینکه چطور ازش باید استفاده کنیم.حالا...هدف از این سری اینه که در انتها شما بفهمید چطوری مردم دارن عکس و ویدیوهای خودشون رو روی شبکه بلاک چین میفروشن؟و قضیه این بازار هنری که روی کریپتو راه افتاده چیه؟مثلا قراره بفهمید فرق بین سوشی سواپ و پنکیک سواپ چیهیا اینکه چرا بعضی از صرافیهای غیر متمرکز دارند از اتریوم به بایننس چین میرناگه هیچ کدوم از چیزایی که الان گفتم براتون معنی نداره و متوجه نمیشیدشما بهترین مخاطب برای این سری هستیدچون من میخوام همه اینها رو از پایه توضیح بدم تا در پایان این سری شما همه این اصطلاحات عجیب و غریب رو خوب متوجه بشیدو امروز میخوایم با مفهوم شماره یک و مهمترین اونها یعنی بلاکچین شروع کنیمبلاک چین اون چیزیه که بیت کوین و اتریم و کاردانو و پولکادوت و داج کوین رو راه اندازی میکنهو ما باید بفهمیمش تا بتونیم به مفاهیم پیشرفته تر برسیمخوب پس بیاید سعی کنیم کار رو با توضیح مفهوم بلاکچین شروع کنیممن خیلی آدما رو دیدم که سعی کردن  بلاکچین رو توضیح بدنو همه هم کارشون واقعا درسته!اما من میخوام با کلمات خیلی ساده این کار رو انجام بدمپس گوش کنیدیک بلاک چین در واقع زنجیره ای از بلوک هاستاما معنی این جمله چیهبه زبون برنامه نویس ها بیاید بجای بلاک چین کلمه دیتابیس رو بگذاریمما میدونیم دیتابیس چیهاما بلاک چین در واقع یک دیتابیس خیلی باحال و س_ک_سی محسوب میشهچرا؟اول از همه اینکه این دیتابیس append only هستاپند یعنی اضافه کردنیعنی توی این دیتابیس شما فقط میتونید اطلاعات اضافه کنیدنمیتونید چیزی رو پاک کنیدنمیتونید چیزی رو ویرایش کنیدفقط میتونید یک چیزی اضافه کنید به این دیتابیسو همین الان یه گروهی دارن روی این نوع دیتابیس کار میکنن، دیتابیسی که اطلاعات قبلی اون قابل تغییر یا حذف نیستن.مثلا شما میتونید یک دیتابیس از مدارک دانشگاهی داشته باشیدیعنی شما که میرید دانشگاه و درستون رو تموم میکنید دانشگاه مدرک رو میذاره روی بلاک چینشما این مدرک رو گرفتید نه قراره مدرک شما حذف بشه و نه قراره تغییر کنهشما همیشه میدونید مدرک تون جای مطمئنیه و کسی نمیتونه عوضش کنهیا مثلا دولت ها میتونن از بلاکچین برای ثبت گواهینامه رانندگی شما استفاده کنن یا گواهی تولد یا مرگ یا ازدواج، اینها و مواردی مانند اینها نوعی از داده هستند که ما میخوایم تولید بشن و قابل پاک کردن و تغییر دادن نباشن.مورد دوم بعد از اپند اونلی بودن بلاک چین اینه که بلاک چین میتونه غیر متمرکز یا دیسنترالایزد باشهغیر متمرکز بودن یعنی اینکه مثلا من یا هر کس دیگه نمیتونیم کنترل همه این دیتابیس رو در دست داشته باشیم و همه ما یک کپی نسبتا یکسان از دیتابیس رو در اختیار داریم بنابر این مثلا اگه من بخوام دروغ بگم و ادعا کنم که 2000 تا بیت کوین دارم بقیه میفهمن که من دارم دروغ میگم چون همه یک کپی از این دیتابیس رو در اختیار دارن و به همین دلیل هم بسیار کار مشکلیه که بخوایم یک رمزارز رو سانسور کنیم یا کلا از بین ببریم چون خیلی از آدمهای دیگه هستند که همزمان دارن نودهای مثلا بیت کوین رو اجرا میکنن و همگی کپی مشابهی از کل اطلاعات رو در اختیار داریم و باید همه ما همزمان نودهای خودمون رو خاموش کنیم تا شبکه بیتکوین خاموش بشه و قاعدتا هم کسی این کار رو نخواهد کرد.به همین دلیله که رمزارزها بسیار بسیار در مقابل سانسور دولتی قوی هستند  خوب اینها دلایلی بود که بفهمیم چرا بلاک چین دیتابیس خیلی خیلی باحالیه اما بیاید در مورد قسمت بلاک صحبت کنیم.بلاک ها شکل اضافه شدن داده به یک شبکه بلاکچین هستند مثلا بجای اینکه مثل یک دیتابیس ریلیشنال ما دیتا رو توی یک سطر بنویسیم ما یک بلاک میسازیم و مثلا در مورد بیت کوین این بلاک ها هر 10 دقیقه تولید میشن. بلاک ها شامل اطلاعات زیادی هستن ولی مهمترین دیتایی که یک بلاک باید داشته باشه که valid محسوب بشه، hash خودش و هش بلاک قبلی و دیتایی هست که میخوایم به اون اضافه کنیم.نترسید الان توضیح میدم، بیاید با آسونه شروع کنیم یعنی data: همونجور که اولش گفتم شما میتونید از هرچیزی که دلتون میخواد یک بلاکچین تولید کنید، از اسناد ازدواج و طلاق گرفته تا گواهینامه رانندگی و مدارک تحصیلی و... اینها رو ما میذاریم توی بخش دیتای یک بلاک مثلا در مورد بیتکوین در قسمت دیتای بلاک اون فقط یک تعداد ترنزاکشن قرار داره که مثلا کی برای کی چقدر پول فرستاده، این چیزیه که توی قسمت دیتای بلاک بیتکوین قرار گرفتهحالا بیاید در مورد هش حرف بزنیم:هش یک تابع ریاضیه که یک ورودی میگیره و یک خروجی تحویل میده اما این تابع یک سری خاصیت باید داشته باشه اول اینکه خروجی شما اصطلاحا deterministic هستیعنی چی؟ یعنی اینکه مثلا شما یک ورودی میدید به تابع و خروجی تابع همیشه یکسان خواهد بود اگر صد بار هم شما ورودی یکسان بدید به این تابع همیشه باید خروجی یکسان بگیریداما اگر یک تغییر حتی خیلی جزیی توی ورودی خودتون ایجاد کنید خروجی این تابع باید خیلی تغییر کنه این یکی از مفاهیمی هست که توی کریپتوگرافی (رمزنگاری) تعریف میشه و دلیل این تغییر کلی اینه که نشه هیچ زمانی ورودی رو حدس زد.این از خاصیت اول، خاصیت دوم اینه که این تابع یک طرفه ست یعنی اگه شما یک خروجی بگیرید نمیتونید به هیچ عنوان دوباره ورودی رو از روی اون باز تولید کنید در نظر بگیرید مثلا انبه داشته باشید و با اون آب انبه درست کنید. انبه رو میریزید توی بلندر و میکس میکنید و به شما آب انبه میده ولی شما هیچ وقت نمیتونید از این آب انبه دوباره به میوه انبه برسید ولی باز میتونید با انبه های دیگه آب انبه درست کنید. درست کردن آب انبه دقیقا شبیه هش کردن می مونه چون یک تابع یک طرفه ست.درسته؟ خوب حالا چرا این موضوع اینقدر مهمه چون همین قضیه ست که زنجیره بلوک ها رو به هم متصل نگه میداره. فرض کنید من یک بلاک هستم و دارم میرم که به شبکه بلاکچین متصل بشم. باید چکار کنم؟ اول از همه باید دیتا جمع کنم در مثال بیت کوین مثلا باید یک تعداد ترنزاکشن انجام شده باشه و من اونها رو داشته باشم تا بتونم به بلاکچین بیتکوین متصل بشم خوب حالا که من دیتا رو دارم میذارمش توی جیبم و میرم که به شبکه متصل شم خوب مورد بعدی که نیاز دارم اینه که هش بلاک قبل از خودم رو که میخوام بهش متصل بشم داشته باشم خوب فرض کنید که هش اون بلاک رو هم از میگیرم و میذارم توی اون یکی جیبم خوب مرحله آخر برای اینکه من بتونم عضو بلاکچین بشم اینه که دیتای خودم رو و هش بلاک قبلی رو با هم هش کنم و یک هش جدید تولید کنم و این میشه هش خودم و به این شکل من میتونم به بلاکچین وصل بشم. پس میرم میگم من میخوام به شما متصل بشم هم دیتای جدید رو آوردم هم هش بلاک قبلیمو ازش گرفتم و دارم و هم هش خودمو ساختم و به این شکل اجازه دارم که عضوی از شبکه بلاکچین بیتکوین باشم.میبینید چی میشه؟ هر بلاکی داره هش قبل از خودش رو هم هش میکنه و به این شکل همه به هم متصل میشن و به این صورت اگر فرض کنیم که بلاکچین من 10 میلیون بلاک داشته باشه و روی بلاک شماره 1 یک نفر بیاد یک کاراکتر دیتا رو حتی تغییر بده با توجه به ماهیت deterministic بودن هش خروجی کلا تغییر میکنه و همه هش ها تا بلاک 10 میلیون به هم میریزه به این شکله که همه به هم متصل هستن و همه میدونن که دیتایی که داره وارد بلاکچین میشه دستکاری نشده.توی مقاله بعدی که دارم حاضر میکنم میخوایم با هم ببینیم که هش کردن چطور انجام میشه و یک بلاکچین چطور ایجاد میشه که کار اصلا سختی نیست میشه با جاوااسکریپت یا پایتون و... شبکه بلاکچین خودمون رو تولید کنید همچنین میخواید بفهمیم که چطور شبکه بلاکچین بیتکوین از خودش محافظت میکنه چون نباید هر کسی بتونه به سادگی یک بلاک اضافه کنه باید بالاخره یک قوانینی وجود داشته باشه برای اضافه کردن بلاک، باید شما یک کاری انجام بدید، یک قابلیتی از خودتون نشون بدید که به عنوان یک بلاک توی شبکه بلاکچین بیتکوین پذیرفته بشید و اینها مواردیه که میخواید توی پست بعدی بهش بپردازیم... میخوایم بفهمیم معنی Proof of work چیه، ماین کردن یعنی چی و چرا مردم میان این تجهیزات گرون قیمت رو میخرن تا بیتکوین ماین کنن و مطمئن باشید اگر مفهوم هش هنوز براتون جا نیفتاده اصلا جای نگرانی نیست توی پست بعدی به خوبی توضیحش میدم.اگر دوست دارید این سری ادامه پیدا کنه یا اگر سوالی دارید کامنت بگذارید.</description>
                <category>اشکان</category>
                <author>اشکان</author>
                <pubDate>Sat, 10 Apr 2021 19:43:46 +0430</pubDate>
            </item>
                    <item>
                <title>وب پک ۵ - قسمت پنجم</title>
                <link>https://virgool.io/@ashcan/%D9%88%D8%A8-%D9%BE%DA%A9-%DB%B5-%D9%82%D8%B3%D9%85%D8%AA-%D9%BE%D9%86%D8%AC%D9%85-xbzyxvjvfzfb</link>
                <description>سلام دوستان بریم بدون وقت تلف کردن سراغ قسمت پنجم که چند تا کار میخوایم توی این قسمت انجام بدیم. اول اینکه میخوایم ببینیم چطور میتونیم عکس بصورت داینامیک لود کنیم و تنظیمات وب پک برای اینکار چیه چون خیلی ساده ست سریع توضیح میدم گفتم که اگر شما یک بار یاد بگیرید استفاده از لودرها رو برای همه فرمت‌ها تقریبا تکراری میشه من برای آموزش ساخت یک وبلاگ مثل ویرگول یک لوگو طراحی کردم که میخوام توی این پروژه استفاده کنم خوشحالم میکنید که نظر یا برداشتتون رو هم درمورد لوگو بگیداول این تصویر رو توی دایکتوری source/ ذخیره کنید بعد فایل عکس رو توی app.js ایمپورت کنید و اون رو به المان داینامیکی که ساختید append کنید باید بعد از تغییراتی که دادید فایل app.js مثل زیر باشه: https://gist.github.com/3dln/c16d33ed898aa9e039f6257f06a24bc6#file-app-js حالا باید لودر مخصوص رو انتخاب کنیم... به شکل ساده‌ای میخوایم از لودری به نام file-loader‌ استفاده کنیم. با دستور زیر نصبش کنید:npm install file-loader --save-devو rule مربوط به تصویر رو توی webpack.config.js اضافه کنید:{ 
    test: /\.png$/,
    use: [&amp;quotfile-loader&amp;quot]
}هیچی برای آموزش جدید نداشت دقیقا کپی کاری که برای css کردیم فقط با یک لودر متفاوت، اما فرض کنید که ما توی پروژه‌مون چند فرمت مختلف تصویر رو بخوایم استفاده کنیم یعنی یک جایی هم بخوایم فایل jpeg لود کنیم و یک جا gif یا svg لازمه برای هرکدوم یک رول جدید بنویسیم؟ خیرفقط کافیه که regex تست مون رو به شکل زیر تغییر بدیم:test: /\.(png|jpg|jpeg|gif|svg)$/فکر نکنم این هم توضیح اضافه بخواد ما توی پرانتز بین چند انتخاب از عملگر or که با علامت | نشون داده میشه استفاده کردیم یعنی هرکدوم از اینها ممکنه باشه.حالا شما نه تنها میتونید توی فایل جاوااسکریپتتون از این فرمت‌های تصویری استفاده کنید بلکه میتونید توی فایل css هم این کار رو انجام بدید چون در نهایت css هم توسط لودرهای خودش تبدیل به ماژول جاوااسکریپتی میشه اما یک نکته تستی این وسط خواهد بود که خیلی ظریفه خوب دقت کنید:یادتونه دفعه پیش بهتون گفتم وب پک فایل کانفیگ رو از پایین به بالا میخونه؟ و ترتیب loaderها مهمه؟ حالا بدونید که ترتیب ruleها هم مهمه و اونها هم از پایین به بالا خونده میشن بنابر این اگر rule تصاویر ما بالای رول css نوشته بشه تصویر ها قابل خوندن نخواهند بود حواستون باشه که اول باید وب پک بفهمه با تصویر چکار کنه بعد بره سراغ css.برای امتحان یک فایل jpeg توی پوشه source/ کپی کنید و از طریق css اون رو بک گراند المان داینامیک مون قرار بدید و نتیجه رو ببینید.اگر به مشکلی خوردید یا خواستید کد خودتون رو با من مقایسه کنید فایل‌‌های مربوط به این قسمت رو توی branch 05 مخزن گیت پروژه از اینجا میتونید کلون و استفاده کنید. به عنوان پیش‌نیاز مبحث بعدی از شما میخوام که با دقت به خروجی فولدر build نگاه کنید و زیر همین پست کامنت کنید که چه نکته ای توجه شما رو جلب میکنه.ممنون از همراهی همیشگیتون برنامه نویس موفقی باشید</description>
                <category>اشکان</category>
                <author>اشکان</author>
                <pubDate>Fri, 16 Oct 2020 12:35:19 +0330</pubDate>
            </item>
                    <item>
                <title>ساخت یک وبلاگ مثل ویرگول (قسمت اول)</title>
                <link>https://virgool.io/@ashcan/%D8%B3%D8%A7%D8%AE%D8%AA-%DB%8C%DA%A9-%D9%88%D8%A8%D9%84%D8%A7%DA%AF-%D9%85%D8%AB%D9%84-%D9%88%DB%8C%D8%B1%DA%AF%D9%88%D9%84-%D9%82%D8%B3%D9%85%D8%AA-%D8%A7%D9%88%D9%84-csy7149gnxgl</link>
                <description>سلام اشکان هستم و توی قسمت قبل ایده ساخت یک وبلاگ مثل ویرگول رو مطرح کردم و فکر میکنم موضوع جذابی میتونه باشه چون ما یک نمونه زنده داریم که داریم باهم ازش استفاده میکنیم و محاسن و معایب خودش رو داره، میتونیم از محاسنش استفاده کنیم و معایبش رو برطرف کنیم و فیچر جدید بهش اضافه کنیم و با هم گسترشش بدیم.تصمیم دارم سمت فرانت رو با reactjs بنویسم و backend رو هم با nodejs پس برای ترکیب کردن اینها چه بهتر که از فریمورک Next.js استفاده کنیم که هم pre-rendering رو پشتیبانی میکنه هم بصورت پیشفرض یک سری امکانات مثل routing هم سمت کلاینت و هم سمت سرور داره، من یک آموزش Next.js هم مدتی قبل شروع کردم که فرصت نکردم ادامه بدم و فکر میکنم فرصت خوبیه که اون رو هم در کنارش جلو ببرم.همونطور که قبلا گفتم این آموزش برای افراد مبتدی نیست و نمیشه توی یک پروژه بزرگ زمان برای توضیح مفاهیم اولیه صرف کرد اما اگر شما مبتدی هستید و میخواید همراه بشید من سعی میکنم از طریق کامنت یا ارجاع به پست‌های آموزشی موازی کمک کنم ایراداتتون برطرف بشه اما توقع نمیره اینجا بخوایم هیچ موضوعی رو باز کنیم فقط میخوایم اجرا کنیم و بریم جلو.همیشه سخت ترین کار شروع کردنه... بعدش همه چی کم کم سر جای خودش قرار میگیره.پس بیایید کار سخت رو امروز انجام بدیم و پروژه رو استارت بزنیم. کد‌های پروژه رو روی مخزن گیت‌هاب قرار میدم و حتما آموزش‌های ویدیویی هم کنارش خواهیم داشت و ویدیوها توی کانال یوتیوب من آپلود میشن (فعلا قصدی برای آپلود روی آپارت یا پلتفرم‌های دیگه ندارم).برای اسم پروژه هنوز تصمیم جدی ندارم فعلا دامنه we-blog.ir رو ثبت کردم ولی اگر پیشنهاد بهتری داشتید و دامنه ش هم قابل ثبت بود استقبال میکنم.خوب بریم سراغ استارت پروژه... یک فولدر به نام weblog بسازید داخل فولدر ترمینال رو باز کنید و دستور زیر رو برای راه اندازی یک پروژه Next.js اجرا کنیدnpx create-next-app . --use-npmاین دستور یک بویلرپلیت برای Next.js ایجاد میکنه مثل دستور create-react-app اگر آشنایی داشته باشید.اون نقطه که گذاشتیم یعنی root پروژه همین مسیریه که هستیم و سویچ --use-npm هم میگه بجای yarn از npm استفاده کن. پیشنهاد میکنم اگه میخواید حداکثر همراهی رو با من داشته باشید VSCode نصب کنید چون من از خیلی امکاناتی استفاده میکنم که ادیتورها یا IDEهای دیگه ندارند، با دستور زیر پروژه رو توی وی‌اس‌کد باز کنید:code .من یک سری آموزش مفصل برای VSCode دارم و در حال ادامه هم هست اگر مایلید از این آدرس میتونید دنبال کنید.ترمینال VSCode رو با فشردن CTRL+&#x60; باز کنید پروژه رو اجرا کنید:npm run devقاعدتا باید بدون مشکل روی پورت ۳۰۰۰ براتون یک تمپلیت ساده بالا بیاد نکته اینکه اگر سورس صفحه رو توی بروزر نگاه کنید میبینید که بر خلاف پروژه‌های Reactjs یک صفحه html دارید این همون قابلیت pre-renderingی هست که Next.js داره یعنی بر خلاف React که تمپلیت شما رو سمت کلاینت رندر میکنه این فریمورک ابتدا سمت سرور یک رندر میگیره از صفحه و اون رو میفرسته و از ریکوئست‌های بعدی صفحه سمت کلاینت ساخته میشه و کمک میکنه که موتورهای جستجو بتونند سایت رو ایندکس کنند.خوب برای اینکه خودمون هم یک کاری کرده باشیم بیاید یکم تر و تمیز کاری کنیم. از پوشه pages فایل index.js رو باز کنید و هرچی که بین پرانتزهای return هست پاک کنید و بجاش فعلا این رو بگذارید:&lt;div&gt; We Blog Here &lt;/div&gt;بالای صفحه هر دو import رو پاک کنید.از پوشه styles هم فایل Home.module.css رو پاک کنید.حالا برگردید به بروزر اگر صفحه رو نبسته باشید میبینید که اتوماتیک تغییرات شما اعمال شده چون Next.js بصورت پیشفرض Hot module reloading رو توی تنظیمات وب پک داره.دیگه طولانی ترش نمیکنم توی قسمت بعدی ساختار سایت رو تعریف میکنیم.ممنون که همراهی میکنید برنامه نویس موفقی باشید.</description>
                <category>اشکان</category>
                <author>اشکان</author>
                <pubDate>Wed, 14 Oct 2020 13:32:05 +0330</pubDate>
            </item>
                    <item>
                <title>وب پک ۵ - قسمت چهارم</title>
                <link>https://virgool.io/@ashcan/%D9%88%D8%A8-%D9%BE%DA%A9-%DB%B5-%D9%82%D8%B3%D9%85%D8%AA-%DA%86%D9%87%D8%A7%D8%B1%D9%85-wbhxdnlrgjst</link>
                <description>سلام اشکان هستم و توی این قسمت از آموزش وب پک ۵ میخوایم در مورد لودرها صحبت کنیم و ببینیم چطور میتونیم با وب پک فایل‌های css پروژه رو هم بخونیم.همونطور که توی پست‌های قبلی گفتم اگر قرار باشه هسته اصلی وب پک لودر تمام فرمت‌های مختلف رو توی خودش داشته باشه هم با مفهوم ماژولار بودن وب پک مغایرت داره و هم اینکه وب پک با معرفی کردن مفهوم لودر بار روی دوش خودش رو سبک کرده و اجازه داده تا دولوپر‌های دیگه برای هر فرمتی لودر مخصوص بنویسن.هدف نهایی وب پک اینه که انواع و اقسام ماژول‌‌ها رو بگیره و بشکل همگون اینها رو خروجی بگیره مثلا شما توی پروژه تون بتونید ماژول CommonJS یا AMD یا ES بنویسید، CSS ایمپورت کنید، انواع فرمت تصویر رو آدرس دهی کنید و وب پک از اینها یک خروجی همگون بگیره یعنی کد ترنسپایل شده نهایی مون از یک نوع باشه برای همین مفهومی رو معرفی کرد به نام loader.لودرها رو شخص ثالث مینویسه(third party) برای اینکه وب پک بتونه انواع فرمت فایل‌‌های مختلف رو بخونه. برای css و عکس و متن و فایل ویدیو و فایل سه بعدی و هرچیزی که فکر کنید لودر وجود داره.اصولا شما نباید نگران این باشید که مثلا ده‌ها لودر یا پلاگین وب پک توی پروژه دارید چون قبلا توضیح دادم که اینها قراره توی فاز دولوپمنت استفاده بشن فقط برای همینه که ما با سویچ --save-dev نصبشون میکنیم و توی حجم نهایی پروژه ما موثر نیستند.هدف نهایی لودرها هم اینه که همه فایل‌ها (بجز جاوااسکریپت) رو به ماژول تبدیل کنند و بدن دست وب پک که دیگه بلده با ماژول چکار کنه.خوب بیاید استارت لودر‌ها رو با هندل کردن فایل‌‌های css پروژه‌مون بزنیم.توی پوشه source یک فایل style.css بسازید و یک استایل ساده تعریف کنید..hello {
    color: blue;
}حالا این استایل رو توی فایل app.js لود کنید و کلاس .hello رو به المانی که بصورت داینامیک توی فایل جاوااسکریپ ساختیم بدید، به شکل زیر: https://gist.github.com/3dln/b5ad030c984559977d87ca1c27ebba5e#file-app-js حالا برای تست بیاید وب پک رو اجرا کنیم ببینیم چه اتفاقی میفتهnpm startمیبینید که با پیغام خطای زیر مواجه میشیمYou may need an appropriate loader to handle this file type, currently no loaders are configured to process this file.وب پک در حین باندل کردن پروژه رسید به فایل css مون و دید ازش سر در نمیاره بنابر این به ما گفته که شما برای هندل کردن این نوع فایل احتمالا به یک loader نیاز دارید در حال حاضر هم هیچ لودری برای پردازش این فایل تعریف نشده. خوبه پس بریم تعریف کنیم.برای این کار ما در واقع به ۲ لودر نیاز داریم اولی کارش اینه که فایل css‌ رو بخونه و بده به دومی که کار اصلی رو انجام میده و یک tag استایل توی head میسازه و استایل‌ها رو کپی میکنه اونجا.اولی اسمش هست css-loader و دومی اسمش هست style-loader خیلی آسون و قابل فهم.قدم اول اینه که نصبشون کنیم (dev dependency هستند دیگه خاطرتون که هست)npm install css-loader style-loader --save-devحالا قدم دوم اصل ماجراست کمی دقت کنید برای همه لودرها یکسانه یک بار یاد بگیرید برای همیشه:فایل webpack.config.js رو باز کنید و یک آبجکت جدید به نام module ایجاد کنید (منطقیه دیگه چون میخوایم بگیم با چه قوانینی و با استفاده از چه لودرهایی برامون ماژول بساز)داخل آبجکت module یک آرایه بسازید به نام rules توی این آرایه ما همه قوانین رو تعریف میکنیم (رول rule یعنی قانون). اولین قانونی هم که میخوایم تعریف کنیم قانون خوندن cssهاست. تا اینجا فایل مون باید به شکل زیر باشه: https://gist.github.com/3dln/5ab89822909b2330a05fdf2e9a143512#file-webpack-config-js هر rule وب پک ۲ قسمت داره اولین قسمت مسئول پیدا کردن فایل مورد نظره که در این مورد ما میخوایم فایل‌هایی با پسوند .css رو هدف قرار بدیم و این کار رو با رجکس انجام میدیم اگر از regex فراری هستین یا میترسین نگران نباشید همیشه یک فرمت مد نظره همینو فقط باید یاد بگیرید /\.css$/من توضیح میدم که همیشه regex داخل // نوشته میشه، اون $ آخرش هم یعنی باید اون چیزی که دنبالش میگردیم با عبارت قبل از $ تموم بشه یعنی اینجا وب پک اسم فایل‌ها رو می‌خونه هر اسمی که با .css تموم شده باشه این قانون رو براش اعمال میکنه دیگه از این ساده تر نمیشه توضیح داد همیشه هم همینه یعنی بعدا برای قانون فایل jpeg مثلا مینویسید:/\.jpeg$/پس ترسی نداره اینو فقط یاد میگیریم. بد نیست که یک پست هم در مورد regex بگذارم چون خیلی جاها به کار میاد یکم عجیب و غریبه اولش ولی وقتی بدونید قوانینش چیه ازش استفاده‌های خوبی میشه کرد.خوب این از اولین قسمت rule مون دومین قسمت خیلی آسونه فقط میگیم از چه loader یا لودرهایی باید برای این فایل‌هایی که پیدا کرد استفاده کنه که در این حالت css-loader و style-loader رو داریم.پس یک آبجکت بسازید توی آرایه rules، این آبجکت ۲ تا key/value به قول معروف داره اولی اسم کلیدش test هست و مقدارش اون رجکسی که نوشتیم و دومی اسم کلیدش use هست و یک آرایه از لودر یا لودرهایی که میخوایم استفاده کنیم مثل زیر: https://gist.github.com/3dln/e642907c718c23c461fcffbebc3374e4#file-webpack-config-js یک نکته آخر اینکه ترتیب نوشتن لودرها توی آرایه‌ی use‌ مهمه، سیستم وب پک اینه که از پایین میره بالا و همونطور که توضیح دادم css-loader اول متن فایل رو میخونه بعد میده با style-loader پس باید از پایین اول css-loader رو معرفی کنیم بعد style-loader.حالا وب پک رو اجرا کنید و اگر همه قدم‌ها رو درست رفته باشید پابلیش موفقی خواهید داشت و اگر فایل index.html رو باز کنید میبینید که جمله به رنگ آبی در اومده.اگر به ایرادی برخوردید مثل همیشه کدهای این قسمت رو از مخزن گیت‌هاب پروژه و از branch ۰۴ میتونید دانلود کنید و چک کنید.مرسی که همراهی میکنید و برنامه نویس موفقی باشید. </description>
                <category>اشکان</category>
                <author>اشکان</author>
                <pubDate>Wed, 14 Oct 2020 11:43:13 +0330</pubDate>
            </item>
                    <item>
                <title>وب پک ۵ - قسمت سوم</title>
                <link>https://virgool.io/@ashcan/%D9%88%D8%A8-%D9%BE%DA%A9-%DB%B5-%D9%82%D8%B3%D9%85%D8%AA-%D8%B3%D9%88%D9%85-lc0dqbgrv44d</link>
                <description>سلام اشکان هستم و در ادامه سری آموزشی وب پک ۵ میخوایم در مورد نوشتن فایل کانفیگ صحبت کنیم مثل همیشه کد‌های مربوط به هر قسمت رو میتونید از اینجا پیدا کنید کافیه که branch مربوط به هر قسمت (این قسمت 03) رو انتخاب کنید و کلون یا دانلود کنید.از نسخه ۴ وب پک، الزام استفاده از فایل کانفیگ برداشته شد و همونطور که توی قسمت قبل دیدید ما بدون هیچ فایل کانفیگی تونستیم با اجرای دستور webpack کدهامون رو اصطلاحا ترنسپایل کنیم اما خوب تنظیمات پیشفرض وب پک علاوه بر اینکه در ۹۰٪ مواقع کافی نیستند، محدودیت خودشون رو هم دارند مثلا شما رو محدود میکنند که حتما فایل‌‌های ترنسپایل شده توی یک فولدر به نام dist ذخیره بشن و فایل باندل رو حتما main.js اسم گذاری میکنه یا فایل‌ ورودی شما باید حتما اسمش index.js و توی یک پوشه به نام src باشه.توی این قسمت نمیخوایم کار عجیب و غریبی بکنیم چون برنامه این نیست که گیج بشیم فعلا آروم آروم میخوایم عملکرد وب پک رو کشف کنیم پس یک فایل کانفیگ ساده مینویسیم که همین‌ها رو بتونیم کاستومایز کنیم بعدا شروع میکنیم به شاخ و برگ دادن به فایل کانفیگمون.توی root‌ پروژه قبلی یک فایل بسازید به نام  webpack.config.js و وب پک بصورت اتوماتیک فایلی با این اسم رو به عنوان کانفیگ خودش لود میکنه (توی قسمت‌های بعد میبینیم که چرا نیاز میشه که اسم این فایل تغییر کنه و چطور باید به وب پک بفهمونیم که فایل کانفیگمون کدومه)به این شکل فایل رو کانفیگ کنید https://gist.github.com/3dln/10f501f7924dc6120f07186ab146c532#file-webpack-config-js قدم به قدم فایل رو بررسی میکنیم اول یک توضیح در مورد این قضیه require و module.exports بدم برای کسانی که نمیدونن چرا بعضی وقت‌‌ها ما این سینتکس رو میبینیم یا گاه اوقات میبینیم که از import from و export یا export default یا سبک‌های دیگه استفاده میشه. واقعیت اینه که جاوااسکریپت در اصل کانسپتی به نام ماژول توی خودش نداره بنابر این بصورت رقابتی اومدن یک سری فرمت برای ماژولار کردن اختراع کردن مثلا معروف‌هاش یکی AMD هست (مخفف Asynchronous Module Definition) که مخصوص browserهاست و میاد با تابع define یک ماژول رو تعریف میکنه، یکی دیگه از این معروفا CommonJS هست که بهش CJS هم میگن و خیلی معروف شد چون Node.js از روشش برای ماژولار کردن استفاده میکنه که همین require و module.exports هست (که البته نقطه ضعف نود‌جی‌اس به حساب میاد و Deno هم که احتمالا یه سری آموزشی ازش شروع میکنیم داره به وسیله سازنده Nodejs نوشته میشه که از ساختارهای جدیدتر استفاده میکنه) و ESM رو هم داریم که ES5 و ES6ش خیلی معروفن و احتمالا اسمشونو شنیدید که از ساختار import و export استفاده میکنن.پس در جریان باشید که اینجا داریم کانفیگ وب پک رو با CommonJS مینویسیم و داریم با روش CSJ یک ماژول تعریف میکنیم به همین سادگی.خط ۱ یک لایبراری به نام path رو فراخوانی کردیم که بعدا توی کانفیگمون بتونیم باهاش مسیر بدیم.اصل قضایا توی module.exports داره اتفاق میفته یعنی کانفیگ ما اونجاست و خیلی هم واضحه ۲ تا موردو ما تنظیم کردیم یکی اینکه نقطه شروعمون entry point چه فایلی هست و یکی هم اینکه خروجی output ما کجاست، بجای فولدر src ما دوست داریم اسم فولدر source باشه، بجای فایل index.js اسم فایل رو app.js در نظر گرفتیم و میخوایم فایل‌های ترنسپایل شده رو بریزه برامون توی یک فولدر به اسم build و اسم باندل رو بذاره app.bundle.jsحالا کافیه اسم فولدر و فایل ورودی رو مطابق بالا عوض کنید و یک فولدر بسازید به نام build و فایل index.html رو توش کپی کنید و آدرس رفرنس توی index.html رو هم تصحیح کنید.و دوباره دستور npm start رو اجرا کنیدمیبینید که  وب پک اتوماتیک فایل کانفیگ رو پیدا میکنه و مطابق تنظیمات جدید خروجی رو ایجاد میکنه.در واقع کار جدیدی نکردیم و فقط یاد گرفتیم که چطور به وب پک دستور بدیم که خودش یک قدم رو به جلوست.حالا یک امتحان کوچیک برای شما... فولدرهای dist و build رو کلا از پروژه پاک کنید و وب پک رو اجرا کنید و ببینید چه اتفاقی میفته... توی قسمت بعد میخوایم یک قدم جلوتر بریم و یکم کارمون رو اتوماتیک تر کنیم.ممنون که همراهم بودید و برنامه نویس موفقی باشید.</description>
                <category>اشکان</category>
                <author>اشکان</author>
                <pubDate>Tue, 13 Oct 2020 10:07:42 +0330</pubDate>
            </item>
                    <item>
                <title>ساخت یک وبلاگ مثل ویرگول (قسمت صفر)</title>
                <link>https://virgool.io/@ashcan/%D8%B3%D8%A7%D8%AE%D8%AA-%DB%8C%DA%A9-%D9%88%D8%A8%D9%84%D8%A7%DA%AF-%D9%85%D8%AB%D9%84-%D9%88%DB%8C%D8%B1%DA%AF%D9%88%D9%84-%D9%82%D8%B3%D9%85%D8%AA-%D8%B5%D9%81%D8%B1-a6lqfxvwemmt</link>
                <description>سلام، اشکان هستم و در کنار سری آموزش برنامه نویسی موفق تصمیم گرفتم یک سری آموزش مجزا شروع کنم برای کسانی که چند قدم جلوتر هستند... در واقع این سری خیلی مناسب تازه کارها نیست. توی این پروژه ما قراره یک وبلاگ مثل ویرگول بسازیم، از قدم‌های اول شروع میکنیم چون این پروژه قرار نیست صرفا یک آموزش باشه و میخوام که در scale یک پروژه اصطلاحا production ready طراحی و اجرا بشه پس از وایرفریمینگ و طراحی گرافیک تا پروتوتایپینگ و برنامه نویسی نهایی همراه هم خواهیم بود.قراره از adobe XD و داکر و کوبرنتیس و وب‌پک و تایپ اسکریپت و ری‌اکت و نود‌جی‌اس و next.js و مانگودی‌بی و Nginx و pm2 و خلاصه هرچی که نیازه که یک پروژه از صفر تا صد پا بگیره استفاده کنیم.میخوایم یک سیستم authentication توکن بیسد به علاوه Social Authentication بسازیم و یک API رستفول که کاربر بعد از تایید هویت بتونه با استفاده از یک ادیتور WYSIWYG شبیه ادیتور ویرگول پُست بنویسه، سیستم draft و پابلیش داشته باشه و زیر هر پست کاربرا بتونن کامنت بگذارن و reply کنن و در نهایت هر کاربر یک پروفایل داشته باشه و بتونه اطلاعات خودش رو آپدیت کنه. قاعدتا از گیت هم استفاده میکنیم و سورس‌کد پروژه رو روی گیت‌هاب قرار میدم.برای هر پست یک توضیح داریم که توی ویرگول نوشته میشه و یک ویدیو داریم که توی یوتیوب آپلود میشه.نهایتا پروژه رو دیپلوی هم می‌کنیم و از یک سرویس ابری (احتمالا ابرآروان) استفاده خواهیم کرد.همونطور که توی پُست‌های قبلی توضیح دادم تمام آموزش‌هایی که من شروع کردم بخشی از یک هدف بزرگتر هستند برای ساخت یک پروژه خیلی پیچیده، بنابر این توقع میره این پروژه کاملا ماژولار نوشته بشه و تا به راحتی بعدا بتونیم به پروژه اصلی‌مون متصلش کنیم. همچنین میخوایم از معماری مایکروسرویس استفاده کنیم و مطمئن بشیم که پروژه ای که میسازیم صد در صد scalable خواهد بود و به راحتی به هزاران کاربر سرویس خواهد داد.طبق معمول ما از ویژوال‌استودیو‌کد بعنوان IDE استفاده میکنیم و با هم میبینیم که چه امکانات عجیب و غریبی در اختیارمون قرار میده تا تمرکز ما بعنوان برنامه‌نویس فقط روی کد نویسی باشه.خوشحال میشم اگر قصد دارید توی این سری همراه من باشید به کانال یوتیوب من سابسکرایب کنید که در جریان ویدیو‌های آینده این سری قرار بگیرید.  </description>
                <category>اشکان</category>
                <author>اشکان</author>
                <pubDate>Mon, 12 Oct 2020 14:23:34 +0330</pubDate>
            </item>
                    <item>
                <title>وب پک ۵ - قسمت دوم</title>
                <link>https://virgool.io/@ashcan/%D9%88%D8%A8-%D9%BE%DA%A9-%DB%B5-%D9%82%D8%B3%D9%85%D8%AA-%D8%AF%D9%88%D9%85-kin4abd67mg6</link>
                <description>ساخت ساده‌ترین پروژه وب پکی ?یک فولدر بسازید و توی فولدر ترمینال رو باز کنید و بنویسیدnpm init -yاگر نمیدونید این دستور چکار میکنه فعلا وب پک به کارتون نمیاد از این آموزش شروع کنید.ادیتورتون رو برای پروژه‌ای که ساختیم باز کنید من از ویژوال استودیو کد استفاده میکنم اگر وقت دارید همینجا قطع کنید و این نوشته رو هم بخونید شاید تحولی توی روش برنامه نویسیتون باشه اگر هم با ادیتور خودتون راحت‌تر هستید و یا به ادیتورتون تعصب دارید با من ادامه بدید.قبل از اینکه پروژه رو با وب پک بسازیم اجازه بدید که با یک پروژه ساده جاوااسکریپتی بدون وب پک شروع کنیم که ببینیم بود نبود وب پک چه معایب و محاسنی داره.پس یک فولدر و داخل اون یک فایل html با نام Index بسازید و اگر از VSCode استفاده میکنید یک علامت تعجب ! بنویسید و Enter رو بزنید تا براتون محتوای خام یک فایل html رو ایجاد کنه (بهش میگیم Boilerplate) اگر ندارید تگ‌های زیر رو کپی کنید توی فایل index.html&lt;!DOCTYPE html&gt;
&lt;html lang=&amp;quoten&amp;quot&gt;
&lt;head&gt;
    &lt;meta charset=&amp;quotUTF-8&amp;quot&gt;
    &lt;meta name=&amp;quotviewport&amp;quot content=&amp;quotwidth=device-width, initial-scale=1.0&amp;quot&gt;     
    &lt;title&gt;Document&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;/body&gt;
&lt;/html&gt;حالا کنار فایل index یک پوشه بسازید به نام src و داخلش یک فایل جاوااسکریپت با نام index.js بسازید و یک رفرنس به این فایل توی فایل html ایجاد کنید، همچنین یک رفرنس به لایبراری lodash  با استفاده از CDN آنپکیج (unpkg) میدیم چون میخوایم از این لایبراری توی فایل Index.js استفاده کنیم.در این مرحله فایل index.html شما باید به شکل زیر باشه: https://gist.github.com/3dln/efef83e35744b10048824c5154e22a85#file-index-html حالا فایل index.js رو به شکل زیر می نویسیم: https://gist.github.com/3dln/4e6135f204a6a559e8b64d9cfa1ec341#file-index-js یه توضیح سریع هم راجع به محتوای فایل میدم:خط هشتم به body خروجی فانکشن component رو اصطلاحا append کردیم پس انتظار میره که این فانکشن به ما یک المان html خروجی بده.داخل فانکشن component همونطور که میبینید با دستور createElement یک div ساختیم و توی خط ۳ محتوای این div رو با استفاده از لایبراری lodash که توی فایل index.html لود کرده بودیم تعریف کردیم اون علامت آندرسکور (_) برای lodash مثل $ برای jquery می‌مونه و دستور join هم داره Hello و Webpack رو از آرایه‌ای که بهش داده شده میگیره و بهمون یک استرینگ برمیگردونه و از space هم برای متصل کردن این دو رشته استفاده میکنه.خوب حالا اگر فایل index.html رو باز کنید یک صفحه سفید میبینید با عبارت Hello Webpackحالا بیاید همین پروژه رو وب پکی کنیم ?اولین قدم اینه که ساختار پروژه رو کمی تغییر بدیم... ما میخوایم که یک فولدر حاوی سورس‌کدها داشته باشیم که همون فولدر/src مون هست و یک فولدر برای خروجی‌ای که وب پک بهمون میده که آپتیمایز و مینیفای شده ست به نام /dist (مخفف distribution) برای استفاده از قابلیت‌های task running وب پک. پس یک فولدر به نام /dist بسازید و فایل index.html رو داخلش کپی کنید.دومین قدم اینه که بدونیم برای استفاده از قدرت باندلینگ وب پک ما باید لایبراری‌هایی که استفاده میکنیم رو لوکال داشته باشیم پس با دستور زیر lodash رو بصورت لوکال نصب کنید و لینک رفرنسش رو از index.html بردارید.npm i lodashاگر خاطرتون باشه قبلا موقع نصب پکیج‌های npm از سویچ‌ --save استفاده میکردیم نسخه جدید npm به ما این امکان رو میده که بدون این سویچ‌ نصب رو انجام بدیم و بصورت پیشفرض --save در نظر میگیره ولی اگر --save-dev مد نظرتون هست باید سویچ رو بنویسیدحالا lodash رو به شکل زیر توی فایل index.js ایمپورت کنیدimport _ from &#039;lodash&#039;دقت کنید که در حال حاضر index.html داره فایل index.js رو از مسیر /src میخونه، رفرنس به اسکریپت رو به شکل زیر تغییر بدید:&lt;script src=&amp;quotmain.js&amp;quot&gt;اینکه چرا اسم فایل رو به main تغییر دادیم کمی جلوتر متوجه میشید، فعلا فقط این مسیر رو بنویسید ولی اسم فایل اصلی index.js که توی پوشه /src هست رو تغییر ندید.حالا وب پک رو نصب کنیمnpm i webpack webpack-cli --save-devدقت کنید که ما ۲ تا لایبراری نصب کردیم اولی یعنی webpack هسته اصلی وب پک هست و همه چیز وابسته به نصب بودنشه و دومی یعنی webpack-cli برای اجرای دستورات وب پک از طریق ترمینال بهش نیاز داریم و حالا دقت کنید که از سویچ --save-dev برای نصب این دو استفاده کردیم و واضحه که چرا... اصولا وب پک یک لایبراریه که فقط زمان دولوپمنت به کار ما میاد و در فاز پروداکشن اصلا از وب پک استفاده نمیشه در واقع وب پک در حین عبور از فاز دولوپمنت به پروداکشن به کمک ما میاد تا فایل‌هامون رو باندل کنیم و یک سری بارها رو از روی دوشمون برمیداره.حالا برای اجرا کردن وب پک توی package.json یک اسکریپت به نام start اضافه میکنیم به صورت زیر:&amp;quotscripts&amp;quot: {
    &amp;quotstart&amp;quot: &amp;quotwebpack&amp;quot
},حالا خروجی زحمتتاتون رو با دستور زیر ببینیدnpm startاگر همه قدم‌ها رو درست برداشته باشید باید یک فایل main.js توی پوشه dist براتوی ایجاد شده باشه (به همراه یک فایل txt که لایسنس lodash هست) و اگر فایل index.html رو اجرا کنید باید عبارت Hello Webpack براتون به نمایش در بیاد. اینجا مشخص شد چرا ما مسیر فایل رو به نام main.js تغییر داده بودیم چون وب پک به صورت پیش فرض این اسم رو برای باندلی که ساخته انتخاب میکنه، همچنین اگر این فایل رو باز کنید میبینید که کل لایبراری lodash و فایل شما توی این فایل باندل شده ند و فایل کاملا ناخواناست.این اولین قدم شما برای ساخت ساده‌ترین پروژه ممکن با وب پک بود توی قسمت‌های بعد قراره کارهای پیچیده‌تر انجام بدیم، یاد بگیریم که چطور بجای اینکه از تنظیمات پیش‌فرض وب پک استفاده کنیم خودمون کانفیگ بنویسیم و چطور از لودرها و پلاگین‌های وب پک استفاده کنیممثل همیشه کل این آموزش روی گیت‌هاب قرار داده شده و شما میتونید فایل‌های مربوط به هر مرحله رو روی branchهای مختلف ببینید.با اضافه شدن هر آموزش فایل‌های مربوطه به برنچ‌های جدید اضافه میشوندممنون از اینکه همراهی کردید... برنامه نویس موفقی باشید.</description>
                <category>اشکان</category>
                <author>اشکان</author>
                <pubDate>Mon, 12 Oct 2020 13:52:45 +0330</pubDate>
            </item>
                    <item>
                <title>وب پک ۵- قسمت اول</title>
                <link>https://virgool.io/@ashcan/%D9%BE%D9%8E%DA%A9%D9%90-%D9%88%D8%A8-%D9%BE%DA%A9-%D9%82%D8%B3%D9%85%D8%AA-%D8%A7%D9%88%D9%84-vm3hrac4rjjk</link>
                <description>سلام بعد از یک غیبت نسبتا طولانی خودم و شما رو با آموزش وب پک گرم میکنم، هم ساده ست هم کاربردیه و هم تقریبا هرکی دنبال یادگرفتنش رفته آخرش دست از پا درازتر برگشته چون آموزش درست و درمون فارسی براش نیست.اول اینکه شما در ۲ حالت (احتمالا) به وب‌پک نیاز پیدا میکنید یکی وقتی که میخواید خوب و صحیح و ماژولار کد بنویسید و در نهایت وب پک قراره این ماژول‌های تر و تمیزی که شما نوشتید رو سر هم کنه (در اصطلاح میگیم باندل Bundle کنه) و از مثلا چندین فایل جاوااسکریپ و لایبراری‌های متفرقه که استفاده کردید یک یا دو فایل خروجی بگیره و یکی هم وقتی میخواید ازش به عنوان یک Task Runner استفاده کنید مثلا توی کدتون یک یا چند لایبراری ایمپورت کردید و استفاده نشده بصورت خودکار بفهمه و اینها رو دور بریزه براتون(به این میگیم tree shaking) یا کدتون رو براتون کم حجم(میگیم مینیفای Minify کردن) و ناخوانا(میگیم آگلیفای Uglify کردن) کنه که به دست نااهل اگر افتاد خیلی ازش سر در نیاره و کلی کارهای باحال دیگه ای که کم کم راجع بهشون مینویسیم (قراره این آموزش چندین سری کوتاه باشه که گیج کننده نباشه).وب پک میتونه از صدها فایل پروژه (سمت چپ) خروجی سمت راست رو بدهپس اینو تا اینجا فهمیدیم که &quot;وب پک یک ماژول باندلر و یک تسک رانر است.&quot;کارکردش هم به این صورته که شما یک فایل کانفیگ براش مینویسید و طبق تنظیماتی که انجام دادید خودش میچرخه توی پروژه‌تون و کارهایی که ازش خواسته شده انجام میده و خروجی رو توی یک فولدر براتون ذخیره میکنه.خوب یه نکته این وسط وجود داره: شما ممکنه یک پروژه ساده داشته باشید که چندتا فایل html و جاوااسکریپت و تصویر داشته باشه یا ممکنه پروژه شما خیلی پیچیده باشه مثلا فایل‌های سه‌بعدی لود کنید یا ویدیو با فرمت‌های مختلف نشون بدید یا تصویرهایی که استفاده میکنید ممکنه هرکدوم فرمت خودشون رو داشته باشه، یا ممکنه بجای اینکه استایل‌هاتون رو inline بنویسید توی فایل css نوشته باشید یا از Sass یا Less استفاده کرده باشید. هزاران ترکیب مختلف میتونیم اسم ببریم از امکاناتی که توی یک پروژه وب ممکنه استفاده شده باشه.آیا قراره وب پک رو که نصب میکنید همه اینها رو ساپورت کنه؟ قاعدتا نه! این اصلا با ذات استفاده از وب پک نمیخونه. قرار اینه که وب پک خودش به برنامه نویسی ماژولار کمک کنه پس خودش هم باید ماژولار باشه بنابر این شما بر اساس نوع پروژه‌ای که دارید و امکاناتی که استفاده میکنید از اکستنشن‌های وب پک استفاده میکنید.ما ۲ جور اکستنشن داریم برای وب پک یکی loaderها هستند که کارشون خوندن فرمت‌های مختلفه مثلا اگه شما تایپ‌اسکریپت مینویسید فایل‌های ts و tsx شما لودر خودشون رو داره یا مثلا فایل css لودر خودش رو داره. هرچی که دارید استفاده میکنید باید لودرش رو نصب کنید و توی فایل تنظیمات وب پک کانفیگ کنید.توی قسمت دوم یک پروژه ساده با وب پک میسازیم https://virgool.io/@ashcan/%D9%88%D8%A8-%D9%BE%DA%A9-%DB%B5-%D9%82%D8%B3%D9%85%D8%AA-%D8%AF%D9%88%D9%85-kin4abd67mg6 </description>
                <category>اشکان</category>
                <author>اشکان</author>
                <pubDate>Sun, 11 Oct 2020 10:48:01 +0330</pubDate>
            </item>
                    <item>
                <title>&lt;برنامه نویسی موفق /&gt; قسمت دوم</title>
                <link>https://virgool.io/fboard/%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D9%85%D9%88%D9%81%D9%82-%D9%82%D8%B3%D9%85%D8%AA-%D8%AF%D9%88%D9%85-jlurjxyudfiq</link>
                <description>سلام به همگی... دقیقا یک هفته پیش من اولین پست خودم رو توی ویرگول نوشتم با عنوان «برنامه‌نویسی موفق» و توی هفته ای که گذشت بجز این پُست، مجموعا ۶ مطلب دیگه هم نوشتم که شامل آموزش گیت، آشنایی با ادیتور ویژوال استودیو کد و همچنین آموزش فریمورک Next.js میشد و کم کم کانال یوتیوب رو هم راه انداختم و ۵ ویدیو ساختم و آپلود کردم... ۳۶ نفر اینجا و ۶ نفر توی یوتیوب سابسکرایب کردند و امروز من تصمیم گرفتم که یک برنامه‌ریزی منطقی برای نوشتن مطلب و ارسال اونها داشته باشم... تقریبا دوران تعطیلات کرونایی حداقل برای ما ایرانی‌ها داره تموم و زمان برای این سبک، کار تفننی کمتر میشه.شنبه و چهارشنبه هر هفته راس ساعت ۱۶:۳۰ بصورت منظم من قصد دارم مطالب رو طبق سرفصل زیر ارسال کنم (هم اینجا و هم یوتیوب حداقل یک پُست و ویدیو یا بیشتر):ادامه آموزش آفیشیال نکست جی اس (قدم به قدم با داکیومنت رسمی) (۲ قسمت مونده)ادامه آشنایی با ویژوال استودیو کد (۱۱ قسمت مونده)ادامه آموزش گیت (۱۰ قسمت مونده)ساخت وب‌سایت «دیتابیس موزیک» (با قابلیت آپلود فایل و فیلتر کردن موزیک‌ها و ساخت player برای پخش توی سایت) با Next.jsآموزش کامل و حرفه‌ای Nginx، وب سرور و لودبالانسر بسیار محبوبساخت وب‌لاگ با تمام قابلیت‌های ویرگول + قابلیت‌های پیشنهادی شما با فریمورک Next.js به همراه  Authentication کاربر بوسیله JWT و یک API رستفول و ستاپ داکر و دیپلوی روی سرور.آموزش ۰ تا ۱۰۰ پایتون و یادگیری فریمورک‌های محبوب Flask و Djangoآموزش وب پکآموزش تایپ اسکریپتآموزش داکرآموزش Node.js و Expressمشخصا زمانبندی ارایه این مطالب بر اساس علاقه سابسکرایبرها خواهد بود و هر کدوم از این مبحث‌ها که محبوب‌تر بشه و دنبال کننده بیشتری داشته باشه توی اولویت قرار میگیره.بنابر این اگر دوست دارید از شروع این مسیر همراه من باشید همین الان به کانال یوتیوب من با نام 3DLN سابسکرایب کنید و کمکی که شما میتونید توی این راه به من بکنید همین سابسکرایب و لایک هست و اینکه برام زیر ویدیوها کامنت بگذارید و نظرتون رو در مورد هر ویدیو به من بگید و راهنماییم کنید که کدوم مطالب بیشتر مورد پسندتون بوده و سوال و جواب کنید، میدونم که دسترسی به یوتیوب سخته اما برنامه برای آینده این هست که کانال رو گسترش بدم پس قصد ورود به پلتفرم‌های ایرانی مثل آپارات رو ندارم.خوب بریم سراغ &lt;برنامه نویسی موفق /&gt; و امروز میخوایم در مورد یک موضوعی صحبت کنیم که احتمالا چیزی در موردش گوشه و کنار اینترنت به چشمتون خورده باشه و شاید تا حدودی و حتی کاملا در موردش اطلاعات داشته باشید... قضیه از اینجا شروع شد که هفته پیش من یک پُست توی ویرگول دیدم به نام «خداحافظ برنامه نویسی شیئ گرا» که ترجمه ای بود از یک مقاله میدیوم مربوط به سال ۲۰۱۶... البته قدیمی بودن مقاله مهم نبود چون مفهوم کهنه نشده بود، ترجمه مقاله اصلا جالب نیست  و با جمله‌هایی مثل «بنابراین من سلسله مراتب خود را کم عمق می کنم و آنها را چرخه ای نگه می دارم.» و یا «با واسط ها ، محدودیتی برای تعداد رفتارهای مختلف که می توانید با هم مخلوط کنید وجود ندارد» اعصابتون رو خط خطی میکنه ولی مقاله اصلی از Scalfani Charles جالب بود و تصمیم گرفتم در این مورد صحبت کنم...آیا عمر برنامه نویسی شیئ‌گرا یا Object Oriented واقعا به سر اومده؟ و اگر اومده جایگزین اون چیه...پاسخ سریع سوال اول اینه که «خیر... حداقل برای مدت طولانی‌ای OOP جوابگوی نیازهای ما خواهد بود و شما میتونید حتی برای شروع یادگیری اون اقدام کنید» و پاسخ تیتروار سوال دوم «برنامه نویسی فانکشنال» هست. اما این دو پاسخ قاعدتا به این شکل یا برای شما قابل درک و یا قابل قبول نیست.وقتی به موضوع کدنویسی صحیح می‌رسیم سریعا میتونیم بحث رو فلسفی کنیم و بگیم اصلا کُد چجوری باید باشه که بهش بگیم کد خوب و چه پارادایمی رو برای نوشتنش باید دنبال کنیم.پس بیاید  ببینیم چند پارادایم (الگو) برای برنامه نویسی وجود داره و هر کدوم از اینها چه مزایا و معایبی دارند.Procedural Programming Object Oriented ProgrammingFunctional Programmingسه الگوی برنامه نویسی هستند که شما میتونید هرکدوم از اینها رو دنبال کنید... دقت کنید که بعضی از زبان‌ها شما رو محدود به یکی از این پارادایم‌ها میکنند ولی ما امروز میخوایم از یک زبانی استفاده کنیم که شما رو به الگوی برنامه نویسی مشخصی محدود نمیکنه و به این شکل قصد داریم این سه پارادایم رو با هم مقایسه کنیم (اینکه من یکی در میون از الگو و پارادایم استفاده میکنم به این دلیله که میخوام معنی کلمه پارادایم توی ذهنتون بمونه) و این زبون همون‌طور که حدس میزنید یکی از بی در و پیکرترین، بی‌قاعده‌ترین و محبوب‌ترین زبان‌‌های دنیاست به نام جاوااسکریپت.اول یک صورت مسئله بسیار ساده تعریف میکنیم، بعد با سه پارادایم مختلف راه حل اون رو بازنویسی میکنیم که شما فرق این سه سبک رو متوجه بشید... بعد از اون اگر علاقه‌مند شدید به مطلب یک ویدیو توی کانال یوتیوب میگذارم و یک برنامه ساده رو جداگانه با هر کدوم از این سه پارادایم میسازم (سابسکرایب کردن خیلی آسونه در حد فشار دادن یک دکمه و اگر روی زنگوله کنار دکمه هم کلیک کنید میتونید از آپدیت‌های کانال من به راحتی باخبر بشید)صورت مسئله: کد جاوااسکریپت ما قراره یک Html DOM رو که از نوع button هست بخونه و یک event کلیک رو به اون bind کنه که این event هم قراره یک متد خیلی ساده که توی کنسول اسم پارادایم استفاده شده رو لاگ میکنه تریگر کنه.موافقید که خیلی آسونه... شاید هرکدوم از ما صدها بار این کارو کردیم که وقتی روی یک دکمه توی پیج htmlمون کلیک میشه یک اتفاقی بیفته... اما هر بار شما از چه متدی استفاده کردید؟ شاید توجه نکرده باشید...الگوی Procedural Programming:یک الگوی قدیمی که اگر با زبان‌های فورترن، بیسیک، C و پاسکال کار کرده باشید اون رو خوب میشناسید و اگر راه حل رو با این الگو براتون بنویسم احتمالا متوجه میشید که بسیاری از ماها احتمالا زیاد از این الگو استفاده میکنیم یعنی اجرا کردن دستورات به صورت خط به خط.const button = document.querySelector(&#039;submitBTN&#039;);
const showParadigm = () =&gt; {
    console.log(&#039;This is Procedural Programming Paradigm&#039;);
}
button.addEventListener(&#039;click&#039;, showParadigm);آشنا بود نه؟ ?الگوی Object Oriented Programming:یک پارادایم معروف که بر پایه مفهوم آبجکت‌ها (اشیا) ساخته شده که خودشون حاوی دیتا و متدهایی خودش هستند و بنابر این مفاهیم جدیدی مثل کلاس و اینترفیس و وراثت و... رو با خودشون یدک میکشند.class Paradigm {
    constructor() {
        this.button = document.querySelector(&#039;submitBTN&#039;);
        this.button.addEventListener(&#039;click&#039;, show);
    }
    show() {
        console.log(&#039;This is Object Oriented Paradigm;);
    }
}

new Paradigm();البته خوب این یکم زیاده رویه برای یک کار ساده... اما قراره شما متوجه بشید که قضیه چیه دیگه.الگوی Functional Programming:خوب پس برنامه نویسی فانکشنال چیه؟ و آیا بهترین روش برنامه نویسیه؟ قطعا نه... این هم فقط یک روش دیگه برای مرتب کردن ساختار کدتونه... این روش میگه همه عملکردهای برنامه‌تون رو با فانکشن‌ها بنویسید و خیلی هم به قول خارجیا اکسپلیسیت نیست یعنی سخت نمیگیره. برای خودتون یک معیار بگذارید که مثلا تا یک حدی من فانکشنال مینویسم قرار نیست خودتون رو خیلی محدود کنیدfunction findElement(elementTag) {
    return document.querySelector(elementTag);
}

function showParadigm() {
    console.log(&#039;This is Functional Programming Paradigm`);
}

function connectInput() {
    const btn = findElement(&#039;submitBTN&#039;);
    btn.addEventListener(&#039;click&#039;, showParadigm);
}

connectInput();
اصولا ایده این الگوی برنامه نویسی این هست که شما کد تون رو به صورت مجموعه ای از فانکشن‌ها مینویسید که &quot;هر فانکشن داره کار خودش رو انجام میده&quot;. این بخش آخرش مهمه، هر فانکشن بایستی  Stateless و Pure باشه و همچنین تولید Side effect نکنه. یعنی چی؟ هدف برنامه نویسی موفق اینه که شما رو با مفاهیم علوم کامپیوتر یا Computer Sciences آشنا کنه:تعریف فانکشن Pure:یک فانکشن پیور (خالص)  فانکشنی ست که مقداری که برمیگردونه فقط به مقادیر ورودیش بستگی داره، دقیقا مثل توابع ریاضی مثلا تابع سینوس X همیشه با ورودی یکسان خروجی یکسانی هم داره و محاسبه X هم مقدار خود X رو تغییر نمیده (معنی ساید افکت یا اثر جانبی). فانکشن پیور هیچوقت توی یک فایل لاگ نمینوسه، هیچ ریکوئستی به شبکه ارسال نمیکنه و از کاربر مقدار ورودی نمیگیره و State برنامه شما رو هم تغییر نمیده! عملکردش خیلی خیلی ساده‌ست. وقتی یک فانکشن هر عملکرد دیگری بجز محاسبه مقداری که قراره return کنه انجام بده دیگه خالص نیست و بهش impure گفته میشه. یک روش جالب برای اینکه بفهمید یک فانکشن پیور هست یا نه اینه که بجای خود فانکشن، مقداریو که برمیگردونه بگذارید و ببینید فرقی توی برنامه‌تون میکنه یا نه ? اگر نکرد یعنی فانکشن شما پیوره.تعریف Side Effect در علوم کامپیوتر: هر عملکرد یا فانکشن یا expressionی که بجز متغیرهای لوکال خودش، متغیر دیگری رو خارج از Scope خودش تغییر بده یعنی ساید افکت داشته مثال ساده زیر رو ببینید:let paradigm = &#039;OOP&#039;;
const multiplier = (x, y) =&gt; {
    paradigm = &#039;Functional&#039;;
    return x*y;
}فانکشن بالا دو تا آرگومان لوکال داره که x و y هستند و اونها رو میگیره و نتیجه ضرب اونها رو برمیگردونه اما قبل از اون داره مقدار یک متغیر خارج از اسکوپ خودش رو تغییر میده پس ساید افکت داره.خوب واضحه که بعضی وقت‌ها مجبوریم فانکشن‌های impure بنویسیم هیچ ایرادی هم نداره گفتم که ذهنتون رو باز بگذارید بنا به اقتضا نوع برنامه ای که مینویسید یک پارادایم برای خودتون انتخاب کنید حتی این پاردایم‌ها رو گاهی با هم ترکیب کنید و یادتون نره هدف اینه که خودتون راحت باشید، کارتون مرتب باشه و خوش بگذرونید قرار نیست به خودتون سخت بگیرید.خوب اگه از مبحث خوشتون اومد یادتون نره به کانال من سابسکرایب کنید و زنگوله رو بزنید، فردا چهارشنبه‌ست و ویدیوی مربوط به این مطلب رو که توی اون یک برنامه ساده رو سه بار با هر کدوم از این پارادایم‌ها میسازیم آپلود میکنم و با هم خوش میگذرونیم.فعلا بدرود</description>
                <category>اشکان</category>
                <author>اشکان</author>
                <pubDate>Tue, 14 Apr 2020 15:30:53 +0430</pubDate>
            </item>
                    <item>
                <title>ورود به لانه خرگوش... VSCode - قسمت ۲</title>
                <link>https://virgool.io/@ashcan/%D9%88%D8%B1%D9%88%D8%AF-%D8%A8%D9%87-%D9%84%D8%A7%D9%86%D9%87-%D8%AE%D8%B1%DA%AF%D9%88%D8%B4-vscode-%D9%82%D8%B3%D9%85%D8%AA-%DB%B2-b1udqqfdwlej</link>
                <description>داستان آلیس در سرزمین عجایب رو شنیدید احتمالا... داستان درباره یک دختر ۷ ساله‌س که با خواهر بزرگترش لب رودخونه نشسته بودند که یک دفعه یک خرگوش سفید میبینه که لباس تنشه و ساعت جیبی داره و با عجله داره میری توی لونه‌ش و دایم ساعتشو نشون میده و تکرار میکنه که من دیرم شده... آلیس هم دنبالش وارد لونه میشه و از یک بلندی پرت میشه به یک هال خیلی عجیب و غریب که کلی دَرِ قُفل داره با سایزهای مختلف... اونجا آلیس یک کلید کوچیک پیدا میکنه که میتونه یک در خیلی کوچیک رو باز کنه که سایز خرگوش بوده و آلیس نمیتونست ازش رد بشه ولی وقتی از سوراخ کلید نگاه کرد متوجه شد که در، رو به یک باغ خیلی زیبا باز میشه، بعد آلیس یک بطری روی میز پیدا میکنه که روش نوشته بود &quot;من رو بنوش&quot;، محتوای اون بطری باعث میشه که آلیس اونقدر کوچیک بشه که دیگه دستش به کلید در که روی میز جا گذاشته بود نرسه و بعد آلیس یک کیک پیدا میکنه که روش با کشمش نوشته بود &quot;من رو بخور&quot; و فصل اول کتاب اینجا تموم میشه.خوب برگردیم سر موضوع اصلی یعنی آموزش ویژوال‌استودیو‌کد (قسمت دوم) میتونید قسمت اول این آموزش رو از اینجا بخونید و ویدیوی مربوط به اون پُست رو از اینجا ببینید...توی پُست قبل من گفتم که از ورژن اینسایدرز استفاده میکنم (که با رنگ سبزش مشخصه) چون مایکروسافت فیچرهای جدید رو توی این ورژن اول میاره که تست کنه بعد میبره به ورژن استیبل اما خوب همین باعث میشه یه جاهایی باگ‌هایی به وجود بیاد که مناسب ضبط آموزش نباشه بنابراین من هم از الان مثل شما ورژن stable رو استفاده میکنم توی ویدیوها اگر مثل من کد ادیتورها و IDEهای مختلف رو امتحان کرده باشید میدونید که هر کدوم رو مخصوص یک زبان برنامه نویسی نوشته‌ند مثلا Jetbrains برای هر زبانی IDE مخصوصی داده PHPStorm برای پی‌اچ‌پی، PyCharm برای پایتون، WebStorm برای جاوااسکریپت IntelliJ Idea برای جاوا و البته ادیتورهایی مثل Sublime‌ و Atom و... هم وجود دارند که مثل ویژوال‌استودیوکد هر پروژه ای رو باز میکنند و ادیت میکنند و اکستنشن قبول میکنند و... اما به من اعتماد کنید این ادیتور اوپن سورس با قدمت کمتر از ۵ سال (از ۲۰۱۵ ارایه شد) در سال ۲۰۱۷ بیشترین تعداد کانتریبیوتر تاریخ گیت‌هاب رو به خودش اختصاص داد  آمار مربوط به سال ۲۰۱۹ اما آمار و ارقام در این مورد به دردمون نمیخورند و فرق ما هم با ببعی اینه که الکی دنبال بقیه نمیدویم و خودمون تست میکنیم و تجربه میکنیم و کد مینویسیم و عاشق میشیم و عشقمون رو با دنیا تقسیم میکنیم پس دیگه من بیشتر از این نمی‌نویسم که بریم بقیه ماجرا رو به صورت عملی و ویدیویی تست کنیم.امروز قراره چند تا کار باحال جدید یاد بگیریم و چند تا اکستنشن خیلی جالب هم نصب کنیم و ببینیم که توی لونه خرگوش واقعا چه خبره... قراره این سری ۱۱ قسمت دیگه داشته باشه پس با حوصله همراه من باشید و البته بدونید قصد ندارم بیخود کشش بدم این داستان رو... سر فصل‌هام آماده ست و به اندازه ۱۱ قسمت اطلاعات خفن دارم که بهتون بدم.از اونجایی که ویرگول راهکارهای خوبی برای باخبر کردن شما از پست‌های بعدی نداره خوشحالم میکنید که به کانال یوتیوب من سابسکرایب کنید اونجا داریم در کنار VSCode، گیت و Next.js یاد میگیریم و قراره به زودی دوره‌های پایتون و ری‌اکت رو هم شروع کنیم و در کنار اینها پروژه‌هایی رو استارت میزنیم که هیچکس دوست نداره به کسی یاد بده... قراره کارهایی رو انجام بدیم که مناسب پروداکشن هستند و هرچیزی رو که شما باید بلد باشید برای اینکه بهتون بگن یک فوق حرفه‌ای هستید رو قراره یاد بگیریم.فعلا ویدیو رو ببینید: https://youtu.be/vz60mZkZczI اگر اینجا هستید یعنی ۵ عملکرد جدید از بهترین و پرطرفدارترین ادیتور جهان یاد گرفتید.هنوز ابتدای راهیم ولی قراره خیلی چیزها با هم یاد بگیریم و همه اونها رو توی همین ادیتور عملی کنیم بنابر این حتما به کانال یوتیوب من سابسکرایب کنید تا از آخرین آپدیت‌های من باخبر بشید.فعلا خدا نگهدار</description>
                <category>اشکان</category>
                <author>اشکان</author>
                <pubDate>Mon, 13 Apr 2020 00:13:24 +0430</pubDate>
            </item>
                    <item>
                <title>تو آسمونا دنبالت میگشتم... آموزش Next.js - مقدمه</title>
                <link>https://virgool.io/@ashcan/%D8%AA%D9%88-%D8%A2%D8%B3%D9%85%D9%88%D9%86%D8%A7-%D8%AF%D9%86%D8%A8%D8%A7%D9%84%D8%AA-%D9%85%DB%8C%DA%AF%D8%B4%D8%AA%D9%85-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-nextjs-%D9%85%D9%82%D8%AF%D9%85%D9%87-fluerchpm8ta</link>
                <description>پیشنویس: اصطلاحات &quot;لایبراری&quot; و &quot;فریمورک&quot; در واقع مربوط به دو ماهیت متفاوت میشن مثلا ری‌اکت یک لایبراری محسوب میشه ولی انگیولار یک فریمورک اما برای ساده نویسی من همه‌جا از لفظ فریمورک استفاده  میکنم توی این پست.اگر شما با هر کدوم از فریمورک‌های ری‌اکتیو مثل Reactjs یا Vuejs کار کرده باشید میدونید که فرایند یادگیری اونها برای ساخت یک SPA درست و درمون خیلی پیچیده‌ست مثلا React‌ در نگاه اول خیلی لایبراری باحالیه ولی وقتی واردش شدید و فهمیدید باید با مفاهیم جدیدی مثل routing و ریداکس و کانتکست و... سر و کله بزنید بعد هم قضیه مشکلاتتون با  موتورهای جستجو و SEO‌ و ایندکس نشدن صفحاتتون پیش میاد و میفتید به فکر SSR و pre-render کردن صفحه‌ها و سر و کله زدن با وب‌سرورتون واقعا یک جایی ممکنه به زمین و زمان لعنت بفرستید که چرا از همون اول به شیوه آبا و اجدادتون پروژه رو نبستید!اما مدتی پیش من به شکل جالبی با یک فریمورک خیلی خیلی باحال به اسم Next.js آشنا شدم که بر پایه ری‌اکت نوشته شده اما به قولی Batteries-included بود (منظور اینه که کاملا آماده استفاده نهاییه).قضیه آشنا شدن هم این بود که داشتم یکی از کنفرانس‌های pycon 2018 رو نگاه میکردم (این کنفرانس‌ها مربوط میشه به کامیونیتی پایتون که هر سال همه جای دنیا بجز اون جایی که میدونین برگزار میشه و نماینده‌های شرکت‌های بزرگ یا کسایی که خیلی حرفه‌ای هستند میان تجربه‌هاشون رو به اشتراک میذارن یا محصولات جدید رو پروموت میکنن) و یک خانمی که متاسفانه اسمشون رو فراموش کردم از کمپانی گوگل اومده بود در مورد تلفیق ری‌اکت و flask (یک میکروفریمورک پایتونی) صحبت میکرد و اینکه گوگل چه کارهایی کرده برای اینکه بتونه وب سایت‌های ری‌اکت رو ایندکس کنه و برنامه نویس‌ها بهتره چکار کنن که سایتشون خوب optimize بشه برای موتورهای جستجو (SEO) و در حین صحبتاش گفت ما فهمیدیم که سایت‌های ری‌اکتی که با Next.js ساخته شده‌ن ۳۰ تا ۷۰ درصد!!! پرفورمنس بهتری نسبت به سایت‌های معمولی ری‌اکت دارند چون next بصورت built-in از pre-rendering پشتیبانی میکنه... خوب اول بیاید با هم مرور کنیم که pre-rendering چیه اصولا و چرا کسانی که با یک فریمورک ری‌اکتیو کار میکنند حتما بهش نیاز دارند.برای اینکه بفهمیم فرایند pre-rendering چه اهمیتی داره بایستی با پشت صحنه کار با این فریمورک‌ها نگاهی بندازیم مثلا ری‌اکت رو در نظر بگیرید... همونطور که میدونید ری‌اکت سیستم تمپلیتینگ مخصوص به خودش رو داره که با نام jsx میشناسیمش و در واقع شما تمپلیت‌تون رو توی خود فایل جاوا‌اسکریپت مینویسید و وقتی شما از وب‌سرورتون درخواست یک آدرس میکنید براتون یک فایل html خالی میفرسته که توش لینکی به اسکریپت شما و لایبراری‌‌های ری‌اکت وجود داره. بعد از اینکه فایل بوسیله browser دریافت شد همین سمت کلاینت view شما ساخته میشه استایل‌ها اعمال میشه از اون بدتر اینکه وقتی شما بین صفحات سایت‌تون جابجا میشید اصلا ریکوستی به سرور زده نمیشه و اطلاعات صفحه‌ها همه دست همون فایل جاوااسکریپت اول هست و صفحه بعد هم همینجا ساخته میشه. خوب حالا فرض کنید یک اسپایدر برای ایندکس کردن صفحه سایت ما تلاش میکنه و مثلا صفحه محصولات سایت ما قراره بعد از ساخته شدن یک ریکوئست به سرور بزنه و لیست محصولات رو بخونه و نمایش بده... اون اسپایدر در وحله اول که صفحه خالی میاد که کلا ولش میکنه میره سراغ آدرس‌های دیگه (البته یک مکانیزم‌هایی جدیدا طراحی کردن که در واقع صفحه کاملا رها نمیشه ولی برای اینکه فرایند ایندکس کردن صفحه‌ها کُند نشه اون آدرس رو یک جایی ذخیره میکنند و سر فرصت ایندکسش میکنند ولی در همون حالت هم که کار ایندکس صفحه ما عقب افتاده بعد از ساخته شدن صفحه هم محصولی برای ایندکس شدن توی اون نیست چون قراره اونها توی ریکوئست بعدی خونده بشن پس این Client Side Rendering توی این وضعیت اصلا به درد نمیخوره هرچند توی محتوای استاتیک که قرار نیست چیزی از سرور fetch بشه سرعت وب اپلیکیشن ما رو خیلی بالا میبره. اینجاست که pre-rendering میاد وسط و میگه که بهتره &quot;اولین باری&quot; که یک صفحه فرستاده میشه بهتره سمت سرور ساخته بشه کاملا و بعد به کلاینت فرستاده بشه و از اون به بعد برای اون صفحه خاص میتونیم Client Side Rendering داشته باشیم. فریمورک Next.js بصورت پیشفرض این امکان رو به ما میده و حتی برای صفحاتی که احتمالا دایما آپدیت میشن و ممکنه هر لحظه تغییر کنند میتونیم درخواست کنیم که دایما SSR انجام بشه.خوب این مقدمه رو داشته باشید در کنار اون در نظر بگیرید که مشکل routing رو هم براتون حل کرده و بسیار فریمورک خوش‌دست و ساده‌ایه. در ادامه میخوایم یاد بگیریم چطور یک وب اپلیکیشن با next بسازیم و بعد یک پروژه تعریف میکنیم و میخوایم با استفاده از next.js یک وب‌سایت بسازیم که در واقع دیتابیس موزیک هست و میشه توش موزیک آپلود و play کرد و شاید بعدا بزرگترش هم کردیم.لطفا مطابق معمول برای یادگیری عملی ویدیوی یوتیوبی که در ادامه اومده رو ببینید و اگر از این مطلب خوشتون اومده و میخواید پیگیر قسمت‌های بعدی هم باشید به کانال یوتیوب من سابسکرایب کنید. https://youtu.be/f4afhMv-5zI خوب اگر به اینجا رسیدید یعنی قسمت اول از آموزش Next.js رو تموم کردید و بلدید چطور یک اپلیکیشن Next رو راه بندازید و صفحه اضافه کنید و از سیستم routing پیش‌ساخته‌ی نکست برای جابجا شدن بین صفحات استفاده کنید. علاوه بر اون شما یاد گرفتید چطور یک کامپوننت ری‌اکت رو به شکل Shared Component بین چند صفحه مختلف نکست استفاده کنید.لطفا اگر علاقه‌مند شدید به کانال من سابسکرایب کنید که از آپدیت‌های بعدی باخبر بشید.فعلا</description>
                <category>اشکان</category>
                <author>اشکان</author>
                <pubDate>Thu, 09 Apr 2020 19:11:54 +0430</pubDate>
            </item>
                    <item>
                <title>گیت... قدم دوم</title>
                <link>https://virgool.io/@ashcan/%DA%AF%DB%8C%D8%AA-%D9%82%D8%AF%D9%85-%D8%AF%D9%88%D9%85-acpckb8rcgre</link>
                <description>سلام اشکان هستم و این دومین پست از سری آموزش‌های گیت هست، پست قبلی یک مقدمه بود برای کسانی که اصلا نمیدونستن سورس کنترل چیه و با گیت کار نکرده بودند... این پست هم مناسب کسی که در حال حاضر با گیت کار میکنه نیست و قاعدتا چیزی به معلوماتش اضافه نمیکنه اما از اونجا که همه پست‌های من جزئی از یک پروسه کلی به نام برنامه نویسی موفق هستند که قراره با کسانی که من رو دنبال میکنند به یک پروژه خیلی پیچیده برسیم پیشنهاد میکنم که کانال یوتوب من رو فالو کنید تا از ویدیو‌های جدید با خبر باشید.خوب اگر این پست رو میخونید قاعدتا گیت رو نصب کردید و از طریق ترمینال به گیت دسترسی دارید اگر نصب نکردید میتونید پست قبلی من رو بخونید و یا ویدیوی کوتاه من درباره نحوه نصب گیت در ویندوز رو ببینید(اگر از مک او اس یا لینوکس استفاده میکنید گیت رو به صورت built-in پشتیبانی میکنند) https://virgool.io/@ashcan/%D8%A8%D8%A7-%DA%AF%DB%8C%D8%AA-%D8%A7%D9%81%D8%B3%D8%A7%D8%B1%D9%90-%DA%A9%D9%8F%D8%AF-%D8%B1%D9%88-%D8%A8%DA%AF%DB%8C%D8%B1-%D8%AA%D9%88-%D8%AF%D8%B3%D8%AA%D8%AA-u3symzyln7od توی این پست میخوایم ببینیم کسی که سالهاست با گیت کار میکنه چطور سورس همه پروژه‌هاش و حتی کدهای کوچیکش رو بوسیله گیت کنترل میکنه برای همین اول باید ببینیم گیت چیه:A Distributed Version Control Systemبیاید اول درک کنیم این یعنی چی بعد بریم سراغ کارهای عملی... سوالی که شاید پیش اومده باشه براتون اینه که مگه تا حالا نمیگفتی Source control؟ چی شد یک دفعه حالا شد version control؟ واقعیت اینه که این دو اصطلاح خیلی به هم نزدیک هستند اما یک نکته باعث تمایز اونها میشه.اصطلاح سورس کنترل برای وقتی استفاده میشه که ما فقط با فایل‌های متنی سر و کار داریم و ورژن کنترل وقتی استفاده میشه که قراره باینری‌ها و همینطور سایر assetهای یک پروژه رو هم تحت نظر بگیریم و تغییراتشون رو ثبت کنیم. در واقع گیت این کار رو هم برامون انجام میده و میتونه انواع متعلقات پروژه ما رو به همراه سورس کد watch کنه... چه عالی پس تا اینجا خیلی هم باحاله... اما اون distributed یعنی چی؟ بیاید یک مثال بزنیم:اگر شما به تنهایی روی یک پروژه کار میکنید و روی سیستم خودتون سورس پروژه رو هم یا از این به بعد بهتره که بگیم ورژن پروژه تون رو هم کنترل میکنید شما در واقع نیاز به یک سیستم centralized (متمرکز) دارید (احتمالا) ولی اگر یک تیم هستید و هرکدوم شما دارید روی قسمتی از پروژه ای کار میکنید که داره version control میشه نیازه که پروژه روی یک سرور باشه و هرکدوم از شما اصطلاحا یک clone (یک جور کپی) از اون پروژه رو روی سیستم خودتون داشته باشید به شکلی که اون دایما بتونه خودش رو با پروژه اصلی که روی سروره سینک کنه (تغییرات خودش رو به اون اطلاع بده یا از تغییراتی که دیگران میدن باخبر بشه) به این سیستم میگن یک سیستم distributed (در لغت یعنی توزیع شده) پس گیت میتونه به شما امکان این رو بده که سورس کد و همه متعلقات (assetهای) پروژه تون رو اصطلاحا دیستریبیوت کنید.یعنی میشه که من همه اینها رو گفته باشم و شما باز یک پروژه حتی خیلی کوچیک رو بدون گیت استارت کنید؟!اوکی فعلا تئوری و حرف بسه... بیاید با هم ببینیم یک برنامه‌نویس چطور با گیت کار میکنه... همونطور که بالا توضیح دادم از اینجا به بعد رو شما از طریق ویدیو نگاه میکنید چون هم برای شما درکش راحت‌تر میشه و هم برای من توضیحش. توی این ویدیو شما قراره یاد بگیرید که چطور گیت رو کانفیگ کنید و چطور با ۵ دستور ساده اکثر کارهای روتین شما میتونه راه بیفته... توی قسمت بعدی اما قراره یاد بگیریم چطور مشکلاتی که موقع کار کردن با گیت باهاشون ممکنه مواجه بشیم رو حل کنیم و ۵ تا دستور حرفه‌ای‌تر و باحال‌تر رو یاد میگیریم. https://youtu.be/3YQXJ5n9qD8 خوب انتظار میره که اگر اینجا هستید ویدیو رو دیده باشید و پنج دستور اولیه گیتُ یاد گرفته باشید:git statusgit checkout -b &lt;branch&gt;git add &lt;File&gt;git commit -m &quot;your commit message here&quot;git logلطفا اگر از آموزش ویدیویی خوشتون اومده لایک و سابسکرایب کنید چون این برای من یک معیار محسوب میشه که این کار رو ادامه بدم یا نه. در واقع تصمیم دارم اگر ماهی ۱۰۰ نفر سابسکرایب نداشته باشم فقط از طریق ویرگول ادامه بدم یا وقت کمتری برای ادیت ویدیو بگذارم.ممنون و منتظر پست روز بعد باشید</description>
                <category>اشکان</category>
                <author>اشکان</author>
                <pubDate>Wed, 08 Apr 2020 08:43:09 +0430</pubDate>
            </item>
                    <item>
                <title>با گیت افسارِ کُد رو بگیر تو دستت...</title>
                <link>https://virgool.io/@ashcan/%D8%A8%D8%A7-%DA%AF%DB%8C%D8%AA-%D8%A7%D9%81%D8%B3%D8%A7%D8%B1%D9%90-%DA%A9%D9%8F%D8%AF-%D8%B1%D9%88-%D8%A8%DA%AF%DB%8C%D8%B1-%D8%AA%D9%88-%D8%AF%D8%B3%D8%AA%D8%AA-u3symzyln7od</link>
                <description>سلام دوباره اشکانم و برای سومین روز متوالی دارم پست می‌گذارم... پس هَستم.میگن اون چیزی که منو نکشه قوی‌ترم میکنه قطعا در مورد من و کووید۱۹ این قضیه کاملا صدق میکنه. خیلی خوبه و ممنونم که ۳۰ نفر توی این دو سه روز پروفایل من رو فالو کردن پس احتمالا مسیر رو دارم درست میرم خیلی باحال‌تر میشه که اگر با آموزش ویدیویی هم حال میکنید کانال یوتیوبی که از دیروز راه انداختم رو هم سابسکرایب کنید منم قول میدم که هر روز برای هر کدوم از این پست‌ها یک ویدیوی آموزشی هم بسازم در واقع اینجا تئوری رو میگیم اونجا هم کد رو مینویسیم که منطقی به نظر میرسه.خوب اگر شما برنامه‌نویس هستید یا داستان مینویسید یا مترجمید یا هر شغلی دارید که با مقدار زیادی اطلاعات متنی سر و کار دارید که دایما در حال زیاد شدن و تغییر هستند و این سورس‌ها رو کنترل نمیکنید... واقعا چرا نمیکنید؟ یک دلیل موجه برای خودتون بیارید که چرا خودتون رو غرق در این همه کاراکتر و ارقام میکنید با این ذهنی که هر روز خسته‌تر میشه و گنجایش محدودی داره... بعید میدونم ادعا کنید که اگر ۳ ماه بعد به پروژه‌تون سر بزنید دقیقا یادتون میاد که چکار کرده بودید و چطور نوشته بودید و چی توی ذهنتون میگذشت وقتی پروژه تون رو انجام میدادید!؟اگر یک تیم هستید که اوضاع وحشتناک‌تر میشه فرض کنید یکی از تیم برنامه‌نویسی شما تصمیم میگیره چند جای مختلف پروژه تغییراتی بده، اول اینکه از کجا معلوم که این آدم کل پروژه رو به گند نکشه پس به شیوه سنتی قاعدتا شما یک کپی از کار رو به طرف میدید و میگید برو روی این کار کن اگر درست بود بیارش. خوب در همین حین شما و بقیه تیم دارید روی کپی خودتون کار میکنید بعد از یک ماه هم تیمی شما نسخه خودش رو اصلاح کرده و براتون میاره حالا تغییراتی که شما دادید با چیزی که اون نوشته کانفلیکت داره یا حتی اگر نداشته باشه باید بگردید و تک تک موارد رو توی نسخه‌های هم پیدا و جایگزین کنید و صد‌ها دلیل و اتفاق دیگه‌ای که ماه‌ها پروژه‌ای رو عقب میندازند یا حتی کنسلش میکنند.خوب حالا اگر من به شما بگم یک ابزار هست (فرض بر اینکه شما چیزی از گیت نمیدونید) که همه این مشکلات رو حل میکنه بعلاوه اینکه ده‌ها امکان دیگه بهتون میده و اینقدر استفاده از اون آسونه که با زیر ۱۰ تا دستور ساده میتونید کاملا بهش مسلط باشید و از اون مهمتر IDE محبوب‌مون VSCode هم به صورت پیش‌فرض و هم با چند تا اکستنشن باحال کاملا امکاناتش رو بهمون میده که ازش استفاده کنیم. اگر پست من در مورد VSCode رو نخوندید پیشنهاد میکنم مطالعه کنید و ویدیوی مربوط بهش رو هم ببینید. https://virgool.io/@ashcan/%D9%85%D8%AB%D9%84-%D8%B3%D9%8E%D9%85-%D8%A8%D8%B1%D8%A7%DB%8C-%D9%81%D8%B1%D9%88%D8%AF%D9%88-%D9%85%D8%AB%D9%84-vs-code-%D8%A8%D8%B1%D8%A7%DB%8C-%D9%85%D9%86-rt4vdhgbm5gd خوب اگر نظرتون رو جلب کردم اینو بدونید که گیت به صورت پیشفرض روی لینوکس و مک‌او‌اس نصبه ولی برای ویندوز باید خودتون از اینجا نصبش کنید. (من یک ویدیو کوتاه ساختم در مورد نحوه نصب گیت روی ویندوز که میتونید از اینجا ببینید)خوب اگر اینجا هستید قاعدتا گیت رو نصب کردید برای اطمینان از نصب یک ترمینال باز کنید و تایپ کنید git و enter رو بزنید و ببینید چی نوشته.اگر با این پیغام روبرو شدید بدونید که گیت درست نصب نشده و میتونید ویدیوی نصب گیت من رو در یوتیوب از اینجا ببینید. اما اگر با پاسخی مثل نمونه بالا مواجه شدید یعنی گیت به درستی از طریق ترمینال سیستم‌عامل شما قابل دسترسی هست.برای شروع بدونید که گیت مثل یک دستیار می‌مونه که وظیفه‌ش اینه که همیشه فولدری که شما بهش میسپارید رو تحت نظر داشته باشه و اصطلاحا Watch کنه پس ما برای شروع یک ساب‌دایرکتوری جدید توی پوشه virgool/goodmood مون میسازیم به اسم lets-git و با دستور زیر از ایجنت (مامور) گیت‌مون میخوایم که اون رو برامون واچ کنه:git init الان متوجه شدیم که توی پُست قبلی معنی این دستور چی بود.خودتون رو از ابزارهایی که مجانی و به راحتی در دسترس‌تون قرار گرفته محروم نکنید و حتی برای کوچیک ترین کار‌ها و پروژه‌هاتون حتما قبل از هر کاری یک ایجنت گیت فراخوانی کنید و کم کم یاد میگیریم که چطور این ایجنت قراره دستیار و حافظه ما برای کنترل سورس کدمون باشهدر پست بعد توضیح میدم که چطور با ۴-۵ تا دستور ساده کارمون رو با گیت شروع کنیم.ممنون و فعلا</description>
                <category>اشکان</category>
                <author>اشکان</author>
                <pubDate>Mon, 06 Apr 2020 11:34:33 +0430</pubDate>
            </item>
                    <item>
                <title>مثل سَم برای فرودو... مثل VS Code برای من...</title>
                <link>https://virgool.io/@ashcan/%D9%85%D8%AB%D9%84-%D8%B3%D9%8E%D9%85-%D8%A8%D8%B1%D8%A7%DB%8C-%D9%81%D8%B1%D9%88%D8%AF%D9%88-%D9%85%D8%AB%D9%84-vs-code-%D8%A8%D8%B1%D8%A7%DB%8C-%D9%85%D9%86-rt4vdhgbm5gd</link>
                <description>ابزار کار، نقش بزرگی در ایفایِ بهترِ نقش یک کارگر، یک هنرمند، یک مدیر و کسی که همزمان باید هر سه نقش رو بازی کنه یعنی یک برنامه نویس دارند. توی پُست قبل نوشتم که من از اون سبک برنامه‌نویس‌ها هستم که هیچوقت خودم رو درگیر استفاده از یک زبان خاص یا یک فریمورک نکردم هیچوقت تعصبی در این زمینه نداشتم و سعی کردم در جای خودش و بنا بر نیاز شرکت یا کارفرما از زبان‌‌ها و فریمورک‌های مختلف روی انواع پلتفرم‌ها استفاده کنم دوست داشتم نقاشی باشم که با رنگ و بوم و قلم‌مویی که داره هر سبکی رو میتونه نقاشی کنه و ابزار، نقش مهمی رو در پیدایش یک اثر هنری بازی میکنن، شما نباید در حین کدنویسی وقتتون رو بابت پیدا کردن shortcutها یا آیتم‌های منو تلف کنید باید مسلط باشید باید همه چیز رو در مورد IDE تون بدونید به قول معروف IDE باید توی مشتتون باشه.شما حق انتخاب دارید یکی از این دو قرص رو انتخاب کنیدقرص قرمز رو بردارید داستان همینجا تموم میشه میتونید با هر IDE که تا الان کار میکردید ادامه بدید، فردا توی تختتون بیدار میشید و زندگی به روال قبل ادامه پیدا میکنه.قرص آبی رو بردارید و من شما رو به سرزمین عجایب میبرم و بهتون نشون میدم که لونه خرگوش تا کجا‌ها ادامه پیدا میکنه...خوب اگر دارید این قسمت رو میخونید قاعدتا قرص آبی رو برداشتید پس میتونید برنامه ویژوال استودیو کد رو از اینجا دانلود و نصب کنید البته من ورژن insiders رو همیشه نصب میکنم اگر دوست داشتید میتونید اون رو از اینجا دانلود کنید فرقش هم با ورژن اصلی اینه که فیچر‌هایی که میخوان اضافه کنند رو اول توی اینسایدرز برای تست میگذارند و ممکنه خیلی stable نباشه به قول معروف پس ترجیحا شما میتونید همون اولی رو دانلود کنید که آیکنش آبیه (مال من سبزه)، موقع نصب هم تیک گزینه‌یAdd &quot;Open with Code&quot; action to Windows Explorer directory contextهم بزنید، دقت کنید که ۲ تا گزینه شبیه هم هستند من فقط تیک دومی رو میزنم و اینجوری میتونید توی دایرکتوری پروژه تون راست‌کلیک کنید و گزینه Open with Code رو بزنید و اون دایرکتوری رو توی محیط VS Code باز کنید.قراره از کاری که میخوایم انجام بدیم لذت ببریم... پس بیاید اول از همه محیط کارمون رو کانفیگ کنیم.اولین بار که VSCode رو باز میکنید اگر مثل من با ویندوز کار میکنید و روی سیستمتون WSL رو نصب دارید احتمالا بصورت خودکار بهتون پیغام میده که متوجه شدیم شما wsl دارید بیاید اکستنشن (افزونه) اون رو هم نصب کنید که بتونید کد رو از طریق ترمینال لینوکسی‌تون بالا بیارید دیگه توضیح نمیدم قضیه چیه اونی که wsl رو داره میدونه من چی میگم اونی هم که نداره احتمالا همراه من نیازی پیدا نمیکنه چون ما قراره پروژه‌هامون رو با داکر ببندیم پس محیط لینوکسی واقعی خودمون رو داریم.وی‌اس‌کد بعد از نصب به صورت اتوماتیک یه پنجره باز میکنه که تیترش هست Welcome پایین این پنجره یه تیک داره که بصورت پیشفرض فعاله، اون تیک رو بردارید که هر بار برنامه رو باز میکنید این پنجره رو نبینید.سمت چپ صفحه یک نوار عمودی باریک هست که خیلی کاربردیه ما میخوایم گزینه Extensions رو انتخاب کنیم و چند تا اکستنشن جالب نصب کنیم برای شروع، در آینده میبینید که قراره ده‌ها اکستنشن دیگه نصب کنیم ولی نمیخوام شلوغ بازی در بیارم فعلا فقط میخوایم محیطمون رو کاربردی کنیم.من دوست دارم از کیبورد توی IDEم استفاده کنم شما اگر راحت‌تر هستید روی گزینه‌ای که بالا نشون دادم کلیک کنید اگر هم میخواید کول به نظر بیاید ctrl + shift + x شما رو به منو اکستنشنز میبره امتحان کنید و مطمئن باشید یادتون نمیره و اینها به شکل جالبی هم توی vscode قابل تنظیم هستند.حالا بیاید با هم یک theme نصب کنیم، من تم دراکولا رو دوست دارم شما میتونید تم مورد علاقه خودتون رو پیدا کنید کافیه توی سرچ باکس پنجره اکستنشنز تایپ کنید draculaتم Dracula Official رو انتخاب کنید و Install رو بزنید.بعد از نصب، کلید کنترل رو نگه دارید و به ترتیب K و T رو بزنید، میبینید که لیست تم‌هایی که نصب شده میاد و شما میتونید از بین اونها تم مورد نظرتون رو انتخاب کنید (دراکولا هم که تازه نصب کردیم توش هست)حالا دوباره ctrl+shift+x بزنید تا به سرچ‌باکس اکستنشنز برگردید و این‌بار سرچ کنید iconsاین اکستنشن‌ها بصورت اتوماتیک برای فایل‌های پروژه تون یک آیکون مربوط به تایپ فایلتون قرار میدن (توی خود محیط vscode فقط) و به نظر من هم خیلی باحاله هم اینکه توی پروژه‌های بزرگ باعث میشه سریعتر فایل‌‌هاتون رو پیدا کنید من افزونه‌ی Material Theme Icons رو دوست دارم شما هم نصب کنید بعدا اگر خواستید میتونید گزینه‌های دیگه رو هم امتحان کنید.خوب حالا که محیط کارمونُ تا حدی کانفیگ کردیم بیاید ببینیم معمولا چطوری ما قراره پروژه مون رو اینجا باز کنیم.برنامه رو ببندید تا یک فولدر مخصوص پروژه‌های خودمون بسازیم، از این به بعد فایل‌های پروژه‌هامون رو اونجا قرار میدیم و خیلی خوبه که شما همراه من باشید و نخواید فقط از روی این متن‌ها رد بشید چون احتمالا بعدا که به قسمت‌های جالبتر رسیدیم میبینید که همه پروژه‌هایی که ساختیم قراره به هم ارتباط پیدا کنند و یک پروژه خیلی بزرگ و پیچیده رو شکل بدن.با این حال برای اینکه خرابکاری نشه من کل کار‌هایی که از امروز با هم انجام میدیم روی یک ریپازیتوری گیت‌هاب قرار میدم و شما هر زمان که بخواید میتونید از اونجا فایل‌های مورد نظرتون رو پیدا کنید.من یک دایرکتوری ساختم به اسم virgool و توی اون هم یک ساب‌دایرکتوری دیگه به اسم goodmood و گیت‌م رو هم همونجا اینیشیال میکنم (اگر بلد نیستید با گیت کار کنید اصلا مشکلی نیست چون قراره که باهم گیت رو خیلی خوب یاد بگیریم).C:\virgool\goodmood&gt;git initحالا برای آموزش‌های مربوط به VSCode یک فولدر میسازیم به اسم vscode-tutorials و از همین الان بیاید قرارداد کنیم که همیشه اسم دایرکتوری‌هامون رو به همین شکل بگذاریم; حروف کوچک و بجای فاصله‌ها هم از علامت &quot;-&quot;  که بهش hyphen, Dash, minus (هایفِن یا دَش یا منها) گفته میشه استفاده کنیم (من میگم هایفن که بهترین انتخابه) و وارد اون دایرکتوری میشیم.C:\virgool\goodmood&gt; mkdir vscode-tutorials
C:\virgool\goodmood&gt; cd vscode-tutorialsحالا توی این دایرکتوری تایپ کنید:C:\virgool\goodmood\vscode-tutorials&gt; code .با این دستور ویژوال‌استودیو‌کد فولدری که شما داخلش این دستور رو اجرا کردید رو باز میکنه.اگر شما مثل من با VSCode Insiders کار میکنید باید بجای کد بنویسید code-insiders ولی من یک کار باحال کوچولو کردم که کارم کمی راحت تر بشه به آدرس زیر برید:C:\Users\ashcan\AppData\Local\Programs\Microsoft VS Code Insiders\binبعد از فایل code-insiders.cmd یک کپی بگیرید و اون کپی رو تغییر نام بدید به code.cmd حالا میتونید اینسایدرز رو هم با دستور code باز کنید البته اگر شما هر دو نسخه رو نصب کرده باشید به مشکل میخورید و بهتره یک اسم دیگه مثل icode.cmd انتخاب کنید که با نسخه stable کانفلیکت (تداخل) نداشته باشه.خوب یکم طولانی شد و فکر میکنم باید این آموزش رو به چندین قسمت تقسیم کنم پس برای آخرین کاری که میخوایم انجام بدیم با فشردن دکمه‌های ctrl+shift+e (از این ترکیب خیلی قراره استفاده کنیم برای جابجا شدن بین فایل کد و پنجره اکسپلورر که شماتیک درختی از پروژه شما رو نشون میده) به پنجره اکسپلورر برید و راست‌کلیک کنیدو گزینه new file رو انتخاب کنید و یک فایل به اسم index.html بسازید. به همین شکل سه فایل دیگه با نام‌های index.py (فایل پایتون)، index.tsx (فایل تمپلیت ری‌اکت) و index.pug (یک نوع تمپلیت دیگه) بسازید و ببینید که اکستنشنی که برای iconها نصب کردیم چقدر جالبه و کمک میکنه که سریع فایل مورد نظرمون رو پیدا کنیم. برای زوم کردن میتونید از ترکیب ctrl و علامت = استفاده کنید و برای زوم‌بک هم از ترکیب کنترل و علامت هایفن که کنارشه.نکته آخر این قسمت اینکه با فشردن کنترل و علامت backtick (که قاعدتا زیر اسکیپ و سمت چپ ۱ هست) میتونید ترمینال داخلی vscode رو باز کنید و ببندید. پس ترمینال رو باز کنید و قسمت اول رو توی گیت کامیت کنید.C:\virgool\goodmood\vscode-tutorials&gt; git add .
C:\virgool\goodmood\vscode-tutorials&gt; git commit -m &amp;quotinitial commit&amp;quotباز هم تکرار میکنم اگر گیت بلد نیستید نادیده بگیرید قسمت‌های مربوط به گیت رو و به زودی ظرف چند روز آینده آموزش گیت رو شروع میکنم.ممنون که همراه بودید و فعلا بدرود.خوب در نهایت من بعد از این پست تصمیم گرفتم برای آموزش‌هام ویدیو هم رکورد کنم که کار هر دومون راحت‌تر بشه اگر دوست دارید ببینید و اگر لطف کنید ویدیوی یوتیوبُ لایک کنید و subscribe کنید که هم از ویدیو‌های آینده مطلع بشید و هم به من کمک کرده باشید. https://youtu.be/UKMRBu9Q0KA?list=PLEIJG2-FKq63PGSaYqXoz7JexIj9oC_-9 </description>
                <category>اشکان</category>
                <author>اشکان</author>
                <pubDate>Sun, 05 Apr 2020 13:44:46 +0430</pubDate>
            </item>
                    <item>
                <title>درجا نزنیم به عقب برنگردیم... &lt;برنامه نویسی موفق/&gt;</title>
                <link>https://virgool.io/@ashcan/%D8%AF%D8%B1%D8%AC%D8%A7-%D9%86%D8%B2%D9%86%DB%8C%D9%85-%D8%A8%D9%87-%D8%B9%D9%82%D8%A8-%D8%A8%D8%B1%D9%86%DA%AF%D8%B1%D8%AF%DB%8C%D9%85-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D9%85%D9%88%D9%81%D9%82-df3nxcqef82y</link>
                <description>سلام،‌ من اشکان هستم و بعد از نوشتن چند تا پست نیمچه و نیمه در ویرگول تصمیم گرفتم یکم اطلاعاتُ منظم و مرتب‌تر کنم و دوباره ولی این بار یکم پایه‌ای‌تر در مورد اصول برنامه‌نویسی مدرن و ابزارهایی که دور و برمون هستند و کمک میکنند که نسبت به بقیه برنامه‌نویس‌ها متفاوت باشیم بنویسم. خساست به خرج نمیدم و هرچی که بلدم و خودم استفاده میکنمُ آموزش میدم و در واقع از این به بعد پُست‌های من مناسب دو گروه خواهد بود ۱-کسایی که برنامه‌نویس هستند ولی دوست دارند خودشونُ بالا بکشند ۲-کسایی که میخوان برنامه‌نویسی رو یاد بگیرند ولی عجله‌ای ندارند و بیشتر روی کیفیت آموزش تمرکز دارند.میخوایم ببینیم برنامه مدرن ماژولار چی‌ هست اصولا، سورس کنترل یا ورژن کنترل به چه دردی میخوره و چرا همیشه باید اول به فکرش باشیم بعد کارمون رو شروع کنیم، ببینیم چرا تست نوشتن برای خودمون و کار تیمی مفیده و مفهوم test first چیه و با لایبراری‌های مختلف تست نوشتن آشنا بشیم، نحوه جمع کردن یه پروژه خیلی بزرگ complex رو یاد بگیریم و در همین راستا با ابزارهایی مثل داکر و وب پک و... کار کنیم.اگر پست‌های قبلی من رو خونده باشید میدونید که من با ترجمه کردن واژه‌های مصطلح موافق نیستم و توی نوشته‌های من بجای شیئ‌گرا و آرایه و چارچوب و... Object Oriented , Array و Framework میبینید اصلا بیایید ۲ سال با هم ادامه بدیم آخرش پست‌هامون کلا انگلیسی باشه چون سواد اونجاست ما ایرانی‌ها کپی‌کاری فقط بلدیم پس بهتره زبانمون خوب باشه که بتونیم رفرنس‌های اصلی رو بخونیم.در ادامه قراره برنامه نویسی هم یاد بگیریم، زبان خاصی هم مد نظر نیست یک برنامه‌نویس از نظر من خودش رو محدود به syntax خاصی نمیکنه البته که خود من هم زبان‌هایی رو ترجیح میدم وقتی دستم بازه ولی وقتی اصول رو بدونیم به نظرم خیلی سریع میتونیم خودمون رو با هر زبانی تطبیق بدیم پس جهت اطلاع زبان اصلی من برای سمت سرور Python هست و سمت کلاینت یک فریم‌ورک ری‌اکتیو معمولا Reactjs کار میکنیم و تا حد امکان از تایپ اسکریپت استفاده میکنیم که یک سوپرسِتِ extend شده زبان جاوااسکریپت هست که اون رو قاعده‌مندتر کرده. اما یه جاهایی ممکنه Node.js بنویسیم یا ++C یا جاوا سمت سرور یا با انگیولار و Vuejs سمت کلاینت کار کنیم و اصلا اهمیتی نداره برامون که زبان چیه و فریمورک کدومه وقتی قواعد برنامه نویسی رو بلد هستیم.اونوقت خیلی جالب میشه برامون که چطور همه این فریمورک‌ها اصول کارشون یکیه و فقط اسم‌ها رو تغییر دادن و برای کسایی که سطحی نگاه میکنند گیج‌کننده به نظر میرسند.در نهایت ما توی دنیایی زندگی میکنیم که برنامه‌نویس‌ها برای بقاء به سمت فول‌استک(آچارفرانسه) شدن حرکت میکنند پس باید شما تقریبا یک system admin خوب هم باشید، باید بتونید طراحی دیتابیس هم انجام بدید و اگر سلیقه خوبی هم داشته باشید باید بتونید دستی هم به سر و روی UI برنامه‌تون بکشید همزمان باید UX رو هم بشناسید پس قراره در کنار یک برنامه‌نویس خوب شدن اینها رو هم تا حدودی یاد بگیریم.و اصولی که بهشون پایبند می‌مونیم... (Principles)اصل  Keep It Simple, Stupid - KISS:آنتوان دو سنت اگزوپری نویسنده شازده کوچولو یه جمله معروف داره که میگه“Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away.” یعنی کمال زمانی حاصل نمیشود که دیگر چیزی برای اضافه کردن نمانده است بلکه زمانی به دست می‌آید که دیگر چیزی برای زدودن باقی نمانده.یک پروژه پیچیده رو هم با همه شاخ و برگ‌هاش اگر بخواید از اول ببینید و بسازید کارتون خیلی سخت میشه و شاید در نهایت به بن‌بست برسید کسانی که تجربه‌ش رو دارند متوجه منظور من میشوند همیشه کار رو تا جایی که میتونید ساده کنید و از ساده‌ترین فرمش کار رو شروع کنید و کم کم امکانات مورد نظرتون رو به کار اضافه کنیداصل Don&#x27;t Repeat Yourself - DRYمیشه گفت یکی از معروف‌ترین و پایه‌ای ترین اصول برنامه‌نویسی که اسمش به گوش اکثر شما خورده اصل DRY‌ هست که میگه خودتون رو تکرار نکنید (dry در لغت به معنی خشک هست) یا &quot;دوباره کاری&quot; نکنید اصلا مفهوم functionها از همین اصل گرفته شده در شکل ساده‌ش فرض کنید اگر توی برنامه‌تون بجای اینکه یک فانکشن برای کپیتال کردن کاراکترهای یک استرینگ بنویسید هربار این کار رو دستی انجام می‌دادید چقدر خجالت‌آور بود در مقابل این مفهوم اصل WET (به معنی لغوی مرطوب) تعریف میشه که میتونه مخفف &quot;write every time&quot;, &quot;write everything twice&quot;, &quot;we enjoy typing&quot; or &quot;waste everyone&#x27;s time&quot; باشه?و اصول دیگه‌ای هم مثل Single Responsibility و Separation of Concerns در کنار ده‌ها اصل مهم دیگه وجود دارند که کم‌کم باهاشون آشنا میشیم و بجای اینکه تئوری‌شون رو بخونیم واقعا اونها رو به کار میگیریم و درک میکنیم که چقدر توی کارمون به عنوان یک برنامه نویس میتونن موثر باشند.خوب یکم زیادی طولانی شد اما پُست بعدی من در مورد انتخاب ابزار مناسب برنامه نویسی (IDE) خواهد بود و لینکش رو بعد از نوشتن پست همین پایین هم اضافه میکنم... فعلا بدرود</description>
                <category>اشکان</category>
                <author>اشکان</author>
                <pubDate>Fri, 03 Apr 2020 12:14:13 +0430</pubDate>
            </item>
            </channel>
</rss>