<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های مجید غفورزاده</title>
        <link>https://virgool.io/feed/@azmanbeman</link>
        <description>وبلاگ شخصی مجید غفورزاده. برنامه نویسی که عاشق گربه هاست :)</description>
        <language>fa</language>
        <pubDate>2026-06-10 14:04:36</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/32155/avatar/jJnrTv.jpeg?height=120&amp;width=120</url>
            <title>مجید غفورزاده</title>
            <link>https://virgool.io/@azmanbeman</link>
        </image>

                    <item>
                <title>جلوگیری از حملات Race Condition در NodeJs</title>
                <link>https://virgool.io/@azmanbeman/avoid-race-condition-bug-in-nodejs-nbn7vktztbag</link>
                <description>جلوگیری از حملات Race Condition به کمک Mutex Lockدانشجو که بودم، برای استفاده از سلف غذا خوری دانشگاه باید همیشه از کارت دانشجویی موقع تحویل غذا استفاده میکردیم. کارت رو به دستگاه نزدیک میکردیم و اگر غذا، از قبل رزرو شده بود با یک چراغ سبز به مسئول سلف نشون میداد که باید به آقای فلانی غذا تحویل بشه. طبق قانون هم، با هر حساب کاربری فقط یک غذا میشد رزرو کرد. علاوه بر روش رایج استفاده از کارت دانشجویی، داخل لابی سلف غذاخوری، دستگاه دیگه ای وجود داشت که به دستگاه فیش فراموشی مشهور بود. این دستگاه برای مواقعی بود که شما فراموش کرده بودین کارت دانشجوییتون رو همراهتون بیارین. با وارد کردن شماره دانشجویی و رمز اکانتتون دستگاه به شما یک فیش کاغذی برای تحویل غذا میداد که جایگزین کارت الکترونیکی محسوب میشد.اما هنوز به نکته جالب ماجرا نرسیدیم :)ماجرا از اونجایی جذاب میشه که یکروز من و دوستم تصمیم گرفتیم این دستگاه رو در برابر یک موضوع امنیتی تست کنیم! قضیه از این قرار بود که وقتی شما دکمه شروع دستگاه رو میزدی مراحل زیر اتفاق میفتاد:۱- یک فرم نمایش داده میشد و از شما، شماره دانشجویی و رمزتون رو درخواست میکرد۲- وقتی شما اطلاعاتتون رو وارد میکردین، دستگاه توی دیتابیس چک میکرد که آیا برای اون روز غذا رزرو کردین یانه و اینکه اگه رزرو کردین آیا قبلا غذاتون رو گرفتین یا نه؟۳- اگر غذا رزرو کرده بودین و غذاتون رو نگرفته بودین شما رو به صفحه آخر هدایت میکرد که با زدن یک دکمه روی صفحه لمسی میتونستین فیشتون رو چاپ کنین و برین غذاتون رو بگیرین.همونطور که گفتم، داخل لابی سلف غذاخوری دو تا از این دستگاه ها دقیقا کنار هم وجود داشت. ما یک ترفندی رو تست کردیم و کاملا هم جواب داد. ترفند ما این شکلی بود:من و دوستم همزمان روبروی دو دستگاه می ایستادیم. هر دومون اطلاعات حساب یکی از ما (مثلا حساب من) رو وارد دستگاه میکردیم. وقتی من اطلاعاتم رو میزدم و سابمیت میکردم وارد صفحه چاپ فیش میشدم و دستگاه فقط منتظر این بود که دکمه چاپ فیش رو بزنم و فیش چاپ بشه (در واقع مرحله چک کردن رو پشت سر گذاشته بودم). در این مرحله دستگاه هنوز کانتر حساب من رو پر نکرده بود و در واقع من هنوز از نظر دستگاه غذام رو نگرفته بودم. در همین حالت رفیق من توی اون یکی دستگاه اطلاعات من رو وارد میکرد و چون هنوز تو دیتابیس غذای من به عنوان دریافت شده ثبت نشده بود اون هم مرحله چک رو رد میکرد و وارد صفحه چاپ فیش میشد. این طوری هر دو ما راحت با یک اکانت دو تا فیش غذا چاپ میکردیم و در واقع با یک حساب دو تا غذا میگرفتیم!اون موقع نمیدونستم که اسم این باگ سیستم چیه و البته زیاد هم جز یکی دو بار که مهمون داشتیم و غذا کم آورده بودیم از این ترفند استفاده نکردیم :)بعد از مدت ها فهمیدم که به این اتفاق (یا حمله) Race Condition گفته میشه.در واقع مشکل اونجا بود که دستگاه اجازه میداد دو نفر همزمان فرایند رو طی کنند در حالیکه هنوز تکلیف یکیشون مشخص نشده!راه حل ساده ش هم در واقع این بود که الگوریتم دستگاه تغییر کنه و تا زمانی که یک یوزر در حال استفاده از دستگاه هست توی شبکه اجازه داده نشه که یک نفر با همون حساب کاربری وارد فرایند بشه، تا زمانیکه تکلیف اولی مشخص بشه.همونطور که گفتم به این فرایند Race Condition گفته میشه و در این پست میخوام راه رفع و جلوگیری از اون رو پیشنهاد بدم. پس با من همراه باشین.و حالا میرسیم به قسمت شیرین راه حل مسئله. فرض کنین کدی که برای چک کردن وضعیت رزرو دانشجو و چاپ در خروجی نوشته شده یه چیزی شبیه به کد پایین باشه:نمونه کد پیشفرض سیستم (دارای باگ Race Condition)همونطور که در کد بالا مشخصه وقتی دو درخواست همزمان برای یک حساب کاربری سمت سیستم بیاد، اتفاقی که میفته اینه که وقتی پردازش اولی هنوز به خط ۲۱ نرسیده و وضعیت غذای کاربر به استفاده شده تغییر نکرده درخواست بعدی میاد و هر دو فرایند چک کردن وضعیت رو با موفقیت طی میکنن. که طبیعتا ما میخوایم جلوی این اتفاق رو بگیریم.استفاده از Mutex Lockبه کمک این روش ما میایم و فرایند مورد نظر رو به ازای آیدی کاربر قفل میکنیم. به این صورت که وقتی یک درخواست با یک حساب کاربری در حال اجراس، اجازه نمیدیم که درخواست همزمان دیگه ای با همون حساب کاربری وارد سیستم بشه و فرایند مشابه رو طی کنه. وقتی کار یوزر اول تموم شد و نتیجه مشخص شد، بعد از اون قفل رو برای نفر بعدی باز میکنیم. به همین سادگی! یه چیزی تو مایه های صف به ازای هر کاربر!توی Node، یکی از مشهورترین پکیج های Mutex پکیج async-mutex هست. برای استفاده از این پکیج میتونین مطابق کد پایین عمل کنین:کد بازنویسی شده با Mutex Lockبرای توضیح کد بالا باید بگم که ما اومدیم یک Map تعریف کردیم که بتونیم به ازای هر کاربر یک قفل جدید بسازیم و داخل اون ذخیره کنیم. به این صورت که کلید میشه آیدی کاربری و مقدارش میشه برابر با قفلی که برای اون کاربر ساختیم.بعد از اون داخل متد getVoucher، اول چک میکنیم که اگر کاربر درخواست دهنده قفل فعال نداره یک قفل جدید براش بسازیم. بنابراین هر کاربری که درخواستش وارد متد getVoucher میشه، بر اساس آیدیش یک قفل براش ایجاد میشه و تا جایی که نتیجه نهایی مشخص نشه و بلاک finally اجرا نشه و قفل release نشه کاربر بعدی اجازه ورود به این فرایند (با همون حساب کاربری) رو نداره.دقت کنین که تو نمونه کد بالا ما تابع release یا همون باز شدن قفل کاربر رو توی بلاک finally اجرا کردیم تا در هر صورت (چه موفقیت آمیز بودن فرایند و چه برخورد با خطا) اجرا بشه و قفل باز بشه تا کاربر بتونه دوباره فرایند رو انجام بده.این باگ در خیلی از سیستم ها وجود داره و میشه با ارسال چند درخواست همزمان به یک سرویس شرط چک کردن اعتبار رو دور زد. و ساده ترین راهش هم استفاده از Mutex Lock هست که در بالا توضیح داده شد. دقت کنید که در مثال بالا ما برای ذخیره کردن Lock ها از مموری استفاده کردیم و باید دقت کنید که در سیستم های بزرگ ممکنه این روش (اگر کنترل شده نباشه) منجر به Memory Leak بشه.امیدوارم که از این مقاله استفاده کرده باشین. اگر در متن مقاله و نمونه کدها اشتباهی دیدین ممنون میشم اطلاع بدین تا اصلاح بشه.</description>
                <category>مجید غفورزاده</category>
                <author>مجید غفورزاده</author>
                <pubDate>Thu, 16 Nov 2023 19:36:41 +0330</pubDate>
            </item>
                    <item>
                <title>آشنایی با Server-Side Rendering و روش پیاده سازی آن</title>
                <link>https://virgool.io/@azmanbeman/%D8%A2%D8%B4%D9%86%D8%A7%DB%8C%DB%8C-%D8%A8%D8%A7-server-side-rendering-%D9%88-%D8%B1%D9%88%D8%B4-%D9%BE%DB%8C%D8%A7%D8%AF%D9%87-%D8%B3%D8%A7%D8%B2%DB%8C-%D8%A2%D9%86-tw98bat1wgdq</link>
                <description>آشنایی با Server-Side Rendering و روش پیاده سازی آنروش Server Side Rendering (یا به اختصار SSR) روشیه که به کمک اون میتونیم فرایند رندر شدن اپلیکیشن فرانت اندی خودمون رو در سمت سرور (به جای مرورگر کاربر) انجام بدیم. از محبوب ترین ابزارها برای پیاده سازی اپلیکیشن های تحت وب میشه به Next.js برای React و نقطه مقابل اون Nuxt برای Vue اشاره کرد. در ادامه به بررسی تخصصی تر سرورساید رندرینگ در فرانت اند میپدازیم و مزایا و معایب اون رو بصورت کامل بیان خواهیم کرد. همچنین روشهایی به شما پیشنهاد میدیم که از طریق اون میتونید بهترین تجربه پیاده سازی یک اپلیکیشن SSR رو داشته باشید.مفهوم Server side rendering چیست؟اگر شما سابقه توسعه اپلیکیشن های فرانت اندی به کمک یکی از کتابخانه ها و فریمورک های محبوب (مثل React، Vue، Angular و ...) رو داشته باشین احتمالا متوجه نحوه کارکرد اونها شدین. این ابزارها برای لود کردن کامپوننت ها و ساختن ساختار صفحات وبسایت از جاوااسکریپت در مرورگر کاربر استفاده میکنند. به این معنی که در ابتدا (و بدون لود شدن جاوااسکریپت) شما یک HTML خالی و فقط با یک المان root به کاربر برمیگردونین و بعد از لود شدن جاوااسکریپت اپلیکیشن شما ساخته میشه و درون اون المنت روت به اصطلاح mount (جایگذاری) میشه.به عنوان مثال اگر شما یک پروژه ری اکتی که با Create react app ساختین رو اجرا بکنین و با زدن Ctrl + U سورسش رو نگاه کنین. با چیزی شبیه به کد زیر روبرو خواهید شد:نمونه سورس کد نوشته شده با Create React Appاگر کنجکاو باشین احتمالا این سوال براتون پیش اومده که پس کدهای من کجان؟ کامپوننت ها و همه اون المان هایی که بصورت کدهای jsx نوشتم کجا ذخیره شدن؟؟جوابتون رو بالاتر دادم :)این فایل html در ابتدا برای کاربر لود میشه و المان ها و کامپوننت ها و صفحاتی که ساختین همگی در فایل  جاوااسکریپتی که موقع بیلد گرفتن به شما خروجی داده میشه قرار داده شده. (توی این کد همون فایل bundle.js). معنی این حرف اینه که کل کد شما توی جاوااسکریپت هست و اگر شما جاوااسکریپت مرورگر خودتون رو غیر فعال کنین، سایت شما هیچ چیزی نخواهد بود جز یک صفحه سفید خالی!در عین حال که این موضوع خیلی جذاب به نظر میرسه یه جاهایی میتونه دردسرهایی هم برای ما ایجاد کنه که در ادامه برای شما توضیح خواهم داد.حالا بیاین و برگردیم سراغ تعریف SSR، همونطور که در بالا گفتیم، اگر شما بصورت عادی از React استفاده کنین (مثلا وقتی پروژه تون رو با Create React App میسازین) کل محتوای سایت شما توسط JavaScript در صفحه لود میشه و واقعا در HTML وجود ندارن! سرورساید رندرینگ کاری که انجام میده اینه: &quot;کد جاوااسکریپت شما رو به جای مروگر کاربر، داخل سرور به کمک NodeJs اجرا میکنه و html ساخته شده رو به کاربر برمیگردونه.&quot;در این حالت مرورگر کاربر حتی اگر جاوااسکریپت رو اجرا نکنه باز هم سایت شما رو بصورت کامل میبینه و در کارکردش خللی ایجاد نمیشه.به عنوان مثال اگر شما همون پروژه ری اکتی قبلی رو در NextJs اجرا بکنید سورس کد شما چنین چیزی خواهد بود:سورس کد پیاده سازی شده با SSRدر این روش بر خلاف روش قبلی، کد html بصورت کامل و رندر شده به کاربر ارسال میشه و کامپوننت ها و کدهای شما واقعا در سورس html وجود داره (بدون نیاز به اجرای جاوااسکریپت و انجام فرایند رندرینگ در مرورگر کاربر). در واقع روی سروری که کد شما رو اجرا کرده فرایند رندرکردن کامپوننت ها انجام شده و html بصورت رندر شده و آماده به کاربر ارسال شده.چرا باید از SSR استفاده کنیم؟جواب خلاصه و مفید برای این سوال اینه :&quot;فقط برای SEO و بهتر دیده شدن سایت توسط موتور های جستجوگر!&quot;در واقع موتورهای جستجوگر بر اساس تجربه و یک سری تحقیقات اثبات شده در اجرا کردن جاوااسکریپت مشکل اساسی دارن. به طور کلی فرایند بازدید از یک سایت وقتی توسط ربات های گوگل و ... انجام میشه با بازدید یک کاربر معمولی کاملا متفاوته. اونها فقط سورس اصلی سایت رو میخونن و به سادگی نمیتونن کدهای جاوااسکریپت رو اجرا کنن و بفهمن.بنابراین اگر سایت شما به روش SSR پیاده سازی نشده باشه (از اونجاییکه تمامی محتوای وبسایت مثل متن ها، تصاویر، عناوین و... توسط جاوااسکریپت در صفحه لود میشن و خزنده های گوگل نمیتونن خیلی خوب اونها رو بفهمن) شما احتمالا امتیاز خوبی از گوگل نخواهید گرفت و قدرت رقابت شما در گوگل به شدت افت پیدا خواهد کرد. اینجاست که توصیه میشه اگر در حال توسعه وبسایتی هستید که قرار هست در گوگل ایندکس بشه و سئو برای شما اهمیت داره حتما و حتما از روش پیاده سازی SSR اقدام کنید.این مشکل در خوندن سورس های جاوااسکریپت توسط ربات موتورهای جستجو دو دلیل عمده داره:۱- خوندن، اجرا کردن و فهمیدن جاوااسکریپت و ساختن ساختار صفحه بر اساس اون برای ربات های گوگل و ... سخت هست و به این راحتیا از پسش بر نمیان.۲- اجرا کردن درخواست های Async مثل دیتاهایی که شما از API میگیرین و نمایش میدین برای موتورهای جستجو زمان بر هست و ربات های گوگل فرصت کافی برای صبر کردن و دریافت نتیجه رو ندارن زیرا در این صورت با وجود چند هزار میلیارد صفحه مختلف در سطح اینترنت هزینه های گوگل سر به فلک میکشه! و از نظر اقتصادی براش توجیه نداره.بنابراین از نظر من حالا حالا ها منتظر رندرکردن جاوااسکریپت توسط گوگل نباشین و سعی کنید مشکل سئو وبسایت خودتون رو با پیاده سازی به روش SSR مدیریت کنید. آیا همیشه باید از SSR استفاده کنیم؟خیر! به هیچ وجه!اگر شما در حال پیاده سازی یک داشبورد، پنل ادمین داخلی یا در کل پروژه هایی هستین که اصلا قرار نیست سئو بشن یا توسط گوگل دیده بشن الکی خودتون رو درگیر پیچیدگی های SSR نکنین! ری اکت کتابخونه بسیار جذابی هست و شما به سادگی میتونین پروژه های این شکلی رو بدون دغدغه های اضافی با خود React پیاده سازی کنین. در واقع سری که درد نمیکنه رو دستمال نمیبندن!پیاده سازی SSR حتی وقتی به کمک فریمورک هایی مثل NEXT انجام بشه، پیچیدگی های خاص خودش رو داره. از مدیریت کردن ریکوئست های HTTP گرفته تا تنظیم زیرساخت مناسب و سرور و کلی موارد دیگه.از نظر من استفاده از Server Side Rendering فقط در پروژه هایی توجیه منطقی داره که SEO اهمیت داشته باشه و لاغیر!بهترین روش ها برای پیاده سازی SSRاگر شما با React آشنایی خوبی دارین احتمالا برای استفاده از Next مشکل خیلی زیادی نخواهید داشت. حدود 90 درصد مفاهیمی که در Next استفاده میشه شبیه ری اکت هست و نیاز به یادگیری چیز زیادی ندارید. ساختار کامپوننت ها، هوک ها، مدیریت استیت و  استایل و ... به همه روشهایی که در ری اکت انجام میدادین در نکست هم قابل انجام هست. مهمترین تفاوتی که نکست نسبت به ری اکت داره در بحث ارسال درخواست های HTTP در سمت سرور هست که باید از توابع خاص Next استفاده بشه. بقیه موارد اکثرا شبیه ری اکت هست و یادگیری خاصی نیاز نداره. تفاوت دیگه، تفاوتی هست که سیستم روتینگ نکست نسبت به React Router و ... داره ساختار File base اون هست که در داکیومنت خود نکست بصورت کامل توضیح داده شده. سعی میکنم در مقالات بعدی بصورت عمیق تر و دقیق تر این موارد رو توضیح بدم.اما اگر فریمورک محبوب شما Vue هست و ترجیح میدین SSR رو هم با همون شکل و شمایل ویو ادامه بدین میتونین از فریمورک بسیار قدرتمند Nuxt استفاده کنین. استایل کدنویسیش کاملا شبیه به vue هست با یکسری قابلیت های اضافه تر. از نظر ساختاری و کاری که انجام میدن Next و Nuxt شباهت های بسیار زیادی دارن و هر دو قدرتمند و جذاب هستند.این فریمورک ها به شما کمک میکنن که بدون دردسر و کار اضافی بتونین وبسایت SSR خودتون رو پیاده کنین. اگر دنبال دردسر بیشتری میگردین میتونین خودتون SSR رو پیاده سازی کنین که بعدا در یک مقاله جدا به شما راهش رو توضیح خواهم داد :)امیدوارم این مقاله برای شما مفید بوده باشه. در مقالات بعدی سعی میکنم بصورت مفصل تر و دقیق تر به بررسی روش SSR و قابلیت های اون بپردازم.</description>
                <category>مجید غفورزاده</category>
                <author>مجید غفورزاده</author>
                <pubDate>Tue, 14 Feb 2023 18:32:42 +0330</pubDate>
            </item>
                    <item>
                <title>آیا به کارفرما سفته بدهیم؟ شرایط صدور سفته هنگام عقد قرارداد</title>
                <link>https://virgool.io/@azmanbeman/%D8%A2%DB%8C%D8%A7-%D8%A8%D9%87-%DA%A9%D8%A7%D8%B1%D9%81%D8%B1%D9%85%D8%A7-%D8%B3%D9%81%D8%AA%D9%87-%D8%A8%D8%AF%D9%87%DB%8C%D9%85-t4kc4xocm87l</link>
                <description>آیا به کارفرما سفته بدهیم؟حتما برای شما هم پیش اومده که موقع استخدام در یک شرکت از شما سفته ضمانت خواسته باشن. البته این درخواست فقط از طرف بعضی شرکت ها مطرح میشه و خیلی از شرکت ها چنین چیزی رو از شما نمی‌خوان. توی این مطلب میخوام قوانین حقوقی کاربردی در مورد سفته رو  بگم و اینکه اگر قرار شد به کارفرما سفته بدیم باید چه نکاتی رو رعایت کنیم که بعدا دچار دردسر نشیم.سفته چیه و از نظر حقوقی چقدر لازم الاجراست؟سفته به تکه کاغذی گفته میشه که به عنوان ضمانت پرداخت مالی بین دو طرف رد و بدل میشه. فرض کنید جناب X یک سفته به مبلغ 10 میلیون تومن به جناب Y میده. در این صورت هرگاه شخص Y سفته رو به مراجع قانونی ارائه بده شخص X موظفه که معادل مبلغ اون سفته به شخص Y پرداخت کنه. یعنی تقریبا میشه اینجوری گفت که سفته = پول. بنابراین بر خلاف باور های عمومی که گفته میشه سفته یه چیز فرمالیته س و ارزش قانونی نداره، باید بدونید خیلی هم ارزش داره و به هرکسی و در هرشرایطی نباید سفته داد. بنابراین اگر شرکتی از شما سفته خواست و شما بدون رعایت کردن نکات امنیتی سفته دادید، بعدا میتونه از طریق یکسری روش ها برای شما دردسر ایجاد کنه. البته با رعایت یکسری نکات میتونید ریسک سفته ضمانت رو تقریبا به صفر برسونید که در ادامه به اونها اشاره خواهم کرد.نکاتی که در هنگام دادن سفته ضمانت باید رعایت کنید1- مبلغ سفته باید معقول باشهمعمولا شرکت ها سفته رو برای ضمانت از شما دریافت می‌کنن و دلیلشون هم این هست که اگر روزی شما اطلاعات مخفی شرکت رو فاش کردید و یا اینکه دست به خرابکاری عمدی زدید بتونن بوسیله اون سفته با شما برخورد قانونی بکنن و حقشون رو از شما بگیرن. بنابراین در مبلغ سفته دقت کنید که در حدی باشه که فقط برای ضمانت کار شما کافی باشه. به عنوان مثال سفته بالای صد میلیون تومن برای ضمانت کاملا نامعقوله و سعی کنید از دادن سفته با مبالغ بالاتر از عرف خودداری کنید. 2- مبلغ را بصورت دقیق قید کنیدسعی کنید مبلغ را هم بصورت عددی و هم به حروف در سفته بنویسید به گونه ای که با تغییرات کوچک نشه مبلغ سفته رو تغییر داد. البته الان بیشتر سفته ها دارای قیمت چاپ شده و مشخص هستند و نمیشه مبلغ اونها رو تغییر داد. 3- حواله کرد را کامل کنیدحتما بنویسید که این سفته در وجه شرکت فلان و یا شخص فلان صادر شده است و سعی کنید این قسمت رو خالی نگذارین. قید حواله کرد در سفته از واگذاری اون به اشخاص دیگر و سو استفاده های احتمالی جلوگیری می کنه. 4- دلیل صدور سفته را حتما قید کنیداگر سفته رو برای ضمانت به کارفرما ارائه می دین حتما روی اون و یا پشتش این جمله رو بنویسین:  «این سفته صرفا  جهت تضمین حسن انجام کار صادر شده است» . این قضیه باعث جلوگیری سو استفاده کارفرما از سفته میشه و معنیش اینه که این سفته فقط در حالتی قابلیت نقد شدن رو داره که شما به شرکت خیانت کردید و در واقع حسن انجام کار رو زیر سوال بردید. این رو هم بگم که کارفرمای شما نمیتونه به بهونه دیرکرد در پروژه ها یا بد تحویل دادن کارها از شما بابت عدم حسن انجام کار شکایت بکنه و اثباتش قطعا براش خیلی دشواره. فقط در حالتی سفته شما قابلیت نقد شدن رو داره که شما از اطلاعات و منابع شرکت سو استفاده عمدی کرده باشین. پس بیخودی نگران نباشین.5- شماره سفته همراه با مبلغ آن باید در قرارداد قید شودفراموش نکنین که در قراردادتون قید کنید که سفته به شماره فلان به مبلغ فلان، جهت تضمین حسن انجام کار به کارفرمای مذکور ارائه شده است و پس از پایان قرارداد باید به شما برگردونده بشه. 6- از سفته هایتان کپی تهیه کنید و در جای امنی نگه داریدداشتن یک کپی از سفته ای که به شرکت دادین راه های سو استفاده رو تا حد قابل قبولی مسدود می‌کند. 7- یک نسخه از قرارداد را از کارفرما تحویل بگیریدپس از امضای قرارداد از کارفرما بخواین یک نسخه از قرارداد رو بصورت کامل همراه با سربرگ و مهر شرکت به شما تحویل بده. امیدوارم که این توضیحات به اندازه کافی بتونه مشکل شما رو حل بکنه و با رعایت کردن این اصول ساده بتونید با خیال راحت قرار داد ببندید :)</description>
                <category>مجید غفورزاده</category>
                <author>مجید غفورزاده</author>
                <pubDate>Sun, 14 Mar 2021 23:08:55 +0330</pubDate>
            </item>
                    <item>
                <title>چرا می گوییم Vue از React کامل تر است؟</title>
                <link>https://virgool.io/@azmanbeman/%DA%86%D8%B1%D8%A7-%D9%85%DB%8C-%DA%AF%D9%88%DB%8C%DB%8C%D9%85-vue-%D8%A7%D8%B2-react-%DA%A9%D8%A7%D9%85%D9%84-%D8%AA%D8%B1-%D8%A7%D8%B3%D8%AA-ls6h2kqkxowf</link>
                <description>چرا می گوییم Vue از React کامل تر است؟انتخاب استک فرانت اند یکی از چالش های اصلی تیم های توسعه نرم افزار است. شاید چند سال پیش برای توسعه فرانت اند یک وبسایت انتخاب ها محدودتر بودند اما این روزها با وجود تعداد زیاد ابزار، فریمورک و کتابخانه مختلف، گزینه های متعددی پیش روی تیم های نرم افزاری قرار دارد. از محبوب ترین این ابزار ها میتوان به کتابخانه React و فریمورک Vue اشاره کرد. در این مقاله قصد دارم به چند مورد از قابلیت هایی اشاره کنم که بصورت پیشفرض در Vue گنجانده شده اند اما در React وجود ندارند یا برای دسترسی به آنها نیاز به کتابخانه های خارجی خواهید داشت.1- سیستم مدیریت مسیرها (روتر)یکی از مهمترین قابلیت هایی که در اپلیکیشن های تک صفحه ای (Single Page Applications) به وفور از آن استفاده میشود سیستم های روتر هستند. این سیستم ها به شما کمک میکنند بر اساس مسیر URL ، محتوای مناسب را برای کاربر ساخته و به او نمایش دهید. در Vue این قابلیت بصورت پیشفرض در فریمورک گنجانده شده است و زمانی که شما پروژه تان ر از طریق خط فرمان محبوب Vue CLI میسازید، این قابلیت بصورت کانفیگ شده و کامل در اختیار شما قرار میگیرد. این مسئله باعث میشود که شما بدون اینکه درگیر کانفیگ های پیچیده و غیر ضروری شوید مستقیما به سراغ توسعه اپلیکیشن بروید. ساختار روتر اپلیکیشن های ویو بسیار ساده و قابل فهم است ، کافی است تنها با ساختن یک آبجکت تعیین کنید که دوست دارید در هر URL چه کامپوننتی به کاربر نمایش داده شود.نمونه ای از فایل روتر در Vueروتر Vue به همین سادگی کار میکند! در حالیکه می دانیم React بصورت پیشفرض قابلیت مدیریت روت ها را ندارد و در اپلیکیشن های تک صفحه ای ری اکتی شما باید از کتابخانه های جانبی مانند React Router و ... استفاده کنید. بعدا در یک مقاله بصورت مفصّل تر به مقایسه React Router و Vue Router خواهم پرداخت.2- سیستم State Managementوقتی اپلیکیشن شما به تدریج بزرگتر میشود و آن را به کامپوننت های کوچکتر تقسیم میکنید، نیاز به یک سیستم مدیریت State مرکزی برای تبادل داده بین کامپوننت ها در ساختار درختی اپلیکیشن به شدت احساس می شود. در Vue این قابلیت بصورت پیشفرض توسط Vuex پیاده سازی شده است. به کمک Vuex شما یک Store مرکزی دارید و میتوانید داده های خود را از طریق آن به سادگی مدیریت کنید.قابلیت مدیریت داده های سراسری در React از طریق کتابخانه های جانبی که معروفترین آنها Redux و Mobx هستند انجام میشود و این قابلیت بصورت پیشفرض در React گنجانده نشده است. البته ری اکت با معرفی Context سعی کرده این مسئله را پوشش دهد اما اگر تجربه توسعه اپلیکیشن های بزرگ و پیچیده ری اکتی را داشته باشید احتمالا میدانید که Context نمیتواند بصورت کامل پاسخگوی نیاز های شما باشد و شما دیر یا زود مجبور به استفاده از کتابخانه های جانبی برای State Management خواهید شد.3- مدیریت کلس های چند گانه و شرطیدر فرایند توسعه اپلیکیشن های تحت وب class های css یکی از رایج ترین قسمت های استایل دهی به اجزای صفحه هستند. گاهی شما نیاز دارید چندین کلس مختلف را به یک المان اضافه کنید و برای بعضی از کلس ها شرط قرار دهید. به مثال زیر توجه کنید:فرض کنید میخواهید بر اساس یک سری شرایط خاص کلس active را بر روی یک المان قرار دهید (مثل زمانیکه میخواهید یک منو را با کلس active از سایر منو ها تمایز دهید). در ری اکت این کار به شکل زیر انجام میشود:مثال class های شرطی در Reactتصور کنید اگر بخواهید برای یک المان چندین شرط مختلف و چندین class متفاوت قرار دهید. بطور قطع کد شما تبدیل به یک کابوس وحشتناک خواهد شد!در Vue اما قضیه اندکی متفاوت است. شما میتوانید برای قرار دادن class ها برای المان ها در Vue ، به جای رشته (String) از آرایه ها و آبجکت ها هم استفاده کنید. کامپایلر Vue بصورت اتوماتیک class های شما که درون آرایه قرار دارند را قبل از render ترکیب کرده و بر اساس شروط تعیین شده توسط شما آنها را میسازد.نمونه ای از class های شرطی در Vueنمونه ای از class های چند گانه در Vueاگر بخواهید چنین قابلیتی را در اپلیکیشن ری اکت خود داشته باشد میتوانید از کتابخانه های معروفی مانند classnames استفاده کنید.4- قابلیت Validation برای Propsدر اپلیکیشن های تحت وب در مقیاس بزرگ به احتمال زیاد کامپوننت هایی با ویژگی های داینامیک استفاده خواهند شد. Props یک قابلیت بسیار کاربردی است که میتوان از آن برای ارسال داده به درون کامپوننت های فرزند استفاده کرد. اما هر از گاهی پیش می آید که داده های ارسال شده، آن داده های استاندارد مورد نیاز نیستند و اپلیکیشن را دچار خطاهای عجیب و غریب خواهند کرد که معمولا کشف آنها هم وقت گیر و پر دردسر است. یکی از راه های جلوگیری از این گونه مشکلات Validate کردن Props ارسال شده به کامپوننت است. برای درک کردن بهتر این موضوع بگذارید یک مثال کاربردی بزنم:فرض کنید کامپوننتی دارید که عددی را از طریق prop به آن میفرستید و درون کامپوننت بر اساس عدد ارسال شده محاسبات ریاضی انجام داده و نتایج را نمایش می دهید. در یکی از مراحل ممکن است شما به اشتباه یک رشته یا String را به کامپوننت ارسال کنید که طبیعتا موجب ایجاد خطا خواهد شد. بنابراین بهتر است یک ابزار برای کنترل Props داشته باشید تا در صورت ارسال data type اشتباه به کامپوننت به شما اخطار دهد. در React چنین قابلیتی بصورت پیشفرض وجود ندارد و به همین جهت شما مجبور هستید از کتابخانه های خارجی مانند کتابخانه Proptypes استفاده کنید.این در حالی است که قابلیت گفته شده درون Vue گنجانده شده است و شما به سادگی میتوانید درون کامپوننت هایتان نوع دیتای مجاز ورودی را تعیین کنید تا از ارسال دیتاهای اشتباه و ناخواسته به درون کامپوننت جلوگیری شود و احتمال خطا کاهش یابد. این کار به سادگی نمونه کد پایین در Vue انجام میشود:نمونه کد Valid کردن Props در Vue5- قابلیت keep-aliveیکی از قابلیت های جذاب و منحصر بفرد دیگری که در Vue وجود دارد تحت عنوان keep-alive شناخته میشود.  از طریق این قابلیت شما میتوانید کامپوننت های داینامیک را قبل از destroy شدن (با حالتی شبیه کش ذخیره کنید) تا کاربر در صورت بازگشت به حالت قبلی بدون رندر شدن مجدد بتواند آن را ببیند. این مسئله میتواند تاثیر بسزایی در افزایش پرفورمنس اپلیکیشن شما داشته باشد. در React چنین قابلیتی وجود نداشته و برای انجام دادن عملیات مشابه شما باید از قابلیت های css مانند display و ... استفاده کنید.نمونه استفاده از حالت keep-alive در vueبرای آشنایی بشتر با قابلیت keep-alive در vue میتوانید این مطلب را بخوانید.این خلاصه ای بود از چند قابلیت مهم و کاربردی Vue که در React وجود ندارند. امیدوارم که کاربردی بوده باشه :)</description>
                <category>مجید غفورزاده</category>
                <author>مجید غفورزاده</author>
                <pubDate>Mon, 08 Feb 2021 16:23:57 +0330</pubDate>
            </item>
                    <item>
                <title>انتخاب React یا Vue ؟ یکبار برای همیشه!</title>
                <link>https://virgool.io/VueFramework/%D8%A7%D9%86%D8%AA%D8%AE%D8%A7%D8%A8-react-%DB%8C%D8%A7-vue-%DB%8C%DA%A9%D8%A8%D8%A7%D8%B1-%D8%A8%D8%B1%D8%A7%DB%8C-%D9%87%D9%85%DB%8C%D8%B4%D9%87-fnjyoqn3zvgn</link>
                <description>مقایسه فوق تخصصی Vue و Reactبرنامه نویس ها از نظر من جزء مشکل پسندترین و کمال گراترین دسته افراد روی زمین هستند. تا چشم به هم میگذاری یک فریمورک یا یک زبان برنامه نویسی جدید توسط آنها پا به عرصه ظهور میگذارد، رقابت ایجاد میکند، دعوا میشود و سرانجام یکی از آنها ترند میشود.خیلی وقت ها از خودم می پرسم :  &quot;آیا این همه تنوع نرم افزاری واقع لازم بوده؟&quot;شما فکرش را بکن اگر Taylor Otwell قبل از اینکه بنشیند و Laravel را بنویسد، کمی داکیومنت Ruby On Rails را بالا و پایین میکرد (که میدانم کرده!) و یکبار از خودش میپرسید : &quot;من قرار است چه چیزی به این اضافه کنم تا بهتر بشود؟ آیا لازم است چنین پروژه ای را از صفر و با یک زبان برنامه نویسی دیگر پیاده کنم؟&quot;بعد به خودم میگویم : &quot;صنعت نرم افزار را همین تنوع هایش زیبا کرده است.&quot;این مقاله یک مقایسه سطحی و کاملا ابتداییه. برای مقایسه دقیق تر این دو کتابخونه میتونین این مقاله رو بخونین.https://academy.webino.co/react-vs-vue-comparisonجنونی به نام فرانت اند!شاید اگر 5 سال پیش کسی خود را Frontend Developer معرفی میکرد، به او می خندیدیم. مگر Frontend هم دولوپمنت میخواهد؟ یک کد Html و Css است دیگر (میدانیم که HTML هم جزء گنگِ خفنِ زبان هایِ برنامه نویسی نیست!). یک فرانت اند کار (این لفظ عمدا برای توهین و تحقیر این قشر به کار می رود!) خیلی هنر کند چهار خط HTML مینویسد CSS هم که بوت استرپ هندل کرده!بماند که از همان اول هم به همین سادگی نبود ولی الان دیگر کلا قضیه فرق کرده است.میدانیم که JavaScript زبان بد قلقی است و کار کردن با آن کار هر کسی نیست. از طرفی روش های جدید توسعه فرانت اند به گونه ای هستند که سرت را بالا بیاوری می بینی وسط انبوهی از کدهای پیچیده و زبان نفهم گیر افتاده ای! پس میتوان فرانت اند کارها را هم برنامه نویس خواند (اگر دات نت کار های محترم اجازه می دهند!)این روز ها فرانت اند داغ تر از همیشه است و توسعه دهندگان فرانت اند را روی هوا می قاپند! بیشترین آگهی های استخدام سایت های کاریابی را آگهی های استخدام فرانت اند کارها از آن خود کرده اند.کدام یک بهترند؟ مقایسه React و Vueهمه ی اینها به کنار بین خود توسعه دهندگان فرانت اند چند وقتی است دعوای کی بهتر است سر گرفته!Angular کارها (که من تا به امروز توفیق دیدن حتی یک نفرشان را نداشته ام از نزدیک) بی سر و صدا کارشان را میکنند و خیلی کاری با این نزاع ها ندارند. دعوای اصلی بین React (فریمورکی ساخته شده با عشق توسط فیسبوک) و Vue ساخت چین (امّا بر آمده از Creative Lab گوگل) بالا گرفته است. یکی استار های گیت هاب را به رخ دیگری میکشد و دیگری میگوید توئیتر را با فریمورک ما زده اند. ولی واقعا کدامیک بهترند؟ بلخره یک نفر باید بنشیند کاری بکند و تصمیم بگیرد که از این به بعد با کدام کد بزنیم! اینجا من در این مقاله نه چندان با ارزش (!) ، قصد دارم یک مقایسه سردستی انجام بدهم با چند کد ساده. انتخاب اینکه کدام بهتر است با شما.قبل از شروع این را بگویم که :من قصد ندارم بگویم کدامیک بهترند و فقط یک کد را با هر دو ابزار خواهم نوشت. مقایسه و نتیجه گیری با شما. پس اگر طرفدار دو آتشه هر کدام از این دو فریمورک هستید لطفا کامنت ها را نجوید :)ضمنا حرفهایم در مورد لاراول هم یک شوخی برای باز کردن سر صحبت بود ;)1- مقایسه Syntax در حالت List Rendering :فرض کنید من لیستی از چند میوه دارم که میخواهم آنها را در صفحه ام چاپ کنم. یک کامپوننت مجزا برای لیست میوه هایم میسازم و درونش لیست مورد نظرم را رندر میکنم.در Vue این کامپوننت به این شکل در می آید:رندر کردن یک لیست در VueJsحال آنکه در React میتوان این شکلی این کار را انجام داد:رندر کردن یک لیست در React2- مقایسه Syntax در Event ها :فرض کنید بخواهیم برای یک دکمه یک Event تعریف کن، که با کلیک بر روی آن یک Alert به کاربر نمایش داده شود.برای انجام چنین کاری در Vue به این صورت عمل میکنیم :فرایند Event Handling در Vueهمین کار را در React به شکل پایین انجام میدهیم :فرایند Event Handling در React3- مقایسه Syntax کامپوننت ها و Propsفرض کنید بخواهیم یک کامپوننت را درون اپلیکیشن خود لود کنیم و یک ویژگی را به داخل آن پاس بدهیم.در Vue این کار به این شکل انجام می شود :ساختار component والد در Vueساختار component فرزند در Vueدر React این کار بدین شکل خواهد بود:ساختار component والد در Reactساختار component فرزند در Reactاین یک مقایسه کلی بود از این دو فریمورک محبوب فرانت اند.همه ی اینها به کنار، برای انتخاب، مهمترین فاکتور این است :با کدامیک حال دلتان بهتر است؟ممکن است  همه دنیا طرفدار بنز و بوگاتی و مازراتی باشند، اما من پیکان جوانان گوجه ای مدل 57 ام را به دنیا نمی دهم :)در آخر میخواهم یک فکت جالب برایتان رو کنم :» آیا میدانستید زبان جاواسکریپت همان زبان جاواست که کوچک شده است برای وب؟                                                                                                                                       -- استاد شنبلیلهسعی میکنم در آینده، بصورت مفصل تر به مقایسه های این شکلی بپردازم.تا درودی دیگر بدرود ... </description>
                <category>مجید غفورزاده</category>
                <author>مجید غفورزاده</author>
                <pubDate>Wed, 19 Aug 2020 01:54:00 +0430</pubDate>
            </item>
                    <item>
                <title>معمای قهوه من!</title>
                <link>https://virgool.io/@azmanbeman/%D9%85%D8%B9%D9%85%D8%A7%DB%8C-%D9%82%D9%87%D9%88%D9%87-%D9%85%D9%86-ygkd0bu99nw0</link>
                <description>معمای قهوه من!امروز داشتم برای خودم قهوه درست میکردم که یک سوالی در ذهنم جرقه زد.سوالی که تا همین الان هم براش جواب منطقی و کاملی به ذهنم نرسیده!برای همین تصمیم گرفتم توی ویرگول بنویسمش و از شما کمک بخوام.و اما شرح معمای قهوه من :یه فنجون متوسط برداشتم و مقداری پودر قهوه آماده درونش ریختم.بعد از اون تا نصفه فنجون رو از آب جوش پر کردم.10 عدد قند انداختم توی فنجون و هم زدم تا شیرین بشه.یکم ازش خوردم تا ببینم شیرینی قهوه به حد مطلوبم رسیده یا نه.نه ! شیرینیش به اندازه کافی نبود و تلخی قهوه همچنان توی ذوقم میزد.تصمیم گرفتم به جای اضافه کردن قند اضافه تر ، قهوه رو رقیق تر کنم.برای همین یک مقدار دیگه آب جوش به فنجون اضافه کردم.سوالم اینه که آیا کار درستی کردم و یا اینکه یک اشتباه منطقی رو مرتکب شدم؟بذارید به معما از دو منظر مختلف نگاه کنیم :منظر اول :  با اضافه کردن آب بیشتر به فنجون قهوه ، در واقع ترکیب قهوه رقیق تر شده و در نتیجه تلخیش کمتر شده. بنابراین تاثیر شیرینی قند بیشتر به نظر میرسه و قهوه شیرین تر میشه. پس کار درستی کردم!منظر دوم :  میدونیم به هر محلولی اگر آب اضافه کنیم رقیق تر میشه و مزه ش کمتر. بنابراین با اضافه کردن آب بیشتر به فنجون قهوه ، تاثیر شیرینی شکر رو کمتر کردیم. بنابراین قهوه تلخ تر خواهد شد! پس کار من کاملا اشتباه بوده!اگه بخوایم با فرمول ماجرا رو شرح بدیم این شکلی میشه :(قهوه + آب بیشتر) + شکر  =&gt; تلخی کمتر =&gt; تاثیر شیرینی بیشتر قند =&gt; شیرین تر شدن فنجون(قهوه + شکر) + آب بیشتر  =&gt; رقیق شدن محلول قهوه و شکر =&gt; کمتر شدن شیرینی فنجونحالا شما به من بگید : اضافه کردن آب جوش به قهوه کم شیرین با هدف شیرین تر شدنش کار درستیه یا نه؟</description>
                <category>مجید غفورزاده</category>
                <author>مجید غفورزاده</author>
                <pubDate>Mon, 23 Dec 2019 14:26:52 +0330</pubDate>
            </item>
                    <item>
                <title>تجربه یک برنامه نویس فرانت اند از مصاحبه کافه بازار</title>
                <link>https://virgool.io/@azmanbeman/%D8%AA%D8%AC%D8%B1%D8%A8%D9%87-%DB%8C%DA%A9-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3-%D9%81%D8%B1%D8%A7%D9%86%D8%AA-%D8%A7%D9%86%D8%AF-%D8%A7%D8%B2-%D9%85%D8%B5%D8%A7%D8%AD%D8%A8%D9%87-%DA%A9%D8%A7%D9%81%D9%87-%D8%A8%D8%A7%D8%B2%D8%A7%D8%B1-gdbucrpzxs0n</link>
                <description>تجربه یک برنامه نویس فرانت اند از مصاحبه کافه بازارهفته پیش بود که خیلی اتفاقی آگهی استخدام برنامه نویس کافه بازار رو توی یکی از سایت های کاریابی دیدم. هر چند شاغل بودم و محل کارم رو فوق العاده دوست داشتم و ازش راضی بودم اما حس کردم شرکت توی مصاحبه کافه بازار میتونه محک خوبی برای شناخت خودم و سطح دانشم باشه. همچنین حس میکنم آدم با شرکت توی مصاحبه های شغلی مختلف میتونه طرز صحیح برخورد رو یاد بگیره و قطعا بعدا توی مصاحبه های بعدیش عملکرد بهتری داشته باشه.از طرف دیگه من همیشه به عنوان یک برنامه نویس ، کافه بازار رو تحسین کردم. همیشه کارهاشون رو زیر نظر داشتم و به نظرم اونها یکی از اصولی ترین و حرفه ای ترین تیم های برنامه نویسی در ایران رو دارن که هر برنامه نویسی آرزوی کار کردن توی چنین محیطی رو داره.خلاصه که یک رزومه دم دستی آماده کردم و خیلی مختصر و مفید توانایی هام رو توش نوشتم و براشون فرستادم. حدود 3 یا 4  روز بعد نزدیک های ظهر بود که باهام تماس گرفتند و گفتند دوشنبه هفته آینده باهام تماس میگیرند برای انجام مرحله اول مصاحبه بصورت تلفنی. ساعت 5 و نیم عصر رو برای زمان مصاحبه تعیین کرده بودند و دعوت نامه ش رو توی جیمیل برام ارسال کردند.روز موعود فرا رسید و من بعد از اتمام کارم سریع خودم رو به خونه رسوندم تا سر ساعت مشخص شده بتونم با آمادگی کامل باهاشون مصاحبه کنم.سر ساعت باهام تماس گرفتن و اولین مصاحبه تلفنی من با کافه بازار شروع شد. (از آن تایم بودن و خوش قولیشون خیلی خیلی خوشم اومد :) )مصاحبه کننده شخصی جوون و خوش برخورد به نظر میرسید و بعد از احوالپرسی بی مقدمه شروع کرد به پرسیدن سوالاتش . من اینجا لیست سوالاتی که ازم پرسیده شد رو بصورت دقیق میارم تا کساییکه مثل من برنامه نویس فرانت اند هستند و تمایل به شرکت توی مصاحبه شرکت های مختلف رو دارند با سبک سوالات آشنا بشند.1- در مورد کارهایی که تاحالا تو حوزه فرانت اند کردی بگو . آخرین کارت رو توضیح بده. توی شرکت فعلی که کار میکنی کدوم بخش ها رو تو انجام دادی؟ نحوه کار گروهیتون چجوری هست و ... ؟2- انواع Data Type ها رو در جاوااسکریپت نام ببر.3- به نظرت این Data Type ها دارای دسته بندی خاصی هستند؟ Primitives ها کدوما هستند و فرقشون چیه؟4- میتونی Arrow Function ها رو توی جاوااسکریپت توضیح بدی؟ تفاوتشون با regular functions چیه؟5- میتونی بگی this به چه چیزی اشاره داره ؟ توی فانکشن های معمولی و Arrow Function ها فرقش چیه؟6- تفاوت var ، let و const رو توضیح بده.7- میتونی بگی متد push در آرایه ها چه کاربردی داره؟8- اگر ما یک آرایه رو با const تعریف کرده باشیم و بعد از طریق push بهش عضو اضافه کنیم چه اتفاقی میفته؟9- میتونی توی css انواع پوزیشن ها رو نام ببری و تفاوتشون رو توضیح بدی؟ بعد از اونجایی که توی رزومه تجربه کاری با react و vuejs رو ذکر کرده بودم (تخصص اصلی خودم vue هست) سوالات تخصصی فریمورک شروع شد.9- میتونی Lifecycle رو در vue نام ببری و توضیح بدی؟10- کار متد computed چی هست ؟ در موردش توضیح بده.11- اگر بخوایم از طریق یک کامپوننت والد ، یک کامپوننت فرزند رو دیتاش رو آپدیت کنم چیکار میکنیم؟ و بلعکس؟12- برای ریکوئست هات از چه تکنولوژی هایی استفاده میکنی؟13- میدونی مزیت استفاده از Axios چی هست و چرا ازش استفاده میکنی؟ میدونی دیتا رو به چه شکلی برمیگردونه؟ تفاوتش با xhr جاوااسکریپت چی هست؟و ... (همینا رو یادم میاد :) )سوالات بیشتر تخصصی بودن و مشخص بود مصاحبه کننده درک بالایی از مبحث فرانت اند داره.با سوالات نه چندان پیچیده فقط سعی داشت ببینه درک شما از موضوع جاوااسکریپت چقدر هست.هر چند بعضی سوالات نیاز به یکسری حفظیات هم داشت.از اونجایی که شخصا تمایل به حفظ کردن هیچ چیزی رو ندارم توی بعضی سوالات یکم درمونده شدم ولی با توضیحاتم بهش فهموندم که من معمولا این موارد رو حفظ نمیکنم و به فراخور نیازم و با مراجعه به داکیومنتیشن ها مشکلات خودم رو رفع و رجوع میکنم.توصیه من به متقاضیان شرکت در مصاحبه فرانت اند (بویژه کافه بازار) :قبل از مصاحبه حتما یه دور کامل داکیومنتیشن جاوااسکریپت و فریمورک مدنظرتون (vue یا react یا ...) رو به دقت مطالعه کنید و نکاتی که حس میکنید ممکنه یادتون بره رو حتما یادداشت کنید و موقع مصاحبه دم دستتون بذارید تا با نگاه کردن بهش یادتون بیفته چی میخواین بگین.در کل به نظرم تجربه جالبی بود و بیش از پیش به اصولی و حرفه ای بودن تیم کافه بازار ایمان آوردم.امیدوارم که روزی فرصت همکاری با این تیم قدرتمند رو داشته باشم.موفق باشید ;)</description>
                <category>مجید غفورزاده</category>
                <author>مجید غفورزاده</author>
                <pubDate>Tue, 12 Nov 2019 00:15:40 +0330</pubDate>
            </item>
                    <item>
                <title>فرهنگ از خودبیزاری!</title>
                <link>https://virgool.io/@azmanbeman/%D9%81%D8%B1%D9%87%D9%86%DA%AF-%D8%A7%D8%B2-%D8%AE%D9%88%D8%AF%D8%A8%DB%8C%D8%B2%D8%A7%D8%B1%DB%8C-nv1dnufv4gnq</link>
                <description>امروز طبق عادت همیشگی ام ، مشغول چک کردن شبکه های اجتماعی بودم که به یک مسئله عجیب برخوردم. مسئله ای که به گمانم عامل اصلی عقب ماندگی ذهنی و فرهنگی ، اقتصادی و علمی ما ایرانی هاست. فضای مجازی پر شده بود از تمسخر و به خنده گرفتن پرتاب اخیر موشکی ایران. یکی نوشته بود : &quot;عجب دلقک هایی هستیم! موشک پرتاب نشده سقوط کرده&quot; . دیگری نوشته بود : &quot;حیف اینهمه سرمایه گذاری!&quot;.داشتم با خودم فکر میکردم چرا ما ایرانی ها همیشه طلبکاریم؟ همیشه دو قورت و نیممان باقی ست؟ چرا همیشه فکر میکنیم یک نفر باید بیاید برای ما کاری بکند و سر و سامانمان بدهد؟میخواستم از کسانیکه اینطوری این مسائل رو به تمسخر میگیرند بپرسم : &quot;خودت برای این کشور چه کرده ای؟؟؟&quot;جز نشستن و توئیت کردن و تمسخر کردن چه کردید که حالا طلبکارید؟سهم شما از این پیشرفتی که انتظارش را دارید چه بوده؟مگر موشک های ناسا هم زمانی زمین نمیخورده اند؟چرا سقوط برای آنها نشانه پیشرفت است و برای ما نشانه عقب ماندگی؟به خودتان بیایید. بلخره از یک جا باید شروع کرد.این غریبه پرستی و ازخودبیزاری ما ایرانی ها کار دستمان داده.به گمانم تفاوت اصلی ما جهان سومی ها با کشورهای پیشرفته ای مثل امریکا و آلمان در همین طرز نگاه کردن باشد!</description>
                <category>مجید غفورزاده</category>
                <author>مجید غفورزاده</author>
                <pubDate>Sat, 16 Feb 2019 12:54:43 +0330</pubDate>
            </item>
            </channel>
</rss>