۲ ترفند در محیط ترمینال اوبونتو

باز کردن فایل منیجیر اوبونتو از ترمینال

همیشه برامون پیش میاد در ترمینال داخل فولدر خاصی هستیم و میخوایم همون فولدر رو با فایل منیجیر اوبونتو باز کنیم. حالت عادیش اینه که فایل منیجیر اوبونتو که اسمش Nautilus هست رو باز کنیم و به مسیر فولدرمون بریم. اما گاهی این سخت میشه! وقتایی که تعداد فولدر ها زیاده یا ما عجله داریم. یه نگاه به مسیر زیر بندازین:

/home/hamidreza/projects-tmp/hello/platforms/android/app/build/outputs/apk/debug

خب این خیلی سخته که بخوایم با فایل منیجیر همه این مسیرو رو بریم. اصطلاحا کی میاد این همه راهو! مخصوصا وقتی با کوردوا کار میکنین و خروجی اپ میگیرین خیلی سخته میشه همه این مسیر رو طی کنین چون کوردوا اپ خودشو در این مسیر طولانی قرار میده. راه ساده ش چی میتونه باشه که سریع این مسیر رو در فایل منیجیر باز کنیم؟ بله، جتسجو در گوگل. وقتی منم به این مسئله بر خوردم که زیاد هم اتفاق میافتاد ترجیح دادم گوگل کنم.

عبارت زیر رو در هر مسیری هستین تایپ کنین تا اون آدرس باز بشه:

nautilus .

باز کردن فایل منیجیر اوبونتو از ترمینال

چطور در اوبونتو/لینونکس در محیط ترمینال از میانبر های کپی پیست استفاده کنیم؟

همونطور که میدونین در اوبونتو/لینوکس در محیط های ترمینال نمیتونیم از دکمه و میانبر های Ctrl+C برای کپی و Ctrl+V برای پیست استفاده کنیم چون دستور Ctrl+C میانبریه برای لغو فعالیت جاری و اصطلاحا کنسل کردن پردازش فعلی. اما چطور میتونیم در این محیط راحت کپی پیست کنیم؟

اگر با نرم افزار مایکروسافت ورد کار کرده باشین احتمالا به دکمه Shift+Ctrl+C و Shitf+Ctrl+V آشنایی دارین و میدونین که استایل هارو در اون محیط کپی پیست میکنه. و اینجا در محیط ترمینال لینوکس هم همین اتفاق میافته. ما میتونیم بجای میانبر های عادی از میانبر های ثانویه کمک بگیریم

برای کپی یا رونوشت در محیط ترمینال میانبر Shift+Ctrl+C رو بزنین

برای پیست یا جا گذاری کردن متن در محیط ترمینال میانبر Shift+Ctrl+V رو بزنین

رفع خطای محدودیت حافظه (memory_limit) در کومپوزر

امروز اومدم یه پکیج به لارول اضافه کنم و با خطای زیر روبرو شدم:

تو نگاه اول به نظر میرسه این خطا مربوط به memory_limit در php هست ولی گویا به تنهایی php نیست و لازمه composer هم مقدار دهی بشه. اول از همه بریم سرغ php

برای اینکه ببینیم memory_limit در php چی ست شده از دستور زیر استفاده کنین (اگر مقدار برابر -۱ بود یعنی محدودیتی براش نذاشتین):

حالا برای اینکه memory_limit  رو در php.ini تغییر بدیم، بسته به اینکه با چه برنامه ای و در چه سیستم عاملی php رو نصب کردین محل نصب php.ini متفاوته. یه راه حل ساده میتونه این باشه در داخل ترمینال دستور زیر رو تایپ کنین:

خب این گزینه بهتون میگه php.ini که مربوط به php اجرا شده هست کجا قرار داره (ممکنه رو سیستمتون چند تا php داشته باشن) این دستور php که بصورت global نصب شده رو جارا میکنه.

پیدا کردن فایل php.iniهمونطور که میبنین مسیر فایل php.ini من اینه: /opt/lampp/etc/php.ini با دستور زیر این فایل رو ویرایش کنین و دنبال memory_limit بگردین:

برای اینکه داخل این فایل جستجو کنین از میانبر Ctrl + W استفاده کنین و بعد عبارت memory_limit رو تایپ کنین. حالا مقدارش رو به ۱.۵جی عوض کنین. مقدار رم پیشنهادی برای php و کومپوزر حداقل ۱.۵گیگ هست. البته نیازی نیست و شما با ۱۲۸ هم کارتون راه میافته ولی حداقل ۵۱۲ بذارین دیگه! در آخر برای خروچ Ctrl + X بزنین ذخیره کنین و خارج بشین.

حالا میمونه مقدار COMPOSER_MEMORY_LIMIT که یک متغیر محیطی هست و در فایل composer.phar هم میتونین پیداش کنین. در داخل لینوکس / اوبونتو دستور زیر رو تایپ کنین تا مقدار فعلی رو ببینین:

اگر مقداری نمایش داده نشد، به این خاطره که تا بحال این متغیر ست نشده. حالا ۱نکته: جستجویی که من انجام دادم متوجه شدم محدودیتی وجود داره که اگر این متغیر ست بشه مقدارش رو از memory_limit در php میگیره و در جای دیگه راه حل هایی که ارائه شده بود مقدارش رو وارد میکردن (اینجا و اینجا و اینجا رو ببینین).

با دستور which composer پیدا کنین کومپوزر کجا نصب شده یا فعاله. برای من بجای composer.phar آدرس /usr/bin/composer وجود داشت. حالا دستور زیر رو بزین تا آپدیت بشه

راه حل های دیگه ای هم مثل ست کردن متغیر COMPOSER_MEMORY_LIMIT ولی من از این روش نتیجه ثابتی نگرفتم.

در آخر هم یه نکته رو دوباره بگم که برای COMPOSER_MEMORY_LIMIT و memory_limit اگر مقدار رو برابر -۱ بذارین دیگه لازم نیست هرزگاهی سر بزنین و منابع رو افزایش بدین و بصورت unlimited در نظر میگیره.

بروز رسانی: روش بالا بعد رستارت کردن از بین میره ظاهرا! فعلا از این روش سریع و موقتی برای حل مسئله استفده میکنم. داخل ترمینالتون کد زیر رو ببزنین. (البته میشه این متغیر رو بصورت ثابت و محیطی هم تعریف کرد)

 

انتقال همه فایل های یک فولدر به فولدر دیگر در اوبونتو

چطور در اوبونتو فایل های یک دایرکتوری رو به دایرکتوری دیگه منتقل کنیم حتی فایل های مخفی و هیدن (Hidden)

همونطور که میدونیم با دستور mv میشه به راحتی این عمل رو انجام داد اما این دستور شامل فایل های مخفی در لینوکس که در ابتدای نام اونها دات (نقطه) داره نمیشه. کد زیر رو ببینین:

همونطور که گفتم دستور بالا شایمل فایل های مخفی نمیشه و عملا همه فایل ها انتقال پیدا نمیکنن! برای حل این مسئله از دستور زیر استفاده کنین:

منبع: How do you move all files (including hidden) from one directory to another?

چطور در میون این همه اخبار منفی و ترس و نگرانی حالی خوب داشته باشیم و تمرکزمون رو از دست ندیم؟

سلام

میخوام در این پست از تجربیات شخصی خودم در مقابل اتفاقات بد، خبر های بد و حوادث ناگوار بگم. تجربه ای که زندگیش کردم و رو به رشد بوده و در اید دیدگاه همیشه پیشرفت کردم. اول از همه بگم این تجربیات از کجا شروع شدن و در آخر به اینجا برسیم چطور این تجربیات بهم کمک میکنن حالم بهتر بشه.

اگر برگردم به گذشته دلم میخواست طور دیگه ای کودکی کنم، انتخاب های دیگه ای میکردم، البته اگر دست من بود! اتفاقاتی که در ذهنم مدام مرور میشون میکردم و همچنان نیز با اتفاق میافتاد، چیزهایی که شاید اسمشو بدشانسی های زندگی میشه گذاشت، بهر حال من قدرت انتخاب نداشتم. خواستم خلاصه گفته باشم. تا اینجا من کسی بودم با هزار درد و مشکل.

