علی شکیبا

دفتر یادداشت دیجیتال برای هر چیز مفید!

شب گذشته بر اثر اشتباه، حافظه فلش خودم رو به سیستم کناری (سیستم دوستم که از نظر تعداد و تنوع ویروس‌ها در جهان باید تک باشد!) زدم! از آنجا که از لینوکس استفاده می‌کنم خیلی مشکل خاصی نیست! با یک نگاه به محتویات فلش متوجه ویروس عزیز New Folder شدم که در تمام دایرکتوری ها و زیر دایرکتوری ها خودش رو تکثیر کرده با نام های مختلف! بنابراین یکی از اون فایل ها را به شاخه اصلی فلش منتقل کردم و بعد هم برای موارد مشابه، فایل را به main.txt تغییر نام دادم. حالا وقت اون رسیده تا حساب این ویروس رو برسیم!

#!/bin/bash
counter=0
find . -type f -iname "*.exe" -print0 | while IFS= read -r -d $'\0' i; do
if [ $(md5sum "$i" | cut -f 1 -d ' ') == $(md5sum "./main.txt" | cut -f 1 -d ' ') ]
then
rm "$i"
counter=$((counter+1))
echo "$counter\t"
fi
done

البته فراموش نکنید فایل های autorun.ini رو هم پاک کنید!

۰ نظر موافقین ۱ مخالفین ۰ ۰۸ دی ۹۳ ، ۰۹:۰۱
علی شکیبا

برای نصب خیلی ساده می توانید از دستورات استاندارد Python برای نصب استفاده کنید! اما اگر ابزاری مانند apt-get در دبیان می خواهید، conda در خدمت شما است. البته برای نصب برخی از بسته ها مجبور(!) می شوید از pip یا easy_install استفاده کنید، اما هر چه باشد، نصب از روی کد منبع کابوس است و کابوس! علی الخصوص هنگامی که سرتان هم درد می کند! بگذریم ...

برای نصب کتابخانه textblob برای anaconda، می توانید از یکی از دو راه زیر استفاده کنید. اولی برای افرادی است که از MacOS استفاده می کنند (ما که کاری به MacOS نداریم!) و دومی برای بنده و امثال بنده است که عمده وقتشان را با ترمینال لینوکس پر می کنند و شاید هم ویندوز (رو سیاهم خجالتی )!

خوب، اول اولی را می گویم که ساده است!

$ conda config --add channels https://conda.binstar.org/sloria
$ conda install textblob
$ python -m textblob.download_corpora

حال نوبت به دومی می رسد که بازهم ساده است! فقط یک نکته! اگر مثل بنده از چندین توزیع مختلف پایتون مثل anaconda و python.org یا نسخه های مختلف استفاده می کنید، لازم است تا به جای استفاده از دستور pip، مسیر کامل توزیع مورد نظر را بدهید و یا با استفاده از دستور update-alternatives توزیع مورد نظر را در اولویت قرار دهید (بیان بهتر است ویرایشگر متن خود را به auto-completion مجهز کند!). بقیه ساده است:

$ pip install -U textblob
$ python -m textblob.download_corpora

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

$ python -m textblob.download_corpora lite

تمام است! از پایتون خود لذت ببرید!

۰ نظر موافقین ۰ مخالفین ۰ ۲۱ آذر ۹۳ ، ۰۰:۲۹
علی شکیبا

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

Theorems \ref{thm.begin} to \ref{thm.last} and Lemma \ref{lem.some}

اما این دفعه یه مقدار فرصت برای جستجوی بیشتر داشتم! باید راه ساده‌تری وجود داشته باشد و وجود داشت! بسته cleveref این کار رو به سادگی بیشتر انجام می‌دهد. فقط به جای دستور \ref از \cref باید استفاده کرد.

\cref{thm.begin,thm.last,lem.some}

نکته قابل ذکر اینکه این بسته به صورت خودکار نوع محیط رو هم تشخیص می‌دهد، یعنی برای قضیه، عبارت Theorem و برای لم عبارت Lemma رو به کار می‌برد. همچنین به زیبایی، در صورت امکان برچسب‌های پشت سر هم رو ادغام می‌کند، یعنی به جای Theorems 1,2,3,5 خروجی به صورت Theorems 1 to 3 and 5 خواهد بود! البته مراقب باشید بین برچسب‌ها و کاما، فاصله قرار ندهید و الا خطا خواهید گرفت! مستندات این بسته از اینجا قابل مشاهده است. البته معارفه بنده با این بسته در اینجا صورت گرفت!

