<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های حمید فرجی</title>
        <link>https://virgool.io/feed/@HamidFaraji</link>
        <description>برنامه نویس</description>
        <language>fa</language>
        <pubDate>2026-04-15 08:33:51</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/110/avatar/WL5kx6.png?height=120&amp;width=120</url>
            <title>حمید فرجی</title>
            <link>https://virgool.io/@HamidFaraji</link>
        </image>

                    <item>
                <title>بازی یا ورزش فکری! مربی حل مسائل...</title>
                <link>https://virgool.io/@HamidFaraji/%D8%A8%D8%A7%D8%B2%DB%8C-%DB%8C%D8%A7-%D9%88%D8%B1%D8%B2%D8%B4-%D9%81%DA%A9%D8%B1%DB%8C-%D9%85%D8%B1%D8%A8%DB%8C-%D8%AD%D9%84-%D9%85%D8%B3%D8%A7%D8%A6%D9%84-oluxebhsynlw</link>
                <description>چند سالیه که وارد وادی بردگیم ها و بازی های رومیزی شدم ولی از وقتی کرونا شروع شده خیلی بیشتر درگیرش شدم و تقریبا تفریح اصلیم شده بردگیم بازی کردن. خیلی وقتا انقدر درگیرش میشم که حس میکنم مغزم وارد یه چالش بزرگ شده و عین وقتی که ورزش میکنم و ماهیچه میسازم مغزم داره ورزش میکنه و تقویت میشه.البته که خیلی ها فکر میکنند بازی ها فقط مال بچه هاست در صورتی که سخت در اشتباهند (یا هستید) بازی هایی هستند که فقط برای بزرگسالان طراحی شدن و درجه سختی بیار بالایی دارند اصلا مناسب بچه ها نیستن که موضوع بحث ما تو این پست اکثرا همون بازی ها هستن. به سایت Board Game Geek یه سر بزنید تا اطلاعات بیشتری در مورد بازی ها داشته باشید این سایت مثل IMDB میمونه منتها برای بازی های فکری و بازی های رومیزی طراحی شده.مشکلی که هر فرد ممکن تو زندگی روزمره دچارش بشه تک بعدی شدن یا قرار گرفتن زندگیش توی یه چرخه ی ثابته، به خاطر همین عمدتا راه حل ها، جواب ها و هر چیزی که منجر به حل یک موضوع میشه یک چهارچوب ثابت داره (البته این به خود خود بد نیست) که توی خیلی وقتا ممکن تبدیل بشه به یک مشکل بزرگ چون یه وقتایی موضوعات کوچیک هستن ولی راه حلی که ما براش ارائه دادیم یه راه حل بزرگه و Over Qualify میشه یا خیلی وقتا موضوع و مشکل اونقدر بزرگ هست که ذهن ما برای اون محیط تربیت نشده در نتیجه جواب یا راه حل ما مناسب اون مسئله نیست.من بعد از مدتی حس کردم وقتی دارم به مسائل مختلف فکر میکنم و راه حل میدم نحوه نگاهم به مسائل متفاوت شده اولش فکر کردم این به خاطر همزمانی تغییر محل کارمه که خودش باعث تفاوت مسائلی که باهاشون درگیرم هم شده ولی بعد ها برای یه سری پروژه شخصی داشتم کار میکردم متوجه شدم این ربطی به تغییر محیط و محل کار و مسائل نداره و این دقیقا به خاطر بازی کردن بود.چرا بردگیم این تغییرات رو ایجاد کرد؟سوالی بود همون اوایل برام پیش اومد بود این بوده که مگه بردگیم چیکار میکنه که این تغییر توی مغزم ایجاد کرده؟ دلایل زیر بعد از کمی تحقیق و خوندن و تجربه شخصی به دست اومدن و حداقل برای من که صادق بودن.۱- گیمیفیکیشن و ریسکهمین که شما یه سری مسائل یا ماموریت رو در قالب بازی دارید انجام میدید و از دنیای واقعی رها میشید جرات بیشتری برای ریسک دارید این خودش به مغز ما کمک میکنه Out of the box فکر کنه و چیزی (غیر از قوانین بازی) محدودش نکنه. شما ترسی از بابت از دست دادن منابع یا پول یا هر چیز دیگه ای ندارید چون واقعا وجود ندارن.۲- هیچوقت نشده یه فضانورد بشی!بازی ها جنس مسائل رومزه رو به جلوی ما میذارن که ما حل کنیم در صورتی که ممکن هیچوقت تو زندگی خودمون با اون جنس مشکلات و مسائل رو به رو نشیم. پس توی یه محیط غیر واقعی داریم یه مشکلی رو حل میکنیم که ممکنه در دنیای واقعی هیچوقت برای خودمون پیش نیاد. شاید هیچوقت پیش نیاد شما کشاورزی باشید که بامبو کشت میکنه و قرار یه پاندا رو سیر کنه (بازی تاکنوکو) یا هیچوقت پیش نمیاد شما دزد دریایی بشید تا هدفتون کشف بیشتر گنج باشه (بازی جاماییکا) یا حتی ممکن نیست یه کاراگاه باشید که هدفتون پیدا کردن مخوف ترین قاتل زنجیره ای لندن باشه (بازی مستر جک) یا یه کلکسیونر پرنده باشید باغ پرنده خودتون رو بسازید (وینگسپن) یا یه سری وایکینگ باشید و به همراه واکینگ های دیگه به جاهای مختلف حمله کنید و حتی ممکنه خدمه های کشتی شما آسیب ببند و بمیرند و...اما بازی رومیزی به شما اجازه میدن همه اینا باشید.۳- عطش برنده شدن و پیروز شدن در رقابتمگه میشه بازی کنی و دلت نخواد برنده بشی خود این عطش زیاد برای برنده شدن نگاه مارو به مسائل تغییر میده. تو زندگی روزمره کم  این عطش پیروز شدن پیش میاد ولی بردگیم و بازی های فکری اینجوری ساخته شدن که شما فکر کنید یا بهتره بگم درست و اصولی فکر کنید و برنده بشید. پس همیشه حل مسئله مهم نیست مهم اینه که درست و اصولی حلش کنی تا برنده بشی چون تو بازی همه ممکن مسائل رو حل کنند.۴- خروج از انزوا دیدن طرز فکر دیگرانخیلی وقتا ما تو شغلمون ذهنمون نسبت به یه سری مسائل Bios میشه و از بین بردن اون ساختاری که تو ذهنمون شکل گرفته گاهی سخت میشه. اما اکثر بازی ها اینجوریه که دنبال یه هدفی خاص هستیم و ممکن دیدن استراتژی رقیبمون مارو به وجد بیاره و این خودش باعث هم افزایی میشه در نتیجه مغز ما از اون انزوای تلقینی که ذهنمون ایجاد کرده دور میشیم حتی تو یه سری بازی ها ما باید با همکاری هم بازی رو به سرانجام برسونیم که بهشون میگن بازی های Co. Operative مثل بازی های Pandemic یا Crew و...۵- اجزای قابل لمساین بخش شاید فقط از لحاظ بصری جذاب باشه که مارو بیشتر به سمت بازی کردن بکشه که چهار واکنش بالا رخ بده. توی بردگیم اینکه شما سکه دارید یا اگه قراره طلا به دست بیارید تو بازی تیکه های کوچیکی به شکل طلا وجود داره یا اگه قرار بامبو بکارید یه سری بامبو پلاستیکی هست که شما رو هم میچنید و انگار رشد میکنند.تخم پرنده ها و لانه غذا دهی بازی Wingspan بامبو ها و پاندا و کشاورز و کانال های آبرسانی بازی تاکنوکو اگه شما هم علاقمند شدید که این ورزش فکری رو شروع کنید یا حداقل یک بار امتحانش کنید چندین بازی بهتون معرفی میکنم که بهشون میگن Gateway که برای شروع مناسب هستن.بازی Century - Spice Road (مناسب برای ۲ تا ۵ نفر)بازی آزول یا همون Azul نسخه اولش (مناسب برای ۲ تا ۴ نفر)بازی کودتا+ (مناسب برای ۳ تا ۱۰ نفر)بازی جیپور یا جایپور (مناسب برای ۲ نفر)بازی کاپوچین (مناسب برای ۲ تا ۴ نفر)یا اگه نمیخوایید بازی بخرید یک بار هم شده به جاهای موسوم به کافه بردگیم ها سر بزنید اونجا کلی آدم هستن که باهاشون بازی کنید و کلی آدم دیگه که بهتون بازی معرفی میکنن و یاد میدن. کافه هایی مثلکافه بردکافه بازی بازاکافه گلگسیفکر کردهسوالی اگر در مورد بردگیم ها یا بازی های فکری داشتید من یه پیج اینستاگرامی دارم که اونجا میتونید معرفی بازی ها رو ببینید یا اگر سوالی براتون پیش اومد بپرسید یکی از پست های همین صفحه رو این زیر میذارم که به پیج دسترسی پیدا کنید https://www.instagram.com/p/COAo0FOnar9 در آخر امیدوارم این پست شما رو با این دنیا آشنا کرده باشه و کمی علاقمند شده باشید که برید سمت بازی های فکری و اونارو امتحان کنید و اگر قبلا باهاشون آشنایی دارید نظرتون و بازی های مورد علاقتون رو توی کامنت ها بهم بگید.</description>
                <category>حمید فرجی</category>
                <author>حمید فرجی</author>
                <pubDate>Thu, 09 Sep 2021 18:47:32 +0430</pubDate>
            </item>
                    <item>
                <title>از React Native حرفه ای تر استفاده کنیم - قسمت دوم - بخش های داخلی و فرق های آن با محیط وب</title>
                <link>https://virgool.io/@HamidFaraji/%D8%A7%D8%B2-react-native-%D8%AD%D8%B1%D9%81%D9%87-%D8%A7%DB%8C-%D8%AA%D8%B1-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%DA%A9%D9%86%DB%8C%D9%85-%D9%82%D8%B3%D9%85%D8%AA-%D8%AF%D9%88%D9%85-%D8%A8%D8%AE%D8%B4-%D9%87%D8%A7%DB%8C-%D8%AF%D8%A7%D8%AE%D9%84%DB%8C-%D9%88-%D9%81%D8%B1%D9%82-%D9%87%D8%A7%DB%8C-%D8%A2%D9%86-%D8%A8%D8%A7-%D9%85%D8%AD%DB%8C%D8%B7-%D9%88%D8%A8-mma0zdq4htxi</link>
                <description>قسمت صفرقسمت اولقسمت دوم (در حال خواندن هستید)قسمت قبل در مورد استایل دهی گفتم ولی حس کردم که خیلی سریع پریدم به این قسمت و خواستم که یکم بیشتر خود React Native رو تشریح کنیم و تصمیم گرفتم برای شروع کارم توی یوتیوب یه ویدیو ضبط کنم که هم ادامه این پست باشه و هم اینکه اون کار رو شروع کرده باشمویدیو خالی از اشکال نیست و من خیلی توش توپوق دارم و ممکن یه سری جاها رو اشتباه گفته باشم و ممنونم میشم تو کامنت های یوتیوب بهم بگیدبرای مشاهده ویدیو لینک زیر رو کلیک کنیدhttps://bit.ly/3lu9gLJتو این ویدیو به روش های کلی توسعه اپلیکیشن های موبایل میپردازیم و میگیم که چه روش هایی داشتیم قبلا مثل Phonegap, Cordova, Ionic و React Native نسبت به این روش ها چه مزیت هایی داره و چجوری میتونه مارو کمک کنه.مکانیزم اجرایی ری اکت نیتیو رو شرح میدیم و میگیم که چجوری کار میکنه  بعد توضیح میدیم که روند کد نویسی چجوری و چه ابزار هایی برای کد نویسی توی ری اکت نیتیو وجود داره بعد ازین ها میرسیم به Expo و React Native CLI و میگیم چجوری کار میکنن و هر کدوم به چه دردی میخورن.  خیلی ها هنوز تو استفاده از React Native مردد هستن و نمیدونن کی و کجا باید ازش استفاده کنن و اکثرا فکر میکنن که جایگیزین کاملی برای زبان های Java و Swift هست در صورتی که اینطور نیست و هدف و کاربر React Native چیز دیگه ایه  اگه ویدیو رو تماشا کرده باشید گفتم که یه سری لینک و منابع آموزشی براتون میذاریم که کارتون رو شروع کنید راهنمای شروع سایت خود React Nativeیه آموزش کوچولوی جامع که از صفر ماجرا شروع میکنهیه دوره ویدیویی فوق العاده که مباحث جانبی رو هم پوشش میده</description>
                <category>حمید فرجی</category>
                <author>حمید فرجی</author>
                <pubDate>Sun, 29 Aug 2021 10:49:53 +0430</pubDate>
            </item>
                    <item>
                <title>از React Native حرفه ای تر استفاده کنیم - قسمت اول - استایل دهی تمیز و مدیریت شده</title>
                <link>https://virgool.io/JavaScript8/mastering-react-native-1-iofnv57wucvx</link>
                <description>قسمت صفرقسمت اول (در حال خواندن هستید)قسمت قبل در مورد طرز تفکر و یه سری توصیه قبل از شروع کار در React Native صحبت کردیم توی این قسمت در مورد استایل نویسی تمیز و مدیریت شده قرار صحبت کنیم.وقتی از استایل نویسی توی React Native صحبت میشه توجه همه به ‍StyleSheet.create جلب میشه و همه میگن که کاری نداره که! اما وقتی برنامه بزرگ میشه نوشتن و مدیریت کردن استایل های برنامه خیلی کار سختی میشه مشکلات زیر رو ممکن خیلی ها رو آزار بده:۱. عدم Reusable بودن استایل ها به دلیل اینکه داخل هر Component نوشته میشن۲. پراکندگی و کثیفی استایل ها برخی در متد render برخی در بیرون از Component و...۳. اعمال استایل مبتنی بر یک state یا props خاص یا حتی بر اساس یک Event - استایل های Modular۴. عدم وجود استایل های Global مثلا یک font family برای همه Text ها با وزن های مختلف و...۵. پیچیدگی پیاده سازی Helper style یا Modifier ها در Component های ‌Base۶. سختی در تغییر و نبود استایل های یکپارچه و نبود قابلیت Theming۷. کثیف شدن کد در هنگام نوشتن Style های مختص یک Platform۸. عدم وجود استایل های تو در تو شما یعنی نمیتونید از Parent به Child دسترسی پیدا کنید۹. نبود یک UI Framework که قابلیت Extend شدن داشته باشهبرای مشکلات یک سری راه حل (که تجربی به دست اومدن) رو شرح میدم امیدوارم به دردتون بخوره.ایجاد Style های Reusable - حذف کمی از کثیفی ها و ایجاد استایل های Modular و مبتنی بر وضعیت ها (مشکلات ۱ - ۲ - ۳)در حالت معمول ما Style ها رو به شکل زیر مینویسیم:import React, { Component } from &#039;react&#039;;