اولین تجربم وقتی بود تو سن ۱۹ ۲۰ سالگی به اشتباه چندین گیگ فایل بکاپ و عکس خونوادگی و ویدئو و فیلم رو پاک کردم… هرچیم خواستم ریکاوری کنم نشد که نشد! میتونستم سالها به خاطرات اون عکس ها فکر کنم و حسرت از دست دادن فایل هامو بخورم. اما بیکباره گفتم بیخیال (همون بتخمم معروف). از خودم پرسیدم من کاری میتونم بکنم؟ کاری از دستم بر میاد؟ از دست دادم که دادم بذار برن و دیگه بهشون فکر نکنم و حسرت نخورم. بعبارتی انتخابی تصمیم گرفتم اون بخش از زندگیمو فراموش کنم!

تئوری انتخاب

جالبه بدونین الان در حال خوندن کتابی با نام تئوری انتخاب اثر ویلیام گلسر هستم. خیلی جالبه، ابتدای کتاب میاد در مورد «دنیای مطلوب» صحبت میکنه. دنیای مطلوب تصورات ما از واقعیت و ایده آلی هست که دوست داریم. همه ما در تصوراتمون ایده آل هایی داریم. برای مثال خودمون رو سوار لامبورگینی تصور میکنیم در حالی که ورود میکنیم به پارکینگ خونه چند هکتاریمون که کلی چمن هم داره، از ماشین که پیاده میشیم سگ دوبرمنمون رو ناز میکنیم و وارد ساختمون بزرگی میشیم که شاید چند ده اتاق و سرویس و استخر و… داره. بعله این یک تصویر دنیای مطلوب میتونه باشه. چیزی که خیلی هامون داریم. هر کسی به شکل و خواسته های خودش. حالا این دنیای مطلوب چه ربطی به تجربه من داره؟ هرزمان با مسئله ای روبرو شدیم از خودمون بپرسیم آیا من میتونم تغییری ایجاد کنم؟ اگر بله، انجام بدم و اگر نه کلا اون مورد رو از دنیای مطلوبمون بیرون کنیم در غیر این صورت این مسئله بارها و بارها باعث ناراحتی و آزردگی ما میشه. این ماییم که انتخاب میکنیم چه چیزی در دنیای مطلوب ما قرار بگیره.

دومین تجربه، افسرده از شکست های پی در پی در کسب و کارم، افسوس چیزهای از دست داده بودم. چیزی تو زندگی برای خودم نمیدیدم. به چی تکیه کنم؟ چه امیدی دارم؟ برای چی تلاش کنم؟ در آینده چطور میتونم به فلانجا برسم؟ من خیلی کوچیک و تنهام و… اینها احساسات و افکاری بودن که سال ۹۳ تو مغازمون نشسته بودم و از ذهنم عبور میکردن. خیلی داغون بودم. یه عادت کوچیکی داشتم که هروقت حالم بد میشد میرفتم هایدا و یه ساندویچ برره سفارش میدادم. اون شب هم همینکارو کردم. یه ساندویچ سفارش دادم (البته از پرنیان) و یک نوشابه.
دعا میکردم و از خدا دنبال نشانه و راهی بودم. ساندویچو که با پپسی آوردن توجهم به نوشته روی قوطی پپسی جلب شد، در لحظه زندگی کن یهو ذهنم، افکارم یه تکون شدید خوردن! خدایا من چقدر به گذشته یا آینده فکر میکنم!! چقدر نگرانم (افکار مربوط به آینده) و چقدر افسوس میخورم (افکار مربوط به گذشته) بچاش سعی کردم با عشق از پپسی و ساندویچ خودم لذت ببرم و همون نقطه عطفی شد برای زندگیم. و البته همیشه متعهد به پپسی شدم و خواهم بود. (عکس زیر رو از نت گرفتم. اما همون شب از پپسی خودم یه عکس گرفتم که به زودی آپلودش میکنم)

پپسی

تمرین نیروی حال

