این ایمکس دوست داشتنی (تنظیمات ظاهری)

برای پاک کردن Scroll-bar و Toolbar تنها کافیست توابع‌شان را با یک آرگومان منفی صدا بزنیم. به صورت زیر:

(tool-bar-mode -1)

(scroll-bar-mode -1)

همینطور می‌توان با اختصاص دادن آرگومان منفی به تابعmenu-bar-mode منوی بالای فریم ایمکس را هم حذف کرد. ولی از آن‌جایی که تازه کاریم و هنوز خیلی چیز‌ها هستند که می‌توان با گردش در منو‌ها یاد گرفت‌، از این کار صرف نظر می‌کنیم. خوبی این منوبار این است که عموما‌، بسته‌های بزرگ ایمکس‌، یک منوی اختصاصی برای خودشان آماده می‌کنند و این خیلی می‌تواند در اوایل آشنایی با یک بسته کمک کننده باشد.

رنگ‌بندی پنجره‌ها

یکی از ساده‌ترین راه‌ها برای تعیین رنگ‌بندی پنجرهٔ ایمکس‌، استفاده از قالب‌های آماده است. خوشبختانه در کنار قالب‌های ساده و ساخته شده از روی علاقهٔ شخصی‌، قالب‌هایی نظیر Solarized و Zenburn که اهداف خاصی را از رنگ‌بندی‌شان دنبال می‌کنند نیز وجود دارند. برای نصب‌شان تنها کافیست دستور متناسب با نام بسته‌شان را به صورت زیر وارد کنید:

M-x package-install RET solarized-theme RET
M-x package-install RET zenburn-theme RET

جدای از این دستورات با جستجو در package-list-packages می‌توانید هم به این پوسته‌ها و هم به خیل عظیم پوسته‌های آمادهٔ ایمکس دسترسی داشته باشید که تست کردن‌شان خالی از لطف نیست. پس از نصب پوستهٔ مورد نظر‌، کافیست با استفاده از دستور M-x load-theme THEME_NAME آن را فعال کنید. البته از آن‌جایی که دل‌تان نمی‌خواهد بعد از هر بار لود شدن ایمکس‌، مجبور به اجرای این دستور باشید‌، کافیست‌ دستور زیر را در ‎.emacs‌تان قرار دهید:

(load-theme 'zenburn t)

توجه داشته باشید که پوستهٔ Solarized دارای دو حالت تیره و روشن است‌، که شما هم باید در هنگام وارد کردن نامش‌، به این نکته توجه کنید.

رنگ‌بندی با استفاده از ‎.Xresources

روش دیگر‌ تعیین رنگ‌بندی پنجرهٔ ایمکس‌، با استفاده از فایل ‎.Xresources سیستم‌هایی است که از X برای محیط گرافیکی‌شان استفاده می‌کنند. روش کار با این فایل را در این پست توضیح دادم و همینطور ابزار 4bit را برای ایجاد رنگ‌های متناسب با هم معرفی کردم. من خودم فعلا از این روش استفاده می‌کنم که دو دلیل عمده دارد:

  1.   رنگ‌بندی برنامه‌هایی که از این سیستم استفاده می‌کنند یک پارچه می‌شوند. هم اکنون پوستهٔ استفاده شده برای ترمینال urxvt و ایمکس‌ام کاملا شبیه به هم است که خیلی خوب است.
  2. پوستهٔ متناسب با سلیقه‌ام را در پوسته‌های آمادهٔ ایمکس پیدا نکردم. Zenburn عالی بود‌، ولی رنگ‌هایش چون چشم‌هایم را خسته نمی‌کردند‌، خودم خسته می‌شدم D: و Solarized هم درخشندگی لازم را برای جلب توجهم نداشت. من عادت به نگاه کردن سر سری نوشته‌ها قبل از خواندن‌شان دارم و برجسته بودن (درخشندگی) رنگ‌های استفاده شده در متن می‌تواند به پیدا کردن نکات جالب توجه کمکم کند.

پوستهٔ ‎.Xresources‌ای که من استفاده می‌کنم را می‌توانید در این gist پیدا کنید.

تنظیم Font

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

من برای فونت پیش‌فرض از Inconsolata استفاده می‌کنم که به نظرم برای کد نوشتن عالی است. همین‌طور برای کاراکتر‌های فارسی‌، از فونت tahoma استفاده می‌کنم. بله‌، بله می‌دانم که الان می‌گویید که قبلا گفته‌ای tahoma فیلان‌، tahoma بیسار! بله‌، هنوز هم می‌گویم. ولی tahoma تنها فونت فارسی‌ای است که در اندازهٔ کوچک (8pt) ‌این‌قدر خوب قابل خواندن است و از قرار با فونت‌های مناسب کد‌نویسی‌، هم‌نشینی خوبی دارد! (باشد که به غیرت آن‌ها که زور طراحی فونت مناسب را دارند بر بخورد و دست به کار شوند) برای اعمال فونت‌ها به صورت زیر عمل می‌کنیم:

(set-default-font "Inconsolata-10")



(set-fontset-font
   "fontset-default"
   (cons (decode-char 'ucs #x0600) (decode-char 'ucs #x06ff)) ; arabic
   "Tahoma-8")

در خط اول‌، همان‌طور که معلوم است‌، فونت Inconsolata با سایز 10 را به عنوان فونت پیش‌فرض قرار دادیم. در ادامهٔ قضیه هم برای محدوده کاراکتر‌های عربی یونیکد‌، فونت Tahoma با سایز 8 را برای نمایش انتخاب کردیم. نتیجهٔ کار‌، فوق‌العاده قابل قبول است.

برجسته کردن خط حاضر و شماره خط‌ها

یکی از ویژگی‌های به درد بخور ویرایشگر‌های جدید‌، شمارهٔ خط‌هاست که در سمت چپ‌شان نوشته می‌شود. در حین توسعهٔ برنامه‌های پایتونی‌، مزیت این شماره‌ها کاملا مشهود است. این است که با اضافه کردن این دستور به ‎.emacs آن‌ها را به ایمکس‌مان اضافه می‌کنیم:

(global-linum-mode 1)

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

(global-hl-line-mode t)

(set-face-background 'hl-line "#000")

در خط اول اعلام می‌کنیم که ویژگی برجسته کردن خط حاضر را فعال کن. بسیاری از قالب‌های آماده‌، مقداری برای رنگ پس زمینهٔ این خط تعیین می‌کنند. اما از آن‌جایی که من با استفاده از ‎.Xresources رنگ‌بندی قالب را تعیین کرده‌ام‌، باید این کار را به صورت دستی انجام دهم (خط دوم). نکته این‌جاست که ممکن است قالب‌تان رنگ خوبی برای‌تان نگذاشته باشد که باز هم می‌توانید با همین خط دوم ترتیبش را بدهید.

این ایمکس دوست داشتنی (مدیر بسته)

فعلا فکر کنم همین‌ها بودند که می‌خواستم بگویم. برویم سر اصل مطلب:

از نسخهٔ ۲۴ ایمکس به این‌طرف‌، یک مدیر بستهٔ عالی هم به آن اضافه شده. این یعنی این که نصب‌، نگهداری و بروزرسانی بسته‌های اضافه‌ای که روی ایمکس سوار می‌کنیم‌، فوق‌العاده آسان شده. پس برای شروع کار‌، چند مخزن بسته‌های ایمکس (جایی که ایمکس می‌تواند ابزار‌های جدید را پیدا‌، دانلود و نصب کند) را به این مدیر بسته می‌شناسانیم. برای این کار کافیست خطوط زیر را به فایل ‎.emacs اضافه کنیم. این فایل در سیستم‌عامل‌های یونیکس‌بیس (Linux, Mac, BSD و غیره) در پوشهٔ خانگی‌تان پیدا می‌شود. در مورد ویندوز نمی‌دانم این فایل کجاست و خود ویندوزی‌تان باید بروید پیدایش کنید. ولی روش کار غیر از پیدا کردن این فایل‌، برای‌تان مشابه با یونیکس‌بیس‌هاست ;-)

(require 'package)

(setq package-archives '(("gnu" . "http://elpa.gnu.org/packages/")
             ("marmalade" . "http://marmalade-repo.org/packages/")
             ("melpa" . "http://melpa.milkbox.net/packages/")))
(package-initialize)

در خط اول می‌گوییم که بستهٔ مدیر بسته‌ها (Package Manager) را لود کن. خط دوم‌، سه مخزن مختلف را به متغیر package-archives که مدیر بسته از آن برای دیدن لیست مخازن استفاده می‌کند نسبت می‌دهیم. و در خط سوم با صدا زدن تابع package-initialize به ایمکس می‌گوییم که بسته‌های نصب شده با Package Manager را در کجا پیدا کند.

تکه کد ارائه شدهٔ بالا به زبان Elisp است. زبانی که تنظیمات و بسته‌های ایمکس عموما با آن نوشته می‌شوند. وقتی ایمکس را اجرا می‌کنیم‌، ایمکس به صورت خودکار فایل ‎.emacs را برای یافتن تنظیماتش صدا می‌کند. اگر خدای ناکرده در حین انجام تنظیمات این‌چنینی‌، خرابکاری‌ای کردید و دیگر ایمکس‌تان لود نشد‌، لازم نیست که بروید یک ویرایشگر دیگر پیدا کنید و ‎.emacs را ویرایش کنید تا درست شود. کافیست ایمکس را به صورت emacs -Qاجرا کنید که دیگر فایل ‎.emacs را لود نکند. سپس به ویرایش‌تان بپردازید و ایمکس را دوباره لود کنید. در ادامهٔ‌ این سری پست‌ها‌، بار‌ها پیش می‌آید که ما فایل ‎.emacs را ویرایش می‌کنیم. و از آن‌جایی که ایمکس تنها در هنگام بالا آمدن آن را لود می‌کند‌، ممکن است خسته کننده به نظر بیاید که همیشه و بعد از هر تغییر‌، ایمکس را ببندید و دوباره باز کنید. برای این کار می‌توانید از یکی از دو روش زیر بهره بگیرید:

eval-buffer

اگر راهنمای همراه ایمکس را خوانده باشید‌، حتما می‌دانید که چطور توابع تعریف شدهٔ ایمکس را صدا کنید. اگر نه‌، من بهتان می‌گویم (ولی تنبلی

موقعیت خط اعلان در فریم ایمکس. موقعیت خط اعلان در فریم ایمکس.

را کنار بگذارید و یک بار هم که شده‌، سر سری آن راهنما را بخوانید. ضرر نمی‌کنید) کافیست Meta-x  را وارد کنید (منظور از Meta عموما کلید Alt  است‌. بعضی کامپیوتر‌ها کلید دیگری برای این کار دارند که من فکر نمی‌کنم شما از آن‌ها داشته باشید. اگر هم دارید حتما خودتان می‌دانی

د آن کلید کدام است ;-)). پس از وارد کردن این دستور‌، در محل اعلان فریم ایمکس (پایین‌ترین خط فریم) نشان‌گرتان را می‌بینید که منتظر است دستوری برایش اعلام کنید. این دستور در واقع اسم یک تابع از ایمکس‌تان است. تابع eval-buffer  کارش این است که کد Elisp موجود در بافر حاضر (بافری که وقتی درون آن هستید تابع را صدا کرده‌اید) را اجرا کند. این اجرا بلافاصله روی تنظیمات ایمکس‌تان اعمال می‌شود و می‌توانید نتیجه‌اش را در ایمکس‌تان ببینید. البته گاها تغییرات آن‌قدر بزرگ است که بهتر است ایمکس را دوباره اجرا کنید تا عواقبش را ببینید. ولی برای خالی نبودن عریضه‌، این دستور می‌تواند کمک حال خوبی باشد.

C-x C-e

حتما توجه کرده‌اید که هر دستور ایمکس درون یک جفت پرانتز نوشته می‌شود. شما می‌توانید‌، بعد از نوشتن هر دستور‌، با انتقال نشانگر به آخر آن (بعد از پرانتز) و زدن دستور C-x C-e  اجرایش کنید و نتیجه را ببینید. برای مثال دستور زیر را وارد کنید:

(+ 1 2)

نشانگر را به آخرش ببرید و C-x C-e را وارد کنید. در خط اعلان نتیجهٔ جمع ۱ و ۲ را می‌بینید. از این روش می‌توانید برای تغییرات کوچک و زمانی که بافر‌تان زیادی بزرگ است و نیاز به زمان زیادی برای لود کامل دارد بهره ببرید. دیگر زیاده گویی نمی‌کنم و به سراغ راهنمای مدیر بسته می‌روم:

مدیر بسته

کار با این بسته فوق‌العاده آسان است. بعد از کانفیگی که نشان‌تان دادم‌، کافیست تابع package-list-packages را صدا بزنید ( M-x package-list-packages ). امیدوارم این را بدانید که نیازی نیست همهٔ اسم تابع را تایپ کنید و با دکمهٔ Tab می‌توانید اسم تابع را کامل کنید D: بعد از چند ثانیه‌، ایمکس لیست آخرین بسته‌ها را از اینترنت دریافت می‌کند و بهتان نشان می‌دهد. در ادامهٔ این لیست شما بسته‌هایی که با استفاده از این ابزار نصب کرده‌اید (می‌کنید) و لیست بسته‌های پیش‌فرض ایمکس را می‌بینید.

برای دیدن توضیحات مربوط به هر بسته‌، کافیست به روی نامش رفته وRET(اینتر خودمان) را بزنید. برای نصبش کافیست وقتی نشانگر روی نام بسته است کلید i  را بزنید تا برای نصب انتخاب شود. توجه کنید که فعلا فقط انتخابش کرده‌اید و بسته نصب نشده. با این کار کنار نام بسته (سمت چپ) یک I اضافه می‌شود که یعنی بسته برای نصب انتخاب شده. همینطور با زدن U (حرف U بزرگ) مدیر بسته به صورت خودکار بسته‌هایی که نیاز به به روز رسانی دارند را انتخاب می‌کند. بس از انتخاب بسته برای نصب یا به روز رسانی‌، کافیست که یک x  تایپ کنید. مدیر بسته شروع به نصب بسته‌ها می‌کند.

تابع package-install

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

M-x package-install RET PACKAGE_NAME RET

M-x package-install PACKAGE_NAME RET

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

این ایمکس دوست داشتنی (مقدمه)

لوگوی Gnu Emacs. لوگوی Gnu Emacs.

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

  • Gnu Emacs! آن بیرون چند توزیع مختلف ایمکس وجود دارد. ما در این‌جا موضوع بحث‌مان فرزند خلف ریچارد استالمن Gnu Emacs است که قابلیت نصب روی پلتفرم‌های مختلف‌، از جمله ویندوز را دارد. پس نیاز نیست که بترسید. البته مطمئنم اگر هنوز جرات نکرده‌اید از دمپایی ابری مایکروسافت جدا شوید‌، جرات سوئیچ به هیولایی مثل ایمکس را هم نخواهید داشت. هر چند که ایمکس در ویندوز هم می‌تواند زندگی‌تان را عوض کند. ;-)
  • من هم ایمکس نمی‌دانم‌! ساده است. حدودا یک سالی می‌شود که از ایمکس استفاده می‌کنم‌، ولی حتی تا همین یکی دو هفته پیش همیشه با ترسی قلمبه به سراغش می‌رفتم. اما یک جور‌هایی الان احساس می‌کنم به جایی رسیده‌ام که می‌توانم بهتر از ایمکس کار بکشم.
  • قرار نیست در این‌جا ایمکس یادتان بدهم‌! این یکی حتی از قبلی ساده‌تر است. برای یادگیری ایمکس‌، هیچ منبعی بهتر از خود ایمکس نیست! چطور؟ خیلی ساده‌، ایمکس‌تان را باز کنید و C-h t را وارد کنید. اگر خیلی خیلی تازه‌کارید این دستوری که نوشتم یعنی‌، کلید Ctrl را پایین نگه دارید‌، h را نوازش کنید و سپس هر دو کلید را رها کرده و t را یک بار فشار دهید. ساده بود؟ آماده باشید که با یکی از هیجان‌انگیز‌ترین آموزش‌های عمرتان روبرو شوید (دروغ گفتم‌، احتمالا خیلی خیلی برای‌تان خسته کننده خواهد بود. چون احتمالا فکر می‌کنید که خیلی از این کار‌ها را با Visual Studio یا چه می‌دانم یک ادیتور دیگر که الان استفاده می‌کنید‌، خیلی راحت‌تر انجام می‌دهید. ولی اگر به من اعتماد دارید‌، باور کنید که اشتباه می‌کنید.).
  • این آموزش که انگلیسی است‌! دقیقا‌! شاید فکر کنید که با ترجمهٔ این آموزش بهتر می‌توانستم کمک کنم. ولی نه‌، آن‌قدر چیز برای یادگرفتن در مورد ایمکس به زبان انگلیسی وجود دارد‌، آن‌قدر نیاز به کمک گرفتن از ایمکس خواهیم داشت‌، آن‌قدر راهنماهای خوب در ایمکس وجود دارد که اگر تا الان انگلیسی‌تان داغان است‌، فکری به حال بهبودش بکنید. نیازی هم به کلاس‌ها و کتاب‌های گران‌قیمت ندارید. همین راهنما را باز کنید و شروع به خواندنش کنید. هر وقت هر جایی گیر کردید‌، با یک دیکشنری ترجمه را پیدا کنید. اوائل کمی سخت است‌، ولی هر چه جلوتر که می‌روید‌، به این شیوهٔ یادگیری بیشتر وابسته می‌شوید و لذت می‌برید ;-)
  • اگر ایمکس یاد نمی‌دهی‌، پس این پست‌هایت به درد چه می‌خورد؟ خوب منظورم از آن بند این بود که چیز‌های پایه‌ای را خودتان باید یاد بگیرید. من در این پست‌ها سعی دارم جاهایی را نشان‌تان دهم که در تخیل‌تان هم نمی‌گنجد.
  • چرا پست‌های سریالی؟ خوب ایمکس خیلی گنده است. خیلی خیلی کار می‌تواند انجام دهد. نوشتن یک کتاب ۱۰۰۰ صفحه‌ای هم نمی‌تواند شما را با همهٔ نادیده‌های‌تان آشنا کند. اما پست‌های کوتاه‌، که هم اشاره به نحوهٔ تنظیم قابلیت‌ها و هم اشاره به ویژگی‌های‌شان دارد‌، می‌تواند هم اشتیاق استفاده از آن‌ها را ایجاد کند و هم وقت کافی برای تجربه‌شان بدهد ;-)