import { StyleSheet, View, Text } from &#039;react-native&#039;;

export default class Header extends Component {
    render() {
        return (
            &lt;View style={styles.header}&gt;
                &lt;Text style={styles.header_text}&gt;Test App&lt;/Text&gt;
            &lt;/View&gt;
        );
    }
}

const styles = StyleSheet.create({
    header: {
        height: 64,
        justifyContent: &#039;center&#039;,
        backgroundColor: &#039;#f00&#039;
    },
    header_text: {
        fontSize: 20,
        textAlign: &#039;center&#039;
    }
});خب این روش مشکلات خاص خودش رو داره اول اینکه شما برای اینکه بخواهید مثلا رنگی رو از یک متغیر بخونید و مقدار اولیه رو Override کنید باید حتما یک Style Object دیگه توی render ایجاد کنید و یک Array به عنوان Style پاس بدید. یه چیزی مثل شکل زیر:...
    render() {
        const { brandPrimary } = this.props;
        const backStyles = {
            backgroundColor: brandPrimary
        };
        
        return (
            &lt;View style={[styles.header, backStyles]}&gt;
                ...
            &lt;/View&gt;
        );
    }
...خب میبینم که متد render کثیف شد این مسئله اینجا خیلی کوچیکه ولی اگه Component بزرگ بشه خیلی کثیف تر ازین حرفا میشه. راه حل صریح اینه که Style ها رو تو فایل های جدا بنویسیم اما نه به شکل یک Object بلکه به شکل یه تابعی که یک متغیر رو به عنوان پارامتر دریافت میکنه مثل زیر:export default (configs) =&gt; ({ 
    header: {
        height: 64,
        justifyContent: &#039;center&#039;,
        alignItems: &#039;center&#039;,
        backgroundColor: configs.brandPrimary || &#039;#f00&#039;
     }, 
    header_text: {
        fontSize: 20
    }
});شاید از خودتون بپرسید چرا Style رو به شکل یک تابع نوشتیم و اون تابع داره Style که ما میخواهیم رو return میکنه. این قضیه دقیقا برای حل همون مشکل Override کردن و پاس دادن یه سری Data به Style هست.برای استفاده از این استایل کافیه توی پوشه Component بذاریدش و بعد هم import اش کنید و به شکل زیر ازش استفاده کنید.import generateStyles from &#039;./styles&#039;;
...
    render() {
        const { brandPrimary } = this.props;
        const styles = generateStyles({
            brandPrimary
        });
        
        return (
            &lt;View style={styles.header}&gt;
                ...
            &lt;/View&gt;
        );
    }
