<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های Peyman Eskandari</title>
        <link>https://virgool.io/feed/@peyman</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-19 17:12:52</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/19/avatar/avatar.png?height=120&amp;width=120</url>
            <title>Peyman Eskandari</title>
            <link>https://virgool.io/@peyman</link>
        </image>

                    <item>
                <title>به خاطر چند کاراکتر کمتر؛ چند نمونه Alias برای تنبل‌ها</title>
                <link>https://virgool.io/@peyman/my-macos-aliases-hi0whma6buxg</link>
                <description>آقا تنبلی که توضیح و توجیه نداره. تنبل‌م دیگه. گاهی واسه چند کاراکتر کمتر تو Terminal حاضر می‌شیم آدم هم بکشیم که طبیعتا منطقی نیست چون کار بیشتری نسبت به تایپ همون چند کاراکتر کمتر مورد بحث می‌بره ولی به هر حال. انسان چون حکم آدمی‌زاد رو داره گاهی مجبوره و گاهی کارهایی می‌کنه که خودش هم می‌گه عجب!از این مقدمات اضافی بگذریم و بگم که کلا چیا دم دستم به عنوان Alias دارم و چه استفاده‌هایی ازشون می‌کنم. اول یه توضیح کوتاه بدم که تو مک چه جوری Alias ست می‌کنم و بعد برم سراغ کارهای خودم. اینکه چرا مک، دلیل‌ش اینه که من با مک کار می‌کنم و دلیل این که چرا سایر سیستم عامل‌ها رو نمی‌گم رو می‌تونید در پاراگراف اول پیدا کنید ?ساخت Alias در macOSابتدا باید فایلی با نام &#x60;bash-profile.&#x60; درست کنید یا اگه تو سیستم‌تون موجوده بازش کنید، که این کار از طریق دستور زیر ممکنه: nano ~/.bash-profileبا این دستور فایل موجود یا یک فایل خالی در ادیتور nano براتون باز می‌شه. حالا می‌تونید به سادگی دستورهای تحت ترمینال یا Bash رو اینجا بنویسید و ذخیره کنید. بعد از ذخیره و خروج از ادیتور که با &#x60;ctrl + X&#x60; انجام می‌شه باید به سیستم عامل بگید که یک بار دیگه این فایل رو بخونه و این کار هم با دستور زیر انجام می‌شه:source ~/.bash_profileخود Alias هم با این پترن ساخته می‌شه:alias name=&quot;command&quot;در اینجا alias خود دستور ایجاد به حساب میاد. name نامی هست که از این به بعد استفاده می‌کنید و command هم دستوری که خسته‌تون کرده ?همین؟ واقعا همین! حالا بریم سراغ دستورهایی که من استفاده می‌کنم.نمونه‌هایی از Aliasهاویرایش bash-profileدیگه قاعدتا نباید تعجب کنید، برای ادیت Aliasها هم ۲ تا Alias دارم. اولی برای باز کردن فایل و دومی برای آپدیت Source:alias alias-edit=&quot;nano ~/.bash_profile&quot;