دیگر ادامه نمی‌دهم‌، همین‌قدر هم برای یک مقدمه کافیست. البته مطمئنم که C-h t برای‌تان مقدمهٔ خیلی خیلی بهتری خواهد بود. پس درنگ نکنید و به سراغش بروید ;-)

دریافت متن ترانهٔ MP3 با لینوکس

اولین قدم‌، پیدا کردن سایتی بود که هم متن ترانه‌ها را به قدر کفایت داشته باشد‌، هم یک API درست درمان‌، یعنی رابطی که بتوان مثل آدم از طریق برنامه با آن به تبادل داده پرداخت نیز ارائه کند. خوب‌، خوشبختانه‌، این خارجکی‌ها‌، بر خلاف ما‌، سایت بدرد بخور زیاد دارند. پس انتخاب‌هایم خیلی زیاد بودند. اما کمی بیشتر که جستجو کردم دیدم آدم سالاری قبلا همچین اسکریپتی نوشته که مثل چــی هم کار می‌کند ;-)

اصل اسکریپت همچین جایی است:

curl -s "http://makeitpersonal.co/lyrics?artist=$artist&title=$title"

خیلی ساده با curl یک درخواست به API سایت می‌فرستیم که در آن ‎$artist اسم خوانندهٔ ترانه و ‎$title اسم خود ترانه است. که البته‌، چون url‌ها نحو (Syntax) خاص خودشان را دارند‌، این اسکریپت‌نویس دوست داشتنی ما‌، با دو خط زیر‌، اسم خواننده و ترانه را معتبر می‌کند:

artist=`perl -MURI::Escape -e 'print uri_escape($ARGV[0]);' "$artist_name"`

title=`perl -MURI::Escape -e 'print uri_escape($ARGV[0]);' "$song_title"`

همین‌؟ تمام شد؟‌ خوب این اسکریپت کاری که می‌خواستیم را انجام داد. ولی شاهین را که می‌شناسید‌. دوست دارد کار‌هایش را فله‌ای انجام دهد! یک کمی سخت است که هر بار بیایم اسم ترانه و خواننده را به اسکریپت بگویم‌، بعد شیلنگ خروجی را بگیرم توی یک فایلی که می‌خواهم و از این حرف‌ها. پس می‌رویم سراغ دستکاری بیشتر این اسکریپت.

خجالت بکش شاهین

حتما می‌دانید که می‌توان به فایل‌های MP3 تگ زد. همین تگ‌هایی که اسم خواننده و ترانه و ژانر و این‌جور حرف‌ها را می‌توان بهشان خوراند که تا دست آخر با MP3 Player خیلی راحت‌تر بشود سر و سامان‌شان داد. البته اگر راست کار‌تان سایت‌های موسیقی ایرانی است‌، از این تگ‌ها مطمئنا خیری نسیب‌تان نشده‌، چون از دَم مثل ندید بدید‌ها پرش کرده‌اند با آدرس سایت داغان‌شان ;-)

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

