نوشته‌های ترمینالی
2.65K subscribers
425 photos
12 videos
32 files
2.25K links
Download Telegram
این تصویر هم دوست دارم از تولد لینوکس
Forwarded from a pessimistic researcher (...)
"کتاب سیندرلا"

یکی از قدیمی ترین، پایه ای ترین و مهم ترین مباحثی که در تئوری علم کامپیوتر مطرح شده، Automata Theory نام داره. در این علم سعی میکنیم ماشین هایی که توان محاسبه ای دارن رو خیلی Abstract در نظر بگیریم و از جزئیاتی که دارن صرف نظر کنیم. همیشه هم از ساده ترین ماشین ها شروع میکنیم به طور مثال ماشین بدون حافظه ی محدود و قطعی. محدود یعنی ماشین ما تعداد حالت های مختلفی که میتونه به ازای هر نوع ورودی داشته باشه محدوده و منظورمون از قطعی اینه که به ازای هر ورودی تنها به یک حالت دیگه میره. البته ورودی هم باید محدود باشه. حالا بگذریم. شاید به خودتون بگید چرا انقدر ماشین مون ساده و محدود شده است؟ چون اگر بتونیم با این ماشین مسئله های زیادی رو حل کنیم، خوبیش اینه که بخاطر ساده بودن ماشین تمام قضایا و لم هایی که مطرح میشه روی مسئله هایی که با این ماشین حل میشه، به راحتی اثبات میشه. یه جورایی کارمون راحت تره. حالا اگر این ماشین نتونه مسئله هایی رو حل کنه اونوقت باید بریم سراغ ماشین هایی که محدودیت کمتری دارن و در نتیجه قدرت محاسباتی بیشتری دارن ولی خب حسابی کار ما رو سخت و پیچیده میکنن. Automata Theory درباره همین ماشین ها و مسائلی که میتونن حل کنن صحبت میکنه.
کاربردهای زیادی این علم داره. یکی از کاربردهاش ساخت زبان های برنامه نویسی و Compiler ها و Interpreter هاست. یکی دیگر از کاربردهای اساسی اش در علم Formal Verification و Concurrency Theory نمود پیدا میکنه. حتی توی علم Bioinformatic هم ردپایش دیده میشه اگر Cellular Automata و Game of Life رو سرچ کنید بیشتر باهاش آشنا میشید.

این حرفا رو گفتم تا بهتون بهترین کتابی رو که برای این علم نوشته شده و خیلی ها این کتاب رو هم تراز با کتاب های معروف Knuth میدونن، معرفی کنم.

کتاب "Introduction to Automata Theory, Languages, and Computation" که اکثرا با نام مستعار "Cinderella Book" میشناسنش. این کتاب توسط برندگان جایزه Turing یا همون نوبل محاسبات یعنی آقایان Jeffrey Ullman و John Hopcroft نوشته شده.
دلیل اینکه به این کتاب Cinderella Book میگن اینه که روی جلد اولین ویرایش کتاب عکس یک دختر خانمی رو کشیده که داره با کمک یه ماشین ( شبیه ماشین هایی که تام برای به دام انداختن جری می ساخت :))) ) بند کفش هاش رو میبنده و یا باز میکنه.

در ویرایش دوم کتاب، آقای Rajeev Motwani به جمع نویسنده های کتاب اضافه میشن و کتاب به شدت دچار تغییر میشه و خیلی از دانشمندا از این تغییر انتقاد کردن. توی ویرایش دوم به بعد خیلی از مباحث پیشرفته حذف شد و به جاش سعی کردن تعداد مثال ها و مسائل رو افزایش بدن.
به طور مثال آقای Jeffrey Shallit که یکی از دانشمندان خبره علوم کامیپوتر هستش، سال ۲۰۰۸ درباره کتاب سیندرلا گفت :
"they have removed all good parts"

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

خود بنده پیشنهادم ویرایش اول این کتاب هستش. از وقتی عکس خانم سیندرلا از روی این کتاب پاک شد برکت از این کتاب رفت :))))

ویراست سوم و اول کتاب روی کانال @debrary قرار داره.
این هم وبسایت کتاب هستش:
https://infolab.stanford.edu/~ullman/ialc.html