alias alias-update=&quot;source ~/.bash_profile&quot;کار با لاراولاینجا از چند تا Alias استفاده می‌کنم چون واقعا دیگه دستورهاش طولانی هستن و پرکاربرد.alias composer=&quot;php /usr/local/bin/composer&quot;
alias a=&quot;php artisan&quot;
alias phpunit=&quot;vendor/bin/phpunit&quot;
alias ad=&quot;apidoc -f &quot;.php&quot; -i Modules -o apidoc/&quot;
alias tinker=&quot;php artisan tinker&quot;
alias t=&quot;php artisan tinker&quot;
alias &#039;am&#039;=&#039;a migrate&#039;
alias &#039;amm&#039;=&#039;a module:migrate &#039;خیلی کوتاه توضیح بدم هر کدوم چی کار می‌کنن:اولی که کارش ایجاد ارتباط برای دستور Composer هستشدومی تنبلی محض منه که بجای php artisan دیگه می‌زنم aسومی برای اجرای phpunitچهارمی برای تولید مجدد ApiDocهای موجود تو پروژهپنجمی و ششمی برای اجرای Tinkerهفتمی و هشتمی هم برای اجرای Migrationهای موجود در پروژهروم سیاه واقعا با این همه تنبلی! ۷ ۸ تا Alias دیگه هم هست که برای کارهای یسنا استفاده می‌کنم و خیلی معنا و مفهومی برای شما نداره.کار با Vue.jsاینجا خیلی چیزی برای انتشار ندارم به جز ۲ تا دستور Serve و Build که خب طبیعتا چیز عجیبی نیستن. فقط کوتاه‌ترنalias serve=&quot;npm run serve&quot;
alias build=&quot;npm run build&quot;اینجا هم چند تا دستور دیگه دارم ولی کاربردش تو محصولات داخلی شرکته و هیچ مفهموم خارجی نمی‌تونه براتون داشته باشه متاسفانه.کار با Githubچون ما پروژه‌هامون رو تو Github مدیریت می‌کنیم و تمام Issueها هم اونجا ثبت شدن ۲ تا دستور برای دسترسی به ریپازیتوری اصلی‌مون و باز کردن Issue با شماره‌ی مشخص دارم: function name() {
    open &quot;https://github.com/username/repository&quot;
}اینجا name همون نام Alias هست و داخل متد هم آدرس ریپازیتوری گیت‌هاب. از این متد برای این ایده استفاده کنید که هر آدرسی رو که می‌خواهید باز کنه براتون. مثلا با زدن tw سایت twitter براتون باز بشه. function hub() {
    open &quot;https://github.com/username/repositry/issues/$1&quot;
}این رو هم از طاها گرفتم. با دستور &#x60;hub 4132&#x60; در واقع Issue شماره 4132 در مرورگر اصلی‌تون براتون باز می‌شه. خسته نشیم یه وقت!کار با Wordpressاین البته یه نیاز کاملا شخصی به حساب میاد. من چون تو پروژه‌های وردپرس از Gulp استفاده می‌کنم و برای دپلوی پوسته هم فرآیند اتوماتیکی ندارم ناچارم که فولدر رو Zip کرده و آپلود کنم. این موقع مشکلی که وجود داره وجود فایل‌های git و node_modules هست که تقریبا ۹۵٪ حجم فولدر و تشکیل می‌دن. برای اینکه یه فایل فشرده از پوسته بدون این فایل‌ها داشته باشم از دستور زیر استفاده می‌کنم:alias zip-wp=&quot;zip -r ../theme-$(date &#039;+%y-%m-%d-%k-%M-%S&#039;).zip * -x *.git*$این دستور یه فایل zip برای من بیرون فولدر پوسته درست می‌کنه که نام‌ش با پترنی از تاریخ ساخته می‌شه و فایل‌های اضافی رو تو خودش نداره.شما هم اگه Aliasی دارین که به درد می‌خوره و می‌تونین بهم معرفی کنین خوشحال‌م می‌کنین. بیاین همه با هم تنبل‌تر باشیم ?</description>
                <category>Peyman Eskandari</category>
                <author>Peyman Eskandari</author>
                <pubDate>Sun, 12 May 2019 09:15:18 +0430</pubDate>
            </item>
                    <item>
                <title>چطور ایمیل‌های گیت‌هاب را مدیریت می‌کنم؟</title>
                <link>https://virgool.io/@peyman/manage-github-emails-tnsxceduw6uu</link>
                <description>سال گذشته در یک اتفاق قشنگ و جذاب از آمل به تهران نقل مکان کردم و به «یسناتیم» پیوستم. تیمی اجایل که دوست داره چیزهای جدید یاد بگیره و کارهای جدیدی انجام بده. طبیعتا تغییر محل کار چالش‌های جدیدی با خودش داره و نه اولین باره و نه آخرین بار خواهد بود. ولی از بین همه‌ی چالش‌های موجود مثل مهاجرت، پیدا کردن خونه، آشنایی با محیط جدید، و یادگیری روندها، یه چالش سخت هم داشتم. قضیه از این قرار بود که تو یسنا و طبق فرهنگ بازنگری کد (که طاها اینجا در موردش توضیح داده)، سیستم Code Review تو ریپازیتوری‌های گیت‌هاب فعال بود و هر Pull Request باید توسط حداقل دو نفر بررسی می‌شد. در واقع یک Pull Request به دو نفر برای بررسی Assign می‌شد. قانون جالب این بود که اگر بیشتر از سی دقیقه زمان می‌برد تا واکنشی نسبت به درخواست بررسی نشون می‌دادیم، یه فلش قرمز می‌رفت بالای عکس‌مون و تا نفر بعدی که این اشتباه رو می‌کرد، باید شیر مورد نیاز شرکت رو می‌خریدیم. هزینه خرید شیر توسط شرکت تأمین می‌شد ولی همین نوع جریمه هم سنگین بود برام. چالش این بود که خودمون باید راهی برای باخبر شدن پیدا می‌کردیم. من هنوز هم خیلی راه درست و درمونی برای نمایش اعلان‌هاش پیدا نکردم اما خب، باعث شد ایمیل‌هام مرتب‌تر بشن. کارهایی که کردم این بوده:اول به پیشنهاد طاها یک ایمیل جدید برای گیت‌هابم ساختم و تو تنظیمات گیت‌هاب گفتم که نوتیفیکیشن‌ها رو به جای ایمیل اصلی گیت‌هابم به این ایمیل بفرست.بخش تنظیمات نوتیفکیشن گیت‌هاباز این لحظه همه‌ی ایمیل‌ها به جای اینکه به آدرس ایمیل اصلی اکانتم ارسال بشه به این اکانت ایمیل جدا ارسال می‌شد و خیلی راحت‌تر شده بودم. مشکل بعدی درست چند ساعت بعد خودش رو نشون داد. تعداد ایمیل‌ها بیشتر از اون حد بود که بتونم از هم تفکیک‌شون کنم. نیاز بود همه رو بخونم، اما باید اولویت‌بندی می‌شد و نسبت به هر کدوم اقدام مناسبی انجام می‌گرفت. می‌دونستم که تو جیمیل می‌شه به ایمیل‌های دریافتی Label اضافه کرد. فقط کافی بود یه جوری اضافه شدن ایمیل‌ها رو اتوماتیک کنم که البته با کمی جستجو متوجه شدم که گوگل خودش همچین امکانی رو ارائه می‌ده و نیازی به ابزارهای جداگانه نیست.کافیه وارد بخش Settings جیمیل بشوید و بخش Filters and Blocked Addresses را باز کنید. در اینجا به هر تعدادی که می‌خواهید می‌توانید فیلتر بسازید. این بخش لزوما برای ایجاد لیبل نیست و عملا امکان ایجاد عملکردهای اتوماتیک را به شما می‌دهد.فرم ساخت یک فیلتردر فیلتر بالا من مشخص کردم که منتظر ایمیلی هستم که از notifications@github.com به review_requested@noreply.github.com ارسال شده باشه.