...البته من پیشنهاد میکنم که فایل های StyleSheet رو کنار هر Component نذارید و توی پوشه src یا همون root پروژه تون یک پوشه style یا theme یا ... ایجاد و توی اون به تفکیک component و screen و... فایل هارو جدا کنید و از اونجا import کنید. پوشه theme یا همون استایل شما به شکل زیر در میاد که پوشه theme/component شامل فایل های style برای component ها است و پوشه theme/screens حاوی فایل های style برای screen ها یا همون صفحات برنامه است. یک پوشه utils هم داریم که توابع کمکی و فایل های متغیر و... رو داخل اون قرار میدیم. البته شما میتونید ریز بشید و استایل هاتون ساختار مند تر بشکونید مثلا بخش هایی مثل UI Kit یا... هم ایجاد کنید.ساختار پیشنهادی برای پوشه themeحالا از شر اون استایل های داخل Component خلاص شدیم که این روش چند تا مزیت داره:دیگه استایل ها مختص یک Component نیستنبرای ایجاد استایل های مبتنی بر متغیر ها یا Prop یا State نیست متد Render رو شلوغ کنیممیتونیم ایجاد Theme برای component ها رو به راحتی انجام بدیم مثلا یک دکمه با حالت های Danger, Primary, Success و...میتونیم utils های style هامون رو کنار خودشون داشته باشه مثلا تابعی برای merge کردن استایل ها بنویسیماین روش میتونه علاوه بر حل مشکل شماره ۱ میتونه مشکل شماره ۲ و ۳ رو هم حل کنه به راحتی میتونید متغیری که به تابع Style Generator مون پاس داده میشه رو بر اساس state یا props یا event ها تغییر بدید و Style ها طبیعتا آپدیت میشه.ایجاد Style های Global - ایجاد قابلیت Helper و Modifier - (مشکلات ۴ و ۵)توی React Native نمیشه بگیم که همه Text ها فلان اتفاق براشون بیوفته یا بگیم همه اون View هایی که بهشون یه خصوصیت خاص رو دادیم Style شون تغییر کنه یا مثلا backgroundColor رو بتونیم از طریق props کنترل کنیم. برای حل این مشکل یه راه حل ساده وجود داره و اونم اینه که شما بیایید Component های Core رو شخصی سازی کنید و یک نسخه برای خودتون بسازید و از اون به بعد از اون استفاده کنید.خب برای مثال ما میخواهیم یک Text بسازیم که از فونت Font Family اصلی برنامه ما استفاده کنه و همچنین یک Helper براش مینویسیم که اگه بهش Bold را به عنوان Prop پاس دادیم (این Prop از نوع ‌Bold هست) متن اش رو Bold کنه و یک Modifier مینویسیم که مستقیم بتونیم رنگ رو از طریق یک prop به نام color تغییر بدیمimport { Text as RNText } from &#039;react-native&#039;;
import generateStyles from &#039;./styles&#039;;

export default class Text extends Component {
    render() {
        const { bold, color, ...props } = this.props;
        const styles = generateStyles({ bold, color });

        return &lt;RNText style={styles.text} {...props}&gt;{this.props.children}&lt;/RNText&gt;
    }
}خب می بینید که این فایل Text رو import کرده و style های خودمون بهش دادیم و الباقی prop هایی که داریم حالا فایل Style اش به شکل زیر هست:export default (configs) =&gt; ({ 
    text: {
        fontFamily: &#039;IRANSansMobile&#039;,
        fontWeight: configs.bold ? &#039;500&#039; : &#039;normal&#039;
        color: vars.color || &#039;black&#039;
     }
});حالا برای استفاده ازش به جای import کردن Text از React Native از پوشه ای که این فایل رو توش گذاشتید استفاده کنید.به همین راحتی :) حالا شما میتونید به این روش View یا هر Component دیگه ی مختص به خودتون رو داشته باشید که با helper ها و modifier های اختصاصی خودتون کار میکنه برای مثال توی پروژه های خودم یک View اختصاصی ساختم که یک helper داره به اسم full که فقط اعمال میشه View کل فضای موجود رو میگیره.ایجاد استایل های یکپارچه و مدیریت شده و تغییر آسان ایجاد قابلیت Theming (مشکل ۶)اگر بخواهیم رنگ ‌Brand مون رو تغییر بدیم چیکار کنیم؟ اگر بخواهیم فونت اصلی سایت رو تغییر بدیم چیکار کنیم؟ خب توی پروژه های وب وقتی SASS اومد این مشکل حل شد در اصل SASS یک سری امکانات Programaticly توی CSS بهمون میداد خب الان ما توی یه زبان برنامه نویسی هستیم و طبیعتا این قابلیت هارو داریم فقط باید به یه نحوی ازشون استفاده کنیم.اولین قدم اینه توی پوشه utils که بالاتر گفتیم یه فایل بسازید به اسم variables.js و توش به شکل زیر رنگ ها و Font Family یا چیز های دیگه رو export کنید. به شکل زیر:import Color from &#039;color&#039;;
import { Platform, Dimensions, PixelRatio } from &#039;react-native&#039;;

