اولین تجربه با LaTeX (‌کتاب آموزش ‎(C‎+‎+

منبع این کتاب‌، سایت CProgramming است‌، که به نظرم یکی از کامل‌ترین منابع آموزش C‎+‎+‎ است که به صورت رایگان در سطح اینترنت قابل دسترسی است‌. در این PDF که با استفاده از LaTeX آماده شده‌، مجموعه پنج فصل از مطالب منتشر شده‌، روی سایت CProgramming در کنار هم قرار گرفته‌اند‌. در این پست قصد ندارم بیشتر از این به معرفی مطالب کتاب بپردازم و بیشتر به دنبال اشتراک گذاری تجربیاتم در آماده کردن این کتاب هستم‌. (‌این کتاب را می‌توانید از لینک پایان همین متن دریافت کنید‌)

اول از همه باید به ابزاری بپردازم که در آماده کردن این کتاب کمکم کرد‌! در واقع بدون این ابزار‌، کار عاقلانه‌ای به نظر نمی‌رسید که من تازه‌کار دست به آماده کردن چنین فایل بزرگی به زبان TeX بزنم. این نرم‌افزار TeXmaker نام دارد و اسلکور کاران عزیز می‌توانند با این Slackbuild آن را نصب کنند‌.

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

به طور کلی چیز‌های زیادی از کار با LaTeX در این پروژه‌ی شخصی یاد گرفتم‌، اما این PDF هنوز هم مشکلاتی دارد. آن‌هایی را که شناختم در زیر لیست می‌کنم‌:

  • فایل TeX آماده شده‌، بسیار حجیم هست‌، و در واقع اگر از TeXmaker استفاده نمی‌کردم محال بود که بتوانم آن را راحت مدیریت کنم‌. با توجه به این که LaTeX قابلیت تقسیم کردن پروژه به فایل‌های کوچک‌تر را دارد‌، باید از آن بهره بگیرم‌.
  • در مثال‌های کتاب که به زبان C‎++‎ بود‌، بسیاری از علامت‌ها نظیر #, &, >, < باید با علایم ویژه‌ی TeX نگاشته می‌شد‌. با این حساب دوست نداشتم که قوانین نوشتن پاراگرف هم در این مثال‌ها لحاظ شود‌، چون جز زیاد کردن مشقت خواندنشان‌ فایده‌ی دیگری نداشتند. به همین دلیل آن‌ها را در بلوک verbatim قرار می‌دادم‌. ولی متاسفانه این بلوک خطوط را نمی‌شکست و همین باعث بی‌نظمی در بعضی مثال‌ها شده است‌! ‌(‌باید به دنبال چاره‌ای برایش باشم‌)
  • تا جایی که توانستم ارجاعات متن را به مکان مربوطه لینک کردم‌، ولی ممکن است باز جاهایی از دستم در رفته باشد‌. این مشکلات و وجود علایمی مانند «‌>‌» که در لاتک به صورت علامت سوال سر و ته چاپ می‌شوند و برای رفع ایرادشان باید به روش‌هایی متوسل شد‌، بیشتر روی این نکته تاکید دارد که کسی که با لاتک کار می‌کند باید بداند چه متنی را تایپ می‌کند و مثل من یک دفعه متنی نا آشنا و نخوانده را به لاتک فشار ندهد‌!
  • برای ایجاد لینک‌هایی که کار کنند و رنگشان متفاوت باشد‌، از بسته‌ی url استفاده کردم‌. کار با آن فوق‌العاده آسان است‌، اما باز هم متاسفانه لاتک لینک‌ها را نمی‌شکست‌! ‌(‌نمی‌دانم عبارت «‌متاسفانه‌» در اینجا درست است یا نه‌) پس باید دستی این کار را می‌کردم و باز هم ممکن است جایی در متن نا همگونی رخ داده باشد‌.

حالا باید به سراغ چالش بعدی‌ام بروم‌. در نظر دارم که متن پروژه‌ی لیسانسم را با همین لاتک آماده کنم‌. در آن‌جا بحث کمی متفاوت است‌. متن فارسی با عبارات انگلیسی‌! این در حالی است که ساختار یافتگی متن خروجی لاتک می‌تواند بسیار کمکم کند‌. سعی می‌کنم به وقایع‌نگاری این تجربیاتم در شاهینیسم بپردازم ;-)

دریافت بسته‌ی کامل کتاب ‌(‌فایل TeX به همراه خروجی‌ها اعم از PDF‌)

نصب و اجرای Anki در اسلکور

قبل از هر کاری pysetuptools را از اینجا دریافت و نصب کنید‌. دیگر پیش نیاز‌های اولیه‌تان برای نصب این‌ها هستند‌:

sqlalchemy 0.4.3

simplejson 1.7.3

بسته‌ی دوم ‌(‌simplejason‌) را می‌توانید با استفاده از Slackbuild‌ موجود در این آدرس‌ نصب کنید‌. برای SQLAlchamy هم من آخرین نسخه‌ی موجود را نصب کردم‌! برای این کار کافیست آخرین نسخه را از این‌جا دریافت کنید‌، و Slackbuild نسخه قدیمی را نیز از این‌جا بگیرید‌، حالا فایل Slackbuild را با یک ویرایشگر متن باز کنید‌، همان اوایل متن مقدار جلوی VERSION را به مقدار دلخواهتان تغییر دهید‌ ‌(برای من چنین چیزی از آب در آمد VERSION=0.7.2 )‌ حالا اگر می‌خواهید این نرم‌افزار قدرت گراف کشیدن داشته باشد به ترتیب باید از پس بسته‌های زیر هم بر بیایید‌. ‌(‌لینک Slackbuild‌های مربوطه از این شماره‌ها قابل دسترسی است‌: ۱‌، ۲‌، ۳‌، ۴‌‌)

- python-numpy (numpy)

- python-matplotlib (matplotlib)

برای داشتن چند قابلیت دیگر نظیر ضبط صدا و یا وارد کردن فایل XML هم نیاز به چند پیش‌نیاز دارید که با استفاده از فایل README موجود در پوشه‌ی Anki می‌توانید با آن‌ها آشنا شوید‌. ‌(‌من اون‌ها رو تست نکردم‌، و برای نصب هم نیازی به اون‌ها نداریم‌)‌.

پس از نصب پیش‌نیاز‌ها آخرین نسخه‌ی Anki را از این‌جا دریافت کنید‌. آن را از حالت فشرده خارج کرده و سپس به مسیر زیر بروید‌:

cd anki-YOUR-VERSION/libanki

لطفا توجه داشته باشید که فایلی با نام setup.py در پوشه‌ی اول Anki هم موجود هست‌، ولی ما به آن کار نداریم‌، و عملیات نصب را با setup.py موجود در پوشه libanki انجام می‌دهیم‌. برای شروع عملیات نصب دستور زیر را اجرا کنید‌:

python setup.py install

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

Traceback (most recent call last):

File "/usr/lib/python2.6/site-packages/ankiqt/ui/main.py", line 953, in onNew

self.deck.initUndo()

File "/usr/lib/python2.6/site-packages/anki/deck.py", line 3415, in initUndo

(null, 'delete from %(t)s where rowid = ' || new.rowid); end""" % {'t': table})

File "/usr/lib/python2.6/site-packages/anki/db.py", line 114, in statement

return self.execute(text(sql), kwargs)

File "/usr/lib/python2.6/site-packages/anki/db.py", line 90, in execute

x = self._session.execute(*a, **ka)

File "/usr/lib/python2.6/site-packages/SQLAlchemy-0.6.7-py2.6.egg/sqlalchemy/orm/session.py", line 724, in execute

clause, params or {})

File "/usr/lib/python2.6/site-packages/SQLAlchemy-0.6.7-py2.6.egg/sqlalchemy/engine/base.py", line 1191, in execute

params)

File "/usr/lib/python2.6/site-packages/SQLAlchemy-0.6.7-py2.6.egg/sqlalchemy/engine/base.py", line 1271, in _execute_clauseelement

return self.__execute_context(context)

File "/usr/lib/python2.6/site-packages/SQLAlchemy-0.6.7-py2.6.egg/sqlalchemy/engine/base.py", line 1302, in __execute_context

context.parameters[0], context=context)

File "/usr/lib/python2.6/site-packages/SQLAlchemy-0.6.7-py2.6.egg/sqlalchemy/engine/base.py", line 1401, in _cursor_execute

context)

File "/usr/lib/python2.6/site-packages/SQLAlchemy-0.6.7-py2.6.egg/sqlalchemy/engine/base.py", line 1394, in _cursor_execute

context)

File "/usr/lib/python2.6/site-packages/SQLAlchemy-0.6.7-py2.6.egg/sqlalchemy/engine/default.py", line 299, in do_execute

cursor.execute(statement, parameters)

sqlalchemy.exc.OperationalError: (OperationalError) cannot create trigger on system table u"ncreate temp trigger



_undo_sqlite_stat2_itnafter insert on sqlite_stat2 beginninsert into undoLog valuesn(null,



'delete from sqlite_stat2 where rowid = ' || new.rowid); end" ()

خوب برنامه به دلایلی ‌(‌که هنوز هم نفهمیدم چیه‌!‌) این اخطار رو از قرار فقط برای جماعت اسلکور کار بر می‌گرداند‌! برای حل این مشکل نیز کافیست‌، برنامه را دوباره استارت کنید و با استفاده از کلید Download موجود در صفحه اصلی‌، اقدام به بارگذاری یکی از فلش‌کارت‌های مربوط کنید‌. به طرز عجیبی برنامه پس از آن کاملا درست کار می‌کند و شما هم می‌توانید با استفاده از آن‌، بر دانستنی‌های دائمتان بیافزایید‌ :-P

بازیگوشی سیستم صدای لینوکس‌!

پس از در میان گذاشتن مشکل با ایمان‌،‌ اولین حدسش همان مشکل همیشگی Alsa (‌مشکل در پخش هم زمان چند منبع صوتی‌) بود‌. برای رفع این مشکل خواست که از PulseAudio استفاده کنم‌. نصب این برنامه روی اسلکور تنها نیاز به یک وابستگی ‌(‌برنامه speex) و ساخت دو گروه برای PulseAudio که جزئیاتش در صفحه‌ی مربوط به Slackbuild شرح داده شده دارد‌.

بعد از نصب و راه‌اندازی دوباره سیستم‌، شواهد از این قرار بود که PulseAudio وظیفه‌ی اجرای صدا‌ها را بر عهده گرفته‌، ولی جدای از مشکل قبلی‌ای که داشتم‌، مشکل دیگه‌ای نمایان شده بود‌. Notification‌ها کار نمی‌کرد‌! به پیشنهاد دوباره ایمان با رفتن به مسیر Applications and system notifications در System settings و سربرگ Player Setting و تغییر پلیر از حالت پیشفرض به Mplayer (‌کافیست که در فیلد Player عبارت mplayer وارد شود‌) این مشکل حل شد‌، ولی مشکل قبلی همچنان پابرجا بود‌. ‌(‌البته ایمان یک پیشنهاد دیگر هم داد که منجر به از دست رفتن کامل صدای سیستم شد‌، ولی خوب توانستیم دوباره رو به راهش کنیم‌).

با این توصیفات‌، دیگر بی‌خیال این شدم که مشکل به Alsa مربوط شود‌ (‌چون در واقع من همان موقع هم تنها یک منبع صوتی در حالت اجرا داشتم‌). در جستجو‌های گوگلی‌ام این را کشف کرده بودم که KWordQuiz از Phonon برای پخش صدا کمک می‌گیرد‌. از طرفی در راهنمایی که ایمان (‌باز هم ایمان‌‌! نبود چی کار می‌کردم‌؟) برای PulseAudio در آرچ نوشته بود (‌که هنوز هم منتشر نشده‌) فهمیدم که باید GStreamer را به زور مجبور به استفاده از PulseAudio کنیم‌.

با توجه به این تجربیات‌،‌ به جستجوی تنظیماتی که به این گزینه‌ها مربوط شود پرداختم‌! در شاخه Multimedia و منوی Phonon به بخشی رسیدم که عملا تنظیماتش در گذشته کاری از پیش نبرده بود‌. ولی در سربرگ Backend متوجه شدم که Gstreamer به Mplayer اولویت دارد‌. Mplayer‌ای که قبلا هم نتایج خوبی در کار با صدا برایم در بر داشت‌. اولویت اول را به Mplayer دادم‌،‌ و دا دا‌! مشکل حل شد‌!

نتیجه‌ی کار ایمان فوق‌العاده از آب در آمده بود‌. و آن‌طور هم که قول داده قرار است همه‌ی ۴۰۰۰ لغت این مجموعه را به صورت فلش کارت آماده کند و به طور روزانه منتشر کند‌. به نظرم اگر می‌خواهید تکانی یه زبان انگلیسی زنگ زده‌یتان بدهید‌، این بسته‌های ایمان را از دست ندهید ;-)

چرا باید LaTeX را دوست داشت‌؟

تازه تجربهٔ خروجی گرفتن از یک فایل tex را از سر گذرانده‌ام و خیلی خیلی زود است که بخواهم دلیل و مدرک سنگینی بیاورم که «آره آقا‌، از فردا هر کس با لاتک مطلب ننوشت‌، و یا کار با لاتک را ندانست‌، از ما نیست‌!». اما می‌خواهم برای فعلا و ثبت در خاطراتم‌، اینجا بنویسم که چگونه کفهٔ ترازو به نفع لاتک برایم پایین رفت‌:

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

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

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

در ضمن دلتان را هم به این خوش نکنید‌ که لاتک را در وب فارسی جستجو کنید‌، چون نتیجه‌اش انواع کاندوم است که نثارتان می‌شود‌ ;-)

نبض سیستم‌تان در دستان شما

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

Yasp-Scripted را می‌توانید از اینجا دانلود و نصب کنید (‌کار زیاد سختی نیست‌، باید از سورس اقدام کنید‌ که در فایل INSTALL طبق معمول همه توضیحات داده شده). ولی بسته به سیستمتان بعد از افزودن پلاسموید به میزکار ممکن است نتیجه‌ای نگیرید (که من هم نگرفتم‌!). موضوع سر فایل. yasp.script که در پوشهٔ خانگیتان می‌توانید پیدایش کنید‌. این فایل کد‌های مربوط به نحوه و امکانات نمایش پلاسموید را در اختیار دارد که ممکن است با سیستم شما همخوان نباشد‌. خوشبختانه تعدادی دیگر از نمونه‌های این فایل را می‌توانید در شاخه yasp_scripts موجود در سورس کد بیابید‌. گزینه‌های مختلف را امتحان کنید‌، احتمالا به نتیجه می‌رسید‌. بعد هم می‌توانید با توجه به سلیقه و امکانات سخت‌افزاریتان‌، فایلی که برایتان اثربخش بوده را شخصی سازی کنید‌.

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