بعد هم مشخص کردم که اگه به همچین ایمیلی برخورد، بهش لیبل Github Assigns رو اضافه کنه، به عنوان ستاره‌دار مشخص کنه و محض احتیاط تو دسته‌بندی Important هم بگذاره که خدای نکرده وظیفه تأمین کلسیم بچه‌های تیم به دوش من نیفته. من چندین و چند لیبل مختلف برای دسته‌بندی ایمیل‌ها طراحی کردم، مثل ثبت Issue، Front-End، Back-End، Reviewed و Merged. چند تا لیبل دیگه هم هست که کاربردهای شخصی‌تر و درون‌تیمی دارن برامون.فیلتری که مشخص می‌کنه من Review مورد نیاز رو انجام دادمفیلتری که مشخص می‌کنه Pull Request تایید و Merge شدهفیلتری که مشخص می‌کنه یک Issue در وضعیت Closed قرار گرفتهکافیه پترن‌های مختلف رو برای خودتون بسازید و در قبال‌ش مشخص کنید که چه کاری انجام بشه. بقیه‌ی داستان رو به خود Gmail بسپارید.خلاصه این توضیحات اینکه در طول روز خروجی ایمیل‌هایی که برام میاد به این شکل می‌شه، مرتب و تمیز و قابل تفکیک:شاید الان بگین یه شیر خریدن مگه چه کار سختی هست. اما به هر حال هیچ کار اجباری خوشایند نیست و همین اجبار باعث شد که به این سیستم جذاب برای خودم برسم. امیدوارم شما هم بتونین کاربردش رو تو پروژه‌های خودتون پیدا کنید و صندوق تر و تمیزتری داشته باشین. ?</description>
                <category>Peyman Eskandari</category>
                <author>Peyman Eskandari</author>
                <pubDate>Fri, 03 May 2019 13:02:02 +0430</pubDate>
            </item>
                    <item>
                <title>کوله‌پشتی ۹۸؛ صرفا جهت تنویر افکار میثم</title>
                <link>https://virgool.io/@peyman/backpack-98-b2ypdcqrllrg</link>
                <description>چند سالی می‌شه که کوله‌پشتی رو می‌شناسم و دنبال می‌کنم و در واقع برای خودم هم می‌نویسم اما هیچ وقت اونجور قلقلک‌م نداد که چیزی منتشر کنم در موردش. اما امسال حضرت والامقام میثم خان پورگنجی با چنان لحن سوزناکی گفت بنویس که من از اون روز که ۲ ۳ هفته می‌گذره (از نظر سطح اهمیت) خواب و خوراکم که بهتر شده هیچ، پوست‌م هم شفاف‌تر شده. ولی گفتم خلاصه فردا می‌رم شرکت و چش تو چش می‌شم باهاش گفتم بنویسم تا دوباره یادآوری نکرده ?خلاصه اینکه از دوستان گرامی تقاضا می‌کنم سوالات‌شون رو مطرح کنن و من هم سعی می‌کنم پاسخ بدم. بله دوست عزیز. شما بفرمایید. فرض کنید کوله‌پشتی دارید که قرار است در آن تجربیاتی را از سال ۹۷ بگذارید و با خود به سال ۹۸ ببرید. تجربیات مثبتی که همراه داشتن آنها به شما کمک می‌کند نسبت به سال قبل فردی توانمندتر بشوید. در کوله‌ی خود چه تجربیاتی را قرار می‌دهید؟تشکر می‌کنم از سوال خوب‌تون. سال ۹۷ برای من سال ریسک و یادگیری بود.اول‌ش تا یک قدمی یک ریسک بزرگ رفتیم و متاسفانه یا خوشبختانه اتفاق نیفتاد و بلافاصله با یک ریسک دیگه جایگزین شد. به تهران نقل مکان کردیم و این دفعه، قطعا خوشبختانه، خیلی خوب با این مسئله کنار اومدیم. البته حمایت خانواده و دوستان نقش خیلی بزرگی در این قضیه داشته و داره. قطعا تنها نمی‌شد از پس این چالش بربیایم. از #یسناتیم هم باید تشکر کنم مخصوصا محسن و هادی که حمایت و قوت قلب‌شون باعث شد این اتفاق ممکن بشه.از دیدگاه یادگیری هم سال پرباری بود. مثل همیشه سعی کردم حتی یک لحظه هم نایستم و با اینکه ۵ ماه اول خیلی بد، غیرمفید و آزاردهنده گذشته بود اما ۷ ماه کار با Vue.js (و نه Javascript) خیلی لذت بخش بود. کلی درس و نکته داشت برام و کلی اتفاق خلق کردیم که بخشی‌ش رو تو سال قبل به ثمر رسوندیم و شاهکارمون قراره تو سال جدید بترکونه. اینجا هم کمک همکارها خیلی تاثیرگذار بود، هم حمایت‌شون و هم فرصت‌هایی که در اختیار من قراردادن تا بتونم ایده‌پردازی کنم و به خلق محصول بپردازم. نمی‌تونم تصور کنم اگه تو ۹۷ به شرکت دیگه‌ای غیر یسنا می‌رفتم اتفاق بهتری می‌افتاد برام، اینقدر که برام جذاب، انرژی‌بخش و مفید بود.یک تجربه شخصی هم برام این بود که تمام دنیا علیه‌مون بشن، کافیه من و ستاره پیش هم باشیم، پشت هم باشیم و از هم حمایت کنیم. کاری نیست که سخت باشه چه برسه به غیرممکن، قطعا امسال هم تلاش خواهیم کرد ادامه بدیم. درسی که گرفتم این بود و امیدوارم بی‌ادبی من رو ببخشید و بزارین این رو بگم:درسی که می‌خوام بدم اینه: رو کمک دوستان‌تون حساب کنید، ازشون کمک بخواهید و سعی نکنید که حتما حتما تنها مسیر رو برید. به نظرم زودتر و سالم‌تر به مقصد خواهید رسید.حرف دیگه‌ای تو این سوال ندارم. سوال بعدی لطفا.برای حرکت در مسیر زندگی باید سبک و چابک بود. چه مواردی را از کوله‌ی خود خارج می‌کنید که در سال ۹۷ باقی بماند و شما سبک‌تر حرکت کنید؟ چیزهایی که از کوله‌ خارج می‌کنید مثلا می‌تواند تجربیات ناخوشایند یا ناراحتی‌ها باشد.این هم سوال خوبیه. عجیبه‌ها!شاید این جمله تلخ به نظر بیاد اما به نظرم اولین کاری که در سال ۹۸ خواهم کرد اینه که خودخواه‌تر خواهم بود. احساس می‌کنم کمی بیش از حد اهمیت دادم و دل سوزاندم و پیگیر بودم. تا جایی که خودم رو اضافی احساس کردم اما در بیشتر اوقات حس خوبی داشت. خیلی وارد جزئیات‌ش نشم الان بغض می‌کنم ?اتفاقات بدی که در سال ۹۷ بوجود اومد باعث شد کمی عصبی‌تر بشم و امیدوارم تلاش کنم تا این مشکل رو تا جایی که می‌شه حل کنم.فرض کنید در پایان سال ۹۸ بیشتر آن فردی شده‌اید که شبیه خود ایده‌آل شما است. در این صورت چه ویژگی‌ها و رفتارهایی باید در شما تقویت شود؟ چه چیزهایی را در کوله‌ی خود می‌گذارید که کمک می‌کند این ویژگی‌ها در شما تقویت شود؟خدایی این سوال‌های خوب رو از کجا میارین؟من همیشه معتقد بودم که باید چیزهایی که باعث افزایش انرژی می‌شه رو شناخت و ازشون استفاده کرد و من تو سال ۹۶ و ۹۷ خیلی از این چیزهایی که می‌دونستم رو از دست دادم و حالا باید از ابتدا تلاش کنم دوباره به دست‌شون بیارم. چندتاشون رو مثال می‌زنم:ورزش منظم و مخصوصا فوتسال که خبرهای خوشی هم دارم برای خودمموسیقی جدید. یکی از علاقه‌هام اینه که هر روز یه آهنگ یا آرتیست جدید پیدا کنم بدون محدودیت در سبک و زبانبیشتر کتاب بخونم. سال گذشته مقاله زیاد خوندم تو مدیوم و سایت‌های دیگه و از نظر مطالعه از خودم راضی هستم اما باید بیشتر کتاب مطالعه کنمبیشتر به زبان انگلیسی بنویسم. خودم از توانایی شنیداری و گفتاری تو زبان راضی‌م اما تو نوشتن خیلی تنبل هستم. این هم جز نکاتی هست که باید تقویت‌شون کنم.آدم بهتری بشم به این معنا که مهربان‌تر باشم، کمتر قضاوت کنم و باعث لبخند اطرافیان‌م شوم. متاسفانه زمان کافی برای پاسخ به سوالات بیشتر نیست اما اگه سوالی بود تو دیدگاه‌ها بپرسین جواب بدم. خوب‌ت شد میثم؟ راضی شدی؟ واقعا که!</description>
                <category>Peyman Eskandari</category>
                <author>Peyman Eskandari</author>
                <pubDate>Fri, 29 Mar 2019 13:34:02 +0430</pubDate>
            </item>
                    <item>
                <title>Laravel Share: پکیجی برای به اشتراک گذاری داده‌ها در ریکوئست</title>
                <link>https://virgool.io/Software/laravel-share-package-qwwo5qdgcly8</link>
                <description>همیشه در انجام پروژه‌ها سعی می‌کنم کاری که باید چند بار انجام بشه رو تبدیل به یه فرآیند کنم. منظورم تابع و کلاس نیست. منظورم تبدیل‌ش به مجموعه‌ای اتفاقات هست که می‌تونه بارها و در حالت‌های یکسان یا مشابه استفاده بشه.همین عادت همیشگی باعث شد روی مشکلی کار کنم که فکر می‌کنم راه حل خوبی برای اون پیدا کردم.زمانی که ۲ سال پیش شروع به ساخت ماژول‌ها در لاراول برای انجام پروژه‌ها کردم به این مشکل برخوردم که بخش‌هایی از پروژه نیاز به جمع آوری داده از بخش‌های مختلف ماژول‌ها داره.اجازه بدید اصل مشکل رو توضیح بدم تا این قضیه قابل درک‌تر بشه. من می‌خواستم یک منو در پنل مدیریت پروژه داشته باشم. و ماژول‌هایی با این نام‌ها رو توسعه می‌دادم:مدیریت فایلمدیریت کاربرانمدیریت محتواحالا طبیعتا اولین گزینه پیشخوان بود و به صورت دستی تو منو قرار می‌دم. حالا اگه بخوام با فعال شدن ماژول مدیریت کاربران یک گزینه به منو اضافه بشه چی کار کنم؟سعی کردم موضوع رو تحلیل کنم و دیدم یک گزینه‌ی منو این موارد رو شامل می‌شه:عنوانآیکنآدرس لینک یا Route و پارامترهاشو چند گزینه‌ی حاشیه‌ای دیگه البته. می‌بینید که می‌شه نگاه key =&gt; value رو به این منو داشت و چی بهتر از یه آرایه یا Collection برای مدیریت‌ش؟کارم رو روی ساخت یک سرویس برای مدیریت این داده‌ها شروع کردم. چیزی که تو ذهنم بود چیزی به این شکل بود:Menu::add($key, $value);این اولین قدم بود، خیلی کار سختی نبود و سریع آماده شد. در قدم بعدی این امکانات رو اضافه کردم:has()delete()get()all()edit()تا اینجا می‌تونستم هر تعداد خواستم آیتم برای منو درست کنم، تو بلید مربوطه بگیرم‌ش و با یه حلقه‌ی ساده به منوی تر و تمیزی تبدیل کنم. همه چیزش هم خوب کار می‌کرد.چرا همینجا تموم بشه؟وقتی این راه حل به پروژه‌هام راه پیدا کرد تو برخورد با اتفاقات دیگه سعی می‌کردم اون مشکل رو با این روش تحلیل کنم و می‌دیدم خیلی جاها به درد می‌خوره اما یه مشکل وجود داشت. که برای منوها هم پابرجا بود. یک اینکه روش قشنگی برای زیرمنوها نساخته بودم. دو اینکه سیستم فقط برای منو کاربرد داشت چون خروجی مجموعه‌ای از آیتم‌های منو بود و کنارش نمی‌شد چیز دیگه گذاشت.راه حل چی بود؟برای حل این مسئله علاوه بر آرایه‌ی داده‌ها، متغیری اضافه کردم تا موقعیت فعلی انجام تغییرات رو نگه دارم. بعد از انجام تغییرات ایجاد یک گزینه‌ی منو به شکل زیر دراومد:share()-&gt;menu()-&gt;item(&#039;dashboard&#039;)-&gt;label(‘پیشخوان’)-&gt;href(&#039;/admin/&#039;);یعنی آیتمی با نام پیشخوان و با id و لینک مختص به خودش رو تو آرایه نگه داشتیم اما زیرمجموعه بخش منو. این روش در واقع نامحدود گزینه برام بوجود آورد و اجازه داد برای مدیریت Assetها، بلید ویوها، سازنده‌ی فیلدهای فرم، تولید جدول و … ازش استفاده کنم. فقط کافی بود روی هلپرهای قشنگ‌تر کار کنم و باقی‌ش همون هسته‌ی قشنگ همیشگی بود.  https://github.com/peyman3d/laravel-share حالا بعد از مدت‌ها که این سیستم جواب خودش رو پس داده تبدیل‌ش کردم به یک پکیج برای لاراول عزیز. می‌تونید این پکیج رو به راحتی از طریق Composer روی پروژه‌هاتون نصب و استفاده کنین:composer require peyman3d/laravel-shareراهنمای این پکیج رو می‌تونید تو این آدرس بخونید. اگه نیاز به امکان جدیدی داشت یا مشکلی توش دیدین هم بهم بگین، قطعا خوشحال می‌شم و تلاش می‌کنم رفع و بهترش کنم :) اگر هم یک ستاره تو گیت‌هاب به این پروژه بدین که خیلی بیشتر ممنون می‌شم و انگیزه بیشتری می‌ده تا پکیج‌های بهتری تولید کنم.</description>
                <category>Peyman Eskandari</category>
                <author>Peyman Eskandari</author>
                <pubDate>Thu, 14 Jun 2018 18:01:19 +0430</pubDate>
            </item>
                    <item>
                <title>استفاده از فونت دلخواه در React Native</title>
                <link>https://virgool.io/iran-react-community/%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D9%81%D9%88%D9%86%D8%AA-%D8%AF%D9%84%D8%AE%D9%88%D8%A7%D9%87-%D8%AF%D8%B1-react-native-jltkq02dbtwd</link>
                <description>همین ابتدای مطلب بگم که من برنامه‌نویس React Native نیستم و تسلطی هم روش ندارم. صرفا در حال یادگیری هستم و سعی می‌کنم چیزهایی که یاد می‌گیرم رو اینجا منتقل کنم تا برای خودم هم تثبیت بشه و بلکه خیری هم از ما به دیگران برسهموقع توسعه یه اپلیکیشن نیاز به فونت دلخواه و استفاده نکردن از فونت‌های سیستم عامل یکی از نیازهای طبیعی هستش و اینکار در React Native هم ممکنه. این روش برای هر ۲ سیستم عامل Android و iOS قابل استفاده‌ست و محدودیتی وجود نداره. اولین نکته در استفاده از فونت دلخواه دانستن نام فونت هستش. نام فونت با نام فایل فرق می‌کنه و پیشنهاد می‌شه نام فایل‌ها را به Full name فونت تغییر بدین.نام فونت را می‌توانید در Font Book در macOS ببینیدقراردادن فونت‌ها در پروژهدر قدم بعد باید فونت‌ها در فولدری از پروژه کپی کنید تا بتوانید به آن‌ها دسترسی داشته باشید. من فونت‌ها را در آدرس &#x27;app/assets/fonts&#x27; قرار دادم اما شما می‌توانید ساختار فولدربندی پروژه‌ی خود را دنبال کنید.پس از کپی فونت‌ها باید به React Native بگویید که فونت‌ها از کجا لود کند. برای اینکار باید فایل Package.json را ویرایش کرده و مسیر فونت‌ها را با کد زیر به آن اضافه کنیم:&quot;rnpm&quot;: {
    &quot;assets&quot;: [
        &quot;./app/assets/fonts/&quot;   
     ]
},سپس باید به React Native بگوییم که فایل‌ها را از این مسیر لود کند:react-native linkپس از اجرای این دستور فایل‌ها به فولدرهای iOS و Android کپی خواهند شد تا برای هر سیستم عامل به طور جداگانه لود شوند. حالا فونت‌ها قابل استفاده هستند.استفاده از فونت‌هابرای استفاده از فونت‌ها می‌توانید از React Native styles استفاده کنید. کافی‌ست از پراپرتی‌های fontFamily و fontWeight استفاده کنید تا فونت‌ها برای المان‌های مدنظرتان اعمال شود:const styles = StyleSheet.create({
 title: {
   fontFamily: &quot;Vazir&quot;,
   fontWeight: &#039;bold&#039;,
   fontSize: 30,
   textAlign: &quot;center&quot;,
   marginTop: 40,
   color: &#039;#e41642&#039;
  },
});امیدوارم آموزش مفیدی بوده باشه و اپلیکیشن‌هاتون با فونت‌های قشنگ فارسی قشنگ‌تر بشه :)لازمه بگم که فونت استفاده شده در این مطلب، فونت وزیر ساخته‌ی صابر راستی‌کردار عزیز هست. شما هم ببینید و استفاده کنید.</description>
                <category>Peyman Eskandari</category>
                <author>Peyman Eskandari</author>
                <pubDate>Tue, 03 Apr 2018 16:54:19 +0430</pubDate>
            </item>
                    <item>
                <title>۱۷ سال قبل، اولین کسب و کارمان</title>
                <link>https://virgool.io/@peyman/%D8%A7%D9%88%D9%84%DB%8C%D9%86-%DA%A9%D8%B3%D8%A8-%D9%88-%DA%A9%D8%A7%D8%B1%D9%85%D8%A7%D9%86-%DB%B1%DB%B7-%D8%B3%D8%A7%D9%84-%D9%82%D8%A8%D9%84-wa0ecmgue6ha</link>
                <description> چند روز قبل با پدر در مورد گذشته‌ها صحبت می‌کردیم و حرف به چند کسب و کار کوچک رسید که سال‌های دور شروع کرده بود. در یکی از این کارها من هم سهیم بودم که می‌شه گفت اولین ایده‌ای بود که راه انداخته بودیم. داستان به سال‌های ۷۸ ۷۹ برمی‌گرده. زمانی که برند آیوا یکی از غول‌های لوازم الکترونیکی و پدر به عنوان نمایندگی مجاز تعمیر دستگاه‌هاش همیشه با این وسایل درگیر بود. اون زمان شروع ورود MP3 به دستگاه‌ها بود با اینکه سونی تا سال‌ها بعد این موضوع را نمی‌پذیرفت و تنها استاندارد Audio را قبول داشت، MP3 کم کم به سیستم غالب بازار تبدیل می‌شد.ایده کجا شکل گرفت؟مشکل این بود که با ورود تکنولوژی جدید نیاز به آموزش آن بیشتر می‌شد. مشتریان به مغازه پدر مراجعه می‌کردند و سوالات خودشون رو می‌پرسیدن چون هیچ دفترچه‌ی راهنمای فارسی وجود نداشت و این موضوع برای مشتریان تبدیل به کابوس شده بود. مخصوصا که دستگاه‌های پخش در آن زمان هم کاست را پشتیبانی می‌کردند، هم CD و هم Radio و با اضافه شدن MP3 که باید جستجو بین فولدرها و صدها آهنگ انجام می‌شد کار را سخت‌تر کرده بود. پدرم در اینجا به فکر ترجمه دفترچه‌های راهنما افتاد و شروع کرد به ترجمه دفترچه دستگاه‌ها. اول از مشتریانی که مراجعه می‌کردن خواست دفترچه‌ها رو به همراه دستگاه تحویل بدهند و بدین صورت مجموعه‌ی کاملی از دفترچه‌ها را داشتیم. پدر بعد از تعطیل کردن مغازه دفترچه‌ها را ترجمه می‌کرد و من هم مطالب را تایپ می‌کردم، در یک سیستم AMD 800 و با استفاده از ورد. مشکل اصلی ما تصاویر بودن که در دفترچه اصلی موجود بود. با خرید یک اسکنر Genius شروع به اسکن تصاویر کردیم و در Paint متن انگلیسی و اعداد را از صفحات پاک کردیم. بعد متن‌های ترجمه و تایپ شده را با اسکرین‌شات کپی و کنار تصاویر اصلی گذاشتیم. در نهایت هم با یک پرینتر HP Laserjet 6L چاپ و منگنه می‌کردیم. طرح جلد ساده‌ای داشت اما کاملا کار راه‌انداز بود.یکی از نکاتی که خیلی به دردمان خورد یکسان سازی ترجمه‌ها بود. خیلی از قسمت‌های دفترچه‌ها یکسان بود و ما با کمی گشتن توانستیم سرعت تولید برای مدل‌های مختلف را با کپی صفحات یکسان بالا ببریم. اگر اشتباه نکنم قیمت هر دفترچه ۱۵۰۰ تومان بود و مشتری فراوانی هم داشت. سایز دفترچه‌ها دقیقا مانند دفترچه‌های اصلی A5 افقی بودند و به دلیل شباهت به دفترچه‌ی اصلی خیلی مورد استقبال قرار گرفتند و گاهی جواب‌گوی نیاز نبودیم.اولین تجربه‌ی کسب و کار خیلی خوب بود و با اینکه تجارت بزرگی نبود اما سعی می‌کردیم نکات مهم در تجربه کاربری (چیزی که این روزها می‌فهمیم معنایش چیست) را رعایت کنیم و تنها به محصول تولید شده رضایت ندهیم. محصول خوب تلاش می‌خواهد و توجه، اما می‌شود به آن رسید. </description>
                <category>Peyman Eskandari</category>
                <author>Peyman Eskandari</author>
                <pubDate>Sun, 01 Apr 2018 18:04:02 +0430</pubDate>
            </item>
                    <item>
                <title>ESLint برای React Native</title>
                <link>https://virgool.io/iran-react-community/eslint-for-react-native-uxaczkzgioq0</link>
                <description>پروژه‌ی ESLint پروژه‌ای متن‌باز برای جاوا اسکریپت است که در سال ۲۰۱۳ توسط Nicholas C. Zakas معرفی شد. از ‌ESLint برای آنالیز سورس کرد به صورت استاتیک و طبق قوانین مشخص شده استفاده می‌شود که در اصطلاح به آن Linting می‌گویند.طبیعتا این قوانین برای فریم‌ورک‌ها، کتاب‌خانه‌ها و حتی پروژه‌های اختصاصی خودتان متفاوت خواهد بود. شاید بخواهید از انگولار، ری‌اکت، ری‌اکت نیتیو، ES6 یا ES7 استفاده کنید که طبیعتا گرامرهای متفاوتی برای نوشتن خواهند داشت و شما نیاز به دستیاری دارید تا این گرامرها را دنبال کند. یکی دیگر از فواید مهم استفاده از Linterها یکسان‌سازی ساختار کدها بین اعضای تیم است. به این شکل خوانایی کدها برای همه به یک اندازه خواهد بود و از اتلاف وقت در درک مجدد آن پرهیز می‌شود.دردسری که اینجا بوجود می‌آید نوشتن این قوانین است که جزئیات زیادی می‌طلبد و باید با راهکارهای مختلف هر پروژه هماهنگ باشد اما این نگرانی توسط تلاش دیگران برای استانداردسازی بسته‌های قوانین رفع می‌شود. نصب و تنظیمدر حال حاضر React Native نیز از این قاعده مستثنا نیست و می‌توانید به راحتی با نصب پکیج مناسب برای آن قوانین را استفاد کنید. بعد از جستجوهای فراوان پیشنهاد من برای استفاده نصب این ۴ پکیج است:babel-eslinteslinteslint-plugin-reacteslint-plugin-react-nativeبرای نصب می‌توانیم از npm استفاده کنید:npm install --save-dev babel-eslint 