// Device Sizes
const deviceHeight = Dimensions.get(&#039;window&#039;).height;
const deviceWidth = Dimensions.get(&#039;window&#039;).width;

// OS Info
const platform = Platform.OS;
const isAndroid = Platform.OS === &#039;android&#039;;
const isIos = Platfrom.OS === &#039;ios&#039;;
const isIphoneX = platform === &#039;ios&#039; &amp;&amp; deviceHeight === 812 &amp;&amp; deviceWidth === 375;

// Fonts
export const baseFontFamily = &#039;IRANSansMobile&#039;;

// Theme colors
export const brandPrimary = &#039;#63265D&#039;;
export const brandPrimaryDark = Color(brandPrimary).darken(0.2);

export const brandInfo = &#039;#03A9F4&#039;;
export const brandSuccess = &#039;#4caf58&#039;;
export const brandDanger = &#039;#f44336&#039;;
export const brandWarning = &#039;#f0ad4e&#039;;

export const brandDark = &#039;#000&#039;;
export const brandLight = &#039;#f4f4f4&#039;;چیزایی که توی قطعه کد بالا ممکنه براتون سوال باشه یکی پکیج Color هست که یک Package کمکی هستش که توابع که توی SASS واسه کار با رنگ هارو داشت رو توی خودش داره مثلا darken, lighten, mix, rgba و... که به راحتی میتونید ازش استفاده کنید راهنماش هم از ( اینجا ) قابل دسترس هست.متغیر های گروه Device Info, OS Info متغیر هایی هستند که محاسباتی هستند و برای اینکه هر بار در هر StyleSheet اونارو محاسبه نکنیم. متغیر های بعدی متغیر هایی هستند که مربوط به تم و رنگ بندی و ظاهر هستند.برای استفاده ازشون هم کافیه توی فایل های استایل import کنید و ازشون استفاده کنید حالا یا میتونید یکی یا چند تا import کنید مثلا به شکل زیر:import { isAndroid, brandDark } from &#039;../variables&#039;;یا اینکه همه رو تحت یه اسمی import کنید مثلا:import * as vars from &#039;../variables&#039;;به راحتی با این کار مشکل Themeing حل میشه شما به راحتی میتونید با تغییر متغیر ها کل اپلیکیشن رو به یکباره عوض کنید و نیز به تغییر جای جای برنامه ندارید. البته ما فقط رنگ ها و فونت هارو مثال زدیم شما میتونید فاصله ها و اندازه فونت ها و حتی گردی گوشه و... ها رو هم در قابلیت متغیر داشته باشد که خیلی Modular تر کار کنید.حل مشکل کوتاه تر کردن کد های مختص یک Platform (مشکل ۷)خیلی وقت ها پیش میاد که ما میخواهیم که یک سری Style ها رو در هر پلتفرم به صورت متفاوت داشته باشیم مثلا اگر توجه کنید در اکثر مواقع Header توی اندروید رنگی هست و توی iOS به صورت سفید هست. برای حل این مشکل روش های متعددی هست.روش اول:به کمک همین متغیر هایی که ساختیم میتونیم استایل هارو جدا کنیم مثلا به شکل زیر:import * as vars from &#039;../variables&#039;;

export default (configs) =&gt; ({ 
    header: {
        height: vars.isAndroid ? 64 : 56,
        justifyContent: &#039;center&#039;,
        paddingTop: vars.isIphoneX ? 20 : 0,
        alignItems: &#039;center&#039;,
        backgroundColor: vars.isIphone ? &#039;#f00&#039; : vars.brandPrimary
     }, 
    header_text: {
        fontSize: 20
    }
});این روش برای مواقعی که تغییرات کوچیک هست خوب جواب میده از طرفی کمتر کدمون کثیف میشه :)روش دوم:حالا که فایل های استایل رو جدا کردیم میتونیم از قابلیت Platform-specific extensions که توی React  استفاده کنیم برای نوشتن کد های مخصوص هر پلتفرم اینه که کلا فایل های StyleSheet جدا بنویسیم منتها با پسوند های اون مرورگر یعنی اگر توی پوشه src/theme/component یک فایل برای header میسازید باید  یا فایلتون رو به شکل header.android.js و header.ios.js نام گذاری کنید یا برای استایل اون component یک پوشه به همون نام بسازید مثلا src/theme/components/header و داخلش index.android.js و index.ios.js بسازید که من دومی رو پیشنهاد میکنم چون مرتب تر هستش. ‌Bundler داخلی React Native در هر پلتفرم فایل با پسوند اون پلتفرم رو import میکنه.روش سوم:روشی که اصلا پیشنهاد نمیکنم اینه که از Platfrom.select استفاده کنید.import { Platform } from &#039;react-native&#039;;

export default configs = configs =&gt; ({
    container: {
        ...Platform.select({
            ios: {
                paddingTop: 15,
                borderTopWidth: 1,
                borderTopColor: &#039;#f00&#039;
            },
            android: {
                paddingTop: 10,
                elevation: 3
            }
        })
    }
});
همون جور که میبینید این روش به ازای هر platfrom از شما یک Object میگیره و هر موقع نیاز باشه spread میکندش.دلیلی که من خیلی دوست ندارم از این روش استفاده کنم شلوغی بیش از حد کد هست ولی در مواقعی که Style ها خیلی باهم فرق میکنند بهتره از این روش استفاده بشه اما برای کار های کوچیک قابلیت اول بهتر جواب میده و اگر خیلی خیلی زیاد تر از حد متوسط استایل ها فرق میکنن بهتره از روش دوم استفاده کنید ولی اگر اندازه تغییرات متوسط هست این روش بهتر هستش.حل مشکل Nested Style یا Style های تو در توبرای حل مشکل استایل های تو در تو از Shoutem Theme استفاده کنید که یک Library است برای اینکه شما بتونید تو در تو style بدید و config کردنش هم راحته کافیه به لینک زیر برید و اونجا توضیح داده چجوری باید راه اندازی بشه.فریم ورک قابل Extend شدن که بتونه مشکل Style های تو در تو رو حل کنهفریم ورک ها یا UI Kit زیادی واسه React تولید شده که هر کدوم معایب و حسن هایی دارن احتمالا موقع جستجو به اسم های زیر بر میخورید:Ant Design MobileReact Native ElementsShoutem UINachos UINative Baseبین همه گزینه های بالا Native Base بهترین گزینه است چون همه قابلیت هایی و راه حل هایی که گفتیم رو داخل خودش داره ? و خیلی خوب هم Extend میشه و هم کاملا هم قابل Customize شدن هست و همچنین قابلیت Theme و Variable و استایل های سفارش داره.فریم ورک Native Baseطبق این راهنما Native Base رو نصب کنید تا بتونید از Component هاش استفاده کنید. برای اینکه بدونید چجوری Native Base رو Customize کنید این لینک رو دنبال کنید. به صورت کلی Native Base در هسته اصلی خودش برای حل مشکل style های تو در تو از Shoutem Theme استفاده میکنه و برای حل مشکلات دیگه از روش هایی که بالاتر توضیح دادیم استفاده میکنه. در اصل Native Base یک Package راحت و آماده است که تمام چیز هایی که بالاتر توضیح دادیم رو یکجا بهمون میدهپس چرا تک تک مسائل بالا رو توضیح دادیم؟خیلی ها علاقه به استفاده از UI Kit ندارن و ترجیح میدن خودشون UI Kit خودشون رو داشته باشن یا به هر دلیل دیگه ای نمیخوان از Native Base استفاده کنند که شرح مسائل به صورت تک تک به اون دسته از برنامه نویس ها کمک میکنه تا اونا هم از این قابلیت ها استفاده کنند و همچنین دسته دیگه ای هستن که ممکنه برنامه هایی رو تا الان نوشته باشن و در هنگام توسعه و گسترش دادنش ممکنه به مشکل خورده باشن و با یک سری Refactor ساده میتونن از این راه حل ها استفاده کنند و به Native Base مهاجرت نکنند.همه موارد بالا به صورت تجربی و از جاهای مختلف برداشته شدن یا در هنگام مشکل ساخته شدن امیدوارم بهتون کمک کند و تمیز تر و راحت تر بتونید برنامه هاتون رو توسعه بدید.قسمت بعد در مورد اشکال یابی یا همون Debugging قسمت های مختلف برنامه مثل Component ها یا State و Redux و ... توضیح میدیم.</description>
                <category>حمید فرجی</category>
                <author>حمید فرجی</author>
                <pubDate>Wed, 17 Oct 2018 15:58:22 +0330</pubDate>
            </item>
                    <item>
                <title>از React Native حرفه ای تر استفاده کنیم - قسمت صفر</title>
                <link>https://virgool.io/@HamidFaraji/mastering-react-native-0-pr67e2lnazyv</link>
                <description>قسمت صفر  (در حال خواندن هستید)قسمت اولقسمت دوماین پلتفرم React Native با تمام خوبی هایی که داره یه موقع هایی با بدبختی یه سری کار های رو میشه توش انجام داد مواردی مثل:استایل دهی تمیز و مدیریت شدهاشکال یابی یا همون Debuggingایجاد Animation ها چه ساده چه حرفه ای که باعث ایجاد کد کثیف نشهساختار و مدیریت برنامه (پوشه ها یا ارتباط بین Component ها و Libraray ها)نوشتن Platform Specific Code و مدیریت اون هادسترسی به API های دستگاه که به صورت پیش فرض وجود ندارندایجاد Routing و Navigation و مدیریت Screen ها و Layout برنامه بر اساس Routeو...اینا مواردی بودن که خودم توی پروژه های بزرگ و کوچیک بهشون بر خورده بودم و سعی میکنم توی یک سری مقاله توضیحشون بدم و راه حل هایی که خودم برای حلشون پیدا کردم یا ساختم رو باهاتون به اشتراک بذارم.اما چرا قسمت صفر؟توی این قسمت سعی میکنم یه سری توصیه کلی در مورد React Native و طرز تفکر توی اون رو بگم و بیشتر به شکل راهنما است که بی گدار به آب نزنیم و همین جوری الکی و دستی دستی خودمون رو با یه Code Base کثیف خفه نکنیم این توصیه خیلی هاشون کلی هستن و همه جا ممکنه پیداشون کنید اما یه سری هاشون رو خودم یا دوستام و همکارام بهشون بر خوردند.مستنداتسعی کنید خیلی خوب مستندات React Native بخونید یه سری نکات کوچیک ممکنه توی مستندات باشه که ساعت ها و شاید روز ها شما رو سرگردون بکنه و شاید فکر کنید یه اشکال توی برنامه وجود داره یا حتی ممکنه ساعت ها یه چیزی رو پیاده سازی کنید در صورتی که توی React Native همون قابلیت وجود داره یا به همراه یک Component دیگه اون قابلیت ظاهر بشه و شما وقت گذاشتید ولی وقتتون هدر رفته و از طرفی ممکنه چیزی که شما پیاده سازی میکنید بهینه نباشه و باعث سنگینی برنامه و پایین اومدن Perfomance توی برنامه بشه.دیدگاه و تفکر موبایلاکثر کسایی که با React Native شروع به کار میکنن برنامه نویس های وب هستن و حتی ممکنه React رو توی برنامه های وب استفاده کنن و با دیدگاه وب وارد یه دنیایی دیگه میشن و با دیدگاه وب برنامه های موبایل مینویسن یک نکته ای که باید بهش توجه کنید اینه که کسی که قبلا React کار کرده لزوما React Native هم نمیتونه کار کنه به خاطر اینکه محیط موبایل و برنامه نویسی موبایل کاملا با محیط وب طبیعتا فرق میکنه React به روی وب و React بروی موبایل تنها شباهتی که به هم دارن طریقه تعریف Component ها است. مثلا شما باید بدونید که دیگه اینجا خبری از تگ های معمول توی وب وجود ندارد Navigatie شدن بین صفحات جور دیگه ای انجام میشه و شما باید یه پیش زمینه ای در مورد App State توی اندروید و iOS داشته باشید و بدونید Intent یا Fragment چیا هستند چیزی به اسم URL در هنگام پیمایش بین صفحات نداریم خبری از Script نویسی های معمول که توی وب هست نیست.اکثرا با دیدگاه اینکه React Native یه چیزی مثل Phonegap یا Cordova است میان سراغش و خیلی گمراه میشن و با فحش دادن به React Native ازش انتقام میگیرن? در صورتی که خودشون اشتباه پیش رفتن. هسته اصلی و طرز کاربه همه پیشنهاد میکنم قبل یا در حین اینکه دارن برنامه نویسی React Native انجام میدن مستندات ابتدایی برنامه نویسی Android با زبان Java و همچنین برنامه نویسی iOS با زبان Swift رو یه مطالعه جزئی بکنن تا بدونن دقیقا وقتی کد React Native مینویسن اون پشت به چی داره Transform میشه این باعث میشه طرز تفکرتون از وب به موبایل واقعی تغییر بدید.گاهی ممکنه شما بخواهید کد ها و فایل های تنظیمات که توی پوشه های ios و android وجود داره رو اصلاح کنید به همین دلیل نیاز دارید تا با بخش های اصلی اون آشنا باشید.با روند Build و ابزار های هر پلتفرم آشنای داشته باشد مثلا بدونید Gradle چی هست یا وظیفه هر Build Tools Revision چیه و چرا باید اصلا اون ها رو نصب کنید یا توی iOS بدونید Command Line Tools ها چیا هستند و چجوری باید Build Tools رو Config کرد.توضیحی که میتونم در مورد روند کاری React Native بدم اینه که کد هایی که شما به زبان React Native مینویسید توسط یک Transpiler به یک IL یا Intermediate Language تبدیل میشه و ازون طرف یک Engine که با Java و Objective C نوشته شده که قدرت اجرای این IL رو داره میاد و کد های شمارو اجرا میکنه و در نتیجه شما یک Native UI دارید.توی قسمت بعد در مورد طریقه مدیریت Style ها و پرهیز از تکرار و کد های کثیف صحبت میکنیم و راه حل هایی براش توضیح میدیم.</description>
                <category>حمید فرجی</category>
                <author>حمید فرجی</author>
                <pubDate>Sat, 06 Oct 2018 11:42:21 +0330</pubDate>
            </item>
                    <item>
                <title>داده های Geographic  - قسمت اول - مقدمات</title>
                <link>https://virgool.io/@HamidFaraji/geo-json-part-1-r9xv7ccwdizh</link>
                <description>گاها پیش میاد نیاز داریم در پروژه های نرم افزاری، داده ها را به صورت مختصات جغرافیایی ذخیره کنیم و همچنین نیاز داریم بروی داده های ذخیره شده از آن نوع اعمالی داشته باشیم برای مثال:محاسبه فاصله بین دو نقطهمحاسبه نزدیک ترین نقاط به نقطه ای دیگرمحاسبه مختصات یک محدودهمحاسبه طول یک مسیرو...به این نوع Data ها و Data Type ها Geo Data گفته میشود.پیش تر به روش های ابداعی و سلیقه ای این کار انجام میشد برای مثال اگر کسی نیاز داشت مختصات یک نقطه را ذخیره کند دو Field در Database با نام های Lat, Lng ساخته میشد و مختصات اون نقطه در اون Field ها ذخیره میشد و اگر اعمالی نیاز بود تا روی Data ها انجام بشه باید فورمول های جهت انجام این نوع محاسبات نوشته بشود برای مثال فورمول محاسبه برای یافتن نزدیک ترین نقاط به شکل زیر هست:(POW(ABS((lat - lng)), 2) + POW(ABS((user_lat - user_lng)), 2))فرض کنید که برای محاسبه موارد مختلف هر شخص فورمول های مختلف میسازد علاوه بر فورمول ممکن است هر شخص یا هر شرکت روشی برای ذخیره داده های Geo استفاده کند. نتیجه این عمل عدم یکپارچگی داده ها است و اگر نیاز به استفاده داده ها در پروژه دیگری باشد می بایست تبدیلات مختلف روی Data اعمال شود.برای حل این مشکل استانداردی تحت عنوان Geo JSON  RFC 7946 تدوین شده که هدفش یکپارچه سازی Data های Geographic هست این استاندارد در سیستم های Database هم از نوع RDBMS (از جمله mySQL, SQL Server, Oracle و..) و همچنین از نوع noSQL (از جمله MongoDB و..) و همچنین در مهد اولیه خود یعنی JSON نیز پشتیبانی میشود.نوع داده های - Data Type هادر Geo JSON نوع های مختلفی برای ذخیره مختصات وجود که نوع های زیر هستند:نقطه - Pointچند نقطه - Multipointمسیر - LineStringچند مسیر - MultiLineStringچند ضلعی - Polygonچندین چند ضلعی - MultiPolygonهمچنین اگر نوع داده شما پیچیده است و یا مجموعه از همه این Data Type ها است دو نوع ضمنی هم وجود دارد:مشخص نیست - Geometryمجموعه از داده ها - GeometryCollectionهمون طور که در بالا میبینید Data Type ها کامل هستند و برای هر ذخیره سازی مختصاتی یک نوع وجود دارد.مثال کلی:{
   &quot;another_key&quot;: &quot;key value&quot;,
    &quot;location&quot;: {
       &quot;type: &quot;GEO_JSON_TYPE&quot;,
       &quot;coordinates&quot;: &quot;GEO_JSON_COORD_TYPE&quot;
    }
}برای ذخیره هر کدام از این نوع داده ها میتوانید یک فیلد در JSON خود ایجاد کنید برای مثال location در آن یک key با نام type و یک key دیگر با نام coordinates بسازید، به عنوان type نوع داده خود را وارد کنید و coordinates را طبق راهنمای زیر تنظیم کنید.نقطه - Pointنحوه نمایش نقطههمان طور که اسمش پیداست برای ذخیره یک نقطه خاص بروی کره زمین مورد استفاده قرار میگیرد بر فرض مثال شما میخواهید مختصات محل یک رستوران را ذخیره کنید.مثال: {
    &quot;type&quot;: &quot;Point&quot;, 
    &quot;coordinates&quot;: [30, 10]
}همانطور که مشاهده میکنید به عنوان Coordinates یک آرایه جفتی میگیرد که نشان دهنده آن نقطه است عضو اول این آرایه Lat و عضو دوم Lng می باشد.چند نقطه - Multipointنحوه نمایش چندین نقطه  برای ذخیره چندین نقطه استفاده میشود برای مثال در یک فیلد که مربوط به یک بانک است میخواهید پراکندگی شعب آن بانک را نشان دهید.مثال:{
    &quot;type&quot;: &quot;MultiPoint&quot;, 
    &quot;coordinates&quot;: [
        [10, 40], [40, 30], [20, 20], [30, 10]
    ]
}به عنوان Coordinates آرایه از نقاط دریافت میکند که عضو اول این آرایه ها Lat و عضو دوم Lng می باشد.مسیر - LineStringنحوه نمایش مسیر برای ذخیره یک خط یا یک مسیر مورد استفاده قرار میگیرد عموما برای نمایش مسیر منتهی از یک مبدا به یک مقصد استفاده میشود.{
    &quot;type&quot;: &quot;LineString&quot;, 
    &quot;coordinates&quot;: [
        [30, 10], [10, 30], [40, 40]
    ]
}به عنوان Coordinates آرایه از نقاط دریافت میکند که طبعا هر نقطه شامل دو عضو Lat و Lng می باشد.چند مسیر - MultiLineStringنحوه نمایش چندین مسیر برای ذخیره چندین مسیر مورد استفاده قرار میگیرد. موارد استفاده:نمایش مسیر های منتهی به یک نقطهنمایش تفاوت دو مسیرنمایش تمام خطوط مترو، اتوبوس در کنار هم و...{
    &quot;type&quot;: &quot;MultiLineString&quot;, 
    &quot;coordinates&quot;: [
        [[10, 10], [20, 20], [10, 40]], 
        [[40, 40], [30, 30], [40, 20], [30, 10]]
    ]
}به عنوان Coordinates چندین آرایه از خطوط دریافت میکند که طبعا هر خط خود آرایه ای از نقاط است.چند ضلعی - Polygonنحوه نمایش چند ضلعی برای ذخیره یک چند ضلعی مورد استفاده قرار میگیرد. موارد استفاده:مساحت یک محلنمایش محدوده یک محل خاص{
    &quot;type&quot;: &quot;Polygon&quot;, 
    &quot;coordinates&quot;: [
        [[30, 10], [40, 40], [20, 40], [10, 20], [30, 10]]
    ]
}به عنوان Coordinates آرایه ای از نقاط دریافت میکند و اگر از ابزار های ترسیم geoJSON استفاده کنید بدین صورت عمل میکنند که آخرین نقطه را به صورت اتوماتیک به آخرین نقطه متصل میکنند.چندین چند ضلعی - MultiPolygonنحوه نمایش چندین چند ضلعی برای نمایش چندین چند ضلعی مورد استفاده قرار میگیرد. موارد استفاده:محل های تحت پوشش یک اپراتور یک شرکت یا ...نمایش محل های مجاز یا غیر مجاز و...{
    &quot;type&quot;: &quot;MultiPolygon&quot;, 
    &quot;coordinates&quot;: [
        [
            [[30, 20], [45, 40], [10, 40], [30, 20]]
        ], 
        [
            [[15, 5], [40, 10], [10, 20], [5, 10], [15, 5]]
        ]
    ]
}به عنوان Coordinates آرایه از Polygon ها دریافت میکند.با انواع Data Type های GeoJSON آشنا شدیم در قسمت بعد در مورد استفاده از Geo Data ها در SQL  و توابع کمکی SQL برای کار با Geo Data ها خواهم نوشت.</description>
                <category>حمید فرجی</category>
                <author>حمید فرجی</author>
                <pubDate>Sun, 17 Jun 2018 14:42:42 +0430</pubDate>
            </item>
                    <item>
                <title>رفتار حرفه ای، انسان حرفه ای</title>
                <link>https://virgool.io/@HamidFaraji/pro-or-not-dla12wbywi1j</link>
                <description>وقتی از حرفه ای بودن حرف میوفته همه به این فکر میکنن که اون آدم چقد چیز تو حوزه خودش بلده مثلا یه برنامه نویس چقد یه زبان رو میشناسه با چند تا فریم ورک کار کرده و این جور چیزا...اما همون آدم رفتار حرفه ای داره؟ مجموعه ای از آداب و رفتار هایی که تو حیطه شغلی خودش و یا کلا در همه مشاغل تعریف میشه رو رعایت میکنه یا نه؟!ما وارثان درد مشترک لای کاراز جایی تصمیم میگیرید بیایید بیرون و استعفاء بدید، کاراتون و پروژه نصف کاره میذارید؟هنوز معنای اعتراض و انتقاد رو متوجه نشدید و به عنوان اعتراض یا انتقاد زیر آب زنی میکنید؟هنوز در هنگام مواجه با چیز های جدید جو زده عمل میکنید؟ مثلا فریم ورک یا سرویس جدید میاد همه چیتون میشه اون و حتی حرف های قبلی خودتون رو زیر سوال میبرید؟از دیدن پیشرفت دیگران(شخص، شرکت، سرویس و...) ناراحت میشید (چون اون تلاش کرده یا مطالعه کرده یا خرج کرده و... ولی شما نکردید) و به هر دری میزنید (تهمت، افترا، زیر آب زنی، متشنج کردن جو و...) که موفقیتش رو زیر سوال ببرید؟تعهداتی که دادید رو در مواقعی که به نفعتون نباشه انجام نمیدید و در عوض با تقلا و دست اندازی سعی بر توجیه انجام ندادنش دارید؟توی شرکتی کار میکنید همه جا از مزایاش میگید و حتی به خاطرش بحث میکنید و وقتی ازونجا خارج میشید همون شرکت رو مورد تمسخر قرار میدید و از روال های درستی که وجود نداره دم میزنید؟ حتی تو مصاحبه های کاری بعدیتون ازون شرکت بد میگید؟فاصله رزومه تا توانایی هاتون زیاده و وقتی ازتون سوال پرسیده میشه سعی میکنید یا پیچوندن مفاهیم و یا غلط جواب دادن از زیر بار مواردی که تو روزمه نوشتید در برید؟ حتی با این وجود استخدام میشید ولی توی کار و یا گرفتن پروژه Freelance هم به توانایی های واقعیتون تکیه نمیکنید؟ برای جایی رزومه یا قرار جلسه میذارید و به هر دلیلی نمیرید اما قبلش اطلاع نمیدید؟در جهت درست با همکاراتون یا هم صنفیتون رقابت نمیکنید و در شروع، حین و اتمام ماجرایی کاملا معنی رقابت رو عوض میکنید؟توی زمان بندی و نرسوندن پروژه ها یا تسک و کار ها و یا حتی زمان رسیدن به جلسات منظم نیستید و این به یه عادت تو شما تبدیل شده؟کارو با دوستی قاطی میکنید و در قالب دوستی توی کار درخواست ها و انتظارات بی جا دارید؟دائم خودتون رو با دیگر همکاراتون مقایسه میکنید؟ و روی کار ها و مزایای دریافتی خط کش میذارید؟مثلا میگید چون شرکت از کاری که من انجام دادم 50 قرون گیرش اومده باید به منم نصفشو بده؟توی شرکتی که کار میکنید یا محل کارتون کارای شخصی یا کارای بیرون از شرکت انجام میدید با اینکه تو محل کارتون کار هاتون مونده؟رفتار متقابل ندارید یعنی ممکنه یه اتفاقی یا هر چیزی برای شما پیش بیاد و از دیگران توقع درک دارید ولی همون مشکل واسه کس دیگه پیش بیاد درک نمیکنید؟ مثلا سه روز سرویس خودتون Down هست به دلایلی از همه توقع درک دارید اما به محض اینکه سرویس کس دیگه Down میشه شروع به اعتراض میکنید یا تسک رو دیر تموم میکنید از همه توقع درک دارید اما همین کار رو برای همکارتون زشت میدونید؟موارد بالا زمان های مختلفی رخ میدن چه زمانی که شما تو شرکتی کار میکنید یا اینکه Freelance کار میکنید یا حتی برخی از موارد ممکن وقتی شما بیکار باشید هم پیش بیاد.مواردی که گفته شد قطعا فاکتور های قطعی رفتار حرفه ای نیست فقط مواردی است که من خودم بهشون برخوردم.از همه انسان ها نمیشه توقع کامل بودن رو داشت ولی اگر حتی شما یکی از موارد بالا رو دارید از درصدی از حرفه نبودن برخوردار هستید نه اینکه حرفه ای نباشید بلکه مثلا شمایی که یک مورد رو دارید 90 درصد از موارد اخلاق حرفه ای رو رعایت میکنید.پ.ن: من خیلی از موارد بالا رو رعایت نمیکنم.</description>
                <category>حمید فرجی</category>
                <author>حمید فرجی</author>
                <pubDate>Sun, 12 Nov 2017 14:41:29 +0330</pubDate>
            </item>
                    <item>
                <title>سر کوه بلند حماقت، فریاد زدن</title>
                <link>https://virgool.io/@HamidFaraji/dunning-kruger-effect-t9qfa1bfvstx</link>
                <description>یه موقع هایی تو زندگیت هست فکر میکنی تو خیلی بلدی و دیگه اون موقع است که چسبیدی به سقف...اثر دانینگ کروگر - ترجمه داغونی توسط خودمخیلی ها میگن بعد اینکه اون حس بهت دست داد تو باختی و این توهم مهم بودن و بزرگ بودن تو رو میزنه زمین و ازین جور حرفا که خیلی خوش آیند من نیست بلکه نظر من چیزیه که در ادامه میخوام بگم.اثر دانینگ کروگر:اثر دانینگ کروگر میگه یه آدم غیر حرفه ای که تازه شروع میکنه بی چاره و بی کمک اما کمی اعتماد به نفس داره، اون آدم شروع میکنه به یاد گرفتن و تمرین کردن و کار کردن اما حتی به وسطای راه هم نرسیده احساس خود بزرگ بینی بهش دست میده و پر از غرور میشه و این اوج حماقت و نادانی اون آدمه تو اون لحظه است.گذار از حماقت:یه سری عوامل هست که بعد از اون دوران به اون شخص یه چیزایی رو میفهونه که واقعا تو این کره خاکی هیچی نیست و خیلی راه داره تا به اون چیزی که فکر میکنه برسه.تو هر آدمی این عوامل ممکن متفاوت باشه، یکی با حرفه ای های بیشتری آشنا میشه و میبینه پیش اونا هیچی نیست و یکی دیگه با عمیق شدن تو مفاهیم و یکی هم ممکنه با رفتن به یه مصاحبه استخدامی و ندونستن جواب ها و یکی هم با تحقیر شدن.اون لحظه اون آدم مضطرب و نگرانه ولی واسه یه شروع دوباره با انگیزه است. پس عزم اش رو واسه شروع دوباره جزم میکنه و یاد میگیره و تلاش میکنه.حالا بعد از مدت ها اون آدم دیگه فرد مغرور قبلی نیست، یاد گرفته ولی اعتماد به نفس کاذب نداره هر روز داره حرفه ای میشه بعدش دیگه مثل یه بید مجنون سر به زیر و متواضع، خودشو میشناسه و میدونه تو چی بده و تو چی خوب...چجوری دچارش میشیم؟!وقتی شما بین یه سری آدم هستید که اونا هیچوقت تلاش نمیکنن تا بهتر بشن شما این حس بهتون دست میده تو جمع های دوستانه عموما این حس زیادهوقتی همه سعی میکنن به شما بگن شما خیلی حرفه ای هستید در صورتی که واقعا ممکنه اینجوری نباشه و شما تنها یک برکه کوچیک باشید.وقتی یه سری کار کردید که مورد قبول یه قشر کوچیک یا متوسطی از آدم ها قرار گرفته اما واقعا اون کارا برای اون اندازه غرور کوچیک هستش.به دیگران هم این حس رو ندید یه جمله معروف هست که میگه:Don&#x27;t Make Stupid People Famousنذارید دیگران هم به اون قله با شیب تند برسن شما علاوه بر خودتون به دیگران هم باید کمک کنید.دچارش میشیم یا نمیشیم:ممکنه دچارش شده باشید، ممکنه نشده باشید یا حتی ممکنه الان تو اون قله با شیب تند باشید. اما این که چجوری متوجه این بشیم که بهش دچار شدیم یا نه فقط و فقط به خودتون بستگی داره.خودتون رو محک بزنید و با آدمای حرفه ای تو حوزه خودتون نشست و برخواست کنید تا بدونید که درون خودتون از چه قراره، این دونستن با مقایسه بین دانش خودتون و دانش اونا بدست میاد.بخونید و مطالعه کنید و تو همه چی عمیق بشید. اینکه شما فقط چیزای مرتبط با رشته حرفه ای خودتون بخونید نشونه یه ضعفه، آدما باید کتاب های خوب زمان خودشون و گذشته رو بخونن از تجربیات عمومی و زندگی دیگران که در قالب کتاب عرضه میشه استفاده بکنن.مغرور نشید و همیشه حس کنید هیچی بلد نیستید اما اعتماد به نفس واسه انجام کارای بزرگ داشته باشبد این یه طلایی واسه پیشرفته های بزرگ توی زندگی است.علاف دیگران نباشید خودتون هستید که خودتون رو میسازید.</description>
                <category>حمید فرجی</category>
                <author>حمید فرجی</author>
                <pubDate>Tue, 10 Oct 2017 17:55:09 +0330</pubDate>
            </item>
                    <item>
                <title>دیگر فقط یک توسعه دهنده خواهم بود...</title>
                <link>https://virgool.io/@HamidFaraji/bye-byte-design-woflgblfzzdj</link>
                <description>سال ها بود که هم طراحی UI انجام میدادم و دستی هم بر گرافیک داشتم و کار های Development هم انجام میدادم، اما هر چقدر که جلوتر میرفتم میفهمیدم من توی UI Design خیلی یکنواخت شدم و کم کم UI هایی که طراحی میکردم در بهترین حالت ممکن 40 درصدش شبیه قبلی بود.همچنین توی عرصه Development وقت نمیکردم که خودم رو بروز نگه دارم و اینجوری شده بود که تبدیل به برکه ای توی UI UX Design شده بودم.اینجا بود که باید به دلیل اش پی میبردم و سعی میکردم حلش کنم.دلیلش چی بود؟دلیل این بود که من طراحی رو بر اساس حس و ایده هایی که میگرفتم دنبال میکردم و طبق اون چیزایی که دنبال میکردم طراحی ها رو انجام میدادم و تقریبا غیر از دیدن طرح ها توی Dribbble یا Behance یا جاهای دیگه، مطالعه ای در حوزه اصول طراحی یا روش ها انجام نمیدادم.اوج مطالعات من توی حوزه Design خوندن درباره Best Practice های طراحی عناصر بود یا خوندن Design Guide Line شرکت های معروف بود.فکرِ یه چاره کردم!دو تا راه پیش روم داشتم یا مطالعات و حسم رو قوی تر کنم و دوباره سعی کنم یا اینکه یکی از Skill ها رو انتخاب کنم.تصمیم گرفتم فقط توسعه دهنده باشم و اونم بیشتر در Front-End فعال باشم ...!به چند دلیل:اول اینکه سرعت رشد و پیشرفت هر دوی این حوزه به اندازه ای است که Handle کردن چند تا Skill با هم دیگه خیلی سخته و کامل بودن تو همه این زمینه ها کار سخت تری است و اینجوری میشه که به برکه های کم عمق تو زمینه های مختلف تبدیل میشی.دوم اینکه سطح اطلاعات و تجربه و تعداد پروژه های و سابقه کاری من توی Front-End Development از طراحی و حتی Back-End Development بیشتر بود. من با شرکت های بزرگ و موفقی کار کرده بودم و روزمه ام بهتر از Design بود، سخنرانی ها و ارائه هایی هم در همین خصوص توی همایش ها و کنفرانس های داخلی و بین المللی داشتم که این خودش نقطه قوتی توی شناخت آدم ها (هر چند کم) از من بود.سوم اینکه بازار کاری، منابع کافی برای یادگیری و همچنین جامعه فعال تر توی این زمینه باعث این شد که من به این سمت کشیده بشم.چهارم اینکه گذاشتن کنار Design در یه نقطه مطلوب خیلی بهتر ازین که کار هات بدتر و بدتر بشن و اون موقع تصمیم به پایان دادنش بکنی. من کارهای مطلوب و قابل قبولی توی Design هم داشتم مثل www.Time.ir یا www.Parsi.wiki که برنده جایزه کاربرد پذیری و جشنواره وب ایران شدن، اگر بیشتر از این به طراحی ادامه میدادم باعث میشد بدتر و بدتر بشم که این برای خودم بد بود و این بد بودن کارهای قبل من رو زیر سوال میبرد.ته تهش چی؟!الان خوشحال ترم که تمرکزم رو گذاشتم توی یه حوزه و میتونم عملکرد بهتری داشتم و وقت بیشتر برای مطالعه دارم و کار های با کیفیت تری میتونم انجام بدم و دارم سعی میکنم نقص هایی که توی دوران قبل به من قالب شده بود رو جبران کنم.</description>
                <category>حمید فرجی</category>
                <author>حمید فرجی</author>
                <pubDate>Thu, 10 Aug 2017 05:45:38 +0430</pubDate>
            </item>
            </channel>
</rss>