بیژن بینایی GitHub
بیژن بینایی Rss

کشفیات این ماه

نوشته شده توسط بیژن | در دسته لینوکس | نوشته شده در ۲۲-۰۲-۱۳۹۵

۰

newgold1* Cin و Cout در لینوکس:

یادمه اولین کامندایی که از ++c بهمون یاد دادن همین cin و cout بود. انصافا هم کامندای خوبی بودن اما اینکه این ها دقیقا چطور کار می کنند رو تا همین چند روز پیش نمی دونستم. تا اینکه حین ور رفتن با کرنل اسرار پشت پردش آشکار شد.

اصولا هر برنامه ای که شما روی سیستمتون run می کنید یه processor ID یا pid داره و از اونجا که می دونید لینوکس یک سیستم عامل کاملا متنی هست. بنابراین برای هر process یک دایرکتوری به نام pid اون process در پوشه proc/ ایجاد می شه. توی این پوشه اطلاعاتی مربوط به حافظه ی process وضعیت stack، پرت های شبکه ای که در حال استفاده است و مشتی چرندیات دیگه رو می شه پیدا کرد. پیشنهاد می کنم همین الان یه سر به دایرکتوریه بزنین و ببینین چه خبره. حالا اینجا نمی خوایم تک تکشون رو بحث کنیم. و فقط تمرکز می کنیم رو همون input و output

اگه شما یه ls از یکی از این دایرکتوری ها بگیرید

$cat /proc/20/
attr/            environ          mountstats       sched
autogroup        exe              net/             schedstat
auxv             fd/              ns/              smaps
cgroup           fdinfo/          numa_maps        stack
clear_refs       io               oom_adj          stat
cmdline          limits           oom_score        statm
comm             maps             oom_score_adj    status
coredump_filter  mem              pagemap          syscall
cpuset           mountinfo        personality      task/
cwd              mounts           root             wchan

یکی از دایرکتوری هایی که به چشم می خوره به نام fd رو می تونید تو ببینید. fd مخفف file decriptor هه. این دایرکتوری رو اگه باز کنید توش یه سری فایله که از ۱ شروع می شن و می رن بالا. هر کدوم از این شماره ها نشان گر تک تک فایل هایی هست که اون proccess یاز کرده. اما بطور دیفالت سه تا فایل برای یک process وجود دارند. stdin stdout و stderr. حالا همه چی معلوم می شه. شما اگه یه چیزی تو مثلا فایل شماره صفر بنویسید اون چیزی که نوشتید پرت می شه تو خروجی:)) به همین سادگی به همین خوشمزگی پس اون cin و cout چیزی نبود جز ریختن مشتی byte در حلقوم این فایل ها

  • هندل کردن input ها

یه چن وقتی هس که به فکر ساخت موس هستم. چرا چون هر کدوم از موس هام یه مریضی دارن. یکیشون wheel اش خراب بود یکی شون double click اش بعضی وقتا triple click می شد. این corsair جدیده هم زمان boot time رو چهل برابر می کنه. حالا همه اینها رو یکی با emulate کردن یکی با quirk کردن و .... حل کردم رفت این آخری مشکل اینه که از sleep که در میام mouse دیگه کار نمی کنه و خلاصه اینکه با این مشکل جدیده حسابی اعصابم خورد شد و تصمیم گرفتم X رو از base زیر و رو کkم و مشکل رو دربیارم. در نهایت معلوم شد که مشکل از evdev بود که یا می شد با libinput که جدید تره و برا wayland نوشته شده جایگزین کردش یا صبر می کردم که باگ رو برچه های سمت کرنل رفع کنن (کرنلی ها برخلاف گنومی ها خیلی باشعورن و بعد اینکه report کردم باگ رو سریع درستش کردن و الان که دارم متن رو می نویسم رو کرنل جدید مشکل برطرف شده Lol) اگه از این چرندیات بگذریم می رسیم به جای خوبش

/dev/input/event0 رو یه دور cat کنین. وقتی موس رو تکون بدین می تونید تک تک بیتایی که از موس می یاد رو ببینید. قضیه جالب تر می شه اگه این رو پایپ کنین رو شبکه و رو یه کامپیوتر دریافتی ها رو cat کنین تو event0 کامپیوتر دوم...

دادام!!!!! شما می تونید از طریق شبکه موس یه کامپیوتری رو کنترل کنید. ( عاشق این ویژگی های هیجان انگیز لینوکسم )

  • gedit سلطان IDE ها