npm install --save-dev eslint 
npm install --save-dev eslint-plugin-react
npm install --save-dev eslint-plugin-react-native
// OR
npm install --save-dev babel-eslint eslint eslint-plugin-react  eslint-plugin-react-nativeپس از نصب باید به ESLint بگویید که از این قوانین استفاده کند. برای این کار فایلی با نام &#x60;.eslintrc&#x60; بسازید و محتوای آن را برابر زیر قرار دهید:{
    &quot;parser&quot;: &quot;babel-eslint&quot;,
    &quot;env&quot;: {
        &quot;react-native/react-native&quot;: true,
        &quot;browser&quot;: true
    },
    &quot;plugins&quot;: [
        &quot;react&quot;
    ],
    &quot;extends&quot;: [
        &quot;eslint:recommended&quot;,
        &quot;plugin:react/recommended&quot;
    ],
    &quot;rules&quot;: {
        // overrides
    }
}کاربرد Browser: trueیکی از توانایی‌های React Native شبیه‌سازی امکانات مرورگر مانند setInterval است و به همین دلیل با اضافه کردن این کد به ESLint می‌گوییم که این امکانات را مشکل در نظر نگیرد.استفاده در ادیتورها و سازنده‌هافراموش نکنید که ESLint برای ادیتور و سازنده‌ی مورد علاقه‌ی شما هم وجود دارد و برای نمایش و گزارش مشکلات نیاز به گزینه مناسب خود نیاز دارید. برخی از پلاگین‌ها در زیر لیست شده‌اند تا به راحتی آن‌ها را بیابید:SublimeLinter-eslint برای Sublimelinter-eslint برای AtomESLint Extension برای Visual Studio Codegrunt-eslint برای Gruntgulp-eslint برای Gulp</description>
                <category>Peyman Eskandari</category>
                <author>Peyman Eskandari</author>
                <pubDate>Tue, 13 Mar 2018 15:10:34 +0330</pubDate>
            </item>
                    <item>
                <title>احساس امنیت، لازم اما گنگ</title>
                <link>https://virgool.io/@peyman/%D8%A7%D8%AD%D8%B3%D8%A7%D8%B3-%D8%A7%D9%85%D9%86%DB%8C%D8%AA-ek8mohjm4unf</link>
                <description>در این چند وقت چند داستان از اشخاص مختلف در مورد مشکلاتی که برای‌شان بوجود آمده بود و حل آن از طریق قانون به گوشم رسید. چیزی که به ذهنم رسید این بود که حل مشکلاتی که راه حل حقوقی دارد به جز وکیل، شکایت، دادگاه و قاضی؛ به امنیت هم نیاز دارد. اینکه اگر کسی مزاحم من یا خانواده‌م بشود من چه کاری می‌توانم انجام دهم؟ اینکه شکایت من با خرد شدن شیشه‌ی خانه یا محل کارم ختم نشود. اینکه با حضور در محل زندگی یا کارم و عربده‌کشی موجب ترس و وحشت من و خانواده‌م نشود. چه بسا همین اتفاقات افتاده‌ست که می‌گویم. برای مثال ضرب و شتمی که با تهدید خانواده‌ی مجرم (از این جهت می‌گویم مجرم که در دادگاه محکوم شده و در زندان به سر می‌برد) منجر به رضایت بدون خسارت می‌شود.شاید من کمی احساس توهم در مورد عدم امنیت داشته باشم ولی در صحبت با چند نفر نظرشان این بود که حتی نیاز به تماس با پلیس ۱۱۰ در این موارد نیست چون به خودشان زحمت آمدن نمی‌دهند. یا ساعت‌ها بعد می‌آیند یا اصلا نمی‌آیند. مشکل این نیست که می‌آیند یا نمی‌آیند، مشکل این است که در زمان ایجاد مشکل باید طبق باورمان عمل کنیم و برای این دوستان و شاید هم من تماس با پلیس ۱۱۰ راه حل نباشد و این خودش مشکلی‌ست. اینکه نهادی که قرار است مدافع امنیت من باشد خودش باعث تشویش من می‌شود.قطعا من دانش کافی نسبت به قانون ندارم و تنها تصور خودم و شنیده‌ها و دیده‌ها را ملاک این نوشته قرار داده‌م. اما چیزی که از آن مطمئنم این است که علم به اینکه حق با من است در این جا باعث ایجاد احساس امنیت برایم نمی‌شود. باید با ترس و وحشت خودم، ترس و وحشت خانواده‌م از اشخاص خطرناک را کنترل کنم.</description>
                <category>Peyman Eskandari</category>
                <author>Peyman Eskandari</author>
                <pubDate>Sun, 04 Feb 2018 09:57:54 +0330</pubDate>
            </item>
            </channel>
</rss>