Gnu Tips

وبلاگ شخصی وحید معانی

تصحیح دستور which در ZSH

سلام

اگر شما هم مثل من از zsh استفاده می‌کنید حتماً تا حالا متوجه شدین که برای استفاده از دستور which با مشکل مواجه هستین. برای اونهایی که نمی‌دونن بگم مشکل این هست که وقتی که شما برای پیدا کردن محل واقعی یه دستور از دستور which استفاده می‌کنید به جای جواب مورد نظر به احتمال زیاد با الیاس(alias) اون دستور مواجه خواهید شد. برای مثال می تونید which ls رو امتحان کنید:

 مشکل از این جا ناشی میشه که zsh یه دستور داخلی به همین اسم داره که الویت اولش برگردوندن الیاس هست. برای غلبه بر این مشکل کافیه با دست خود zsh بهش رکب بزنیم. :D یعنی یه الیاس تعریف می‌کنیم که دستور which رو به دستور which اصلی که از مسیر /usr/bin/which اجرا می‌شه تغییر بده. یعنی خط زیر رو به فایل .zshrc اضافه می‌کنیم:

بعد یا ترمینال رو بسته و دوباره باز می‌کنیم یا خیلی راحت دستور source .zshrc رو اجرا می‌کنیم :)

بدون درد و خونریزی :)

استفاده از کلیدهای خاص کیبورد

سلام

در اکثر کیبورد ها یه سری دکمه‌ی اضافه با کاربردهای خاص وجود داره و در بعضی هم کلیدهای Fn رو میشه با روشن کردن یه حالت خاص به کلید‌هایی با کاربرد خیلی خاص به کار برد D:

کیبورد منم از اون نوع دوّم هست. هیچ وقت به فکرم نرسیده بود که از این کلید‌ها استفاده کنم چون پلیری بتونه همیشه زیر دستم باشه نداشتم. ولی با نصب MPD و استفاده از ترمینال به فکرم رسید ازشون استفاده کنم. بله چرا که نه؟! درستکه همیشه ترمینال بازه و بیشتره وقتا جلو روم هست ولی خوب زدن یه دکمه کجا تایپ کردن یه دستور کجا! اینجوری نگام نکنید تنبل نیستم ولی صرفه جویی همه جا خوبه مخصوصاً اگر بنا به یاد گرفتن یه چیزایی جدید هم باشه.

بریم سر اصل کار. اوّل کار باید می‌دونستیم این کلید‌ها چه کدی تولید می‌کنن چون علاوه بر اینکه کلیدهای پر استفاده‌ای نیستن حتی شاید استاندارد هم نباشن. برای اینکار از دستور xev استفاده می کنیم. در توضیح دستور در فایل manاش نوشته شده «print contents of X events» یعنی این دستور همه‌ی اتفاقاتی که توی X می افته رو نشون می‌ده ولی خب همش برای من لازم نیست. با اجرای این دستور پنجره‌ی سفیدی باز می‌شه و هر بار که کلیدی میزنم اطلاعاتی در موردش چاپ میشه از جمله keycode و keysym کلید مورد نظر. پس برای اینکه ترمینال زیاد شلوغ نشه من خروجی رو فـــیلتر می‌کنم:

خب با این کار خروجی من چیزی شبیه به این خواهد بود:

 ترجیح می‌دم از keysymها استفاده کنم تا راحتتر بفهمم چی به چیه :) خب الان باید کاری کنم که با زدن مثلاً کلید XF86AudioPlay دستور مورد نظرم اجرا بشه که در این زمان شروع به پخش آهنگ با استفاده از MPD هست و چون من از MPC به عنوان کلاینت استفاده می‌کنم دستورم میشه:

 این کار رو به روش‌های مختلفی میشه انجام داد ولی چون من از i3 استفاده می‌کنم بهتر دونستم که از فایل کانفیگ همون استفاده کنم برای این کار. در نتیجه دستورات زیر رو به فایل کانفیگ اضافه می‌کنم:

اگر به توضیحات بیشتر در مورد اینا لازم دارید می‌تونید به «یادداشتی برای کانفیگ i3» از شاهین سر بزنید.