آقای Ullman که یکی از نویسنده های کتاب هستش، سال ۲۰۱۲ یک سری فیلم با استناد به ویرایش سوم کتاب ضبط کردند که میتونید از طریف لینک زیر به طور رایگان ثبت نام کنید و ازشون استفاده کنید :
https://online.stanford.edu/courses/soe-ycsautomata-automata-theory
💯1
تا حالا اینجا terminal emulator معرفی نکردم اما جدا از gnome-terminal و xfce4-terminal که گزینه‌های معقول و خوبین، kitty هم جالب به نظر میاد. قابل کانفیگه و خودش کلی ابزار جالب داره. مثلا diff دو تا فایل رو با استایل شبیه github میگه، یا مثلا می‌تونه یه عکس رو تو خود ترمینال چاپ کنه!
https://sw.kovidgoyal.net/kitty/#kittens

kitty is designed for power keyboard users. To that end all its controls work with the keyboard (although it fully supports mouse interactions as well). Its configuration is a simple, human editable, single file for easy reproducibility (I like to store configuration in source control).

The code in kitty is designed to be simple, modular and hackable
چند تا کانفیگ خوب ازش رو می‌تونید اینجا پیدا کنید:

https://gist.github.com/sts10/56ffa75c87e1cc2af9a9309d5baeb2ff
و
https://gist.github.com/cleanunicorn/ddca136f9cdf8a9c9c0529c0373dd19a

و اینم کانفیگ sample پیشنهادی خودشون
https://sw.kovidgoyal.net/kitty/_downloads/433dadebd0bf504f8b008985378086ce/kitty.conf

دقت کنید که فایل رو باید تو این مسیر بذارید:
~/.config/kitty/kitty.conf
۹۹ تا برنامه ی racket که خروجی I love you چاپ میکنن.
https://matt.might.net/articles/i-love-you-in-racket/
بچه ها کسی آموزش مختصر مفیدی از خوندن لاگ های journalctl داره؟
همینطوری دارم تو لاگ ها پرسه می‌زنم، همشم ماشالا fatal error =)
یا کلا چطوری میشه مشکلات کرنل رو پیگیری کرد و حل کرد.

مثلا همچین چیزی
https://www.digitalocean.com/community/tutorials/how-to-use-journalctl-to-view-and-manipulate-systemd-logs
به جای کار با ORM مستقیم SQL یاد بگیرید.
https://wozniak.ca/blog/2014/08/03/1/index.html
یه بار سیستم رو آپدیت کردم و دیگه ویندوز جزو گزینه های بوت گراب نبود (چه بهتر!)
وقتی os prober می‌زدم می‌شناخت ویندوز رو اما توی گزینه هاش نمی‌آورد.
همچنین update grub هم تاثیر نداشت.

جریان اینه که دستور mkconfig هست که فایل کانفیگ گراب رو می‌سازه، این باید پیشفرض os prober رو هم اجرا کنه ولی نمیکرد، چرا؟ چون پیشفرض عوض شده بود. البته خودش warning میداد که عوض شده و حواست باشه اما توی کلی لاگ گم میشد.
خلاصه همینطور که اینحا گفته باید GRUB_DISABLE_OS_PROBER=false رو به فایل تنظیمات گراب ( /etc/default/grub ) اضافه می‌کردم. حالا mkconfig دیگه از روی تنظیمات جدید می‌سازه پس باید mkconfig رو مجدد اجرا کرد.
https://arcolinuxforum.com/viewtopic.php?t=2668
نوشته‌های ترمینالی
یه بار سیستم رو آپدیت کردم و دیگه ویندوز جزو گزینه های بوت گراب نبود (چه بهتر!) وقتی os prober می‌زدم می‌شناخت ویندوز رو اما توی گزینه هاش نمی‌آورد. همچنین update grub هم تاثیر نداشت. جریان اینه که دستور mkconfig هست که فایل کانفیگ گراب رو می‌سازه، این باید…
راستی mkconfig فقط کانفیگ رو چاپ میکنه، برای اینکه تاثیر داشته باشه باید توی یه فایلی بریزید نتیجه‌ش رو، دستور update-grub هم اگه داشته باشید همین کار رو میکنه اما اگه نداریدش مهم نیست و خودتون می‌تونید با چنین چیزی جایگزینش کنین:
sudo grub-mkconfig -o /boot/grub/grub.cfg