درست چند روز بعد کتابی با نام تمرین نیروی حال اثر اکهارت تول هدیه گرفتم. انگار خدا با من صحبت میکرد انگار فرشته نگهبانم داشت کمکم میکرد. این کتاب شروعی دیگه به زندگیم بود. انگار دوباره متولد شدم. کاش این کتاب رو در مدارس یادمون میدادن.

سومین تجربم وقتی بود صبح دعوای شدیدی با یکی گرفتم و بعدظهر با دوستام قرار داشتم. لاهیجان بودم و به شدت عصبانی و داشتم فکر میکردم الان اون شخص فلان کارو میکنه منم فلان کارو میکنم و … داشتم فکر میکردم و تو تصوراتم جنگی بود! یک لحظه به خودم اومدم، گفتم الان که اون اینجا نیست، منم قراره باقی روز رو خوش باشم چرا دارم الان خودمو با فکر کردن به اون تجربه تلخ خراب میکنم؟ باورش براتون سخته تا تجربش کنین، همون لحظه حالم بهتر شد! و سعی کردم همیشه تمرین کنم اگر چیزی حالمو خراب کرده، اون برای همون لحظس… احساس بدمو همونجا تو همون لحظه بذارم و تمرکزم به لحظه حال باشه و رو به جلو. الان میتونم برای خودم چیکار کنم که حالم بهتر باشه؟ الان چطور میتونم خوش باشم؟ چی کمکم میکنه این لحظه؟

تجربه دیگه ای که داشتم برمیگرده به روزهای اخیر. تا این سن یاد گرفتم چطور با خیلی از مسائل آزار دهنده کنار بیام و بگذرم ازشون. یه جورایی یاد گرفتم ذهنم رو کمتر درگیر مشکلات و حال بدی ها کنم. اما همچنان گاهی احساس افسردگی میکردم، گاهی گیج و سردرگم. از یک طرف حالم چنان خوب بود که چیزی از دنیا نمیخواستم، دلم خیلی چیزها میخواست ولی به مهارتی رسیدم که نداشتنش هم اذیتم نمیکرد، پول ماشین تفریحات و… البته نمیگم خوش بودم، حالم خوب بود ولی زندگیم اوجی نداشت. انگار دیگه سقوطی در کار نبود. خیلی دنبال راه حل گشتم، مشاوره رفتم تا با جمع کردن خورده اطلاعات از صحبت های دکتر شیری و مطالب اینستاگرام و کتاب های مختلفی که خوندم (از جمله کتاب هدف گذاری ۰ پننی لوسی – لیندا هیل) کم کم مسیری برام پیدا شد، فهمیدم چطور بتونم حال خودمو خوب نگه دارم. ساده و خلاصه بگم، ۱. از خودمون مراقبت کنم که با احساسات بد (که لازمه باشن) پسرفت نکنیم ۲. تلاش کنیم رو به جلو حرکت کنیم.

حالا که یاد گرفتم چطور با گذشته و افکار و احساسات کنار بیام، لازم بود یاد بگیرم چطور بتونم افکار و احساسات جدید تولید کنم. راه حل چی بود؟ هدف گذاری! شرح هدف. پیدا کردن چالش ها وکنار زدن اونها و پیشرفت. این نگاه که هر چیزی یک چالشه، چطور با وجود زلزله سیل طوفان برف خطای انسانی خطر جنگ و البته اخیرا کرونا کنار بیام و همچنان رو به جلو حرکت کنم. اونقدر خودتون رو درگیر هدفتون کنین که چیزی جز اون ذهنتون رو درگیر نکنه! من اپ اینستاگرام رو از گوشیم پاک کردم ساعت ها در وقتم صرفه جویی شد. راه دسترسی به اینستاگرام رو تا حد ممکن برای خودم سخت کردم و هرزگاهی بی بی سی رو نگاه میکردم ولی اونم محدود کردم چون فقط موج منفی ساتع میکنه! شما نمیتونین یک خبر خوش اونجا بخونین. این درسته که ما نیاز به حقایق داریم ولی اونجا صرفا بزرگ نمایی حقایق منفیه و خبری از موضوعات مثبت روز نیست. ما نیاز به انگیزه امید و امیدواری و حال خوب داریم، پس نگاه مکینم چقدر بار منفی به خودم دادم.