همان‌طور که در این لینک توضیح داده شده‌، عموما‌، ۱۲۸ بیت آخر فایل MP3 شامل تگ‌های آن است. و ابزار‌های به ظاهر سادهٔ گنو/لینوکسی‌، مثل چـــی‌، کمک‌مان می‌کنند که این تگ‌ها را بخوانیم‌. ببینید:

tag=$(tail -c128 "$file" | tr '\0' ' ')

id3=$(head -c10 "$file" | tr '\0' ' ')
سر هم کردن اسکریپت نهایی

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

نکته: خوب گاها پیش می‌آید که اسم ترانه‌، شامل کلماتی نظیر (Live) و یا (Bonus) باشد. و یا شاید اسم سایتی‌، چیزی را شامل شود. در این صورت‌، احتمالا API ما بر می‌گرداند که چیزی پیدا نکردم و از این حرف‌ها‌. ولی اسکریپت بیشعور ما آن را هم درون یک فایل هم اسم ترانه با فرمت txt ذخیره می‌کند. این‌جایش را دیگر خودتان می‌توانید با هنر دستکاری فایل لینوکسی‌تان‌، راست و ریست کنید ;-)

چرا گنو/لینوکس را دوست دارم؟ به سبک شاهینیسم!

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

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

دیگر وقت آن رسیده بود که از قالبی که دورم ساخته شده بود بیرون بیایم. باید یاد می‌گرفتم که خودم را به چالش بکشم. باید از توصیف کار‌هایم برای دیگران دست می‌کشیدم‌. از راهنمایی‌شان. یک کلام‌، باید سنگی را در آغوش می‌کشیدم و به دریای گنو/لینوکس می‌پریدم! همین کار را هم کردم. تمام آموخته‌ها و تجربه‌های چند ساله‌ام را فراموش کردم. حتی ویندوز را نگه نداشتم. یک نصب کامل. یک تیر خلاص. آسان بود؟ نه واقعا نبود. خصوصا با استثناهایی که تنها انسان‌هایی که در کشور‌هایی چون کشور من زندگی می‌کنند درک‌شان می‌کنند. روز‌ها وقت صرف کردم تا راهی برای چشیدن آزادی در اینترنت پیدا کنم. برای آزادانه گشتن در بزرگترین دانشگاه زیر دستم(بماند که هنوز هم هر از چندگاهی‌، باید به دنبال روش‌های جدیدی باشم).

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

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

اگر از خروجی نرم‌افزاری راضی نبودم می‌توانستم آن را تغییر دهم. یا اصلا چرا زحمت بی‌جا بکشم؟ آن را به نرم‌افزار دیگری می‌خوراندم تا در نهایت خروجی دلخواهم را به دست آورم. دیگر نیازی نبود که دیگران به کارم نمره بدهند. نمره‌ها نتیجهٔ کارم بودند. دیگر اشتباه‌ها به ضررم تمام نمی‌شد. اشتباه‌ها فرصتم بودند. حالا دیگر در مسیری قرار گرفته بودم که قدرت گنو/لینوکس را درک کنم. جایی که هر چه بیشتر یاد می‌گرفتم‌، می‌دیدم که چه قدر بی‌سوادم. بماند که درک این بی‌سوادی‌، از کور‌کورانه باور داشتن به با سوادی‌، آن هم به واسطهٔ معدل ۲۰ دانشگاه لذت‌بخش‌تر بود ;-)

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

لوگوی مسابقه «چرا گنو/لینوکس را دوست دارم؟» لوگوی مسابقه «چرا گنو/لینوکس را دوست دارم؟»