خب تا مدتی من از Vim استفاده می کردم. Vim تقریبا برای کد زنی توی محیط های برنامه نویسی عالیه اما اگه شما بخواید یه چیزی رو سریع prototype کنید یا مثلا یه کد spice شبیه سازی کنین یکم کار ها زیادی طول می کشه. اما این ماه به یه افزونه نسبتا کاملی برخوردم به نام external tools. این افزونه by default رو gedit نصب هست. باهاش می تونین یه دکمه تو gedit رو به script نگاشت کنین. مثلا من وقتی F12 رو می زنم spice فایلی که الان رو gedit باز هست رو simulate می کنه. با این tools ساده می تونین از gedit یه IDE تمام عیار بسازید

  • Latexila یا آدم می شه یا آدمش می کنیم

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

  • Search گنوم اون قدر ها هم بد نبود

چن روز پیش داشتم با گنوم کار می کردم که یهو به ذهنم رسید کاشکی می شد اسم فایلت رو تو سرچ overview می ردی و فایلت رو می آورد و باز می کرد. یه سرچی که زدم توی نت دیدم به! توی همین دو سه ورژن آخر گنوم دقیقا همین فیچر رو اضافه کردن. یه برنامه ای وجود داره به نام tracker. کارش اینه که فایل هاتون رو index کنه. متن هاتون رو بخونه و موزیک هاتون رو براساس خواننده دسته بندی کنه. خلاصه اینکه اگه یه سر برین setting قسمت search و tracker اتون رو روشن کنید باید یه اتفاقاتی بیافته.

متاسفانه این سیستم یکم جدیده برا همین خیلی UX درست و حسابی نداره. برا همین من یه دور روند Index کردن و نکاتی رو که خودم بهش خوردم رو اینجا ذکر می کنم.

قبل از شروع tracker لازمه که اون رو تنظیم کنید برای این کار (خدا رو شکر) یه UI نوشته شده که اسمش هست tracker-preference. نرم افزار خوبی هست. توش می تونین تنظیم کنید که چه فلدر هایی track بشن و چه فلدر هایی نشن. پیشنهاد شخصیم اینه که در مرحله اول خیلی folder بزرگی رو انتخاب نکنید. مثلا من روی سیستمم یه فلدر که فقط توش کتاب بود به حجم ۵ گیگ رو انتخاب کردم. با این که سیستم روی SSD ران بود و قدرت پردازشیش هم نسبتا قابل قبول فرایند index کردن حدود ۲۰ دقیقه طول کشید. بنابراین مثلا اگه من می ذاشتم کل سیستم index شه یک روز کامل رو باید صبر می کردیم.

نکته دوم اینکه توی این UI ای که گفتم یکی دو تا آپشن وجود داره که مثلا فقط اگه سیستم تحت هیچ load ای نبود index کن. چرا که رو سیستم های نسبتا قدیمی تر index کردن باعث لگ های شدیدی می شه برا همین ظاهرا این آپشن رو گذاشتن که اون برطرف بشه. اما نکته اینجاس که برنامه نویس هاش هیچ timeout ای در نظر نگرفتن. یعنی اگه یه لحظه daemon ترکر تشخیص بده cpu اتون تحت فشار نیست فعال می شه کلاک بعدی تصمیمش عوض می شه. برا همین این option در واقعیت نه تنها lag رو از بین نمی بره بلکه باعث می شه index کردن کند تر هم بشه که نتیجش می شه اعصاب خوردی بیشتر. (واقعا مغز این دولوپرهاشون رو)

خب حالا اگه خواستین یه feedback ای بگیرین که tracker الان تو چه حالی هست.... می تونین دستور

tracker daemon -f

رو بزنید که معمولا جلو هر قسمت یا باید idle باشه یا یه درصد که میزان پیشرفت رو نشون می ده. اگر دیدین احیانا که درصد ثابت مونده احتمالا یه محدودیتی توی اون UI تنظیمات گذاشتین مثلا اگه به باتری وصل بودم یا سیستمم حجم خالیش از حدی کمتر بود.

اگه همه چی درست پیش بره خروجی کامند بالا می شه یه چی به این شکل.

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

  • یک player بدون اعصاب خوردی و قدرت بالا

عموما ما دنبال این هستیم که workspace امون رو تا می شه خالی نگه داریم. من دوست دارم که آهنگم رو اجرا کنم. صفحش رو ببندم و هر وقت لازم شد برم و آهنگ رو توش عوض کنم. اما با اینکه چندین بار این رو به developer ها گنوم گفتم و سرش کلی page ویکی نوشتن و پاک کردن و نوشتن و پاک کردن که دیگه کلا بیخیالشون شدم. تو این مورد خیلی دنبال یه player خوب برا گنوم گشتم اما پیدا نشد که نشد. چند روز پیش به یک combination عالی تو این زمینه خوردم یه برنامه ای به نام mpd و gmpc که با ترکیب کردنشون با covergloobus یه player فوق حرفه ای رو براتون می سازه

لذت ببرید