حالا کافیه من ویندوز منیجرم رو ریستارت کنم (Mod+Shift+r) تا بتونم از این کلید‌های جدیدم استفاده کنم :)

البته بعد از یه مدت دیگه این کار هم جواب نمی‌ده و باید دنبال یه کار جالبتر باشم. ۲ تا ایده دارم که اولی فعلاً مجبور به مسکوت موندن شده ولی دومی شانس عملی شدن رو هنوز داره :)

بدست آوردن حجم یک مسیر در ترمینال [Python]

سلام

آدمی که داره برنامه نویسی یاد می‌گیره باید هر ایده و فکری به ذهنش رسید برنامش رو بنویسه حداقل باید تلاشش رو بکنه. از ریکد کردن یه بازی گرفته تا راه رفتن گربه رو دیوار.

python

پریروز می‌خواستم یه پوشه با حجم بالا به گوشی انتقال بدم که متوجه شدم یه حجم غیر باوری از فضای گوشی گرفته شده بدون اینکه من متوجه بشم. داشتم دنبال فایلهای اضافی بودم و به این که دستور ls نمی‌تونه حجم مسیر‌ها رو نشون بده و فقط حجم فایل‌ها رو نشون میده غر می زدم که یهو فکر کردم آیا غر زدن درسته؟! خب حجم پوشه همون مجموع حجم فایل‌های داخل اونه دیگه خیلی راحت باید بشه حجمش رو فهمید. البته نه با ماشین حساب و جمع زدن دستی. دیدم یه ایده‌ی خوبی هست که بتونم روش وقت بزارم و چیزای جدید یاد بگیرم نا سلامتی داشتم یه زبان جدید یاد می‌گرفتم. علی الحساب با ترکیب bash و python یه چیزی سر هم کردم که جواب بده ولی دیدم این دیگه چیز جدیدی نداشت که من یاد بگیرم فوقش در حد تمرین چیزهایی بود که بلد بودم. در نتیجه سعی کردم که همش رو با python بنویسم.

چالش اول این بود که بتونم حجم هر فایل رو پیدا کنم البته با python وگرنه میشه با اجرای یه فایل bash داخل اسکریپت اصلی اینا رو بدست آورد. برای این کار از ماژول os، تابع path و زیر تابع getsize استفاده می کنیم. برای مثال دستور زیر حجم فایل music.mp3 رو در متغیر size ذخیره می‌کنه:

خب الان باید بتونیم لیست همه‌ی فایل‌های موجود در مسیر رو پیدا کنیم که البته کار راحتیه ولی کار وقتی سخت می‌شه که یادمون می‌افته که باید حجم پوشه‌های داخلی رو هم پیدا کنیم. کارهای زیادی برای این مشکل می‌شه کرد از جمله استفاده از روش بازگشتی ولی خوبه که به اصل سادگی (KISS principle) پایبند باشیم من فقط لازم دارم لیست همه‌ی فایل‌های مسیرم رو پیدا کنم تا با دستور بالا بتونم حجمش رو پیدا کنم. البته باید به این نکته توجه کرد که استفاده‌ی صرف از لیست فایل‌ها درست نیست و جواب نمی‌ده (چرا؟ چه سؤال خوبی یادداشت کنید به عنوان تمرین برای جلسه‌ی آینده :)‌ ) پس لازم دارم مسیر کامل فایل رو داشته باشم. برای این کار می‌تونم دوباره از ماژول os و تابع path استفاده کنم امّا با زیر تابع join به شکل زیر:

 خب با این کار یه لیست داریم شامل مسیر کامل همه‌ی فایل‌های موجود در پوشه‌ی مورد نظرمون. پس کافیه یکی یکی اینارو بدیم به زیر تابع getsize و جمشون رو جمع بزنیم. :) البته با این کار حجم پوشه برحسب بایت تولید میشه که باید با تقسیم بر ۱۰۲۴ به تعداد مورد نیاز خوندنش رو آسونتر بکنیم. کد نهایی من این شد:

کد رو می تونید در گیتهاب و در این آدرس پیدا کنید.

پی نوشت ۱: توجه داشته باید مقدار حجمی اسکریپت بر می‌گردونه کاملاً دقیق نیست چون در مرحله‌ی آخر گرد میشه.

پی نوشت ۲: مقداری که اسکریپت برمی‌گردونه دقیقتر از مقداری هست که nautilus برای یک پوشه برمی‌گردونه. دلیلش این هست که ناتیلیوس مقدار حجم هر فایل رو به همراه گرد کردن بدست میاره و با جمع اونها مقدار حجم پوشه رو بدست میاره و بازم گردش می کنه یعنی اگر پوشه دارای زیر پوشه‌ها و فایل‌های زیادی باشه تعداد گرد شدن بیشتر می‌شه و در نتیجه مقدار دقیقی حاصل نمی‌شه. می تونید امتحان کنید :)

پی نوشت ۳: شاید راه‌های دیگه‌ای هم برای پیدا کردن حجم یه پوشه باشه ولی خب من خواستم یه راه خودم بسازم و چیزای جدید یاد بگیرم که خب فک کنم موفق شدم :)

زندگی بهتر: فرهنگی که از دست رفت.

نمی دونم چرا یه مدت دستم به نوشتن نمی اومد. اما با دیدن یه عکس (در پایین می بینید.) حس نوشتن بهم دست داد.

عکس اینه:

کلاغ با فرهنگ

کلاغ با فرهنگ

خب لازم نیست بگم که این کلاغ خیلی خیلی با فرهنگتر از خیلی از آدم هایی هست که دور و اطرافم دیدم منظور از آدمهای دور و اطراف همونهایی هستن که توی اجتماعات مختلف با من شریک هستن. از شهر و کوچه گرفته تا مدرسه و دانشگاه و اتوبوس. خب قطعاً از شنیدن اسم دانشگاه هم تعجب نکردین! اگر تعجب کردین باید تأکید کنم که بله منظورم همون قشر تحصیل کرده و (مثلاً) با فرهنگ اجتماع هست.

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

  1. کسی کاغذ بیسکویتش رو بندازه زمین وقتی سطل آشغال درست ۱۰ قدم اون ور تر قرار گرفته.
  2. وقتی بهش تذکر دادین که آشغال رو زمین ننداز بهتون نگاه عاقل اندر سفیه تحویل داد.
  3. وقتی آشغال رو از زمین برداشتین و انداختین سطل آشغال بقیه آدمای دور و اطراف (البته تعداد خیلی اندکیشون) شما رو قهرمان خودشون بدونن.
  4. وقتی درست زیر پل عابر پیاده از عرض جاده کمربندی عبور کنن.
  5. وقتی صبح رسیدی دانشگاه و دیدی کتابخونه پر از آشغال هست.
  6. وقتی برای توجیه اینکارها ۱۰۰۱ تا دلیل سیاسی و اقتصادی آورند.

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

یه زمانی خودمون و مردممون رو خیلی با فرهنگ می دونستیم و متأسفانه هنوز هم می دونیم و متوجه نیستیم که از اون فرهنگ فقط پوستش مونده. اسمش و یه عکسی که همیشه جلو رومون گرفتیم و فکر می کنیم که واقعاً داریم می بینمش.

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

عبور دانشجویان از عرض جاده ی کمرنبدی زیر پل عابر پیاده

عبور دانشجویان از عرض جاده ی کمربندی زیر پل عابر پیاده

محوطه ی دانشگاه - سطل آشغال و …

محوطه ی دانشگاه – سطل آشغال و …

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

بیاین دست به دست هم بدیم و اطرافیانمون رو قانع کنیم این برای زندگی اونها هم می تونه مفید باشه. بهشون یادآوری کنیم درسته با یک گل بهار نمیشه ولی گلها همگی در یک ساعت و یک لحظه شکوفا نمیشن. حتی اگر بقیه گلها هم شکوفا نشن هیچ چیزی نمی تونه از زیبایی اون تک گل کم کنه.