دائم این سوال رو از خودتون بپرسین من الان برای هدفم چیکار میتونم بکنم؟ من الان دارم رو چی تمرکز میکنم؟ آیا به هدفم کمک میکنه؟

یک نکته خیلی مهم اینکه ما نباید یکباره کار بزرگی کنیم. فقط و فقط یک کار کوچیک. و اونقدر از این کارهای کوچیک کنیم که دنیامون متحول بشن. اینو تو کتاب اثر مرکب اثر دارن هاردی خوب متوجه شدم. قدم ها هرچقدر بزرگ باشن برداشتنشون سختتره ولی هرچی کوچیکتر برداریم میتونیم تعداد بیشتری رو برداریم. هزار موفقیت کوچک بهتره از یک موفقیت بزرگ. قدم های کوچک رو تمرین کنین، برای هر کاری… از کد نویسی گرفته تا لاغری و ورزش. قرار نیست ما چیزی رو متحول کنیم. فقط شروع میکنیم و ادامه میدیم.

نکته دیگه که خیلی کمک میکنه به هدفمون برسیم (و صد البته برداشتن تمرکز از حال بد و افکار بد و خبر های بد) اینه که کارهامون رو بنویسیم. هر کاری امروز من انجام دادم یاداشت کنم. با هدفتون بازی کنین و به شکل های مختلف یاداشتش کنین. تشریحس کنین. تفکیکش کنین. در انتهای روز ببینین چقدر از کارهایی که امروز انجام دادین و نوشتینشون با اهدافتون سازگاره.

همین مسائل اونقدر مارو درگیر مسیرمون میکنه که دیگه وقتی برای فکر کردن به افکار منفی نمیذاره. راستی من خودم چند تا برنامه به کارهام اضافه کردم و یکی از اون کارها در راستای اهدافم نوشتنه. و این مطلب هم جز همون کارهاست.

شما هم نظر و تجربتون رو با من درمیون بذارین، شما چیکار میکنین وقتی مورد هجوم خبر های منفی قرار میگیرین؟

 

نوشتن سایت چند زبانه با لاراول

لاراول  برای ما شرایطی بوجود آورده که داشتن سایت چند زبانه به سادگی امکان پذیره. یا برای منی که دارم طراحی میکنم میخوام که ابتدا با زبان انگلیسی کار کنم و در آخر سایتت رو فارسی ترجمه کنم. اینکار تو لاراول خیلی راحت و سریعه بطوری که یک راه هم نداریم و چندین راه وجود داره. در ادامه با من همراه باشین تا خیلی خلاصه و سریع در این مورد بهتون آموزش بدم:

ساختار فایل های ترجمه لاراول در روش اول به این صورته:

در فولدر resource فولدر lang یک فولدر با مخفف زبان فارسی fa ایجاد کنید. و داخل اول فایل های ترجمه رو به صورت دسته بندی شده داخل هر فایل قرار میدیم. برای مثال سایت من قسمتی داره با نام  contact و ترجمه های داخل اون متفاوت از سایر قسمت های سایته. برای همین داخل فولدر fa یک فایل با نام contact.php ایجاد میکنم و داخل اون رو به صورت زیر با کلید -> مقدار پر میکنم

همونطور که توجه میکنین فایل فقط یک آرایه از توع associative رو برگشت میزنه که هر کلید یک مقدار ترجمه رو برمیگرونه.

برای استفاده از ترجمه داخل فایل های بلید مثل زیر عمل میکنیم:

همونطور که متوجه شدین این روش خیلی با نظم و دقیقه و مناسب سایت های بزرگ با ترجمه های زیاده. در این روش بهتره حتما از fallback_locale با ترجمه انگلیسی استفاده کرده باشین (اگر نمیدونین جلوتر توضیح میدم)

روش دوم که ساده و خلاصه هست، روش stringمحور که با JSON انجام میشه و برای سایت های کوچیک با ترجمه های کم مناسبه. به این صورت که در مسیر resource/lang یک فایل json با نام مخفف زبان خودمون درست میکنیم برای مثال resource/lang/fa.json که همه ترجمه ها داخل اون قرار میگیره.