۰ نظر موافقین ۰ مخالفین ۰ ۲۹ آبان ۹۳ ، ۰۹:۰۸
علی شکیبا

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

  1. همه اثبات‌ها، اعم از ساده یا دشوار یا آن‌هایی که لازم است پس از چاپ در متن اصلی ذکر شوند را به پیوست منتقل می‌کنم.
  2. این نکته که همه اثبات ها در پیوست آمده اند را هم در Cover Letter و هم در قسمت Introduction مقاله به صراحت ذکر می‌کنم!

تا قبل از این، این کار را کاملا به صورت زجرآوری به شیوه‌ای دستی انجام می دادم! اما امشب یک راهکار خوب در اینجا پیدا کردم که برای ارجاع‌های بعدی خودم، آن را در اینجا عینا ذکر می‌کنم. کافی  است قطعه کد لاتک زیر در ابتدای فایل پس از \usepackage ها بیاید.

\usepackage{etex,etoolbox}
\makeatletter
\providecommand{\@fourthoffour}[4]{#4}
\def\fixstatement#1{%
    \AtEndEnvironment{#1}{%
        \xdef\pat@label{\expandafter\expandafter\expandafter
            \@fourthoffour\csname#1\endcsname\space\@currentlabel}}}
\globtoksblk\prooftoks{1000}
\newcounter{proofcount}
\long\def\proofatend#1\endproofatend{%
    \edef\next{\noexpand\begin{proof}[Proof of \pat@label]}%
        \toks\numexpr\prooftoks+\value{proofcount}\relax=\expandafter{\next#1\end{proof}}
    \stepcounter{proofcount}}
\def\printproofs{%
    \count@=\z@
    \loop
    \the\toks\numexpr\prooftoks+\count@\relax
    \ifnum\count@<\value{proofcount}%
    \advance\count@\@ne
    \repeat}
\makeatother

همچنین پس از تعریف محیط‌های مورد نظر، لازم است تا بگوییم که برای چه محیط‌هایی می‌خواهیم چنین فرایندی رخ دهد!

\fixstatement{theorem}
\fixstatement{lemma}
\fixstatement{proposition}
\fixstatement{conjecture}
\fixstatement{corollary}

حال، به جای

\begin{proof}
 Now, I am going to show some world shaking result! P = NP! ;) (This is a joke!)
\end{proof}

به این صورت اثبات ها را می‌نویسیم

\proofatend
 Now, I am going to show some world shaking result! P = NP! ;) (This is a joke!)
\endproofatend

پس از آن قسمت پیوست به صورت زیر خواهد بود (به طور معمول، پیوست را بعد از مراجع قرار می‌دهم)

\appendix
  \section{Proofs}
  \printproofs

کار تمام است!

۰ نظر موافقین ۰ مخالفین ۰ ۲۵ آبان ۹۳ ، ۲۳:۵۳
علی شکیبا

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

\usepackage{showlabels}
۱ نظر موافقین ۰ مخالفین ۰ ۱۵ مهر ۹۳ ، ۱۱:۲۰
علی شکیبا

به طور معمول، وقتی که گزارش یا مقاله‌ای را برای استاد راهنما ارسال می‌کنم، حداقل چندبار بخش‌هایی از آن مورد حذف یا بازنویسی قرار می‌گیرد. یکی از ساده‌ترین راه‌ها برای مشخص نمودن اینگونه موارد، که تا به حال از آن استفاده می‌کردم و هنوز هم برای نسخه‌هایی که نیاز به تهیه نسخه چاپی نداشته باشند نیز استفاده خواهم کرد، استفاده از رنگ‌ها یا یادداشت‌های PDF البته در LaTeX است. اما امروز دیدم که یکی از دوستان که از Microsoft Word برای تهیه متون خود استفاده می‌کند، روی متن‌های حذف شده، خط می‌کشد (Strike through). با دیدن این موضوع، من هم علاقه‌مند شدم که از این روش استفاده کنم. به همین دلیل دست به دامن گوگل شدم. راهکار بسیار ساده است. کافی است تا از بسته

\usepackage{ulem}

استفاده کنیم و بعد متن مورد نظر را به صورت زیر مشخص کنیم

\sout{The text to strike through.}

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

\normalem

نتیجه رضایت بخش است.

۰ نظر موافقین ۰ مخالفین ۰ ۱۹ شهریور ۹۳ ، ۲۳:۱۰
علی شکیبا

امروز تصمیم گرفتم که ویراست دوم کتاب ارزشمند The Elements of Statistical Learning: Data Mining, Inference, and Prediction نوشته Trevor Hastie، Robert Tibshirani و Jerome Friedman را چاپ کنم. اما متاسفانه فایل پی دی اف کتاب که در سایت مولفین برای دانلود رایگان وجود دارد دارای حاشیه خالی زیادی بود! بنابراین تصمیم گرفتم تا حاشیه های خالی را حذف کنم. از آنجایی که تصمیم گرفته ام که به غیر از Microsoft Office Suite 2007 و Camtasia Studio 7 حتی الامکان از هیچ ابزار غیر رایگانی استفاده نکنم، به همین دلیل دست به دامن گوگل شدم! در ابتدا وسوسه شدم تا از بند حتی الامکان استفاده کنم ( :) )، اما با کمی سماجت، به راهکار اول رسیدم! راهکار اول، استفاده از ابزار pdfcrop در بسته TeX Live بود. این ابزار به صورت کاملا هوشمندانه، حاشیه های خالی هر صفحه را تشخیص می دهد و حذف می کند. حتی امکان اضافه کردن حاشیه به فایل حذف شده را هم می دهد. برای مثال،