که نمایش اون هم در کد خیلی راحتتره. درون بلید به این صورت استفاده میکنیم:

برای ترجمه حرفه ای تر منبع رو بخونین. اما بریم سراغ راه اندازیش:

فایل در مسیر config/app.php حاوی تنظیمات ترجمه هست که شما با تنظیم اون میتونین زبان سایت خودتون رو تغییر بدین.

اول از همه fallback_locale زبانیه که اگر ترجمه ای پیدا نشد بصورت جایگزین درنظر گرفته میشه. بهتره مقدارش همون en بمونه.

locale متغیری هست که زبان فعلیه برنامست. من اینو منتقل کردم به فایل .env برای اینکار کدتون رو بصورت زیر تغییر بدین:

حالا در فایل .env متغیر زیر رو تعریف کنین

یادتون باشه حتما در آخر از دستور زیر برای دوباره تنظیم کردن کش کانفیگ استفاده کنین

در آخر چند تا از امکاناتی که لاراول بهمون میده رو بگم: میتونیم متغیر وسط متن ترجمه فراخونی کنیم. میشه بصورت داینامیک زبان رو تغییر داد و نیازی نیست داخل کانفیگ تعریف کنین و برای مثال از url پارامتر بگیرین. میتونین بصورت شرطی برای جمع و فرد ترجمه بنویسین و…

منبع :Localization

دلیل باز نشدن برنامه Visual Studio Code یا WhatsDesk در اوبونتو

امروز اومدم با VS Code کار کنم ولی هرچی میزدم برنامه باز نمیشد از دیروز هم whatsdesk اجرا نمیشد! خب این از چالش های Ubuntu هستش و وقتی میخوای اخت بگیری با یک سیستم عامل بهتره همه قلق هاشو یاد بگیری.

مدتی بود VS Code  بهم خطای  “System limit for number of file watchers reached” رو میداد و برطرفش نکردم. تا اینکه امروز کلا Visual Studio Code اجرا نشد نشد و فراموش کردم خطایی که نمایش میداد چی بود! اول فکر میکردم بخاطر فولدر vendor نوتیف میداد اما با سرچ vs code is not runnig ubuntu از اینجا Cannot open Visual Studio Code این نتیجه رسیدم که برای مشاهده لاگ اجرای VS Code از دستور زیر میشه استفاده کرد:

که با اجرای اون به خطای زیر رسیدم:
Error: ENOSPC: System limit for number of file watchers reached, watch '/snap/code'با جستجوی متن خطا “System limit for number of file watchers reached” به صفحه React Native Error: ENOSPC: System limit for number of file watchers reached رسیدم. گویا این خطا ربطی به vs code نداره و بخاطر inotify watch هست. اول بیاین خطا رو درست کنیم بعد بقیه رو توضیح میدم. برای اینکه ببینید تنظیم فعلی سیستمتون برای دنبال کردن فایل ها چقدر هست این دستور رو بزنین:

احتمالا عددی حدود ۸ هزار میده. خب وقتی شروع به نصب برنامه ها مثل whatsdesk (نسخه غیر رسمی whatsapp) یا vscode در اوبونتو میکنین این برنامه نیاز دارن بعضی فایل ها رو دنبال کنن اصطلاحا ترک کنن. اینکار توسط watch انجام میشه و محدودیت هایی براش وجود داره. برای رفع خطا کد زیر رو بزنین

این کد به انتهای فایل /etc/sysctl.conf مقدار fs.inotify.max_user_watches=524288 رو اضافه میکنه.

رفع مشکل باز نشدن برنامه ها در لینوکس اوبونتو

همین! الان برنامه هایی که باز نمیشدن راحت باز میشن!

حالا بریم سراغ اینکه inotify watch چی هست؟
اول از همه باید بدونیم خود inotify چی هست. inotify از ترکیب inode notify تشکیل شده و یک زیر سیستم (subsystem) هسته لینوکسه که تغییرات فایل های سیستم رو مشاهده میکنه و از طریق api اونها رو به برنامه های سطح بالاتر اطلاع میده. watch هم این وسط فایل ها رو برای تغییرات دنبال میکنه و هر تغییری رو ارسال میکنه به inotify.