$ pdfcrop --margins "1" infile.pdf outfile.pdf

پس از حذف حاشیه های خالی هر صفحه، 1 اینچ از هر چهار سوی صفحه را به عنوان حاشیه سفید اضافه می کند. اما نتیجه اصلا رضایت بخش نبود! من تمایل داشتم تا تمام صفحات به یک میزان از پیش مشخص و ثابت برش داده شوند. به همین دلیل جستجو از سر گرفته شد تا به Ghostscript رسیدم.

ابزار Ghostscript، علاوه بر برش، اعمال فراوان دیگری را نیز انجام می دهد. اما برای برش فایل، لازم بود تا از دستور زیر استفاده کنم!

"C:\Program Files (x86)\gs\gs8.64\bin\gswin32.exe" -o cropped.pdf -sDEVICE=pdfwrite -c "[/CropBox [96 108 504 720] /PAGES pdfmark" -f ESLII_print10.pdf

نتیجه کاملا رضایت بخش بود! البته این فرایند کمی زمان برد، اما اصلا از کیفیت فایل اصلی کم نکرد. درباره مختصات هم باید توضیح زیر را ضمیمه کنم (توضیحات از اینجا برداشته شده اند). مختصات، نسبت به گوشه سمت چپ و پایین صفحه سنجیده می شود ( نقطه مبدا، (0و0)، در گوشه سمت چپ و پایین صفحه در نظر گرفته می شود). نقطه اول، مختصات نقطه سمت چپ و پایین و نقطه دوم مختصات نقطه سمت راست و بالای مستطیل برش است. برای مثال، برای شکل

     ****************************************************
 610 ----------------------X 420,610                    *
     |                     |                            *
     |                     |                            *
     |                     |                            *
     |                     |                            *
     |                     |                            *
     |                     |                            *
     |                     |                            *
     |0,315                |                            *
 315 X----------------------                            *
     *                                                  *
     *                                                  *
     *                                                  *
     *                                                  *
     *                                                  *
     *                                                  *
     *                                                  *
     *                                                  *
   0 ****************************************************
     0                    420

مختصات به صورت

[0 315 420 610]

است. برای محاسبه مختصات مورد نیاز برای برش، از Foxit PDF reader (مرورگر محبوب و رایگان برای فایل های PDF) استفاده کردم.

۰ نظر موافقین ۰ مخالفین ۰ ۱۸ شهریور ۹۳ ، ۲۰:۰۱
علی شکیبا

برای نصب قلم یا همان فونت‌های فارسی در لینوکسُ کافی است تا ابتدا یک پوشه در مسیر زیر بسازیم

$ sudo mkdir -p /usr/local/share/fonts/truetype/persianFonts

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

$ sudo find . -iname "*.ttf" -exec sudo cp {} /usr/local/share/fonts/truetype/persianFonts \;

بعد از آن دستور

$ fc-cache

کار را تمام می‌کند. :-)

۱ نظر موافقین ۰ مخالفین ۰ ۰۲ شهریور ۹۳ ، ۲۲:۴۵
علی شکیبا

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

داشتن یه نسخه پشتیبان روی یک سیستم دیگه که کنترلش دست خود آدم باشه، یه کار خوب به نظر می رسد، به همین دلیل، روی یکی از سرورهای آزمایشگاه که برای سرویس دهی مخازن debian و python ازش استفاده می کنیم، github رو نصب کردم.

# apt-get install git-core

و بعد از اون با نام کاربری خودم به سرور مزبور لاگین کردم و یک پوشه برای نگهداری همه مخازن مورد نیازم به اسم git درست کردم (وقتی مدیریت سرور دست خود آدم باشه، معلومه که برای خودش quota در نظر نمی گیره ;-) )

$ mkdir git

حالا نوبت به ساختن یک مخزن برای نگهداری مثلا مقالاتم می رسه!

$ cd ~/git
$ git init --bare MyPapers.git

و حالا کافیه که روی سیستم خودم (یا هر جای دیگه) به محل ذخیره مقالاتم بروم (که البته قبلا یک مخزن git در اون ایجاد شده). اولین گام اینه که آدرس مخزن رو روی سرور به سیستم بدم

$ git remote add lqip shakiba@lqip-s3:/home/shakiba/git/MyPapers.git


۰ نظر موافقین ۰ مخالفین ۰ ۱۷ ارديبهشت ۹۳ ، ۱۶:۴۳
علی شکیبا

با سلام. وقتی لینوکس قبلی رو بر اثر یه اشتباه پاک کردم، نزدیک بود کل دیسک سختم رو نابود کنم! چون یه لحظه فکر کردم توی ماشین مجازی هستم که نبودم!، نسخه ۷ لینوکس دبیان رو نصب کردم. نمی دونم چرا، ولی نسخه ۷ کارت گرافیک من رو مثل ۶ نشناخت! به همین دلیل دست به کار شدم تا کارت گرافیک رو نصب کنم! تنها چیزی که خاطرم مونده بود، مدل کارت گرافیکم بود که ATI RADEON بود! هیچ چیز دیگه‌ای خاطرم نموده بود! به همین خاطر از دستور زیر برای پیدا کردن اطلاعات بیشتر در مورد کارت گرافیکم استفاده کردم

$ lspci -nn | grep VGA

که از خروجی متوجه شدم Radeon 5000 هست! خوب تا اینجا کار خوب پیش اومد! بعد از اون، لازم بود تا بسته مربوط به کارت گرافیکم رو، بسته تجاری رو به متن باز ترجیح دادم(!) :-O، نصب کنم! به همین خاطر مخزن مربوطه رو به apt اضافه کردم!

$ sudo nana /etc/apt/sources.list.d/ati.list

و بعد خط زیر رو به اون اضافه کردم!

deb http://http.debian.net/debian/ wheezy main contrib non-free

و سپس

$ sudo apt-get update

و در نهایت بسته مورد نظر رو با استفاده از دستور زیر نصب کردم! (بسته اول فایل‌های سرامد هسته مربوطه است که برای نصب صحیح درایور کارت گرافیک لازم است).

$ sudo apt-get install linux-headers-$(uname -r) fglrx-driver

در نهایت هم فایل پیکربندی Xorg Server رو به این صورت ساختم! دلیل اینکه این فایل رو دستی ساختم، آینه که Xorg این درایور رو به صورت خودکار شناسایی نمی کنه!

$ sudo mkdir /etc/X11/xorg.conf.d
$ echo -e 'Section “Device”\n\tIdentifier “RADEON”\n\tDriver “fglrx”\n\EndSection' > /etc/X11/xorg.conf.d/20-fglrx.conf

از طرف دیگه، چون معمولاً برای ارائه سمینار از لپ تاپم استفاده می کنم، این خط رو فایل xorg.conf اضافه کردم!

Section “Screen”
SubSection “Display”
Virtual 1024 768
EndSubSection
EndSection

و سیستم رو راه اندازی مجدد کردم! کار تمام شد! وقتشه که بخوابم!

البته به جای مراحل ساختن دستی تنظیمات، می تونستم همونطور که هنگام نصب توصیه شده بود، دستور مربوطه رو اجرا کنم! ولی به هر حال، من تنظیمات مربوط به مانیتور دوم رو باید دستی انجام می دادم!

۱ نظر موافقین ۰ مخالفین ۰ ۱۱ دی ۹۲ ، ۰۰:۴۹
علی شکیبا