<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" xmlns:gr="http://www.google.com/schemas/reader/atom/" xmlns:idx="urn:atom-extension:indexing" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" idx:index="no" gr:dir="rtl"><!--
Content-type: Preventing XSRF in IE.

--><generator uri="http://www.google.com/reader">Google Reader</generator><id>tag:google.com,2005:reader/user/10504691202809228027/label/Blogrool</id><title>"Blogrool" via F0ruD in Google Reader</title><gr:continuation>CK7_lpOHkLcC</gr:continuation><author><name>F0ruD</name></author><updated>2013-05-20T08:11:41Z</updated><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/blogroolViaF0rudInGoogleReader" /><feedburner:info uri="blogroolviaf0rudingooglereader" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gr:crawl-timestamp-msec="1369037501878"><id gr:original-id="http://shahinism.github.io/posts/emacs-flyspell-mode.html">tag:google.com,2005:reader/item/b08ae511e1c34867</id><category term="Emacs" /><category term="flyspell" /><category term="aspell" /><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;این ایمکس دوست داشتنی (غلط‌گیر املایی)&lt;/div&gt;</title><published>2013-05-20T10:43:10Z</published><updated>2013-05-20T10:43:10Z</updated><link rel="alternate" href="http://feedproxy.google.com/~r/Shahinism/~3/J3YkVY3QZjQ/emacs-flyspell-mode.html" type="text/html" /><link rel="canonical" href="http://shahinism.github.io/posts/emacs-flyspell-mode.html" /><summary xml:base="http://shahinism.github.io/" gr:direction="rtl" type="html">&lt;div style="direction:rtl;text-align:right"&gt;&lt;p&gt;وقتی که بچه‌تر بودم‌، به بالا بودن نمرات املایم افتخار می‌کردم. ولی خوب انگار آن‌ها ربط مستقیمی به دایرهٔ لغات مورد استفاده‌ام در آن زمان‌ها داشت. به هر حال الان خیلی پیش می‌آید که غلط بنویسم‌! با وسط آمدن پای زبان انگلیسی این مشکل بیشتر خود‌نمایی می‌کند. به هر حال‌، خیلی خوب می‌شود که ویرایشگر محبوبم‌، در درست نوشتن‌هایم کمکم کند.&lt;/p&gt;
&lt;div&gt;
&lt;h2&gt;تنظیم aspell&lt;/h2&gt;
&lt;p&gt;خوشبختانه &lt;a href="http://shahinism.github.io/categories/emacs.html"&gt;Emacs&lt;/a&gt; به صورت پیش‌فرض بستهٔ &lt;a href="http://www.emacswiki.org/emacs/InteractiveSpell#toc5"&gt;ispell&lt;/a&gt; را همراه دارد که قرار است کمک‌مان کند. اول از همه با دستور زیر برنامهٔ غلط‌گیر املایی مورد نظرم را جایگزین برنامهٔ پیش‌فرض &lt;a href="http://www.emacswiki.org/emacs/InteractiveSpell#toc5"&gt;ispell&lt;/a&gt; می‌کنم.&lt;/p&gt;
&lt;pre&gt;
&lt;span&gt;(&lt;/span&gt;&lt;span&gt;setq&lt;/span&gt; &lt;span&gt;ispell-program-name&lt;/span&gt; &lt;span&gt;"aspell"&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;
&lt;span&gt;(&lt;/span&gt;&lt;span&gt;setq&lt;/span&gt; &lt;span&gt;ispell-list-command&lt;/span&gt; &lt;span&gt;"list"&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;دستور اول متغیر برنامهٔ غلط‌گیر املایی را به &lt;a href="http://aspell.net/"&gt;aspell&lt;/a&gt; تغییر می‌دهد و دستور دوم دستور لیستی که همراه با برنامه استفاده می‌شود را مشخص می‌کند. به صورت پیش‌فرض این مقدار برابر ‎-l است که همتای آن در برنامهٔ &lt;a href="http://aspell.net/"&gt;aspell&lt;/a&gt; مقدار list است.&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h2&gt;چرا aspell؟&lt;/h2&gt;
&lt;p&gt;خوشبختانه این برنامه‌، به زحمت &lt;a href="https://fa.wikipedia.org/wiki/%D8%A2%D9%84%D9%86_%D8%A8%D8%A7%D8%BA%D9%88%D9%85%DB%8C%D8%A7%D9%86"&gt;آلن باغومیان&lt;/a&gt; عزیز‌، صاحب یک دیکشنری به درد بخور فارسی هم شده. این دیکشنری را که احتمالا همراه &lt;a href="http://aspell.net/"&gt;aspell&lt;/a&gt; روی سیستم‌تان نصب نمی‌شود را می‌توانید از &lt;a href="ftp://ftp.gnu.org/gnu/aspell/dict/0index.html"&gt;این‌جا&lt;/a&gt; بگیرید. راهنمای کامپایل و نصبش همراه خود بسته است (عملا یک ‎./configure &amp;amp;&amp;amp; make &amp;amp;&amp;amp; make install ساده باید کارتان را راه بیاندازد.).&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h2&gt;نحوهٔ کار&lt;/h2&gt;
&lt;p&gt;در عمل شما می‌توانید به چند روش از این غلط‌گیر استفاده کنید. اما اول از همه باید تعیین کنید که از چه زبانی استفاده می‌کنید. زبان پیش‌فرض انگلیسی است. اما شما می‌توانید با فراخوانی تابع &lt;strong&gt;ispell-change-dictionary&lt;/strong&gt; (یادتان که نرفته‌، M-x) و وارد کردن اسم دیکشنری (مثل خیلی دیگر از دستورات فراخوانی شده با این روش‌، با tab قابلیت تکمیل خودکار دارد) دیکشنری مد نظر‌تان را صدا کنید. مثلا برای زبان فارسی همچین کاری می‌کنیم:&lt;/p&gt;
&lt;pre&gt;
&lt;span&gt;M-x&lt;/span&gt; &lt;span&gt;ispell-change-dictionary&lt;/span&gt; &lt;span&gt;fa&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;البته دیکشنری‌های متفاوتی با نصب بستهٔ فارسی ispell اضافه می‌شود که بسته به نیاز‌تان (من نفهمیدم فرق‌شان چیست‌، اگر می‌دانید بگویید که ممنون‌تان شوم) یکی را انتخاب کنید.&lt;/p&gt;
&lt;div&gt;
&lt;h3&gt;flyspell-mode&lt;/h3&gt;
&lt;p&gt;با فراخوانی این مد‌، کل بافر را تحت تاثیر قرار می‌دهید. در صورت بر خورد با هر غلط املایی‌، لغت تغییر رنگ داده و می‌توانید با کلیک وسط ماوس آن پیشنهاد‌های سیستم‌را انتخاب کنید.&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h3&gt;&lt;img alt="ispell-word" src="https://dl.dropboxusercontent.com/u/25017694/Blog-photos/emacs_aspell.png"&gt; ispell-word&lt;/h3&gt;
&lt;p&gt;این دستور‌، به درد موقعی می‌خورد که نمی‌خواهید یک flyspell-mode را صدا کنید. به هر حال این مد همیشه هم آن‌قدر که باید خوب عمل نمی‌کند (بیشترین تاثیر را زمانی دارد که کلمه بعد از فراخوانی مد تایپ شود). البته برای رفع مشکلات این مد می‌توانید از &lt;strong&gt;flyspell-region&lt;/strong&gt; که محدودهٔ انتخاب شده را بررسی می‌کند استفاده کنید. ولی گاها دوست دارید که تنها یک کلمه که مطمئن نیستید را بررسی کنید. آن وقت است که &lt;strong&gt;ispell-word&lt;/strong&gt; دستور مورد نظرتان است. تنها کافیست نشان‌گر را روی لغت ببرید و این دستور را بزنید.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h2&gt;کلید‌های میانبر&lt;/h2&gt;
&lt;p&gt;بدیهی است که بهتر است برای این دستورات‌، کلید‌های میانبر تعریف کنیم. مثلا کلید‌های مورد استفادهٔ من این‌ها هستند:&lt;/p&gt;
&lt;pre&gt;
&lt;span&gt;(&lt;/span&gt;&lt;span&gt;global-set-key&lt;/span&gt; &lt;span&gt;(&lt;/span&gt;&lt;span&gt;kbd&lt;/span&gt; &lt;span&gt;&amp;quot;&amp;lt;f8&amp;gt;&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt; &lt;span&gt;'ispell-word&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;
&lt;span&gt;(&lt;/span&gt;&lt;span&gt;global-set-key&lt;/span&gt; &lt;span&gt;(&lt;/span&gt;&lt;span&gt;kbd&lt;/span&gt; &lt;span&gt;&amp;quot;C-S-&amp;lt;f8&amp;gt;&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt; &lt;span&gt;'flyspell-mode&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;همین‌کار را می‌توانید برای &lt;strong&gt;ispell-change-dictionary&lt;/strong&gt; هم انجام دهید. ولی &lt;a href="http://www.emacswiki.org/emacs/InteractiveSpell#toc5"&gt;ispell&lt;/a&gt; این قابلیت را دارد که از روی سر خط فایل‌، زبان آن را تشخیص دهد. این یعنی این که اگر متنی با زبان فارسی دارم‌، کافیست در خط اول آن یک همچین متنی داشته باشم:&lt;/p&gt;
&lt;pre&gt;
&lt;span&gt;-*-&lt;/span&gt; &lt;span&gt;ispell-dictionary:&lt;/span&gt; &lt;span&gt;"fa"&lt;/span&gt; &lt;span&gt;-*-&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;تا زبان تنها برای همین بافر حاضر به فارسی تغییر کند. به هر حال این انتخاب‌ها اختیاری است.&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h2&gt;مشکلات حاضر&lt;/h2&gt;
&lt;p&gt;مشکل این است که نمی‌توان دیکشنری را به صورت دو زبانه و همزمان داشت. از طرفی در صفحهٔ ویکی &lt;a href="http://www.emacswiki.org/emacs/InteractiveSpell#toc5"&gt;ispell&lt;/a&gt; به غلط‌گیر &lt;a href="http://wiki.openoffice.org/wiki/Main_Page"&gt;Hunspell&lt;/a&gt; اشاره شده که روش خوبی هم برای بررسی متن و تغییر خودکار زبان غلط‌گیر دارد. با توجه به استفاده از این دیکشنری در OpenOffice‌ها خیلی وسوسه شده‌ام که آن را هم تست کنم. به زودی در مورد آن‌ها هم خواهم نوشت.&lt;/p&gt;
&lt;/div&gt;&lt;div&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Shahinism?a=J3YkVY3QZjQ:ioV_zahJKR0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Shahinism?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Shahinism?a=J3YkVY3QZjQ:ioV_zahJKR0:Bvu6wjv6hyk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Shahinism?i=J3YkVY3QZjQ:ioV_zahJKR0:Bvu6wjv6hyk" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Shahinism/~4/J3YkVY3QZjQ" height="1" width="1"&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogroolViaF0rudInGoogleReader/~4/E8rNg4fh7jM" height="1" width="1"/&gt;</summary><author gr:unknown-author="true"><name>(author unknown)</name></author><source gr:stream-id="feed/http://shahinism.com/feed/"><id>tag:google.com,2005:reader/feed/http://shahinism.com/feed/</id><title type="html">Shahinism.com</title><link rel="alternate" href="http://shahinism.github.io" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1368891493674"><id gr:original-id="http://jadi.net/?p=9006">tag:google.com,2005:reader/item/13805b0add26f10b</id><category term="روزنوشت" /><category term="اقتصاد" /><category term="جامعه" /><category term="جهان" /><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;ابرتورم&lt;/div&gt;</title><published>2013-05-18T15:38:00Z</published><updated>2013-05-18T15:38:00Z</updated><link rel="alternate" href="http://feedproxy.google.com/~r/freekeyboard/~3/QEw1TxbJBac/" type="text/html" /><link rel="canonical" href="http://jadi.net/2013/05/hyper-inflation/" /><content xml:base="http://jadi.net/" gr:direction="rtl" type="html">&lt;div style="direction:rtl;text-align:right"&gt;&lt;p&gt;&lt;img src="http://jadi.net/wp-content/uploads/2013/05/pool.jpg" alt="ابر تورم" width="496" height="588"&gt;&lt;/p&gt;
&lt;p&gt;بچه‌های آلمانی از بسته‌های هزار تایی اسکناس مارک آلمان برای بازی استفاده می کنن و باهاش خونه می‌سازن. سال ۱۹۲۳ است و حکومت آلمان تصمیم گرفته برای دادن قرض‌هاش پول چاپ کنه و اینکار موجب &lt;a href="http://en.wikipedia.org/wiki/Hyper_inflation"&gt;ابر-تورم&lt;/a&gt; شده.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href="http://semioticapocalypse.tumblr.com/post/49759737969/german-children-using-marks-as-building-blocks#.UYmO7MrHZTF"&gt;منبع&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/freekeyboard/~4/QEw1TxbJBac" height="1" width="1"&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogroolViaF0rudInGoogleReader/~4/7H58_ncDW9w" height="1" width="1"/&gt;</content><author><name>جادی</name></author><source gr:stream-id="feed/http://feeds2.feedburner.com/freekeyboard"><id>tag:google.com,2005:reader/feed/http://feeds2.feedburner.com/freekeyboard</id><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;کیبرد آزاد&lt;/div&gt;</title><link rel="alternate" href="http://jadi.net" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1368871348838"><id gr:original-id="http://jadi.net/?p=9003">tag:google.com,2005:reader/item/7a709020a2a33143</id><category term="روزنوشت" /><category term="جامعه شناسی" /><category term="جنسیت" /><category term="حقوق بشر" /><category term="سالگرد" /><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;به افتخار روز جهانی مبارزه با ترس از همجنسگرایی&lt;/div&gt;</title><published>2013-05-18T09:41:24Z</published><updated>2013-05-18T09:41:24Z</updated><link rel="alternate" href="http://feedproxy.google.com/~r/freekeyboard/~3/O2l6LVEyEKE/" type="text/html" /><link rel="canonical" href="http://jadi.net/2013/05/az-hamjense-khodetoon-natarsin/" /><content xml:base="http://jadi.net/" gr:direction="rtl" type="html">&lt;div style="direction:rtl;text-align:right"&gt;&lt;p&gt;&lt;img src="http://www.homophobiaday.org/utilisateur/images/homophobie/images2013/2013-BAND-600x250-ANG.jpg"&gt;&lt;/p&gt;
&lt;p&gt;آمار خیلی دقیقی در در دست نیست ولی بنا به تحقیقات متعدد، توی جامعه اطراف ما نزدیک ده درصد مردم گرایشات همجنسگرایانه. به عبارت دیگه توی همین دوستانی که هر روز می بینین و باهاشون کار می کنین و دانشگاه می رین، از هر ده نفرشون یکی  یعنی همه چیزش مثل اون نه نفر دیگه است به جز اینکه در زندگی جنسی و عاطفی دوست داره با همجنس خودش باشه نه جنس مقابلش و به شکل شکل غریبی، این نکته کاملا شخصی، برای بعضی ها هراس آوره.. &lt;/p&gt;
&lt;p&gt;دیروز &lt;a href="http://www.homophobiaday.org/"&gt;روز جهانی مبارزه با ترس از همجنسگرایی&lt;/a&gt; بود و مثل هر سال لازم دیدم توی این وبلاگ با یک لبخند خوب جشنش بگیریم؛ بدون ترس (:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;مرتبط:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://jadi.net/2009/05/%d8%b1%d9%88%d8%b2-%d8%ac%d9%87%d8%a7%d9%86%db%8c-%d9%85%d8%a8%d8%a7%d8%b1%d8%b2%d9%87-%d8%a8%d8%a7-%d8%aa%d8%b1%d8%b3-%d8%a7%d8%b2-%d9%87%d9%85%d8%ac%d9%86%d8%b3%e2%80%8c%d8%ae%d9%88%d8%a7%d9%87/" title="روز جهانی مبارزه با ترس از همجنس‌خواهی"&gt;روز جهانی مبارزه با ترس از همجنس‌خواهی سال ۲۰۰۹&lt;/a&gt;&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/freekeyboard/~4/O2l6LVEyEKE" height="1" width="1"&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogroolViaF0rudInGoogleReader/~4/g_jILnEaFsQ" height="1" width="1"/&gt;</content><author><name>جادی</name></author><source gr:stream-id="feed/http://feeds2.feedburner.com/freekeyboard"><id>tag:google.com,2005:reader/feed/http://feeds2.feedburner.com/freekeyboard</id><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;کیبرد آزاد&lt;/div&gt;</title><link rel="alternate" href="http://jadi.net" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1368766815326"><id gr:original-id="http://jadi.net/?p=8999">tag:google.com,2005:reader/item/e92465e5f36640f1</id><category term="روزنوشت" /><category term="ایران" /><category term="جمعه ها با کاندوم" /><category term="جهان" /><category term="خبر" /><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;جمعه‌ها با کاندوم: عشق مقدس است&lt;/div&gt;</title><published>2013-05-17T04:40:07Z</published><updated>2013-05-17T04:40:07Z</updated><link rel="alternate" href="http://feedproxy.google.com/~r/freekeyboard/~3/g19iK0765JM/" type="text/html" /><link rel="canonical" href="http://jadi.net/2013/05/jomeha-eshgh-moghaddas/" /><content xml:base="http://jadi.net/" gr:direction="rtl" type="html">&lt;div style="direction:rtl;text-align:right"&gt;&lt;p&gt;&lt;img src="http://jadi.net/wp-content/uploads/2013/05/condomkenya.jpg" alt="condomkenya" width="473" height="273"&gt;&lt;br&gt;
بیلبورد بالا توی کنیا مباحثه برانگیز شده. گروهی به اسم «کاتولیک‌های طرفدار حق انتخاب» این عکس و نوشته بزرگ رو توی کنیا نصب کردن که روش نوشته:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;
ما به خدا معتقدیم.&lt;br&gt;
ما به تقدس سکس معتقدیم.&lt;br&gt;
ما به رعایت احوال دیگران معتقدیم.&lt;br&gt;
ما به کاندوم معتقدیم.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;انتقادهای روحانیون محلی به این کمپین زیاد بوده چون از نظر کاتولیک‌ها، استفاده از کاندوم کار صحیحی نیست و آدم‌‌ها نباید با وسایل پیگشیری جلوی درست شدن بچه رو بگیرن. مدیر کمپین کاتولیک‌های طرفدار حق انتخاب در مورد انتقادات گفته «هدف این کمپین اینه که مطمئن بشه کاتولیک‌ها علی‌رغم تبلیغات اسقف‌هاشون می دونن که می‌شه برای اهداف خوب از کاندوم استفاده کرد. کاتولیک‌های کنیایی هم فرقی با بقیه کاتولیک‌ها ندارد و باید بدونن که می تونن قدم‌های لازم برای حفاظت خود و پارتنرشون در برابر بیماری‌هایی مثل ایدز رو بردارن». &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;در همین هفته:&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;-&lt;/strong&gt; &lt;a href="http://abcnews.go.com/International/counterfeit-condom-ring-busted-millions-contraceptives-confiscated/story?id=19183432"&gt;پلیس‌ها در استان فوجیان چین، به کارخونه ساخت کاندوم‌های تقلبی حمله کردن و ۴.۶۵ میلوین کاندوم که به اسامی مشهوری مثل دورکس و جیسبون بسته بندی شده بودن رو توقیف کردن.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;-&lt;/strong&gt; در ایران عزیز هم خانه‌های بهداشت از نمایش پوسترها و داشتن شعارهای طرفدار کنترل جمعیت منع شدن و دیگه هم نباید وسایل پیگشیری در این مکان‌ها در معرض دید باشن.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/freekeyboard/~4/g19iK0765JM" height="1" width="1"&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogroolViaF0rudInGoogleReader/~4/-4VV1tFkgA4" height="1" width="1"/&gt;</content><author><name>جادی</name></author><source gr:stream-id="feed/http://feeds2.feedburner.com/freekeyboard"><id>tag:google.com,2005:reader/feed/http://feeds2.feedburner.com/freekeyboard</id><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;کیبرد آزاد&lt;/div&gt;</title><link rel="alternate" href="http://jadi.net" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1368611495842"><id gr:original-id="http://jadi.net/?p=8995">tag:google.com,2005:reader/item/2954add9d4cdf0f6</id><category term="روزنوشت" /><category term="اقتصاد" /><category term="خارج" /><category term="سرمایه داری" /><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;بدترین اتاق ها&lt;/div&gt;</title><published>2013-05-15T09:51:02Z</published><updated>2013-05-15T09:51:02Z</updated><link rel="alternate" href="http://feedproxy.google.com/~r/freekeyboard/~3/jSIrJ9zh28Y/" type="text/html" /><link rel="canonical" href="http://jadi.net/2013/05/badtarin-otagh/" /><content xml:base="http://jadi.net/" gr:direction="rtl" type="html">&lt;div style="direction:rtl;text-align:right"&gt;&lt;p&gt;تامبلر &lt;a href="http://theworstroom.tumblr.com/"&gt;بدترین اتاق&lt;/a&gt; وبلاگی است در تلاش برای پیدا کردن یک خونه قابل اجاره در نیویورک سیتی آمریکا. اتاق‌ها و قیمت‌هاشون اونجاست تا تصوری شفاف بهمون بده از وضعیت مسکن. مثلا اجاره این «اتاق» در ویلسبورگ بروکلین، ۱۲۰۰ دلار اجاره لازم داره:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://jadi.net/wp-content/uploads/2013/05/room.jpg" alt="room" width="600" height="394"&gt;&lt;/p&gt;
&lt;p&gt;و البته در توضیح آگهی هم نوشته شده «دارای برق پایدار» که احتمالا منظورش همون پریز است. &lt;a href="http://theworstroom.tumblr.com/"&gt;بقیه اش رو ببینین چون باحاله&lt;/a&gt;.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/freekeyboard/~4/jSIrJ9zh28Y" height="1" width="1"&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogroolViaF0rudInGoogleReader/~4/oGGWhJUSaTA" height="1" width="1"/&gt;</content><author><name>جادی</name></author><source gr:stream-id="feed/http://feeds2.feedburner.com/freekeyboard"><id>tag:google.com,2005:reader/feed/http://feeds2.feedburner.com/freekeyboard</id><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;کیبرد آزاد&lt;/div&gt;</title><link rel="alternate" href="http://jadi.net" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1368510890604"><id gr:original-id="http://jadi.net/?p=8909">tag:google.com,2005:reader/item/6cb338f201a73426</id><category term="روزنوشت" /><category term="ایران" /><category term="دروغ" /><category term="علم" /><category term="معرفی" /><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;تخفیف بی سابقه: مقاله ISI و در نتیجه رشد علمی کشور و اساتید عزیز با ۲۵۰ دلار&lt;/div&gt;</title><published>2013-05-14T05:27:09Z</published><updated>2013-05-14T05:27:09Z</updated><link rel="alternate" href="http://feedproxy.google.com/~r/freekeyboard/~3/YVJIQ7vDaOE/" type="text/html" /><link rel="canonical" href="http://jadi.net/2013/05/isi-article-with-250usd/" /><content xml:base="http://jadi.net/" gr:direction="rtl" type="html">&lt;div style="direction:rtl;text-align:right"&gt;&lt;p&gt;بشتابید! بشتابید! یورو ژورنال نشریه &lt;em&gt;معتبر&lt;/em&gt; علمی ای که فقط با چهارصد دلار هر مهملی رو چاپ می کنه و باعث می شه تعداد مقالات چاپ شده شما استاد ، مدیر، کارشناس و… عزیز بیشتر بشه و آمار هم بره بالا و کلا همه چیز رشد کنه، برای شماره بعدی از ۴۰۰ دلار با کلی تخفیف به ۲۵۰ دلار رسیده!&lt;/p&gt;
&lt;p&gt;این یعنی یک فرصت استثنایی! درسته که تقریبا در همه شماره های این نشریه معتبر علمی فقط و فقط ایرانی ها مقاله دارن ولی شکی نیست که خیلی خفن و اسم آور است.. کی بدش می یاد با خرج کردن فقط هزار  دلار ناقابل، چهار مقاله رسمی در «&lt;a href="http://www.eurojournals.com"&gt;ژورنال علمی اروپایی&lt;/a&gt;» داشته باشه که ظاهرا ISI هم داره؟ &lt;/p&gt;
&lt;p&gt;یک نمونه از مقاله های چاپ شده هم اینه. البته با کمی توضیحات بامزه که واقعا نیازی هم بهشون نبود اگر حداقلی از هوش داشته باشین و سطحی متوسط از انگلیسی.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://jadi.net/wp-content/uploads/2013/05/isi.paper_.with_.400usd-0.jpg" alt="isi.paper.with.400usd-0" width="600" height="776"&gt;&lt;/p&gt;
&lt;p&gt;اینم اضافه کنم که خوشبختانه این سایت از یکی دو ماه قبل دیگه دسترسی آزاد به شماره هاش رو فراهم نکرده و اگر کسی بخواد محتوای مقاله چاپ شده شما در یوروژورنال رو ببینه و احیانا چنین ادیتی روش بکنه باید کلی کلی کلی کلی پول بده. چرا خوشبختانه؟ چون از این به بعد می تونین خوشحال باشین که با دادن ۴۰۰ دلار پول &lt;em&gt;ادیت&lt;/em&gt;، مقاله تون در یک نشریه معتبر چاپ خواهد شد و هیچ وقت هم کسی نخواهد تونست محتوای مقاله شما رو ببینه (:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;مرتبط:&lt;/strong&gt;&lt;br&gt;
۱- &lt;a href="http://fa.wikipedia.org/wiki/%D9%85%D8%B1%DA%A9%D8%B2_%D8%A8%DB%8C%D9%86%E2%80%8C%D8%A7%D9%84%D9%85%D9%84%D9%84%DB%8C_%D8%B2%D9%86%D8%AF%DA%AF%DB%8C%E2%80%8C%D9%86%D8%A7%D9%85%D9%87%E2%80%8C%D9%87%D8%A7_%28%DA%A9%D9%85%D8%A8%D8%B1%DB%8C%D8%AC%29"&gt;با صد و نود دلار از موسسه کمبریج مرد علمی سال بشین&lt;/a&gt;&lt;br&gt;
۲- &lt;a href="https://fa.wikipedia.org/wiki/%D8%B9%D9%84%DB%8C_%D9%81%D8%AA%D8%AD%E2%80%8C%D8%A7%D9%84%D9%84%D9%87%E2%80%8C%D8%B2%D8%A7%D8%AF%D9%87"&gt;با ۳۰۰۰ دلار لقت شوالیه هر چیزی که می خواین رو از  مرکز تحقیقات و نوآوری مدیریت اروپا در بروکسل دریافت کنین&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;کاملا مرتبط:&lt;/strong&gt;&lt;br&gt;
- نوشته پانویس «&lt;a href="http://panevis.ir/1392/02/%D8%A7%D9%86%D8%AA%D8%B4%D8%A7%D8%B1%D8%A7%D8%AA-lambert-%D8%A2%D9%84%D9%85%D8%A7%D9%86%D8%9B-%D9%86%D9%88%D8%B9%DB%8C-%DA%A9%D9%84%D8%A7%D9%87%D8%A8%D8%B1%D8%AF%D8%A7%D8%B1%DB%8C-%D8%A2%DA%A9%D8%A7/"&gt;انتشارات Lambert آلمان؛ نوعی کلاهبرداری آکادمیک&lt;/a&gt;» رو هم بخونین که عالیه در همین مورد و دقیق و تحقیقی.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/freekeyboard/~4/YVJIQ7vDaOE" height="1" width="1"&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogroolViaF0rudInGoogleReader/~4/SQpu-6d1x7I" height="1" width="1"/&gt;</content><author><name>جادی</name></author><source gr:stream-id="feed/http://feeds2.feedburner.com/freekeyboard"><id>tag:google.com,2005:reader/feed/http://feeds2.feedburner.com/freekeyboard</id><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;کیبرد آزاد&lt;/div&gt;</title><link rel="alternate" href="http://jadi.net" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1368442726428"><id gr:original-id="http://shahinism.github.io/posts/from-wordpress-to-nikola.html">tag:google.com,2005:reader/item/5a94caee831dda32</id><category term="Wordpress" /><category term="Nikola" /><category term="Python" /><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;از وردپرس به نیکولا&lt;/div&gt;</title><published>2013-05-13T10:21:43Z</published><updated>2013-05-13T10:21:43Z</updated><link rel="alternate" href="http://feedproxy.google.com/~r/Shahinism/~3/jQgh-WOd72c/from-wordpress-to-nikola.html" type="text/html" /><link rel="canonical" href="http://shahinism.github.io/posts/from-wordpress-to-nikola.html" /><summary xml:base="http://shahinism.github.io/" gr:direction="rtl" type="html">&lt;div style="direction:rtl;text-align:right"&gt;&lt;div&gt;&lt;p&gt;خیلی وقت بود که به فکر انتقال وبلاگم به یکی از سیستم‌های وبلاگ ایستا (Static) بودم. عمده‌ترین دلیلش هم قابلیت خوب Github برای انتشار چنین وبلاگ‌هایی بود. اما بیشتر از یک سال این فکر را عقب انداختم تا دیگر کم کم نگهداری از هاست و دامین وبلاگ آن هم با نوع سرویس دهی شرکت‌های ایرانی‌، برایم خسته کننده شد. وبلاگ‌نویسی قرار نیست تمام فکر و ذکرم را به خودش مشغول کند‌! قرار است یک جای ساده باشد که خیلی راحت بتوان تویش نوشت و منتشر کرد. (الان که دارم می‌نویسم‌، دامین اصلی وبلاگم Shahinism.com لنگ به هواست و نمی‌توانم DNS را به هاست قبلی منتقل کنم)&lt;/p&gt;
&lt;div&gt;
&lt;h2&gt;چرا یک وبلاگ ایستا؟&lt;/h2&gt;
&lt;p&gt;خوب به طور کلی دلایلش از این قرارند:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;strong&gt;سرعت‌، سرعت‌، سرعت:&lt;/strong&gt; دیگر در این نوع از وبلاگ‌، خبری از پایگاه داده نیست. همین‌طور قرار نیست هیچ پردازشی در سمت سرور وبلاگ قرار گیرد. و خوب طبیعتا خیلی خیلی امکاناتی که این ابزار‌ها فراهم می‌کنند را نمی‌توانم داشته باشم. اما حقیقتش در یک وبلاگ‌، به بسیاری از این ابزار‌ها نیاز ندارم. به هر حال این نبودن‌ها‌، یعنی سرعت بیشتر. در مورد من‌، سرعت لود صفحات‌، حدودا سه برابر بیشتر شد.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;سادگی:&lt;/strong&gt; فکر نمی‌کنم چیز زیادی در این زمینه برای گفتن باقی گذاشته باشم.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;امنیت:&lt;/strong&gt; وقتی تنها با صفحات سادهٔ HTML روبرو هستید. وقتی یک سیستم انتشار قابل اطمینان دارید‌‌، دیگر نباید نگران آپدیت بودن ابزار وبلاگ‌نویسی‌تان و یا هک شدنش باشید. این‌طور نیست؟&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;محدود نبودن پهنای باند:&lt;/strong&gt; این یکی از آن کابوس‌هایی است که بی‌خبر به سراغ‌تان می‌آید. ولی خوب خوشبختانه روی گیت‌هاب‌، این نگرانی را نداریم ;-)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;قابلیت بازیابی:&lt;/strong&gt; خوب این یکی زیاد مربوط به خود سیستم وبلاگ‌نویسی نیست. ولی چون نتیجهٔ کارش را می‌توان با هر سیستم دلخواهی منتشر کرد و من گیت را انتخاب کرده‌ام‌، خیلی راحت می‌توانم در صورت گند زدن‌، بدون هیچ استرسی آن را به حالت قبل برگردانم. این قابلیت روی هاست‌های اشتراکی پولی و گران است و در سرور‌های اختصاصی‌، خیلی پر دردسر‌تر از چیزی که در این‌جا با آن طرفیم ;-)&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
&lt;div&gt;
&lt;h2&gt;کدام سیستم؟&lt;/h2&gt;
&lt;p&gt;به هر حال‌، پس از قطعی شدن تصمیم انتقال‌، باید یکی از سیستم‌ها را انتخاب می‌کردم. به طور کلی این سیستم‌ها اعم از &lt;a href="http://nikola.ralsina.com.ar/"&gt;Nikola&lt;/a&gt;, &lt;a href="http://docs.getpelican.com/"&gt;Pelican&lt;/a&gt;, &lt;a href="http://octopress.github.ip/"&gt;Octopress&lt;/a&gt; و خیلی‌های دیگر که با یک سرچ در اینترنت می‌توانید پیدایشان کنید‌، تفاوت عمده‌ای در نتیجهٔ کار ندارند. طرز کارشان فوق‌العاده ساده است. شما متن پست وبلاگ‌تان را در یک فایل حالا به هر فرمتی که سیستم مورد نظر برای‌تان مهیا کرده می‌نویسید‌، یک قالب هم بر اساس قوائد تعیین شدهٔ سیستم به آن می‌خورانید و می‌گویید که وبلاگ آماده شود. در نهایت این سیستم می‌آید یک سایت کاملا ایستا در فایل‌های html آماده می‌کند که شامل پست‌های شماست و بر اساس قالب مورد نظر‌تان قالب‌بندی شده.&lt;/p&gt;
&lt;p&gt;من &lt;a href="http://nikola.ralsina.com.ar/"&gt;Nikola&lt;/a&gt; را انتخاب کردم‌، چون اولا پایتونی است‌ و بعد از آن خیلی راحت‌تر از &lt;a href="http://docs.getpelican.com/"&gt;Pelican&lt;/a&gt; که آن هم پایتونی است نصب می‌شود. همین!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://shahinism.github.io/posts/from-wordpress-to-nikola.html"&gt;بیشتر بخوانید...&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Shahinism?a=jQgh-WOd72c:4kxHwAv04S0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Shahinism?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Shahinism?a=jQgh-WOd72c:4kxHwAv04S0:Bvu6wjv6hyk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Shahinism?i=jQgh-WOd72c:4kxHwAv04S0:Bvu6wjv6hyk" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Shahinism/~4/jQgh-WOd72c" height="1" width="1"&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogroolViaF0rudInGoogleReader/~4/VL-DbH6GLNc" height="1" width="1"/&gt;</summary><author gr:unknown-author="true"><name>(author unknown)</name></author><source gr:stream-id="feed/http://shahinism.com/feed/"><id>tag:google.com,2005:reader/feed/http://shahinism.com/feed/</id><title type="html">Shahinism.com</title><link rel="alternate" href="http://shahinism.github.io" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1368385073414"><id gr:original-id="http://linuxreview.ir/?p=11064">tag:google.com,2005:reader/item/5d11699fa4fb1164</id><category term="آموزش‌های عمومی" /><category term="ftp" /><category term="اف‌تی‌پی" /><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;دانستنی‌های پروتکل FTP&lt;/div&gt;</title><published>2013-05-12T15:49:25Z</published><updated>2013-05-12T15:49:25Z</updated><link rel="alternate" href="http://feedproxy.google.com/~r/LinuxReview/~3/4uUtEVCawic/" type="text/html" /><link rel="canonical" href="http://linuxreview.ir/1392/02/things-to-know-about-ftp/" /><content xml:base="http://linuxreview.ir/" gr:direction="rtl" type="html">&lt;div style="direction:rtl;text-align:right"&gt;&lt;h3&gt;پیش‌گفتار&lt;/h3&gt;
&lt;p&gt;FTP‌ کوتاه شده‌ی عبارت File Transfer Protocol است. این پروتکل سالیان درازی است که به منظور انتقال فایل بین کامپیوترهای موجود در یک شبکه TCP/IP بین کلاینت و سرور مورد استفاده قرار می‌گیرد. این پروتکل تقریبا یک پروتکل ۴۲ ساله است که امکان استفاده از برخی فرامین در هنگام اتصال FTP از کلاینت به سرور برای کاربران یکی از ویژگی‌های جالب توجه آن است.&lt;/p&gt;
&lt;p&gt;آدرس یک FTP سرور شبیه آدرس http در یک وب‌سایت است، با این تفاوت که از پیش‌وند //:ftp بجای //:http‌ استفاده می‌شود. با استفاده از FTP، هم می‌توان فایل آپلود کرد و هم دانلود. عموما هر کامپیوتری که سرویس FTP بر روی آن در حال اجرا باشد و یک آدرس FTP‌ داشته باشد به‌عنوان یک FTP سرور عمل می‌کند. برای استفاده از FTP به دو مورد نیاز است:&lt;/p&gt;
&lt;p&gt;۱.یک کلاینت FTP&lt;/p&gt;
&lt;p&gt;۲.یک FTP سرور&lt;/p&gt;
&lt;p&gt;اکثر سیستم‌عامل‌ها بصورت پیش‌فرض کلاینت FTP را بر روی خود به همراه دارند. برای استفاده از FTP کافیست در command prompt سیستم‌عامل ویندوزی و یا ترمینال‌های لینوکسی دستور ”ftp IP” تایپ شود.&lt;/p&gt;
&lt;p&gt;زمانی‌که اصطلاحا به سرور، FTP می‌کنید امکان اجرای برخی دستورات را در سرور خواهید داشت؛ برای مثال می‌توان از این طریق لیستی از فایل‌های موجود در سرور را دید، فایل‌هایی را ایجاد کرد یا ازسرور حذف کرد و تغییر نام داد. همچنین قرار دادن فایل از کلاینت به سرور و همچنین گرفتن فایل نیز از مهم‌ترین کاربرد‌هایی‌ است که در FTP وجود دارد.&lt;/p&gt;
&lt;h3&gt;ورود به یک FTP سرور&lt;/h3&gt;
&lt;p&gt;برای ورود و دسترسی به سرورFTP ، در قدم اول به آدرس آن FTP کرده و سپس توسط نام‌ کاربری مجاز احراز هویت می‌کنیم. در این لحظه احراز هویت کاربر صورت گرفته است و یک نشست بین کلاینت و سرور ایجاد شده است. این نشست از نوع TCP‌ است. در هر نشستی دو پورت ۲۰ و ۲۱ TCP ، استفاده می‌شود. پورت ۲۰ برای data channel و پورت ۲۱ برای command channel استفاده می‌شود. در data channel اطلاعات بین سرور و کلاینت مبادله می‌شوند، و در command channel دستورات ارسال می‌شوند. وجود دو کانال مختلف در زمان FTP ، باعث می‌شود که کاربر بتواند حین انتقال فایل قادر به اجرای دستورات دیگر نیز باشد، حتی لغو انتقال!&lt;/p&gt;
&lt;p&gt;معمولا سه نوع اکانت برای اتصال به FTP سرور وجود دارد که عبارتند از:  Restricted، Anonymous و real/local.&lt;/p&gt;
&lt;p&gt;اگر اکانتی که برای لاگین در سرور FTP مورد استفاده قرار می‌گیرد local و یا restricted‌ باشد، باید از نام کاربری و پسوردی که در سرور وجود دارد استفاده شود؛ این در حالیست که در روش anonymous، نام‌کاربری همان anonymous است و نیاز به پسورد ندارد که البته اکثر مواقع گفته می‌شود که افراد از آدرس ایمیل خود برای پسورد استفاده کنند.&lt;/p&gt;
&lt;p&gt;در روش local ، دایرکتوری پیش‌فرض در FTP که کاربر بعد از لاگین در آن قرار دارد عبارتست از home/user/ در صورتی که در روش‌های restricted و anonymous دایرکتوری پیش‌فرض var/ftp/ می‌باشد.&lt;/p&gt;
&lt;p&gt;اکانت‌هایی که از نوع local هستند حق دسترسی به تغییر دایرکتوری دارند اما در اکانت‌های restricted و anonymous کاربر حق و مجوز تغییر دایرکتوری را ندارد.&lt;/p&gt;
&lt;p&gt;برای ایجاد یک نشست FTP بین کلاینت و سرور می‌توان به دو روش normal mode و passive mode اشاره کرد.&lt;/p&gt;
&lt;p&gt;در روش normal mode که به آن active نیز می‌گویند، کلاینت با شماره پورت تصادفی بالای ۱۰۲۴ به پورت ۲۱ سرور کانکشن می‌زند و سرور نیز از پورت ۲۰ خود جهت انتقال داده استفاده خواهد کرد. همینطور در روش passive در ابتدا از سمت کلاینت شماره پورتی تصادفی بالای ۱۰۲۴ به پورت۲۱ سرور اتصال برقرار می‌کند، سپس کلاینت با ارسال دستور PASV به سرور اعلام می‌کند که اتصال از نوع passive باشد، در اینجا برای انتقال داده دیگر پورت ۲۰ سرور استفاده نمی‌شود بلکه پورتی تصادفی بالای ۱۰۲۴ انتخاب می‌گردد.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;img alt="http://linuxreview.ir/wp-content/uploads/FTP_command_and_data_channels-resized-600.png" src="http://linuxreview.ir/wp-content/uploads/FTP_command_and_data_channels-resized-600.png" width="550" height="189"&gt;همانطور که گفته شد، در اکثر اوقات برای FTP کردن به هر سروری می‌بایست نام کاربری و پسورد برای احراز هویت و تعیین سطح دسترسی وجود داشته باشد، اما در برخی مواقع نظیر وجود سرورهایی برای در دسترس قرار دادن اطلاعات برای همگان و یا اهداف تبلیغاتی، امکان ورود به سرور از طریق FTP را برای تمام افراد وجود دارد و کاربران بدون داشتن نام کاربری و پسورد به مجموعه‌ای معین از فایل‌ها دسترسی خواهند داشت. این رویه Anonymous FTP نام دارد. در این فرآیند ابتدا به سرور مورد نظر ftp میکنیم، سپس از کلمه anonymous برای نام‌کاربری استفاده می‌کنیم و هیچ پسوردی نمی‌زنیم، به این صورت به محتویات فایل‌ها و دایرکتوری‌هایی که مجوز استفاده از آنان را داریم دسترسی پیدا خواهیم کرد.&lt;/p&gt;
&lt;p style="text-align:right"&gt;به عنوان مثال توسط کامند زیر به یک FTP Server به آدرس زیر به عنوان یک کاربر anonymous لاگین می‌کنیم:&lt;/p&gt;
&lt;pre&gt;$ ftp ftp.heanet.ie&lt;/pre&gt;
&lt;p style="text-align:center"&gt;&lt;img alt="http://linuxreview.ir/wp-content/uploads/anonymous-ftp-login-e1368199998122.png" src="http://linuxreview.ir/wp-content/uploads/anonymous-ftp-login-e1368199998122.png" width="573" height="185"&gt;&lt;/p&gt;
&lt;p&gt;همان‌طور که در شکل دیده می‌شود نام‌کاربری anonymous استفاده شده است و همچنین هیچ پسوردی برای ورود به سرور نیاز ندارد. البته در این مورد احتمالا برای جمع‌آوری اطلاعاتی مبنی بر اینکه چه افرادی به سرور FTP کرده‌اند پیغامی مبنی بر وارد کردن آدرس ایمیل به عنوان پسورد ظاهر شده است که نیاز به وارد کردن آن نیست و کاملا اختیاری می‌باشد. بعد از آن به کاربر اعلام شده که دسترسی او به فایل‌ها طبق حدودی است که برای آن‌ها تعیین شده است. معمولا این کاربران اجازه آپلود فایل به سرور را ندارند، البته در بعضی مواقع دایرکتوری‌هایی برای این کاربران ایجاد می‌شود.&lt;/p&gt;
&lt;p&gt;در خط بعدی به نوشته Remote system type is UNIX می‌رسیم، در اینجا سیستم‌عاملی که با آن FTP شده است را شناسایی و اعلام کرده است، همینطور اعلام می‌کند مٌدی که در آن قرار دارید binary mode است.&lt;/p&gt;
&lt;p&gt;انتقال فایل در FTP در دو مُد باینری و اَسکی انجام می‌شود. در binary mode می‌توان انواع فایل‌ها شامل فایل متنی، اجرایی و هرگونه فایل دیگر را به درستی انتقال داد، اما در حالت ASCII فقط فایل‌های متنی را می‌توان انتقال داد. به عنوان مثال می‌توانید یک عکس با فرمت jpg را در حالت ASCII انتقال دهید تا متوجه بلایی که سر عکس می‌آید شوید!&lt;/p&gt;
&lt;p&gt;یکی از دستورات داخلی FTP که توسط آن می‌توان فایل‌ها و دایرکتوری‌های موجود را دید dir می‌باشد. خروجی این دستور معادل با خروجی”ls -lF” در محیط bash است. دستورات داخلی FTP دستورات محدودی هستند که می‌توان لیستی از آن‌ها را با زدن ? و یا help در نشست FTP دریافت کرد. لیستی از این دستورات که در این سرور آمده‌اند در شکل زیر نمایش داده شده است.&lt;/p&gt;
&lt;p style="text-align:center"&gt;&lt;img alt="http://linuxreview.ir/wp-content/uploads/ftp-command-e1368200169146.png" src="http://linuxreview.ir/wp-content/uploads/ftp-command-e1368200169146.png" width="490" height="235"&gt;&lt;/p&gt;
&lt;p&gt;همانطور که در لیست دستورات داخلی FTP ملاحظه می‌کنید، برای آپلود فایل به سرور از دستور put استفاده می‌کنند. در صورتی‌که تعداد فایل‌ها بیش از یک فایل باشد، از mput استفاده می‌شود. به‌همین‌ترتیب برای گرفتن فایل نیز از get و mget می‌توان استفاده نمود.&lt;/p&gt;
&lt;p&gt;در انتقال فایل توسط FTP داده‌ها رمزنگاری نمی‌شوند و همین امر موجب شده است که FTP مورد توجه attacker ها قرار گیرد تا پکت‌های یک شبکه را sniff‌ کنند. به‌ همین‌ خاطر معمولا FTPS را پیشنهاد می‌کنند که یک اکستنشن برای FTP است که پروتکل‌های TLS و SSL را پشتیبانی می‌کند. معمولا قبل از پیکربندی FTP سرور برای استفاده SSL می‌بایست برنامه‌های پیش‌نیاز آن را قبلا نصب کرده باشید.&lt;/p&gt;
&lt;h3&gt;راه‌اندازی یک FTP سرور&lt;/h3&gt;
&lt;p&gt;از برنامه‌هایی که بطور معمول برای راه‌اندازی FTP سرور مورد استفاده قرار می‌گیرند می‌توان به proftpd‌ و vsftpd اشاره کرد، که در اینجا به معرفی مختصری از vsftpd پرداخته خواهد شد.&lt;/p&gt;
&lt;p&gt;دیمِنِ Very Secure FTP یا همان (vsftpd) یکی از قوی‌ترین و معروف‌ترین FTP سرورهایی است که مورد استفاده سازمان‌ها قرار می‌گیرد. در این FTP سرور امنیت در سطح بالایی مدنظر قرار گرفته شده است. این سرویس در حالت chroot کار می‌کند و در حال حاضر از رمزنگاری TLS/SSL نیز پشتیبانی می‌کند.&lt;/p&gt;
&lt;p&gt;پیکربندی این سرویس کار چندان مشکلی نیست. مواردی که گفته می‌شود می‌تواند پس از نصب مورد استفاده قرار گیرد. معمولا فایل پیکربندی آن vsftpd.conf بوده و در دایرکتوری etc/vsftpd/ قرار دارد(دقت داشته باشید که دستورات ذکر شده مخصوص توزیع‌های بر پایه ردهت و فدورا هستند و برای توزیع‌های دیگر ممکن است دستورات دیگری به کار رود). برای ویرایش جمله و عبارت خوش‌آمدگویی زمانی‌ که کاربرها به سرویس متصل می‌شوند می‌توان فایل welcome.banner را در همین دایرکتوری ویرایش کرد. فایل پیکربندی vsftpd.conf پارامترهای جالب دیگری نظیر تعیین مجوز ایجاد فایل توسط umask و تعیین نام‌کاربری که برای اتصال anonymous مورد استفاده قرار می‌گیرد دارد. زمانی که کاربری نیاز به آپلود فایلی در FTP سرور دارد، تعیین مجوز آن فایل توسط umask بسیار مهم است. برای مثال با تعیین umask 077 مجوزی که برای آپلود فایل ایجاد خواهد شد ۷۰۰ خواهد بود. همچنین می‌توان نام کاربر anonymous را به ftp تغییر داد. علاوه بر آن می‌توان نوع اتصال passive یا active را در این فایل تعیین کرد. پس از پیکربندی کامل سرویس و تعیین پارامترهای دیگری که در این فایل هستند، می‌توان اقدام به start این سرویس کرد. توسط دستور chkconfig می‌توان runlevel هایی که سرویس را می‌خواهید در آن‌ها بالا بیاورید تعیین کنید.&lt;/p&gt;
&lt;pre&gt;# chkconfig --level 345 vsftpd on
# /etc/init.d/vsftpd restart&lt;/pre&gt;
&lt;p&gt;بررسی log فایل‌ها در هنگام start شدن سرویس FTP برای بررسی خطاهای احتمالی سرویس توصیه شده است.&lt;/p&gt;
&lt;pre&gt;# grep vsftpd /var/log/messages&lt;/pre&gt;
&lt;p&gt;ذکر این نکته حائزاهمیت است که در صورت استفاده از سرویس‌هایی مثل iptables نیاز است که پورت‌های مورد استفاده از سرویسی را که راه‌اندازی می‌کنید بر روی سرور باز کنید.&lt;/p&gt;
&lt;p&gt;همانطور که سرویس FTP از پورت ۲۱ استفاده می‌کند، در صورتی‌که این پورت در فایروال‌ها بسته باشد، بایستی اقدام به باز نمودن آن کرد. برای این‌کار می‌بایست فایل iptables را ویرایش کنید، که توسط هر ویرایشگری می‌توان این کار را انجام داد(nano, vi,..).&lt;/p&gt;
&lt;pre&gt;# vi /etc/sysconfig/iptables&lt;/pre&gt;
&lt;p&gt;سپس توسط دستور زیر، پورت۲۱ TCP به مابقی رول‌های امنیتی موجود افزوده و accept خواهد شد.&lt;/p&gt;
&lt;div style="overflow:auto;white-space:nowrap;border:1px solid #9f9f9f;width:435px"&gt;&lt;div style="padding:5px;font:normal 12px/1.4em Monaco,Lucida Console,monospace;white-space:nowrap"&gt;-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;پس از ذخیره تغییرات اعمال شده می‌بایست سرویس iptables را startیا restart کرد.&lt;/p&gt;
&lt;pre&gt;# service iptables start&lt;/pre&gt;
&lt;p&gt;برای تست کردن FTP می‌توان به localhost یا ip:127.0.0.1 و یا آدرس خود سرور FTP‌ کرد:&lt;/p&gt;
&lt;pre&gt;# ftp localhost
# ftp 127.0.0.1
# ftp FTP.domain.com&lt;/pre&gt;
&lt;p&gt;در پیکربندی پیش‌فرض اجازه دانلود برای کاربر anonymous داده شده است. در صورت عدم نیاز به وجود این نام کاربری می‌توان مقدار anonymous_enable را no تعیین کرد. معمولاً اجازه آپلود فایل را به این کاربر به جهت امکان آپلود فایل‌هایی که به سیستم‌ آسیب می‌رسانند نمی‌دهند. در فایل پیکربندی این سرویس می‌توان مقدار حداکثر کلاینت‌هایی که می‌توانند به سرور متصل شوند را تعیین کرد، همینطور تعداد اتصالات ممکن از یک IP را نیز.&lt;/p&gt;
&lt;p&gt;سرویس FTP را می‌توان هم بصورت standalone تحت init اجرا و استفاده کرد و هم تحت مدیریت و کنترل xinetd.&lt;/p&gt;
&lt;p&gt;در صورتی‌که تحت xinetd‌ و یا inetd این سرویس را قرار دهیم، پیکربندی آن را در فایل etc/xinetd.conf/ می‌توانیم ویرایش کنیم. همینطور برای مدیریت آن و دیگر سرویس‌هایی که تحت آن هستند دیگر مستقیما نام آن سرویس‌ها را برای stop‌ و یا start کردن به‌کار نمی‌بریم بلکه همه توسط service xinetd مدیریت خواهند شد. در صورتی که نیاز به stop کردن سرویس FTP باشد می‌توان پارامتر disable سرویس مورد نظر خود را برابر با yes قرار داد. همینطور پارامترهای دیگری برای مدیریت بر روی سرور در این فایل وجود دارد که بنا به نیاز می‌توان هرکدام را تغییر داد. ذکر این نکته حائز اهمیت است که در صورت stop شدن سرویس xinetd تمام سرویس‌هایی که تحت آن اجرا می‌شوند نیز stop خواهند شد.&lt;/p&gt;
 &lt;img src="http://linuxreview.ir/?feed-stats-post-id=11064" width="1" height="1"&gt;
				&lt;div&gt;
					&lt;h4&gt;14 دیدگاه برای این نوشته:&lt;/h4&gt;&lt;ol&gt;
						  &lt;li&gt;&lt;img alt="" src="http://1.gravatar.com/avatar/b70d72e0d7d415cedf793a65a89f37bf?s=32&amp;amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&amp;amp;r=G" height="32" width="32"&gt;&lt;i&gt;دانیال بهزادی:&lt;/i&gt;
							&lt;br&gt;
							&lt;small&gt;&lt;a rel="nofollow" href="http://linuxreview.ir/1392/02/things-to-know-about-ftp/#comment-57238"&gt;۲۳ اردیبهشت ۱۳۹۲&lt;/a&gt;&lt;/small&gt;
							خیلی خوب بود. ممنون که نوشتیدت، مطمئناً مشکلات خیلی‌ از افراد رو برطرف خواهد کرد
						  &lt;/li&gt;
						  &lt;li&gt;&lt;img alt="" src="http://1.gravatar.com/avatar/df29a220bf3e91b9a48ab7f256bcc1eb?s=32&amp;amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&amp;amp;r=G" height="32" width="32"&gt;&lt;i&gt;freeman:&lt;/i&gt;
							&lt;br&gt;
							&lt;small&gt;&lt;a rel="nofollow" href="http://linuxreview.ir/1392/02/things-to-know-about-ftp/#comment-57289"&gt;۲۳ اردیبهشت ۱۳۹۲&lt;/a&gt;&lt;/small&gt;
							توضیح خیلی روان، مختصر و مفید و به دردخوریست....سپاس بسیار.....
						  &lt;/li&gt;
						  &lt;li&gt;&lt;img alt="" src="http://1.gravatar.com/avatar/7eaba1396d9fecea254fd0c48e7ce374?s=32&amp;amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&amp;amp;r=G" height="32" width="32"&gt;&lt;i&gt;Linux Services:&lt;/i&gt;
							&lt;br&gt;
							&lt;small&gt;&lt;a rel="nofollow" href="http://linuxreview.ir/1392/02/things-to-know-about-ftp/#comment-57297"&gt;۲۳ اردیبهشت ۱۳۹۲&lt;/a&gt;&lt;/small&gt;
							با سلام
سایت جامعی دارین و به دلیل این حرکت پسندیدتون از شما متشکریم...
خوشحال میشیم که آخرین مطالب خود را در فروم رایگان LinuxServices.iR به اشتراک بگذارید...
البته ذکر منبع به وبسایت شما خواهد خورد..
						  &lt;/li&gt;
						  &lt;li&gt;&lt;img alt="" src="http://0.gravatar.com/avatar/6330ca9fc179c7bf62bcfb76b00d7840?s=32&amp;amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&amp;amp;r=G" height="32" width="32"&gt;&lt;i&gt;حامد سپهر:&lt;/i&gt;
							&lt;br&gt;
							&lt;small&gt;&lt;a rel="nofollow" href="http://linuxreview.ir/1392/02/things-to-know-about-ftp/#comment-57328"&gt;۲۳ اردیبهشت ۱۳۹۲&lt;/a&gt;&lt;/small&gt;
							ممنون. جالب و کلی چیز یاد گرفتم :)
						  &lt;/li&gt;
						  &lt;li&gt;&lt;img alt="" src="http://1.gravatar.com/avatar/fdfa29996ba4df6d7dd1e749916cb925?s=32&amp;amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&amp;amp;r=G" height="32" width="32"&gt;&lt;i&gt;nazanin:&lt;/i&gt;
							&lt;br&gt;
							&lt;small&gt;&lt;a rel="nofollow" href="http://linuxreview.ir/1392/02/things-to-know-about-ftp/#comment-57364"&gt;۲۳ اردیبهشت ۱۳۹۲&lt;/a&gt;&lt;/small&gt;
							خیلی جامع و مفید بود. ممنون!
						  &lt;/li&gt;
						  &lt;li&gt;&lt;img alt="" src="http://0.gravatar.com/avatar/ac705671016929550f375449bb99f609?s=32&amp;amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&amp;amp;r=G" height="32" width="32"&gt;&lt;i&gt;محسن پهلوان‌زاده:&lt;/i&gt;
							&lt;br&gt;
							&lt;small&gt;&lt;a rel="nofollow" href="http://linuxreview.ir/1392/02/things-to-know-about-ftp/#comment-57380"&gt;۲۳ اردیبهشت ۱۳۹۲&lt;/a&gt;&lt;/small&gt;
							هر چند مقاله از نظر مفهومی خوب جلو رفته، و مفهوم رو خوب رسونده، اما بدلیل اینکه این یک مقاله مفهومی می‌باشد و مستقل از دیسترو، در آخر نباید از command هایی نظیر chkconfig استفاده می‌شد که جهت redhat-base بودن به مقاله مفهومی داده است. "مقاله مفهومی با فنی فرق دارد!" از روند مقاله بر می‌آید که ترجمه باشد.
						  &lt;/li&gt;
						  &lt;li&gt;&lt;img alt="" src="http://0.gravatar.com/avatar/070e9fefd762c916e984aeef5f1e3283?s=32&amp;amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&amp;amp;r=G" height="32" width="32"&gt;&lt;i&gt;keimasi:&lt;/i&gt;
							&lt;br&gt;
							&lt;small&gt;&lt;a rel="nofollow" href="http://linuxreview.ir/1392/02/things-to-know-about-ftp/#comment-57381"&gt;۲۳ اردیبهشت ۱۳۹۲&lt;/a&gt;&lt;/small&gt;
							مرسی نازنین ;) 
دوستان ممنون از همه که مطلب رو خوندین
						  &lt;/li&gt;
						  &lt;li&gt;&lt;img alt="" src="http://0.gravatar.com/avatar/070e9fefd762c916e984aeef5f1e3283?s=32&amp;amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&amp;amp;r=G" height="32" width="32"&gt;&lt;i&gt;keimasi:&lt;/i&gt;
							&lt;br&gt;
							&lt;small&gt;&lt;a rel="nofollow" href="http://linuxreview.ir/1392/02/things-to-know-about-ftp/#comment-57385"&gt;۲۳ اردیبهشت ۱۳۹۲&lt;/a&gt;&lt;/small&gt;
							دقیقا هدف اصلا پرداختن به روش‌های نصب و یا کانفیگ دیستروی خاصی نبوده، اما لازم دیدم تا یه اشاره‌ای هم بهش بشه صرفا جهت آشنایی خواننده. مسلما یه منبع کاملی نیس که کسی بخواد بهش رجوع کنه. کامندای ردهتی آورده شده تا برای کاربرا ملموس‌تر باشه :).
						  &lt;/li&gt;
						  &lt;li&gt;&lt;img alt="" src="http://0.gravatar.com/avatar/ac705671016929550f375449bb99f609?s=32&amp;amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&amp;amp;r=G" height="32" width="32"&gt;&lt;i&gt;محسن پهلوان‌زاده:&lt;/i&gt;
							&lt;br&gt;
							&lt;small&gt;&lt;a rel="nofollow" href="http://linuxreview.ir/1392/02/things-to-know-about-ftp/#comment-57389"&gt;۲۳ اردیبهشت ۱۳۹۲&lt;/a&gt;&lt;/small&gt;
							بهترین گزینه این بود که شما به جای اون کامند های ردهتی، از جملات مفهومی استفاده می‌کردید.
						  &lt;/li&gt;
						  &lt;li&gt;&lt;img alt="" src="http://0.gravatar.com/avatar/070e9fefd762c916e984aeef5f1e3283?s=32&amp;amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&amp;amp;r=G" height="32" width="32"&gt;&lt;i&gt;keimasi:&lt;/i&gt;
							&lt;br&gt;
							&lt;small&gt;&lt;a rel="nofollow" href="http://linuxreview.ir/1392/02/things-to-know-about-ftp/#comment-57394"&gt;۲۳ اردیبهشت ۱۳۹۲&lt;/a&gt;&lt;/small&gt;
							حق با شماست می‌تونست هیچ کامندی توی این مطلب آورده نشه کلا. هدف فقط آشنایی خواننده بوده با نحوه کاری که بایستی انجام بده. ردهت یا دبین، فرقی نمی‌کنه کلا یه کار مشخص باید انجام بشه چه از chkconfig استفاده بشه چه از /etc/init.d/
						  &lt;/li&gt;
						  &lt;li&gt;&lt;img alt="" src="http://0.gravatar.com/avatar/2e0211fa40139bd68e6310299cb459ca?s=32&amp;amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&amp;amp;r=G" height="32" width="32"&gt;&lt;i&gt;عرفان طباطبائی:&lt;/i&gt;
							&lt;br&gt;
							&lt;small&gt;&lt;a rel="nofollow" href="http://linuxreview.ir/1392/02/things-to-know-about-ftp/#comment-57426"&gt;۲۴ اردیبهشت ۱۳۹۲&lt;/a&gt;&lt;/small&gt;
							این کامندها برای راهنمایی کاربر در جهت راه‌اندازی سرور اف‌تی‌پی آورده شدن و کسی که از یک توزیع دیگری استفاده می‌کنه حتما میدونه که چه فرمان‌هایی رو اجرا کنه!
اگر هم نمی‌دونه لازمش یه گوگل کردن هست.

منظورتون از جملات مفهومی اینه که ایشون می‌نوشتن: باید به رانلول‌ پیشفرض اضافه کنید!
مطمئنا کسی که اف‌تی‌پی رو در اون سطح بلد نیست نمیدونه که چطور باید به یک رانلول دیمنی رو اضافه بکنه، و نویسنده در هر صورت ملزم به ارائه مثال در قسمت دیدگاه‌ها می‌شدن.

به جای این ایراد‌ها می‌تونستین کامند‌های مشابه برای دیگر توزیع‌ها رو یادآور بشین :-)

مطلب ترجمه باشه یا نباشه قصد افزایش اطلاعات کاربر هست.
اگر بخوایم اینطوری نگاه بکنیم که اکثر (شاید تمامی) کتاب‌های مربوط به رشته کامپیوتر در ایران ترجمه شده باشن! اما مقصود نهایی تعلیم دانشجو هست!
						  &lt;/li&gt;
						  &lt;li&gt;&lt;img alt="" src="http://0.gravatar.com/avatar/ac705671016929550f375449bb99f609?s=32&amp;amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&amp;amp;r=G" height="32" width="32"&gt;&lt;i&gt;محسن پهلوان‌زاده:&lt;/i&gt;
							&lt;br&gt;
							&lt;small&gt;&lt;a rel="nofollow" href="http://linuxreview.ir/1392/02/things-to-know-about-ftp/#comment-57535"&gt;۲۴ اردیبهشت ۱۳۹۲&lt;/a&gt;&lt;/small&gt;
							دوست گرامی،

منظور از به کار بردن جملات فارسی یک دست کردن مقاله است. نه اینکه بار مقیت یا منقب داره
اما در مورد ترجمه یا عدم ترجمه خبری به من رسید در مورد این مقاله که کامنت بگذارم و نظرم رو در موردش گذاشتم و اینکه ترجمه است بنا به توهین به اون نیست.
						  &lt;/li&gt;
						  &lt;li&gt;&lt;img alt="" src="http://0.gravatar.com/avatar/a2ae88e382b15c5cc52566eeb6f5a22d?s=32&amp;amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&amp;amp;r=G" height="32" width="32"&gt;&lt;i&gt;asaad:&lt;/i&gt;
							&lt;br&gt;
							&lt;small&gt;&lt;a rel="nofollow" href="http://linuxreview.ir/1392/02/things-to-know-about-ftp/#comment-58409"&gt;۲۹ اردیبهشت ۱۳۹۲&lt;/a&gt;&lt;/small&gt;
							خیلی مفید بود ممنون
						  &lt;/li&gt;
						  &lt;li&gt;&lt;img alt="" src="http://0.gravatar.com/avatar/0678f55492e528fee999377f4ecd8ed6?s=32&amp;amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&amp;amp;r=G" height="32" width="32"&gt;&lt;i&gt;ابراهیم درویش:&lt;/i&gt;
							&lt;br&gt;
							&lt;small&gt;&lt;a rel="nofollow" href="http://linuxreview.ir/1392/02/things-to-know-about-ftp/#comment-58634"&gt;۳۰ اردیبهشت ۱۳۹۲&lt;/a&gt;&lt;/small&gt;
							آقا دست گل تون درد نکنه
						  &lt;/li&gt;
					  &lt;/ol&gt;
				  &lt;/div&gt;
			  &lt;p&gt;&lt;a href="http://linuxreview.ir/?cof_write=11064"&gt;&lt;img align="middle" border="0" src="http://linuxreview.ir/wp-content/plugins/comments-on-feed/buttons/blue-3.jpg" alt="ارسال نظر سریع"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/LinuxReview/~4/4uUtEVCawic" height="1" width="1"&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogroolViaF0rudInGoogleReader/~4/6GI3wCghm3g" height="1" width="1"/&gt;</content><author><name>keimasi</name></author><source gr:stream-id="feed/http://feeds2.feedburner.com/linuxreview"><id>tag:google.com,2005:reader/feed/http://feeds2.feedburner.com/linuxreview</id><title type="html">LinuxReview</title><link rel="alternate" href="http://linuxreview.ir" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1368384735619"><id gr:original-id="http://azadrah.net/?p=9981">tag:google.com,2005:reader/item/a2bc78de25467ff8</id><category term="اخبار" /><category term="Elementary OS" /><category term="Luna beta 2" /><category term="المتاری" /><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;دومین بتا elementary OS Luna منتشر شد&lt;/div&gt;</title><published>2013-05-12T18:02:10Z</published><updated>2013-05-12T18:02:10Z</updated><link rel="alternate" href="http://azadrah.net/2013/05/elementary-os-luna-beta-2-released/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=elementary-os-luna-beta-2-released" type="text/html" /><content xml:base="http://azadrah.net/" gr:direction="rtl" type="html">&lt;div style="direction:rtl;text-align:right"&gt;&lt;p&gt;پنچ ماه بعد از انتشار اولین بتا از توزیع زیبای elementary OS Luna، دو روز پیش دومین بتای آن منتشر شد. بتای دوم در مقایسه با اولی بهبودهای قابل ملاحضه‌ای همچون پشتیبانی بهتر از چند نمایشگر، برنامه‌های پیش‌فرض جدیدتر و نمایی بهینه‌تر دارد.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://azadrah.net/wp-content/uploads/2013/05/elementary-os-luna-beta2-desktop.png" rel="lightbox[9981]"&gt;&lt;img alt="میزکار بتا دو لونا" src="http://azadrah.net/wp-content/uploads/2013/05/elementary-os-luna-beta2-desktop-550x309.png" width="550" height="309"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;تغییرات دومین بتا elementary OS Luna&lt;/h4&gt;
&lt;p&gt;تغییرات / پیشرفت‌های بتا دو نسبت به اولی:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="line-height:13px"&gt;دو بخش جدید صفحه‌کلید و انرژی در تنظیمات سیستمی. همچنین گزینه‌ای به منظور تغییر پوسته Plank اضافه شده.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;پشتیبانی بهتر Plank و Wingpanel از چند نمایشگر&lt;/li&gt;
&lt;li&gt;پوسته و مجموعه آیکن بهبود یافته شامل آیکن‌هایی تازه برای فولدرها و مدیرفایل&lt;/li&gt;
&lt;li&gt;نسخه جدید Geary، مدیر رایانامه، با پشتیبانی از چندحساب، فشرده کردن پیام‌ها در گفتگو، امکان گزارش هرزنامه و رفع مشکلات بسیار.&lt;/li&gt;
&lt;li&gt;Midori، مرورگر پیش‌فرض، با قابلیت کنترل رفتار گشودن برگه جدید، بارگزاری بهبود یافته افزونه‌ها، باطن بازنویسی شده دانلود و غیره&lt;/li&gt;
&lt;li&gt;Noise که حالا Music نامیده میشود با امکان تشخیص فایل‌های موسیقی تکراری، بارگزاری سریع‌تر و طراحی بهتر&lt;/li&gt;
&lt;li&gt;پشتیبانی بهتر از ترجمه‌ها&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;چون می‌دانم اکثر شما برای اسکرین‌شات‌ها آمده‌اید، این هم چند تصویر از بتا دوم.&lt;/p&gt;
&lt;p&gt;جعبه تقسیم یا Switchboard که محلی برای قرارگیری تنظیمات سیستمی است.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://azadrah.net/wp-content/uploads/2013/05/elementary-os-luna-beta2-switchboard-system-settings.png" rel="lightbox[9981]"&gt;&lt;img alt="جعبه تقسیم المنتاری لونا" src="http://azadrah.net/wp-content/uploads/2013/05/elementary-os-luna-beta2-switchboard-system-settings-550x364.png" width="550" height="364"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;تنظیمات جدید انرژی&lt;/p&gt;
&lt;p&gt;&lt;a href="http://azadrah.net/wp-content/uploads/2013/05/elementary-os-luna-beta2-power.png" rel="lightbox[9981]"&gt;&lt;img alt="تنظیمات انرژی" src="http://azadrah.net/wp-content/uploads/2013/05/elementary-os-luna-beta2-power-550x338.png" width="550" height="338"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;بخش جدید صفحه کلید به همراه میانبرهای قابل تغییر&lt;/p&gt;
&lt;p&gt;&lt;a href="http://azadrah.net/wp-content/uploads/2013/05/elementary-os-luna-beta2-keyboard.png" rel="lightbox[9981]"&gt;&lt;img alt="تنظیمات صفحه کلید" src="http://azadrah.net/wp-content/uploads/2013/05/elementary-os-luna-beta2-keyboard-550x338.png" width="550" height="338"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;دسکتاپ elementary موسوم به پانتئون. اندیکاتور تقویم فعال شده.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://azadrah.net/wp-content/uploads/2013/05/elementary-os-luna-beta2-calendar.png" rel="lightbox[9981]"&gt;&lt;img alt="اندیکاتور تقویم لونا بتا دو" src="http://azadrah.net/wp-content/uploads/2013/05/elementary-os-luna-beta2-calendar-550x309.png" width="550" height="309"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;مدیرفایل و آیکن‌ها جدید فولدرها&lt;/p&gt;
&lt;p&gt;&lt;a href="http://azadrah.net/wp-content/uploads/2013/05/elementary-os-luna-beta2-marlin-files.png" rel="lightbox[9981]"&gt;&lt;img alt="مدیرفایل و آیکن‌های جدید" src="http://azadrah.net/wp-content/uploads/2013/05/elementary-os-luna-beta2-marlin-files-550x352.png" width="550" height="352"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;تعویض‌کننده فضاهای کاری که با Super + S فعال میشود.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://azadrah.net/wp-content/uploads/2013/05/elementary-os-luna-beta2-workspace-switcher.png" rel="lightbox[9981]"&gt;&lt;img alt="جابه‌جایی میان فضاهای کاری" src="http://azadrah.net/wp-content/uploads/2013/05/elementary-os-luna-beta2-workspace-switcher-550x309.png" width="550" height="309"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;به منظور دریافت اطلاعات بیشتر از این توزیع &lt;a href="http://azadrah.net/2012/11/elementary-os-luna-beta-1-released/"&gt;پست انتشار بتا اول&lt;/a&gt; را مطالعه کنید.&lt;/p&gt;
&lt;h4&gt;دریافت لونا بتا دو&lt;/h4&gt;
&lt;p&gt;اگر لونا را از اولین بتا یا دیسک‌های روزانه‌اش نصب کرده‌اید، با به‌روز کردن سیستم نیازی به نصب جداگانه بتا دو نخواهید داشد. فراموش نکنید لونا هنوز در مرحله آزمایشی است و انتشار نهایی به حساب نمی‌آید.&lt;/p&gt;
&lt;p&gt;برای مطالعه اعلان انتشار، اطلاع از شیوه‌های مشارکت و دریافت دومین بتا، به &lt;a href="http://elementaryos.org/journal/luna-beta-2-released"&gt;اطلاعیه رسمی&lt;/a&gt; مراجعه کنید.&lt;/p&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogroolViaF0rudInGoogleReader/~4/rJvjomTbg-s" height="1" width="1"/&gt;</content><author><name>ساسان</name></author><source gr:stream-id="feed/http://azadrah.net/feed/"><id>tag:google.com,2005:reader/feed/http://azadrah.net/feed/</id><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;آزادراه&lt;/div&gt;</title><link rel="alternate" href="http://azadrah.net" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1368371033427"><id gr:original-id="http://shahinism.github.io/posts/from-nikola-to-wordpress.html">tag:google.com,2005:reader/item/3b9c9eed348eb42b</id><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;مهاجرت از وردپرس به نیکولا&lt;/div&gt;</title><published>2013-05-12T13:02:24Z</published><updated>2013-05-12T13:02:24Z</updated><link rel="alternate" href="http://feedproxy.google.com/~r/Shahinism/~3/AXBGgm1KTlU/from-nikola-to-wordpress.html" type="text/html" /><link rel="canonical" href="http://shahinism.github.io/posts/from-nikola-to-wordpress.html" /><summary xml:base="http://shahinism.github.io/" type="html">&lt;div&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Shahinism?a=AXBGgm1KTlU:Bd7CBL0hHz0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Shahinism?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Shahinism?a=AXBGgm1KTlU:Bd7CBL0hHz0:Bvu6wjv6hyk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Shahinism?i=AXBGgm1KTlU:Bd7CBL0hHz0:Bvu6wjv6hyk" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Shahinism/~4/AXBGgm1KTlU" height="1" width="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/blogroolViaF0rudInGoogleReader/~4/GZuptcCtjFg" height="1" width="1"/&gt;</summary><author gr:unknown-author="true"><name>(author unknown)</name></author><source gr:stream-id="feed/http://shahinism.com/feed/"><id>tag:google.com,2005:reader/feed/http://shahinism.com/feed/</id><title type="html">Shahinism.com</title><link rel="alternate" href="http://shahinism.github.io" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1368349165985"><id gr:original-id="http://shahinism.github.io/posts/blog13920127yn-ymkhs-dwst-dshtny-blns-khrdn-prn.html">tag:google.com,2005:reader/item/3ff1035f120e78bf</id><category term="Emacs" /><category term="Emacs-fu" /><category term="lisp" /><category term="Parenthesis" /><category term="ایمکس" /><category term="برنامه نویسی" /><category term="نرم افزار" /><category term="کدباز" /><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;این ایمکس دوست داشتنی (بالانس کردن پرانتز‌ها)&lt;/div&gt;</title><published>2013-04-16T12:24:21Z</published><updated>2013-04-16T12:24:21Z</updated><link rel="alternate" href="http://feedproxy.google.com/~r/Shahinism/~3/dQpQ-yr8Mqs/blog13920127yn-ymkhs-dwst-dshtny-blns-khrdn-prn.html" type="text/html" /><link rel="canonical" href="http://shahinism.github.io/posts/blog13920127yn-ymkhs-dwst-dshtny-blns-khrdn-prn.html" /><summary xml:base="http://shahinism.github.io/" gr:direction="rtl" type="html">&lt;div style="direction:rtl;text-align:right"&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;یکی از دلایل اصلی Syntax error‌ها بالانس نبودن پرانتز‌هاست (منظورم پرانتز‌، کروشه‌، آکولاد‌، &amp;lt;&amp;gt;‌، گیومه و … است). خوب از آن‌جایی که بنیاد ایمکس براساس Lisp است و Lisp به خاطر پرانتز‌هایش معروف شده (خیلی‌ها به شوخی می‌گن که Lisp مخفف Lost in stupid parentheses هست)‌، مطمئنا باید راهی برای حل این مشکل داشته باشد.
برای این کار خطوط زیر را داخل ‎.emacs وارد می‌کنیم:&lt;/p&gt;


&lt;div&gt;&lt;pre&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;electric-pair-mode&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;
&lt;span&gt;(&lt;/span&gt;&lt;span&gt;show-paren-mode&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;خوب با خط اول‌، به ایمکس می‌گوییم‌، هر وقت ما پرانتزی (که شامل تمام علاماتی است که در بالا اشاره کردیم) باز کردیم‌، خودت به صورت خودکار‌، کاراکتر بستن آن را وارد کن. همین‌طور در خط دوم مجبورش می‌کنیم وقتی روی پرانتزی هستیم‌، اگر جفتی برایش وجود دارد‌، آن را برایمان نمایش دهد (هر دو طرف پرانتز سبز می‌شود معمولا‌. با توجه به تنظیمات پوستهٔ ایمکس)‌. اگر نه‌، سمتی که رویش ایستاده‌ایم را قرمز کن تا بفهمیم تنهاست ;-)&lt;/p&gt;
&lt;p&gt;&lt;a href="https://dl.dropboxusercontent.com/u/25017694/Blog-photos/emacsparenmatch.png"&gt;&lt;img alt="نمونه‌ای از نمایش جفت پرانتز در ایمکس" src="https://dl.dropboxusercontent.com/u/25017694/Blog-photos/emacsparenmatch.png" width="328" height="42"&gt;&lt;/a&gt; نمونه‌ای از نمایش جفت پرانتز در ایمکس&lt;/p&gt;
&lt;p&gt;بخش اول کار که معلوم است. ولی این بخش دوم قابلیت‌های جالب دیگری هم دارد. مثلا می‌توان با(setq show-paren-delay 0) میزان زمانی که طول می‌کشد تا جفت کاراکتر پرانتزمان را نمایش دهد را تعیین کنیم. از قرار به طور پیش‌فرض مقداری Delay تعیین شده که ما با این دستور می‌توانیم صفرش کنیم. من این کار را نکردم چون به نظرم سر موقع نمایش داده می‌شوند.&lt;/p&gt;
&lt;p&gt;همین‌طور می‌توان با(setq show-paren-style 'MODE) تعیین کرد که نمایش هر جفت پرانتز چطور باشد. که برای این کار باید عبارت MODE را با یکی از سه گزینهٔ زیر جایگزین کنیم:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;strong&gt;parenthesis&lt;/strong&gt; که مد پیش‌فرض است و فقط پرانتز‌های دو طرف را نمایش می‌دهد.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;expression&lt;/strong&gt; که علاوه بر پرانتز‌ها‌، متن درونشان هم برجسته می‌شود.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;mixed&lt;/strong&gt; که اگر پرانتز‌ها بالانس باشند مثل مد parenthesis عمل می‌کند و گرنه مثل expression.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;به همین سادگی می‌توانید آن‌طور که می‌خواهید این رفتار ایمکس را هم کنترل کنید.&lt;/p&gt;
&lt;p&gt;من این آموزش را نمی‌دانم از کجای اینترنت یاد گرفتم. ولی این &lt;a title="Emacsfu" href="http://emacs-fu.blogspot.de/2009/01/balancing-your-parentheses.html"&gt;وبلاگ&lt;/a&gt; هم به آن اشاره کرده که وبلاگ عالی‌ای هم هست. پیشنهاد می‌کنم از دستش ندهید. خیلی خیلی تکنیک‌های جالبی با آن یاد خواهید گرفت.&lt;/p&gt;&lt;div&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Shahinism?a=dQpQ-yr8Mqs:efxOfV6gSuQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Shahinism?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Shahinism?a=dQpQ-yr8Mqs:efxOfV6gSuQ:Bvu6wjv6hyk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Shahinism?i=dQpQ-yr8Mqs:efxOfV6gSuQ:Bvu6wjv6hyk" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Shahinism/~4/dQpQ-yr8Mqs" height="1" width="1"&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogroolViaF0rudInGoogleReader/~4/_NBjaTN1vcg" height="1" width="1"/&gt;</summary><author gr:unknown-author="true"><name>(author unknown)</name></author><source gr:stream-id="feed/http://shahinism.com/feed/"><id>tag:google.com,2005:reader/feed/http://shahinism.com/feed/</id><title type="html">Shahinism.com</title><link rel="alternate" href="http://shahinism.github.io" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1368349165985"><id gr:original-id="http://shahinism.github.io/posts/blog13920125yn-ymkhs-dwst-dshtny-backuph-w-autosaveh.html">tag:google.com,2005:reader/item/7006847d776ea3a7</id><category term="Autosave" /><category term="Backup" /><category term="Emacs" /><category term="ایمکس" /><category term="حل مشکل" /><category term="دوره" /><category term="نرم افزار" /><category term="کدباز" /><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;این ایمکس دوست داشتنی (Backup‌ها و Autosave‌ها)&lt;/div&gt;</title><published>2013-04-14T09:13:41Z</published><updated>2013-04-14T09:13:41Z</updated><link rel="alternate" href="http://feedproxy.google.com/~r/Shahinism/~3/5QkljMllbwc/blog13920125yn-ymkhs-dwst-dshtny-backuph-w-autosaveh.html" type="text/html" /><link rel="canonical" href="http://shahinism.github.io/posts/blog13920125yn-ymkhs-dwst-dshtny-backuph-w-autosaveh.html" /><summary xml:base="http://shahinism.github.io/" gr:direction="rtl" type="html">&lt;div style="direction:rtl;text-align:right"&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;یکی از ویژگی‌های خوب‌، به درد بخور ولی سرسام آوری که در اکثر ویرایشگرهای لینوکسی با پدر و مادر دیده‌ایم‌، قابلیت پشتیبان گیریست‌! قابلیتی که هر چند می‌دانیم که خیلی به آن نیاز پیدا خواهیم کرد‌، عموما از ریختش خوشمان نمی‌آید. عموما شیوهٔ کار این پشتیبان‌گیر‌ها به این صورت است که در همان جایی که فایل اصلی وجود دارد‌، یک فایل پشتیبان به صورت خودکار ایجاد می‌کنند و هیچ وقت هم آن را پاک نمی‌کنند‌! خوب برای آدم‌های وسواسی‌ای مثل من‌، این کمی اذیت کننده است که آن‌ها را در کنار فایل‌های اصلی‌ام ببینم‌!
ساده‌ترین راه‌کار‌، خاموش کردنش است‌! ولی خاموش کردن هم خطرناک است. قربانش بروم نیست کلا همه چیز‌مان قابل اطمینان است‌، مطمئن باشید سر حساس‌ترین ادیت‌تان‌، برق سیستم قطع می‌شود (این خط‌| ، این نشان D:).&lt;/p&gt;
&lt;p&gt;این است که برای ایمکس یک جای مخصوص درست می‌کنیم که این پشتیبان‌ها را در آن جا بریزد. این‌طوری نه ساختار سیستم فایل‌مان را شلخته می‌کنیم‌، و نه از نعمت وجود پشتیبان‌ها بی‌بهره می‌شویم.&lt;/p&gt;


&lt;div&gt;&lt;pre&gt; &lt;span&gt;(&lt;/span&gt;&lt;span&gt;custom-set-variables&lt;/span&gt;
 &lt;span&gt;;; custom-set-variables was added by Custom.&lt;/span&gt;
 &lt;span&gt;;; If you edit it by hand, you could mess it up, so be careful.&lt;/span&gt;
 &lt;span&gt;;; Your init file should contain only one such instance.&lt;/span&gt;
 &lt;span&gt;;; If there is more than one, they won't work right.&lt;/span&gt;
 &lt;span&gt;'&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;auto-save-file-name-transforms&lt;/span&gt; &lt;span&gt;(&lt;/span&gt;&lt;span&gt;quote&lt;/span&gt; &lt;span&gt;((&lt;/span&gt;&lt;span&gt;".*"&lt;/span&gt; &lt;span&gt;"~/.emacs.d/autosaves/\\1"&lt;/span&gt; &lt;span&gt;t&lt;/span&gt;&lt;span&gt;))))&lt;/span&gt;
 &lt;span&gt;'&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;backup-directory-alist&lt;/span&gt; &lt;span&gt;(&lt;/span&gt;&lt;span&gt;quote&lt;/span&gt; &lt;span&gt;((&lt;/span&gt;&lt;span&gt;".*"&lt;/span&gt; &lt;span&gt;.&lt;/span&gt; &lt;span&gt;"~/.emacs.d/backups/"&lt;/span&gt;&lt;span&gt;)))))&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;خوب‌، تمام نکتهٔ اصلی ماجرا این‌جاست که ما با تابع custom-set-variables سر و کار داریم. این تابع را در واقع قرار نیست که ما صدا بزنیم (ولی این یک‌بار اشکال ندارد‌). حقیقتش نیاز هم نیست‌، چون این تنظیمات را می‌توان با خود ایمکس انجام داد. کافیست از منوی ایمکس‌، Options و Customize Emacs را انتخاب کنیم‌، بخش مورد نظر را پیدا و انگولکش کنیم و سپس Apply &amp;amp; Save و خود ایمکس همچین چیزی را برای‌مان اضافه می‌کند! ولی خوب من حال سر و کله زدن با این منو‌ها را ندارم. پس باید بروم و همین متغیر‌ها که می‌بینید را مستقیما تغییر دهم. خوب آن وقت یک کمی کثیف‌کاری می‌شود. چرا؟ چون آن وقت این Customize ایمکس تنظیمات ما را نمی‌خواند و ممکن است برای یک همچین تنظیم پایه‌ای‌، مشکل بزاید برای‌مان.&lt;/p&gt;
&lt;p&gt;باauto-save-file-name-transforms ما در واقع شیوهٔ نام‌گذاری Autosave‌ها را با یک Regex تغییر می‌دهیم. خود ایمکس‌، آن بخش آدرس دایرکتوری را‌، به مسیر جدید فایل تبدیل می‌کند و فایل‌ها را در آن‌جا ذخیره می‌کند. Autosave‌ها به صورت #FileName#  و به صورت خودکار ذخیره می‌شوند و شامل آخرین تغییرات یک بافر هستند.&lt;/p&gt;
&lt;p&gt;دقیقا همین کار را هم با متغیرbackup-directory-alist انجام می‌دهیم که وظیفهٔ تغییر نام backup‌ها را بر عهده دارد. این پشتیبان‌ها در واقع آخرین وضعیت Save شدهٔ یک بافر را ارائه می‌دهند و به صورت FileName~ ‎ نام‌گذاری می‌شوند.&lt;/p&gt;
&lt;p&gt;حالا نکته این‌جاست که احتمالا بعد از Restart ایمکس‌، با این اخطار روبرو می‌شوید که دایرکتوری Autosaves که آدرس داده‌اید وجود ندارد. یک کار این است که آن را به صورت دستی ایجادش کنید. فقط یک بار لازم است. و بعد ایمکس‌تان را اجرا کنید. یک کار دیگر هم می‌توان با دستور لیسپ زیر‌، چک کرد که اگر دایرکتوری وجود نداشت‌، خود ایمکس ایجادش کند:&lt;/p&gt;
&lt;div&gt;&lt;pre&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;make-directory&lt;/span&gt; &lt;span&gt;"~/.emacs.d/autosaves/"&lt;/span&gt; &lt;span&gt;t&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;من این تنظیمات را از &lt;a href="http://snarfed.org/gnu_emacs_backup_files"&gt;این پست&lt;/a&gt; یاد گرفتم. وبلاگ قدیمی‌ایست‌، و چیز‌های خوبی در مورد ایمکس می‌توان ازش یاد گرفت.&lt;/p&gt;&lt;div&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Shahinism?a=5QkljMllbwc:tXFC-vRPT9w:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Shahinism?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Shahinism?a=5QkljMllbwc:tXFC-vRPT9w:Bvu6wjv6hyk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Shahinism?i=5QkljMllbwc:tXFC-vRPT9w:Bvu6wjv6hyk" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Shahinism/~4/5QkljMllbwc" height="1" width="1"&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogroolViaF0rudInGoogleReader/~4/KK3DdxyWGBA" height="1" width="1"/&gt;</summary><author gr:unknown-author="true"><name>(author unknown)</name></author><source gr:stream-id="feed/http://shahinism.com/feed/"><id>tag:google.com,2005:reader/feed/http://shahinism.com/feed/</id><title type="html">Shahinism.com</title><link rel="alternate" href="http://shahinism.github.io" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1368349165985"><id gr:original-id="http://shahinism.github.io/posts/blog13920122yn-ymkhs-dwst-dshtny-ido-mode.html">tag:google.com,2005:reader/item/b31667abb49e6549</id><category term="Emacs" /><category term="fuzzy matching" /><category term="ido-mode" /><category term="ایمکس" /><category term="دوره" /><category term="نرم افزار" /><category term="کدباز" /><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;این ایمکس دوست داشتنی (ido-mode)&lt;/div&gt;</title><published>2013-04-11T11:47:19Z</published><updated>2013-04-11T11:47:19Z</updated><link rel="alternate" href="http://feedproxy.google.com/~r/Shahinism/~3/VxQGr3IrAnY/blog13920122yn-ymkhs-dwst-dshtny-ido-mode.html" type="text/html" /><link rel="canonical" href="http://shahinism.github.io/posts/blog13920122yn-ymkhs-dwst-dshtny-ido-mode.html" /><summary xml:base="http://shahinism.github.io/" gr:direction="rtl" type="html">&lt;div style="direction:rtl;text-align:right"&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;یکی از قابلیت‌های جالب تکمیل خودکاری که در ابزار‌های امروزی می‌بینیم‌، تکنیک fuzzy matching است که کار تکمیل خودکار را فوق‌العاده آسان می‌کند. نمونه‌ای از این تکمیل خودکار را در آدرس‌بار Firefox دیده‌ایم. جایی که شما می‌توانید آدرس را از هر کجا یادتان است تکمیل کنید و اجباری به تایپ اول آدرس ندارید. امروز قصد داریم همچین قابلیتی را در ایمکس معرفی کنیم. این قابلیت می‌تواند در تکمیل نام buffer‌، فایل‌ها و دستورات ایمکسی‌، خیلی خیلی کمک کننده باشد. ابزاری که در ایمکس این امکان را فراهم می‌آورد ido نام دارد.
ترجیح می‌دهم قابلیت‌های این ابزار را به لغت بیان نکنم‌، چون نمی‌توانم. این است که ویدئویی در اینترنت پیدا کردم که می‌تواند لپ کلام را در دو دقیقه به شما نشان دهد‌، بدون این که نیازی به زیاده گویی‌های من باشد. این ویدئو را می‌توانید از&lt;a title="لینک ویدئو در یوتوب" href="http://youtu.be/lsgPNVIMkIE"&gt; این‌جا &lt;/a&gt;در یوتوب ببینید (مگر چه عیبی دارد گاهی مرا هم جو آزاد نشینی بگیرد و فکر کنم همه اینترنت آزاد دارند؟). اگر هم سخت‌تان است این ویدئو را از پشت خط شکن ببینید‌، برای‌تان روی &lt;a title="دانلود ویدئو از Mega" href="https://mega.co.nz/#!A0dymZqY!RInwER-nRLUijWh3tIxcOFD3-CBcg-CgHN0ZzO-TkQI"&gt;Mega&lt;/a&gt; آپلود کرده‌ام. حجم ویدئو ۵ مگ بیشتر نیست!&lt;/p&gt;
&lt;p&gt;حالا که ویدئو را دیدید کافیست با اضافه کردن کد زیر به ‎.emacs  آن را در ایمکس‌تان فعال کنید:&lt;/p&gt;


&lt;div&gt;&lt;pre&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;setq&lt;/span&gt; &lt;span&gt;ido-enable-flex-matching&lt;/span&gt; &lt;span&gt;t&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;

&lt;span&gt;(&lt;/span&gt;&lt;span&gt;setq&lt;/span&gt; &lt;span&gt;ido-everywhere&lt;/span&gt; &lt;span&gt;t&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;

&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ido-mode&lt;/span&gt; &lt;span&gt;1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;پس از قرار دادن این کد‌، کلید‌های جستجوی فایل یا تعویض بافر‌، با دستورات همتای‌شان که از ido استفاده می‌کنند‌، جایگزین می‌شوند. این ابزار قابلیت‌های شخصی‌سازی بیشتری هم دارد. مثلا این که کدام پسوند‌ها را در اولیوت قرار دهد. من نیازی به این تنظیمات پیدا نکردم. اما اگر شما وسوسه به همچین تنظیمی شده‌اید می‌توانید به &lt;a title="idomode in mastering emacs" href="http://www.masteringemacs.org/articles/2010/10/10/introduction-to-ido-mode/"&gt;این پست&lt;/a&gt; mastring emacs رجوع کنید.&lt;/p&gt;
&lt;p&gt;گاها پیش می‌آید که در هنگام جستجوی فایلی (خصوصا در زمان ایجاد) این ابزار کمی دست و پا گیر می‌شود. برای فرار از این حالت کافیست دستور ٰC-f  را وارد کنید‌، تا به حالت معمول جستجوی فایل بازگردید.&lt;/p&gt;&lt;div&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Shahinism?a=VxQGr3IrAnY:JvNK2Gzh_do:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Shahinism?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Shahinism?a=VxQGr3IrAnY:JvNK2Gzh_do:Bvu6wjv6hyk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Shahinism?i=VxQGr3IrAnY:JvNK2Gzh_do:Bvu6wjv6hyk" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Shahinism/~4/VxQGr3IrAnY" height="1" width="1"&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogroolViaF0rudInGoogleReader/~4/LCD8hyMHvqA" height="1" width="1"/&gt;</summary><author gr:unknown-author="true"><name>(author unknown)</name></author><source gr:stream-id="feed/http://shahinism.com/feed/"><id>tag:google.com,2005:reader/feed/http://shahinism.com/feed/</id><title type="html">Shahinism.com</title><link rel="alternate" href="http://shahinism.github.io" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1368349165984"><id gr:original-id="http://shahinism.github.io/posts/blog13920119yn-ymkhs-dwst-dshtny-ergoemacs-mode.html">tag:google.com,2005:reader/item/4ad7c190bf1e4c81</id><category term="CUA-mode" /><category term="Emacs" /><category term="ergoemacs-mode" /><category term="ایمکس" /><category term="برنامه نویسی" /><category term="دوره" /><category term="نرم افزار" /><category term="کدباز" /><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;این ایمکس دوست داشتنی (ergoemacs-mode)&lt;/div&gt;</title><published>2013-04-08T19:29:09Z</published><updated>2013-04-08T19:29:09Z</updated><link rel="alternate" href="http://feedproxy.google.com/~r/Shahinism/~3/5X63bJqw_i0/blog13920119yn-ymkhs-dwst-dshtny-ergoemacs-mode.html" type="text/html" /><link rel="canonical" href="http://shahinism.github.io/posts/blog13920119yn-ymkhs-dwst-dshtny-ergoemacs-mode.html" /><summary xml:base="http://shahinism.github.io/" gr:direction="rtl" type="html">&lt;div style="direction:rtl;text-align:right"&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;قبلا هم گفتم‌، ایمکس در حالت عادی‌، قابل قبول است‌، ولی خیلی خیلی می‌تواند بهتر باشد. یکی از اولین عادت‌ها بعد از مهاجرت به ایمکس‌، کلید‌های میانبر پر استفاده‌اش است. در &lt;a title="این ایمکس دوست داشتنی (تعریف کلید میانبر)" href="http://shahinism.com/blog/1392/01/17/%d8%a7%db%8c%d9%86-%d8%a7%db%8c%d9%85%da%a9%d8%b3-%d8%af%d9%88%d8%b3%d8%aa-%d8%af%d8%a7%d8%b4%d8%aa%d9%86%db%8c-%d8%aa%d8%b9%d8%b1%db%8c%d9%81-%da%a9%d9%84%db%8c%d8%af-%d9%85%db%8c%d8%a7%d9%86%d8%a8/"&gt;پست قبلی&lt;/a&gt; در موزد کلید‌های میانبر ایمکس حرف زدیم. اما بدیهی است که تعریف کلید میانبر برای دستوراتی این چنین پر استفاده که هم با دیگر کلید‌های میانبر تعریف شده در محیط‌های مختلف تداخل نداشته باشد و هم یاد آوری‌شان آسان باشد‌، کار آسانی نیست. خصوصا این که ایمکس پیشنهاد می‌کند کلید میانبر‌تان با C-c شروع شود و با یک کاراکتر تکی ادامه یابد. تعارف که نداریم‌، خیلی محدود است. ضمن این که ما کلید‌های آن‌چنان پر استفادهٔ زیادی نداریم که بخواهیم به همچین آکورد‌های سنگینی محدود شویم.
کلید‌های پر استفادهٔ عمومی شامل انتقال نشانگر‌، Yanking، پاک کردن کاراکتر‌ها‌، مدیریت پنجره‌ها و جستجو‌هاست. این‌ها دستوراتی هستند که در اکثر ویرایش‌ها به آن‌ها نیاز داریم. ضمن این که بسیاری از این دستورات در برنامه‌های دیگر هم شامل کلید‌های میانبری هستند که تقریبا به صورت یک استاندارد در آمده‌اند. نمونه‌ای از این دستورات‌، کپی و پیست است. شما در اکثر محیط‌ها‌، از جمله مرورگر‌تان‌، با C-c کپی می‌کنید و با C-v پیست. حالا باید در ایمکس آن را با C-w و C-y جایگزین کنید. خوب یک کمی ترک عادت نیاز دارد‌، ولی تلاش سختی است. البته ایمکس خودش یک CUA-mode دارد که می‌توان به راحتی اضافه کردن(cua-mode 1) در ‎.emacs آن را فعال کنید. ولی در مورد باز کردن یک فایل جدید چطور؟ در اکثر برنامه‌ها این کار با C-o امکان‌پذیر است‌، در حالی که در ایمکس باید این کار را با C-x C-f انجام دهید! سخت است دیگر!&lt;/p&gt;
&lt;p&gt;سخت‌تر از همه این که به QWERTY وابسته‌اند. آن وقت است که اگر به &lt;a title="چینش (لایوت) Workman و داستان مهاجرتم" href="http://shahinism.com/blog/1392/01/14/%da%86%db%8c%d9%86%d8%b4-%d9%84%d8%a7%db%8c%d9%88%d8%aa-workman-%d9%88-%d8%af%d8%a7%d8%b3%d8%aa%d8%a7%d9%86-%d9%85%d9%87%d8%a7%d8%ac%d8%b1%d8%aa%d9%85/"&gt;Workman&lt;/a&gt; یا Colemak سوئیچ کنید‌، انگار به کیبورد‌تان دینامیت بسته‌اید! از آن بد‌تر این که با کاراکتر‌های فارسی کار نمی‌کنند.&lt;/p&gt;
&lt;p&gt;این مقدمه را گفتم که بگویم‌، عده‌ای جمع شده‌اند و مدی ساخته‌اند به اسم &lt;a title="Ergoemacs official page" href="http://ergoemacs.org/index.html"&gt;ergoemacs-mode&lt;/a&gt; که هدفش حل مشکلات ذکر شده در مقدمهٔ بالاست. نتیجه‌، از عکس زیر معلوم است:&lt;/p&gt;
&lt;p&gt;&lt;img alt="ergoemacs-mode رو چینش workman" src="http://dl.dropbox.com/u/25017694/Blog-photos/ergoworkman.png" width="586" height="218"&gt; ergoemacs-mode رو چینش workman&lt;/p&gt;
&lt;p&gt;این عکس طبق چینش Workman تولید شده‌،‌ ولی جای دکمه‌ها در لایوت‌های دیگر‌، از جمله QWERTY و Colemak هم یک‌سان است. از نکات مهم مد نظر قرار داده شده در هنگام طراحی این Key binding‌ها می‌توان به موارد زیر اشاره کرد:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;  کلید‌های Home row بهترین‌ها هستند.&lt;/li&gt;
    &lt;li&gt;Alt خیلی بهتر از Ctrl است. Alt را باید با شصت گرفت که زورش خیلی بیشتر از انگشت کوچیکهٔ مخصوص Ctrl است!&lt;/li&gt;
    &lt;li&gt;به جای سرحرف اول دستورات‌، بهتر است به مکان دستورات هم خوانواده توجه شود. مثلا به مکان کلید‌های جاب‌جایی نگاه کنید. همین‌طور کلید‌های پاک کردن را ببینید!&lt;/li&gt;
    &lt;li&gt;و چند‌تای دیگر که آن‌قدرها هم مهم نیستند.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;نکته این‌جاست که نتیجهٔ کار خیلی عالی شده. آن‌قدر عالی که طی رد و بدل چند ایمیل‌ در&lt;a title="ergoemacs mailing list" href="https://groups.google.com/group/ergoemacs"&gt; لیست ایمیل&lt;/a&gt; پروژه‌، زبان فارسی را هم به این مجموعهٔ کامل اضافه کردیم که نتیجه‌اش را در زیر می‌بینید:&lt;/p&gt;
&lt;p&gt;&lt;img alt="ergoemacs-mode روی چینتش استاندارد فارسی" src="http://dl.dropbox.com/u/25017694/Blog-photos/ergofa.png" width="586" height="218"&gt; ergoemacs-mode روی چینتش استاندارد فارسی&lt;/p&gt;
&lt;p&gt;کیبورد استاندارد فارسی است که به صورت پیش‌فرض در لینوکس وجود دارد‌، ولی ویندوزی‌ها باید برنامهٔ متناسبش را پیدا و نصب کنند تا پشتیبانی شود D:&lt;/p&gt;
&lt;h5&gt;نصب&lt;/h5&gt;

&lt;p&gt;طبق&lt;a title="این ایمکس دوست داشتنی (مدیر بسته)" href="http://shahinism.com/blog/1392/01/08/%d8%a7%db%8c%d9%86-%d8%a7%db%8c%d9%85%da%a9%d8%b3-%d8%af%d9%88%d8%b3%d8%aa-%d8%af%d8%a7%d8%b4%d8%aa%d9%86%db%8c-%d9%85%d8%af%db%8c%d8%b1-%d8%a8%d8%b3%d8%aa%d9%87/"&gt; آن‌چه که در گذشته گفتم‌&lt;/a&gt;، ergoemacs-mode را از مدیر‌بسته‌های ایمکس نصب کنید و سپس تنظیمات زیر را به فایل ‎.emacs‌‌تان اضافه کنید:&lt;/p&gt;
&lt;div&gt;&lt;pre&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;setenv&lt;/span&gt; &lt;span&gt;"ERGOEMACS_KEYBOARD_LAYOUT"&lt;/span&gt; &lt;span&gt;"workman"&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;

&lt;span&gt;(&lt;/span&gt;&lt;span&gt;require&lt;/span&gt; &lt;span&gt;'ergoemacs-mode&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;

&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ergoemacs-mode&lt;/span&gt; &lt;span&gt;1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;در خط اول‌، اسم لایوت پیش‌فرض را اضافه می‌کنیم‌، و در خط‌های بعد ergoemacs-mode را فراخوانی و فعال می‌کنیم. بعد از یک Restart‌، با کلید‌های جدید روبرو می‌شوید D:&lt;/p&gt;
&lt;h5&gt;گرفتن کمک&lt;/h5&gt;

&lt;p&gt;خوب یک تغییر عادت است و احتمالا اول کار خیلی پیش می‌آید که دستورات قبلی‌تان را بزنید و نتیجه نگیرید! برای پیدا کردن کلید‌های جدید‌، کافیست C-h o را وارد کرده و سپس کلید قبلی‌تان را وارد کنید. این تابع بعد از بررسی کلید‌های قدیمی‌، هم‌تایان جدید‌شان را معرفی می‌کند.&lt;/p&gt;
&lt;h5&gt;دیگر سطوح&lt;/h5&gt;

&lt;p&gt;یکی از ویژگی‌های ergoemacs-mode‌، قابلیت تعیین سطحش است. سطوح مختلفی که با توجه به سلیقه‌های مختلف کاربران طراحی شده است. مثلا سطح guru کلید‌های فلش را برای تغییر موقعیت نشانگر می‌بندد و بعد از هر بار زدنشان‌، کلید‌های متناسب با سلیقهٔ ایمکس را نشان‌تان می‌دهد. و یا سطح master (فکر کنم) کلید backspace را خاموش می‌کند تا مجبور شوید از روش‌های پاک کردن کاراکتر ایمکس بهره بگیرید که سریع‌تر است. برای تنظیم این ویژگی‌ها کافیست سطح مورد نظر را انتخاب کنید (بعد از نصب ergoemacs از منو انتخابش کنید و ergoemacs variants را ببینید) و در دستور(setq ergoemacs-variant "SATH") آن را در جای SATH قرار دهید.&lt;/p&gt;
&lt;h5&gt;ergoemacs-extras&lt;/h5&gt;

&lt;p&gt;با فراخوانی این تابع در ایمکس‌، ergoemacs اقدام به ایجاد فایل‌های راهنمای کیبورد ergo در سطوح مختلف به فرمت svg می‌کند که می‌تواند خیلی کمک کننده باشد (عکس‌های موجود در این نوشته هم با همین روش ایجاد شده‌اند.). همین‌طور فایل‌هایی برای تطابق این کلید‌ها با محیط‌های دیگر از جمله bash ایجاد می‌شود که می‌توانند در ایجاد یک‌پارچگی برای محیط کار عالی باشند. (هنوز امتحانش نکرده‌ام ولی نتیجه‌اش را به زودی اطلاع می‌دهم.)&lt;/p&gt;
&lt;p&gt;این فایل‌ها در مسیر ‎~‎‍/.emacs/ergoemacs-extras در دسترسند که با توجه به سطوح مختلف پوشه‌بندی شده‌اند.&lt;/p&gt;
&lt;h5&gt;نتیجه&lt;/h5&gt;

&lt;p&gt;به نظر من نتیجهٔ کار فوق‌العاده قابل قبول است. راحتی استفاده از کلید‌های پر کاربرد و راحت‌تر از آن معکوس کردن اکثر دستورات با Shift فوق‌العاده کمک می‌کند. به طور پیش‌فرض برای خیلی کار‌ها مجبوریم در ایمکس از ارسال آرگومان به دستورات برای تغییر حالت‌شان استفاده کنیم که در Ergoemacs این کار عموما با Shift انجام می‌گیرد. مثلا C-f جستجوی رو به جلو انجام می‌دهد و C-S-f جستجوی رو به عقب!&lt;/p&gt;
&lt;p&gt;از طرفی کلید‌های C-a که در تمام محیط‌های دیگر برای انتخاب کل محتویات صفحه است و یا کلید‌های C-z, C-x, C-c, C-v, C-f, C-o, C-s, C-s-s , و خیلی کلید‌های دیگر که در محیط‌های دیگر از آن‌ها بهره می‌گیریم‌، به راحتی در این‌جا نیز جواب می‌دهند و کار ویرایش را فوق‌العاده راحت‌تر کرده‌اند. حتی با Ergoemacs دستور جدیدی اضافه شده که می‌توان با C-n یک صفحهٔ جدید ساخت‌، بدون این که نیاز به افزودن نامی به آن داشته باشیم.&lt;/p&gt;
&lt;p&gt;یک قابلیت جالب دیگر‌، استفاده از کلید‌های yanking‌ (کپی پیست در ایمکس) بدون Region (متن انتخاب شده) است. در این صورت‌، دستورات کل خط یا صفحه را تحت تاثیر قرار می‌دهند.&lt;/p&gt;
&lt;p&gt;در آینده بیشتر هم در مورد ergoemacs حرف می‌زنیم.&lt;/p&gt;&lt;div&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Shahinism?a=5X63bJqw_i0:iWtKuQF34MY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Shahinism?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Shahinism?a=5X63bJqw_i0:iWtKuQF34MY:Bvu6wjv6hyk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Shahinism?i=5X63bJqw_i0:iWtKuQF34MY:Bvu6wjv6hyk" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Shahinism/~4/5X63bJqw_i0" height="1" width="1"&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogroolViaF0rudInGoogleReader/~4/GY1IZPTkci8" height="1" width="1"/&gt;</summary><author gr:unknown-author="true"><name>(author unknown)</name></author><source gr:stream-id="feed/http://shahinism.com/feed/"><id>tag:google.com,2005:reader/feed/http://shahinism.com/feed/</id><title type="html">Shahinism.com</title><link rel="alternate" href="http://shahinism.github.io" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1368349165984"><id gr:original-id="http://shahinism.github.io/posts/blog13920117yn-ymkhs-dwst-dshtny-tryf-khlyd-mynb.html">tag:google.com,2005:reader/item/16d5bf74f9176371</id><category term="define-key" /><category term="Emacs" /><category term="global-map" /><category term="global-set-key" /><category term="text-mode-map" /><category term="ایمکس" /><category term="برنامه نویسی" /><category term="نرم افزار" /><category term="کدباز" /><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;این ایمکس دوست داشتنی (تعریف کلید میانبر)&lt;/div&gt;</title><published>2013-04-06T09:06:38Z</published><updated>2013-04-06T09:06:38Z</updated><link rel="alternate" href="http://feedproxy.google.com/~r/Shahinism/~3/A_0OvkAL0og/blog13920117yn-ymkhs-dwst-dshtny-tryf-khlyd-mynb.html" type="text/html" /><link rel="canonical" href="http://shahinism.github.io/posts/blog13920117yn-ymkhs-dwst-dshtny-tryf-khlyd-mynb.html" /><summary xml:base="http://shahinism.github.io/" gr:direction="rtl" type="html">&lt;div style="direction:rtl;text-align:right"&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;یکی از حیاتی‌ترین چیز‌هایی که در ایمکس لازم است بدانیم‌، چگونگی تعریف کلید میانبر برای توابع مختلف است. همان‌طور که احتمالا تا این‌جای قضیه متوجه شده‌اید‌، همهٔ کار‌هایی که در ایمکس انجام می‌دهیم‌، توابعی است که چه همراه خود ایمکس وجود دارند و چه با استفاده از بسته‌هایی که نصب می‌کنیم به آن اضافه می‌شوند. این توابع را می‌توان به صورت M-x FUNCTION_NAME RET  صدا کرد. اما در هنگام کار در ایمکس‌، سخت است که برای هر دستوری‌، مثل رفتن به خط بعد/قبل بیاییم و به این روش عمل کنیم. این است که برای هر تابع پر استفاده‌ای که داریم‌، یک کلید میانبر تعریف می‌کنیم.
لازم به ذکر است که برای اثبات بحث بالا‌، می‌توانید از تابع describe-key  همراه ایمکس استفاده کنید. کار این تابع این است که به شما بگوید که کلید میانبر مد نظر‌تان‌، چه تابعی را صدا می‌کند. برای نمونه‌، این دستور را وارد کنید M-x describe-key RET C-x C-f . همان‌طور که می‌بینید تابع مربوطه در یک پنجرهٔ جدید به نمایش در می‌آید. حالا برویم سر بحث تعریف کلید میانبر:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;h5&gt;کلید میانبر سراسری&lt;/h5&gt;
&lt;p&gt;منظور از کلید میانبر سراسری‌، کلید‌هایی است که در همهٔ Major-mode‌ها (مد‌های اصلی) به راحتی عمل می‌کنند. برای نمونه C-n  یک کلید میانبر سراسری است. در تمامی مد‌ها اعم از ویرایش متن معمولی و یا کد برنامهٔ C‌، این کلید میانبر‌، نشانگر را به خط بعد منتقل می‌کند. برای تعریف چنین کلید میانبری می‌توانیم از یکی از دو روش زیر بهره ببریم:&lt;/p&gt;
&lt;div&gt;&lt;pre&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;global-set-key&lt;/span&gt; &lt;span&gt;"KEY"&lt;/span&gt; &lt;span&gt;'FUNCTION_NAME&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;

&lt;span&gt;(&lt;/span&gt;&lt;span&gt;define-key&lt;/span&gt; &lt;span&gt;global-map&lt;/span&gt; &lt;span&gt;"KEY"&lt;/span&gt; &lt;span&gt;'FUNCTION_NAME&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;برای کسب اطلاعات بیشتر در مورد هر کدام از این توابع می‌توانید از تابع describe-function  همراه ایمکس کمک بگیرید. برای مثال M-x describe-function RET global-set-key RET . یا از کلید میانبرش استفاده کنید C-h f . همین‌طور اگر نشان‌گرتان روی یک تابع ایمکس باشد‌، خود تابع می‌تواند آن را حدس بزند.&lt;/p&gt;
&lt;p&gt;تابع اول که تقریبا سر راست است. global-set-key  همان‌طور که از نامش پیداست‌، یک کلید سراسری به اسم KEY که می‌تواند ترکیبی به صورت&lt;span&gt;"‎\C-c f" باشد‌، برای تابع FUNCTION_NAME تعریف می‌کند. همان‌طور که احتمالا متوجه شده‌اید‌، من برای نشان‌دادن Ctrl  در کلید میانبرم از ‎‎\C  استفاده کردم. همین‌طور برای Alt  باید از ‎\M  استفاده کنم. تعریف کلید به این صورت شاید کمی خسته کننده و نا خوانا به نظر بیاید. برای راحتی بیشتر می‌توان از تابع kbd  استفاده کرد. برای نمونه طبق مثالمان‌، همچین چیزی خواهیم داشت:&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;pre&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;global-set-key&lt;/span&gt; &lt;span&gt;(&lt;/span&gt;&lt;span&gt;kbd&lt;/span&gt; &lt;span&gt;"C-c f"&lt;/span&gt;&lt;span&gt;)&lt;/span&gt; &lt;span&gt;'FUNCTION_NAME&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;خود تابع kbd  می‌داند که چطور این کلید را ترجمه کند. برای کسب اطلاعات بیشتر در این مورد می‌توانید باز هم از C-h f  یا تابع متناظرش استفاده کنید. باور کنید که اطلاعات خیلی بهتری به دست می‌آورید ;-)&lt;/p&gt;
&lt;p&gt;در تابع دوم ما کار مشابهی را انجام دادیم‌، با این تفاوت که تابع define-key  نیاز به این دارد که بداند کلید میانبر را در کدام محیط اجرا کند. به عبارت دیگر‌، کلید میانبر در کدام Mode در دسترس باشد. از آن‌جایی که قصد ما تعریف کلید میانبر سراسری است به محیط global-map  اشاره می‌کنیم که به define-key  می‌فهماند کلید باید در همه جا در دسترس باشد.&lt;/p&gt;
&lt;h5&gt;کلید میابر محدود به مد خاص&lt;/h5&gt;

&lt;p&gt;با این توضیح آخر بخش قبل‌، فکر کنم موضوع کاملا روشن شده باشد. کافیست برای تعریف میانبر برای یک مد خاص‌، محیط مربوط به آن مد را به define-key  نشان دهیم. برای مثال اگر می‌خواهیم که کلید میانبر تنها در محیط متنی در دسترس باشد‌، به جای global-map  از text-mode-map  استفاده می‌کنیم. محیط‌های مربوط به هر مد اصلی‌، عموما به صورت mode-name-map  شناسایی می‌شوند و در هنگام تعریف کلید‌، کافیست نام map مد مورد نظر‌تان را کشف کنید ;-)&lt;/p&gt;&lt;div&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Shahinism?a=A_0OvkAL0og:39AlmwITJc0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Shahinism?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Shahinism?a=A_0OvkAL0og:39AlmwITJc0:Bvu6wjv6hyk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Shahinism?i=A_0OvkAL0og:39AlmwITJc0:Bvu6wjv6hyk" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Shahinism/~4/A_0OvkAL0og" height="1" width="1"&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogroolViaF0rudInGoogleReader/~4/v__2hbUZ4zY" height="1" width="1"/&gt;</summary><author gr:unknown-author="true"><name>(author unknown)</name></author><source gr:stream-id="feed/http://shahinism.com/feed/"><id>tag:google.com,2005:reader/feed/http://shahinism.com/feed/</id><title type="html">Shahinism.com</title><link rel="alternate" href="http://shahinism.github.io" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1368349165983"><id gr:original-id="http://shahinism.github.io/posts/blog13920114chynsh-lywt-workman-w-dstn-mhjrtm.html">tag:google.com,2005:reader/item/d6debb65418baef7</id><category term="Colemak" /><category term="Dvorak" /><category term="Layout" /><category term="QWERTY" /><category term="Workman" /><category term="ایمکس" /><category term="بررسی" /><category term="برنامه نویسی" /><category term="نرم افزار" /><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;چینش (لایوت) Workman و داستان مهاجرتم&lt;/div&gt;</title><published>2013-04-03T11:58:57Z</published><updated>2013-04-03T11:58:57Z</updated><link rel="alternate" href="http://feedproxy.google.com/~r/Shahinism/~3/HSmjKqSkVp4/blog13920114chynsh-lywt-workman-w-dstn-mhjrtm.html" type="text/html" /><link rel="canonical" href="http://shahinism.github.io/posts/blog13920114chynsh-lywt-workman-w-dstn-mhjrtm.html" /><summary xml:base="http://shahinism.github.io/" gr:direction="rtl" type="html">&lt;div style="direction:rtl;text-align:right"&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;اصلا مهم نیست که از چه کامپیوتری استفاده می‌کنید‌، Mac, Linux‌، Windows, ارزان‌قیمت‌، گران‌قیمت‌، کوچک‌‌ یا بزرگ. همچنین اصلا مهم نیست که برای چه کاری پشت کامپیوتر می‌نشینید‌، برنامه‌نویسی‌، تحقیقاتی‌، نوشتن‌، بازی‌، وب‌گردی و …! در همهٔ این حالات‌، اصلی‌ترین رابط شما و کامپیوتر‌، کیبورد زیر دست‌تان است. کیبوردی که در تمام این حالات‌، هم‌شکل است. شکلی که صد و اندی سال پیش طراحی شده و هدف از طراحی‌اش بسیار بسیار متفاوت با استفاده‌هایی است که امروز‌ها از آن می‌شود.
طراحی چینش صفحه کلید QWERTY زیر دست‌تان‌، به دوران ماشین‌های تایپ بر می‌گردد. ماشین‌هایی مکانیکی که بعد از فشردن هر دکمه روی‌شان‌، پایهٔ متصل به حرف تایپ شده‌، به روی صفحهٔ کاغذ می‌خورد و حرف مورد نظر چاپ می‌شد. اما مشکل این‌جا بود که حروفی وجود داشتند که نسبت به بقیه‌، استفادهٔ بیشتری در کلمات داشتند و این یعنی کلمات بیشتری بودند که با ترکیب آن‌ها ساخته می‌شدند. با این وصف‌، نزدیکی مکانیکی حروف پر استفاده‌، در آن ابعاد کوچک و در سرعت‌های بالا‌، مشکل آفرین بود! پایه‌ها به هم گیر می‌کردند.&lt;/p&gt;
&lt;p&gt;این شد که در طراحی QWERTY سعی شد که پایه‌های حروف پر استفاده دور‌تر از هم قرار گیرند و در نتیجه‌، کلید‌های مربوطه‌شان به دلیل محدودیت سخت‌افزاری باید دور‌تر از هم قرار می‌گرفت. در نتیجه چینشی به وجود آمد که بیش از صد سال مورد استفاده قرار گرفت و تقریبا به یک استاندارد تبدیل شد. استانداردی که هیچ توجهی به نیاز‌های جدید کاربرانش نمی‌کند.&lt;/p&gt;
&lt;p&gt;در قرن ۲۱‌، دیگر این چینش در ابزاری محدود به سخت‌افزار مورد استفاده قرار نمی‌گیرد. در عوض حالا می‌توان چینشی طراحی کرد که بیشتر به نیاز کاربر بیاید. چینشی که در آن کاربر مجبور به جابجایی زیاد انگشتانش نباشد. این جابجایی‌ها شاید به نظر کوچک بیایند‌، ولی در تایپ‌های طولانی مدت شما با همین قدم‌های کوچک‌، کیلو‌متر‌ها مسافت را طی کرده‌اید! باور نمی‌کنید؟ کافیست فاصلهٔ بین هر دو دکمهٔ کنار هم کیبورد را چیزی در حدود ۲ سانتی‌متر فرض کنیم. آن وقت برای تایپ همین پاراگراف حاضر‌، تا الان من حداقل ۹۵۰ سانتی‌متر (۴۷۵ کاراکتر) و آن هم تنها در صورتی که تمام کاراکتر‌هایم در کنار هم باشند (در کنار هشت انگشت تایپم) مصافت طی کرده‌ام! (این حداقل خیلی خیلی ایده‌آل است و فکر نمی‌کنم هرگز اتفاق بیافتد، حداقل در چینش فارسی‌! ولی فکر کنم مثال مناسبی برای نشان دادن عمق موضوع است.)&lt;/p&gt;
&lt;p&gt;از قرار این موضوع تا 1930 و انتشار چینش Dvorak چندان جدی گرفته نشد. چینشی که تنها سعی می‌کرد‌، قابل قبول‌تر از QWERTY باشد. تغییراتش نسبت به آن زیاد نبودند‌، ولی نتیجهٔ کاربر پسند‌تری داشتند. اما به نظرم‌، پرجرات‌ترین تغییر در این چینش سنتی‌، توسط &lt;a title="Colemak official" href="http://colemak.com"&gt;Colemak&lt;/a&gt; ایجاد شد! 2006! ۷۶ سال طول کشید تا این نیاز عمیقا درک شود! البته بودند چینش‌هایی که سعی در بهبود QWERTY داشته باشند‌، اما Colemak متفاوت بود. چینشی که در آن سعی شد‌، پر استفاده‌ترین کاراکتر‌ها‌، در ردیف وسطی قرار گیرند (ردیفی که در روش تایپ استاندارد‌، انگشتان باید روی آن‌ها قرار گیرند و در اصطلاح به آن‌ها Home row می‌گویند). نتیجهٔ کار فوق‌العاده بهتر شده بود. جادی عزیز‌، خیلی وقت پیش در مورد Colemak و بهبود‌هایش نسبت به &lt;a title="کولمک در وبلاگ جادی" href="http://jadi.net/2009/02/%d8%b5%d9%81%d8%ad%d9%87-%da%a9%d9%84%db%8c%d8%af-%da%a9%d9%88%d9%84%d9%85%d8%a7%da%a9/"&gt;QWERTY نوشت&lt;/a&gt; که پیشنهاد می‌کنم بخوانید.&lt;/p&gt;
&lt;p&gt;و اما &lt;a title="Workman official" href="http://www.workmanlayout.com/blog/"&gt;Workman&lt;/a&gt;! در حقیقت چینش مورد بحث ما‌، سعی کرده نسخهٔ بهبود یافتهٔ Colemak باشد. خیلی از ایده‌ها را از آن به ارث برده و شباهت خیلی خیلی کمتری نسبت به QWERTY دارد. طراح Workman‌، این‌طور فکر می‌کرد که همیشه استفاده از Home row بهترین جا برای قرار گرفتن حروف نیست. مثلا نکته این‌جا بود که حرکت طبیعی انگشتان‌، کلید I در صفحه‌کلید QWERTY را‌، راحت‌تر از H تایپ می‌کنند (انگشتان به بالا یا پایین‌، راحت‌تر حرکت می‌کنند تا به چپ و راست!). این بود که نقشه‌ای به صورت زیر طراحی کرد که میزان راحتی دسترسی نسبت به کلید‌ها را در آن نمره دهی کرده بود:&lt;/p&gt;
&lt;p&gt;&lt;img alt="امتیاز‌دهی به کلید‌های کیبورد بر اساس میزان راحتی در دسترسی" src="http://dl.dropbox.com/u/25017694/Blog-photos/keyboard_graded1.png" width="499" height="166"&gt; امتیاز‌دهی به کلید‌های کیبورد بر اساس میزان راحتی در دسترسی&lt;/p&gt;
&lt;p&gt;پس ار آن تنها کافی بود که کاراکتر‌ها را نسبت به میزان استفاده‌اش در این خانه‌ها جا دهد. نتیجهٔ کار و امتیاز‌های کسب شده در مقایسه با دیگر چینش‌ها چشم‌گیر بود! مثلا در این‌جا میزان استفاده از دو ستون وسط در چند لایوت مختلف را می‌بینیم (ستون‌هایی که نیاز به حرکت انگشتان به چپ و راست دارند که باعث کشش عضلانی انگشتان می‌شود):&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;ul style="direction:rtl;text-align:left;list-style:none outside none"&gt;&lt;li&gt;QWERTY: 22%&lt;/li&gt;
    &lt;li&gt;Dvorak: 14%&lt;/li&gt;
    &lt;li&gt;Colemak: 12%&lt;/li&gt;
    &lt;li&gt;Workman: 6%&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;یا مثالی نزدیک‌تر به نیاز‌مان. میزان جابجایی انگشت‌ها:&lt;/p&gt;
&lt;p&gt;&lt;img alt="نتیجهٔ تست تایپ در چهار چینش مختلف" src="http://dl.dropbox.com/u/25017694/Blog-photos/don-quixote.png" width="559" height="404"&gt; نتیجهٔ تست تایپ در چهار چینش مختلف&lt;/p&gt;
&lt;p&gt;در این مثال تایپ کتاب &lt;a title="Don Quixote on wikipedia" href="http://en.wikipedia.org/wiki/Don_Quixote"&gt;Don Quixote&lt;/a&gt; با لایوت‌های مختلف شبیه سازی شده. همان‌طور که می‌بینید Colemak مصافت کمتری نسبت به QWERTY و Dvorak را طی کرده. اما Workman از آن‌ هم کمتر است. ۶۹۶ متر! شاید فکر کنید که این خیلی کم به نظر می‌آید. ولی بیایید به روش قبلی‌مان حسابش کنیم. ۶۹۶ متر = ۶۹۶۰۰ سانتی‌متر = ۳۴۰۰۰ دکمه (با احتساب فاصلهٔ تقریبا ۲ سانتی‌متری بین هر دو دکمهٔ کنار هم). یعنی با Workman سی و چهار هزار دکمهٔ کمتر فشار داده شده.&lt;/p&gt;
&lt;p&gt;البته بهبود این چینش به Workman ختم نمی‌شود. چینش‌های دیگری هم هستند که خرده‌هایی به این لایوت گرفته‌اند و سعی می‌کنند به روش خود آن را بهبود ببخشند. خوبی این همه چینش جدید این است که می‌توان با دست باز‌تری انتخاب کرد و نتیجهٔ مطلوب‌تری گرفت. همین‌جا هم بگویم که اصلا تایید نمی‌کنم که Workman بهترین چینش ممکن است‌! این چینش اولین و آخرین چینش انتخابی من برای مهاجرت است!&lt;/p&gt;
&lt;h5&gt;قضیهٔ مهاجرت من به Workman&lt;/h5&gt;

&lt;p&gt;دو سال و خرده‌ای پیش بود که بعد از هشت نه سال کاربر کامپیوتر بودن‌، تصمیم گرفتم که تایپ استاندارد را یاد بگیرم و هی در هنگام تایپ به دستانم نگاه نکنم (می‌دانم خیلی دیر بود). حقیقتش برایم خیلی سخت بود. حتی چند باری قبلا تلاش کرده بودم و دلزده رهایش کرده بودم. مشکل این‌جا بود که بیش از حد سعی می‌کردم به حافظه تکیه کنم. این بود که بعد از یک استراحت چند هفته‌ای‌، دوباره شروع می‌کردم و نتیجهٔ بهتری می‌گرفتم. تا این که خلاصه به سرعت تایپ معقولی رسیدم.&lt;/p&gt;
&lt;p&gt;سوئیچ به فارسی فوق‌العاده آسان‌تر بود. تنها کافی بود که یاد بگیرم جای کدام حرف انگلیسی‌، چه تایپ کنم. بعد از معرفی Colemak توسط جادی هم سعی کردم که آن را بچشم‌، ولی به دلم ننشست. شاید به خاطر این که آن موقع با QWERTY هم آشنا نبودم. ولی نه‌، من Workman را هم تنها به خاطر تنوعش انتخاب کردم!&lt;/p&gt;
&lt;p&gt;این یعنی این که اصلا فکر نکنید که این اطلاعاتی که در بالا نوشتم‌‌، دلیل مهاجرتم به Workman بوده باشد. این چینش هر چقدر هم خوب باشد‌، بسیاری از برنامه‌های وابسته به کیبوردم را مثل &lt;a title="تجربهٔ کار با i3 یک رقیب قدر‌!" href="http://shahinism.com/blog/1391/04/15/%d8%aa%d8%ac%d8%b1%d8%a8%d9%87%d9%94-%da%a9%d8%a7%d8%b1-%d8%a8%d8%a7-i3-%db%8c%da%a9-%d8%b1%d8%ba%db%8c%d8%a8-%d9%82%d8%af%d8%b1%e2%80%8c/"&gt;i3&lt;/a&gt;, &lt;a title="کنترل کامل فایرفاکس با کیبورد (Pentadactyl, Vimperator, Firemacs)" href="http://shahinism.com/blog/1391/01/05/%da%a9%d9%86%d8%aa%d8%b1%d9%84-%da%a9%d8%a7%d9%85%d9%84-%d9%81%d8%a7%db%8c%d8%b1%d9%81%d8%a7%da%a9%d8%b3-%d8%a8%d8%a7-%da%a9%db%8c%d8%a8%d9%88%d8%b1%d8%af-pentadactyl-vimperator-firemacs/"&gt;pentadactyl&lt;/a&gt; و از همه مهم‌تر &lt;a title="چگونه ایمکس‌مان را تربیت کنیم (قسمت اول)" href="http://shahinism.com/blog/1391/04/23/%da%86%da%af%d9%88%d9%86%d9%87-%d8%a7%db%8c%d9%85%da%a9%d8%b3%e2%80%8c%d9%85%d8%a7%d9%86-%d8%b1%d8%a7-%d8%aa%d8%b1%d8%a8%db%8c%d8%aa-%da%a9%d9%86%db%8c%d9%85-%d9%82%d8%b3%d9%85%d8%aa-%d8%a7%d9%88/"&gt;Emacs&lt;/a&gt; را تحت تاثیر قرار می‌دهد! تغییر کلید‌های یک مرحله‌ای را می‌شود تحمل کرد‌، ولی با تغییر به Workman یک دستور سادهٔ ایمکس مثل C-x C-f به کابوس تبدیل می‌شود! (به زودی این مشکل را هم در ایمکس حل خواهیم کرد!)&lt;/p&gt;
&lt;p&gt;ولی حدودا بیست روز پیش و فقط و فقط‌، برای ایجاد تنوع تصمیم به تغییر چینش کیبورد گرفتم. بعد از یک جستجوی چند ساعته هم تصمیم نهایی‌ام شد Workman. قبل از آن هم یک تست از سرعت تایپ QWERTYام گرفتم محض یادگاری که نتیجه‌اش شد ۲۰۴ کاراکتر در دقیقه و با درستی ۹۹.۳ درصد! و انتقال شروع شد!&lt;/p&gt;
&lt;p&gt;یک کابوس به تمام معنا! مشکل را تازه درک کرده بودم. در هنگام تایپ اصلا به حافظه به آن معنی که می‌شناختم نیازی نبود. نیاز اصلی حافظهٔ عضلانی است. و QWERTY خیلی محکم در این حافظه ثبت شده بود. تا موقعی که شش دانگ حواسم جمع تایپ کردن بود مشکلی نبود. ولی تا بیخیال حافظه‌ام می‌شدم‌، انگشتانم به QWERTY سوئیچ می‌کردند. جدال با این حافظه سخت بود. شاید بخندید‌، ولی دو سه روز اول‌، سردرد شدیدی گرفتم! از آن مهم‌تر این که به صورت ناخودآگاه نکته بین‌تر شده بودم. این است که نتیجه گرفتم تغییر عادات‌، خیلی خیلی به درد بخور است!&lt;/p&gt;
&lt;p&gt;خلاصهٔ کلام‌، بعد از ۲۰ روز‌، الان دیگر نمی‌توانم به QWERTY تایپ کنم! کاملا پاک شده. ولی چه باک‌، هر وقت به Workman دسترسی نداشتم‌، به دستانم نگاه می‌کنم و تایپ می‌کنم D:. جالبی‌اش این‌جاست که خطای تایپ فارسی‌ام هم زیاد شده بود. یادتان هست که گفته بودم که برای تایپ فارسی کاراکتر‌ها را با همتایان انگلیسی‌شان لینک کرده بودم؟ فکر کنم مشکل از همان‌جا آب می‌خورد.&lt;/p&gt;
&lt;p&gt;ولی الان نتیجه به نظرم قابل قبول شده! سرعت تایپم به ۲۲۶ کاراکتر در دقیقه رسیده! این در حالی است که درستی کاراکتر‌ها به ۹۴ درصد نزول پیدا کرده. یک حساب سرسری یعنی این که اگر میزان درستی کاراکتر‌ها بهبود ببخشم‌، نتیجهٔ سرعت تایپ از این هم بیشتر خواهد بود که به نظرم خیلی جذاب است.&lt;/p&gt;&lt;div&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Shahinism?a=HSmjKqSkVp4:BgCdVRVXCfY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Shahinism?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Shahinism?a=HSmjKqSkVp4:BgCdVRVXCfY:Bvu6wjv6hyk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Shahinism?i=HSmjKqSkVp4:BgCdVRVXCfY:Bvu6wjv6hyk" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Shahinism/~4/HSmjKqSkVp4" height="1" width="1"&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogroolViaF0rudInGoogleReader/~4/ANFE01iqGNw" height="1" width="1"/&gt;</summary><author gr:unknown-author="true"><name>(author unknown)</name></author><source gr:stream-id="feed/http://shahinism.com/feed/"><id>tag:google.com,2005:reader/feed/http://shahinism.com/feed/</id><title type="html">Shahinism.com</title><link rel="alternate" href="http://shahinism.github.io" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1368349165983"><id gr:original-id="http://shahinism.github.io/posts/blog13920112yn-ymkhs-dwst-dshtny-tnzymt-zhry.html">tag:google.com,2005:reader/item/2c8b4f6b3624b141</id><category term="elisp" /><category term="Emacs" /><category term="Inconsolata" /><category term="ایمکس" /><category term="دوره" /><category term="فونت" /><category term="نرم افزار" /><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;این ایمکس دوست داشتنی (تنظیمات ظاهری)&lt;/div&gt;</title><published>2013-04-01T11:00:26Z</published><updated>2013-04-01T11:00:26Z</updated><link rel="alternate" href="http://feedproxy.google.com/~r/Shahinism/~3/OgVZgKCY5PY/blog13920112yn-ymkhs-dwst-dshtny-tnzymt-zhry.html" type="text/html" /><link rel="canonical" href="http://shahinism.github.io/posts/blog13920112yn-ymkhs-dwst-dshtny-tnzymt-zhry.html" /><summary xml:base="http://shahinism.github.io/" gr:direction="rtl" type="html">&lt;div style="direction:rtl;text-align:right"&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;بعد از تنظیمات مربوط به مدیر بسته‌، نوبت به تنظیمات ظاهر اصلی ایمکس می‌رسد. ظاهر اولیهٔ رابط گرافیکی‌، فوق‌العاده بی‌روح و سفید است که برای کار‌های طولانی مدت (شامل خیره شدن زیاد به صفحه) اصلا مناسب نیست. همینطور شامل اجزایی نظیر Scroll-bar و یا Toolbar است که با وجود کلید‌های میانبر مناسب که مستقیما از فلسفهٔ ایمکس پیروی می‌کنند‌، بودنشان جز جا‌گیر بودن‌، فایدهٔ دیگری ندارد. از طرفی‌، با استفاده از توابع همراه ایمکس می‌توان ظاهر فوق‌العاده مدرن‌تری نسبت به ظاهر اولیه فراهم آورد که در این پست قصد داریم در مورد‌شان بحث کنیم. تنها دو نکته باقی می‌ماند که لازم می‌دانم این‌جا ذکر کنم:
&lt;/p&gt;&lt;ol&gt;&lt;li&gt;  این پست احتمالا آخرین پست (فعلا) این‌چنین بزرگ و ترکیبی از این سری است. همان‌طور که در مقدمه گفتم‌، قرار است در این سری قدم به قدم با ایمکس آشنا شویم و در هر پست (هر چند کوتاه) یک ویژگی را به طور کامل بررسی کنیم. اما از آن‌جا که لازم است برای شروع کار‌، کمی از ایمکس اولیه دور شویم‌، لازم دانستم که چند پست ترکیبی نیز داشته باشیم.&lt;/li&gt;
    &lt;li&gt;دستکاری ظاهری ایمکس در همین پست پایان نمی‌یابد. در آینده ویژگی‌های جالب‌تری هم به این رابط کاربری می‌افزاییم. این تنها یک شروع است.&lt;/li&gt;
&lt;/ol&gt;&lt;h5&gt;پاک کردن اجزای اضافه&lt;/h5&gt;
&lt;p&gt;برای پاک کردن Scroll-bar و Toolbar تنها کافیست توابع‌شان را با یک آرگومان منفی صدا بزنیم. به صورت زیر:&lt;/p&gt;
&lt;div&gt;&lt;pre&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;tool-bar-mode&lt;/span&gt; &lt;span&gt;-1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;

&lt;span&gt;(&lt;/span&gt;&lt;span&gt;scroll-bar-mode&lt;/span&gt; &lt;span&gt;-1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;همینطور می‌توان با اختصاص دادن آرگومان منفی به تابعmenu-bar-mode منوی بالای فریم ایمکس را هم حذف کرد. ولی از آن‌جایی که تازه کاریم و هنوز خیلی چیز‌ها هستند که می‌توان با گردش در منو‌ها یاد گرفت‌، از این کار صرف نظر می‌کنیم. خوبی این منوبار این است که عموما‌، بسته‌های بزرگ ایمکس‌، یک منوی اختصاصی برای خودشان آماده می‌کنند و این خیلی می‌تواند در اوایل آشنایی با یک بسته کمک کننده باشد.&lt;/p&gt;
&lt;h5&gt;رنگ‌بندی پنجره‌ها&lt;/h5&gt;

&lt;p&gt;یکی از ساده‌ترین راه‌ها برای تعیین رنگ‌بندی پنجرهٔ ایمکس‌، استفاده از قالب‌های آماده است. خوشبختانه در کنار قالب‌های ساده و ساخته شده از روی علاقهٔ شخصی‌، قالب‌هایی نظیر &lt;a title="Solarized official" href="http://ethanschoonover.com/solarized"&gt;Solarized&lt;/a&gt; و &lt;a title="Zenburn official" href="http://slinky.imukuppi.org/zenburnpage/"&gt;Zenburn&lt;/a&gt; که اهداف خاصی را از رنگ‌بندی‌شان دنبال می‌کنند نیز وجود دارند. برای نصب‌شان تنها کافیست دستور متناسب با نام بسته‌شان را به صورت زیر وارد کنید:&lt;/p&gt;
&lt;div&gt;&lt;pre&gt;&lt;span&gt;M&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;x&lt;/span&gt; &lt;span&gt;package&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;install&lt;/span&gt; &lt;span&gt;RET&lt;/span&gt; &lt;span&gt;solarized&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;theme&lt;/span&gt; &lt;span&gt;RET&lt;/span&gt;
&lt;span&gt;M&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;x&lt;/span&gt; &lt;span&gt;package&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;install&lt;/span&gt; &lt;span&gt;RET&lt;/span&gt; &lt;span&gt;zenburn&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;theme&lt;/span&gt; &lt;span&gt;RET&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;جدای از این دستورات با جستجو در package-list-packages می‌توانید هم به این پوسته‌ها و هم به خیل عظیم پوسته‌های آمادهٔ ایمکس دسترسی داشته باشید که تست کردن‌شان خالی از لطف نیست. پس از نصب پوستهٔ مورد نظر‌، کافیست با استفاده از دستور M-x load-theme THEME_NAME آن را فعال کنید. البته از آن‌جایی که دل‌تان نمی‌خواهد بعد از هر بار لود شدن ایمکس‌، مجبور به اجرای این دستور باشید‌، کافیست‌ دستور زیر را در ‎.emacs‌تان قرار دهید:&lt;/p&gt;
&lt;div&gt;&lt;pre&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;load-theme&lt;/span&gt; &lt;span&gt;'zenburn&lt;/span&gt; &lt;span&gt;t&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;توجه داشته باشید که پوستهٔ Solarized دارای دو حالت تیره و روشن است‌، که شما هم باید در هنگام وارد کردن نامش‌، به این نکته توجه کنید.&lt;/p&gt;
&lt;h5&gt;رنگ‌بندی با استفاده از ‎.Xresources&lt;/h5&gt;

&lt;p&gt;روش دیگر‌ تعیین رنگ‌بندی پنجرهٔ ایمکس‌، با استفاده از فایل ‎.Xresources سیستم‌هایی است که از X برای محیط گرافیکی‌شان استفاده می‌کنند. روش کار با این فایل را در &lt;a title="عشق بازی با ترمینال لینوکس‌ (urxvt, رنگ‌آمیزی و کانفیگش)" href="http://shahinism.com/blog/1391/08/04/%d8%b9%d8%b4%d9%82-%d8%a8%d8%a7%d8%b2%db%8c-%d8%a8%d8%a7-%d8%aa%d8%b1%d9%85%db%8c%d9%86%d8%a7%d9%84-%d9%84%db%8c%d9%86%d9%88%da%a9%d8%b3%e2%80%8c-urxvt-%d8%b1%d9%86%da%af%e2%80%8c%d8%a2%d9%85%db%8c/"&gt;این پست &lt;/a&gt;توضیح دادم و همینطور ابزار &lt;a title="4bit" href="http://ciembor.github.com/4bit/"&gt;4bit&lt;/a&gt; را برای ایجاد رنگ‌های متناسب با هم معرفی کردم. من خودم فعلا از این روش استفاده می‌کنم که دو دلیل عمده دارد:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;  رنگ‌بندی برنامه‌هایی که از این سیستم استفاده می‌کنند یک پارچه می‌شوند. هم اکنون پوستهٔ استفاده شده برای ترمینال urxvt و ایمکس‌ام کاملا شبیه به هم است که خیلی خوب است.&lt;/li&gt;
    &lt;li&gt;پوستهٔ متناسب با سلیقه‌ام را در پوسته‌های آمادهٔ ایمکس پیدا نکردم. Zenburn عالی بود‌، ولی رنگ‌هایش چون چشم‌هایم را خسته نمی‌کردند‌، خودم خسته می‌شدم D: و Solarized هم درخشندگی لازم را برای جلب توجهم نداشت. من عادت به نگاه کردن سر سری نوشته‌ها قبل از خواندن‌شان دارم و برجسته بودن (درخشندگی) رنگ‌های استفاده شده در متن می‌تواند به پیدا کردن نکات جالب توجه کمکم کند.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;پوستهٔ ‎.Xresources‌ای که من استفاده می‌کنم را می‌توانید در&lt;a title="My .Xresources configuration on gist" href="https://gist.github.com/shahinism/5283609"&gt; این gist&lt;/a&gt; پیدا کنید.&lt;/p&gt;
&lt;h5&gt;تنظیم Font&lt;/h5&gt;

&lt;p&gt;بخش حیاتی قضیه است. حداقل برای من یکی‌، جدای از رنگ‌بندی برجسته‌، فونت و یک‌پارچگی‌اش در متن‌، اهمیت زیادی دارد. فونت پیش‌فرض ایمکس‌، اصلا دوست‌داشتنی نیست. اما تنها فونتی است که دیده‌ام در همه حالتی به راحتی جواب می‌دهد. ما هم که به جبر جغرافیا مجبور به استفاده از دو خط و زبانیم‌، باید چاره‌ای برای این قضیه پیدا کنیم. خوشبختانه‌، طی&lt;a title="Emacs font in stackexchange" href="http://stackoverflow.com/questions/11012627/emacs-font-for-western-and-other-like-rtl"&gt; یک پرسش و پاسخ&lt;/a&gt; بین دو دوست عزیزم (&lt;a title="وبلاگ افاضاتی" href="http://blog.efazati.org/"&gt;محمد افاضاتی&lt;/a&gt; و &lt;a title="یادداشت‌های بیت نیم‌سوز" href="http://cyberrabbits.net/"&gt;فرود&lt;/a&gt;)‌، فرود این مشکل را به شیوهٔ جالبی هک (حل) کرده که در ادامه به آن می‌پردازیم.&lt;/p&gt;
&lt;p&gt;من برای فونت پیش‌فرض از &lt;a title="Inconsolata on wikipedia" href="http://en.wikipedia.org/wiki/Inconsolata"&gt;Inconsolata&lt;/a&gt; استفاده می‌کنم که به نظرم برای کد نوشتن عالی است. همین‌طور برای کاراکتر‌های فارسی‌، از فونت tahoma استفاده می‌کنم. بله‌، بله می‌دانم که الان می‌گویید که &lt;a title="CSS Persian‌، یک ایدهٔ ساده ولی خیلی مفید" href="http://shahinism.com/blog/1391/06/10/css-persian%e2%80%8c%d8%8c-%db%8c%da%a9-%d8%a7%db%8c%d8%af%d9%87%d9%94-%d8%b3%d8%a7%d8%af%d9%87-%d9%88%d9%84%db%8c-%d8%ae%db%8c%d9%84%db%8c-%d9%85%d9%81%db%8c%d8%af/"&gt;قبلا&lt;/a&gt; گفته‌ای tahoma فیلان‌، tahoma بیسار! بله‌، هنوز هم می‌گویم. ولی tahoma تنها فونت فارسی‌ای است که در اندازهٔ کوچک (8pt) ‌این‌قدر خوب قابل خواندن است و از قرار با فونت‌های مناسب کد‌نویسی‌، هم‌نشینی خوبی دارد! (باشد که به غیرت آن‌ها که زور طراحی فونت مناسب را دارند بر بخورد و دست به کار شوند) برای اعمال فونت‌ها به صورت زیر عمل می‌کنیم:&lt;/p&gt;
&lt;div&gt;&lt;pre&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;set-default-font&lt;/span&gt; &lt;span&gt;"Inconsolata-10"&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;



&lt;span&gt;(&lt;/span&gt;&lt;span&gt;set-fontset-font&lt;/span&gt;
   &lt;span&gt;"fontset-default"&lt;/span&gt;
   &lt;span&gt;(&lt;/span&gt;&lt;span&gt;cons&lt;/span&gt; &lt;span&gt;(&lt;/span&gt;&lt;span&gt;decode-char&lt;/span&gt; &lt;span&gt;'ucs&lt;/span&gt; &lt;span&gt;#x0600&lt;/span&gt;&lt;span&gt;)&lt;/span&gt; &lt;span&gt;(&lt;/span&gt;&lt;span&gt;decode-char&lt;/span&gt; &lt;span&gt;'ucs&lt;/span&gt; &lt;span&gt;#x06ff&lt;/span&gt;&lt;span&gt;))&lt;/span&gt; &lt;span&gt;; arabic&lt;/span&gt;
   &lt;span&gt;"Tahoma-8"&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;در خط اول‌، همان‌طور که معلوم است‌، فونت Inconsolata با سایز 10 را به عنوان فونت پیش‌فرض قرار دادیم. در ادامهٔ قضیه هم برای محدوده کاراکتر‌های عربی یونیکد‌، فونت Tahoma با سایز 8 را برای نمایش انتخاب کردیم. نتیجهٔ کار‌، فوق‌العاده قابل قبول است.&lt;/p&gt;
&lt;h5&gt;برجسته کردن خط حاضر و شماره خط‌ها&lt;/h5&gt;

&lt;p&gt;یکی از ویژگی‌های به درد بخور ویرایشگر‌های جدید‌، شمارهٔ خط‌هاست که در سمت چپ‌شان نوشته می‌شود. در حین توسعهٔ برنامه‌های پایتونی‌، مزیت این شماره‌ها کاملا مشهود است. این است که با اضافه کردن این دستور به ‎.emacs آن‌ها را به ایمکس‌مان اضافه می‌کنیم:&lt;/p&gt;
&lt;div&gt;&lt;pre&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;global-linum-mode&lt;/span&gt; &lt;span&gt;1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;همینطور یکی دیگر از ویژگی‌هایی که خیلی به دردمان می‌خورد این است که خطی که در حال حاضر نشانگر روی آن قرار دارد‌، به صورت برجسته‌تر نمایش داده شود. این کار به چشم در هنگام جستجوی مکان فعلی نمایش‌گر‌، فوق‌العاده کمک می‌کند. برای این کار‌، تکه کد زیر را هم اضافه می‌کنیم:&lt;/p&gt;
&lt;div&gt;&lt;pre&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;global-hl-line-mode&lt;/span&gt; &lt;span&gt;t&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;

&lt;span&gt;(&lt;/span&gt;&lt;span&gt;set-face-background&lt;/span&gt; &lt;span&gt;'hl-line&lt;/span&gt; &lt;span&gt;"#000"&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;در خط اول اعلام می‌کنیم که ویژگی برجسته کردن خط حاضر را فعال کن. بسیاری از قالب‌های آماده‌، مقداری برای رنگ پس زمینهٔ این خط تعیین می‌کنند. اما از آن‌جایی که من با استفاده از ‎.Xresources رنگ‌بندی قالب را تعیین کرده‌ام‌، باید این کار را به صورت دستی انجام دهم (خط دوم). نکته این‌جاست که ممکن است قالب‌تان رنگ خوبی برای‌تان نگذاشته باشد که باز هم می‌توانید با همین خط دوم ترتیبش را بدهید.&lt;/p&gt;&lt;div&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Shahinism?a=OgVZgKCY5PY:y7AI9BpKDnA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Shahinism?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Shahinism?a=OgVZgKCY5PY:y7AI9BpKDnA:Bvu6wjv6hyk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Shahinism?i=OgVZgKCY5PY:y7AI9BpKDnA:Bvu6wjv6hyk" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Shahinism/~4/OgVZgKCY5PY" height="1" width="1"&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogroolViaF0rudInGoogleReader/~4/UHmRc-XVAgU" height="1" width="1"/&gt;</summary><author gr:unknown-author="true"><name>(author unknown)</name></author><source gr:stream-id="feed/http://shahinism.com/feed/"><id>tag:google.com,2005:reader/feed/http://shahinism.com/feed/</id><title type="html">Shahinism.com</title><link rel="alternate" href="http://shahinism.github.io" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1368349165983"><id gr:original-id="http://shahinism.github.io/posts/blog13920108yn-ymkhs-dwst-dshtny-mdyr-bsth.html">tag:google.com,2005:reader/item/ab0af5fca52900d7</id><category term="elisp" /><category term="package" /><category term="ایمکس" /><category term="ایمکس" /><category term="دوره" /><category term="مدیر بسته" /><category term="نرم افزار" /><category term="کدباز" /><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;این ایمکس دوست داشتنی (مدیر بسته)&lt;/div&gt;</title><published>2013-03-28T10:00:45Z</published><updated>2013-03-28T10:00:45Z</updated><link rel="alternate" href="http://feedproxy.google.com/~r/Shahinism/~3/iu8QLmJC3c4/blog13920108yn-ymkhs-dwst-dshtny-mdyr-bsth.html" type="text/html" /><link rel="canonical" href="http://shahinism.github.io/posts/blog13920108yn-ymkhs-dwst-dshtny-mdyr-bsth.html" /><summary xml:base="http://shahinism.github.io/" gr:direction="rtl" type="html">&lt;div style="direction:rtl;text-align:right"&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;در اولین قدم‌های زندگی با ایمکس‌، قصد داریم که آن را به محیط راحت‌تری تبدیل کنیم. ایمکس همان اول کار هم خیلی خوب است‌، ولی یکی از حیاتی‌ترین چیز‌هایی که باید در کنار ایمکس یاد بگیریم‌، این است که به نیاز‌های‌مان بیشتر از محدودیت‌های یک نرم‌افزار احترام بگذاریم. پس برای شروع کار باید کمی انگولکش کنیم. قبل از شروع کار‌، لازم می‌دانم به چند نکتهٔ دیگر هم اشاره کنم:
&lt;/p&gt;&lt;ul&gt;&lt;li&gt;همیشه روش شما‌، از آنی که من نشان‌تان می‌دهم بهتر است‌! تعارف که نداریم‌. قرار هم نیست که کس دیگری را با کانفیگ ایمکس‌تان راضی کنید. نوشته‌های من را بخوانید و سعی کنید آن را آن‌طوری که خودتان راحت‌ترید اجرا کنید. سپس این کانفیگ‌های جدید‌تان را با من و دیگر خوانندگان به اشتراک بگذارید.&lt;/li&gt;
    &lt;li&gt;من یک توسعه دهنده‌ام‌. یا حداقل سعی دارم که باشم. پس طبیعی است که بیشتر ابزار‌هایی را ببینم که به کار‌هایی که انجام می‌دهم ربط داشته باشد. مثلا ابزار‌های مرتبط با Python, PHP و توسعهٔ وب. اما جدای از این‌ها یک وبلاگ‌نویس هم هستم. و اصولا از ایمکس استفاده می‌کنم. پس شاید این اول کار‌، تنظیمات خیلی ربط به برنامه‌نویسی داشته باشد. ولی کم کم به بخش‌های دیگر و جذاب‌تر ایمکس هم وارد می‌شویم.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;فعلا فکر کنم همین‌ها بودند که می‌خواستم بگویم. برویم سر اصل مطلب:&lt;/p&gt;
&lt;p&gt;از نسخهٔ &lt;strong&gt;۲۴&lt;/strong&gt; ایمکس به این‌طرف‌، یک مدیر بستهٔ عالی هم به آن اضافه شده. این یعنی این که نصب‌، نگهداری و بروزرسانی بسته‌های اضافه‌ای که روی ایمکس سوار می‌کنیم‌، فوق‌العاده آسان شده. پس برای شروع کار‌، چند مخزن بسته‌های ایمکس (جایی که ایمکس می‌تواند ابزار‌های جدید را پیدا‌، دانلود و نصب کند) را به این مدیر بسته می‌شناسانیم. برای این کار کافیست خطوط زیر را به فایل ‎.emacs اضافه کنیم. این فایل در سیستم‌عامل‌های یونیکس‌بیس (Linux, Mac, BSD و غیره) در پوشهٔ خانگی‌تان پیدا می‌شود. در مورد ویندوز نمی‌دانم این فایل کجاست و خود ویندوزی‌تان باید بروید پیدایش کنید. ولی روش کار غیر از پیدا کردن این فایل‌، برای‌تان مشابه با یونیکس‌بیس‌هاست ;-)&lt;/p&gt;
&lt;div&gt;&lt;pre&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;require&lt;/span&gt; &lt;span&gt;'package&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;

&lt;span&gt;(&lt;/span&gt;&lt;span&gt;setq&lt;/span&gt; &lt;span&gt;package-archives&lt;/span&gt; &lt;span&gt;'&lt;/span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span&gt;"gnu"&lt;/span&gt; &lt;span&gt;.&lt;/span&gt; &lt;span&gt;"http://elpa.gnu.org/packages/"&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;
             &lt;span&gt;(&lt;/span&gt;&lt;span&gt;"marmalade"&lt;/span&gt; &lt;span&gt;.&lt;/span&gt; &lt;span&gt;"http://marmalade-repo.org/packages/"&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;
             &lt;span&gt;(&lt;/span&gt;&lt;span&gt;"melpa"&lt;/span&gt; &lt;span&gt;.&lt;/span&gt; &lt;span&gt;"http://melpa.milkbox.net/packages/"&lt;/span&gt;&lt;span&gt;)))&lt;/span&gt;
&lt;span&gt;(&lt;/span&gt;&lt;span&gt;package-initialize&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;در خط اول می‌گوییم که بستهٔ مدیر بسته‌ها (Package Manager) را لود کن. خط دوم‌، سه مخزن مختلف را به متغیر package-archives که مدیر بسته از آن برای دیدن لیست مخازن استفاده می‌کند نسبت می‌دهیم. و در خط سوم با صدا زدن تابع package-initialize به ایمکس می‌گوییم که بسته‌های نصب شده با Package Manager را در کجا پیدا کند.&lt;/p&gt;
&lt;p&gt;تکه کد ارائه شدهٔ بالا به زبان Elisp است. زبانی که تنظیمات و بسته‌های ایمکس عموما با آن نوشته می‌شوند. وقتی ایمکس را اجرا می‌کنیم‌، ایمکس به صورت خودکار فایل ‎.emacs را برای یافتن تنظیماتش صدا می‌کند. اگر خدای ناکرده در حین انجام تنظیمات این‌چنینی‌، خرابکاری‌ای کردید و دیگر ایمکس‌تان لود نشد‌، لازم نیست که بروید یک ویرایشگر دیگر پیدا کنید و ‎.emacs را ویرایش کنید تا درست شود. کافیست ایمکس را به صورت &lt;span&gt;emacs -Qاجرا کنید که دیگر فایل ‎.emacs را لود نکند. سپس به ویرایش‌تان بپردازید و ایمکس را دوباره لود کنید. در ادامهٔ‌ این سری پست‌ها‌، بار‌ها پیش می‌آید که ما فایل ‎.emacs را ویرایش می‌کنیم. و از آن‌جایی که ایمکس تنها در هنگام بالا آمدن آن را لود می‌کند‌، ممکن است خسته کننده به نظر بیاید که همیشه و بعد از هر تغییر‌، ایمکس را ببندید و دوباره باز کنید. برای این کار می‌توانید از یکی از دو روش زیر بهره بگیرید:&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;eval-buffer&lt;/h4&gt;

&lt;p&gt;اگر راهنمای همراه ایمکس را خوانده باشید‌، حتما می‌دانید که چطور توابع تعریف شدهٔ ایمکس را صدا کنید. اگر نه‌، من بهتان می‌گویم (ولی تنبلی&lt;/p&gt;
&lt;p&gt;&lt;img alt="موقعیت خط اعلان در فریم ایمکس." src="http://dl.dropbox.com/u/25017694/Blog-photos/emacs2.png" width="299" height="104"&gt; موقعیت خط اعلان در فریم ایمکس.&lt;/p&gt;
&lt;p&gt;را کنار بگذارید و یک بار هم که شده‌، سر سری آن راهنما را بخوانید. ضرر نمی‌کنید) کافیست Meta-x  را وارد کنید (منظور از Meta عموما کلید Alt  است‌. بعضی کامپیوتر‌ها کلید دیگری برای این کار دارند که من فکر نمی‌کنم شما از آن‌ها داشته باشید. اگر هم دارید حتما خودتان می‌دانی&lt;/p&gt;
&lt;p&gt;د آن کلید کدام است ;-)). پس از وارد کردن این دستور‌، در محل اعلان فریم ایمکس (پایین‌ترین خط فریم) نشان‌گرتان را می‌بینید که منتظر است دستوری برایش اعلام کنید. این دستور در واقع اسم یک تابع از ایمکس‌تان است. تابع &lt;span&gt;eval-buffer  کارش این است که کد Elisp موجود در بافر حاضر (بافری که وقتی درون آن هستید تابع را صدا کرده‌اید) را اجرا کند. این اجرا بلافاصله روی تنظیمات ایمکس‌تان اعمال می‌شود و می‌توانید نتیجه‌اش را در ایمکس‌تان ببینید. البته گاها تغییرات آن‌قدر بزرگ است که بهتر است ایمکس را دوباره اجرا کنید تا عواقبش را ببینید. ولی برای خالی نبودن عریضه‌، این دستور می‌تواند کمک حال خوبی باشد.&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;C-x C-e&lt;/h4&gt;

&lt;p&gt;حتما توجه کرده‌اید که هر دستور ایمکس درون یک جفت پرانتز نوشته می‌شود. شما می‌توانید‌، بعد از نوشتن هر دستور‌، با انتقال نشانگر به آخر آن (بعد از پرانتز) و زدن دستور &lt;span&gt;C-x C-e  اجرایش کنید و نتیجه را ببینید. برای مثال دستور زیر را وارد کنید:&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;pre&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;+&lt;/span&gt; &lt;span&gt;1&lt;/span&gt; &lt;span&gt;2&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;نشانگر را به آخرش ببرید و &lt;span&gt;C-x C-e را وارد کنید. در خط اعلان نتیجهٔ جمع ۱ و ۲ را می‌بینید. از این روش می‌توانید برای تغییرات کوچک و زمانی که بافر‌تان زیادی بزرگ است و نیاز به زمان زیادی برای لود کامل دارد بهره ببرید. دیگر زیاده گویی نمی‌کنم و به سراغ راهنمای مدیر بسته می‌روم:&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;مدیر بسته&lt;/h4&gt;

&lt;p&gt;کار با این بسته فوق‌العاده آسان است. بعد از کانفیگی که نشان‌تان دادم‌، کافیست تابع package-list-packages را صدا بزنید ( &lt;span&gt;M-x package-list-packages ). امیدوارم این را بدانید که نیازی نیست همهٔ اسم تابع را تایپ کنید و با دکمهٔ Tab می‌توانید اسم تابع را کامل کنید D: بعد از چند ثانیه‌، ایمکس لیست آخرین بسته‌ها را از اینترنت دریافت می‌کند و بهتان نشان می‌دهد. در ادامهٔ این لیست شما بسته‌هایی که با استفاده از این ابزار نصب کرده‌اید (می‌کنید) و لیست بسته‌های پیش‌فرض ایمکس را می‌بینید.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;برای دیدن توضیحات مربوط به هر بسته‌، کافیست به روی نامش رفته و&lt;span&gt;RET(اینتر خودمان) را بزنید. برای نصبش کافیست وقتی نشانگر روی نام بسته است کلید i  را بزنید تا برای نصب انتخاب شود. توجه کنید که فعلا فقط انتخابش کرده‌اید و بسته نصب نشده. با این کار کنار نام بسته (سمت چپ) یک I اضافه می‌شود که یعنی بسته برای نصب انتخاب شده. همینطور با زدن &lt;span&gt;U (حرف U بزرگ) مدیر بسته به صورت خودکار بسته‌هایی که نیاز به به روز رسانی دارند را انتخاب می‌کند. بس از انتخاب بسته برای نصب یا به روز رسانی‌، کافیست که یک x  تایپ کنید. مدیر بسته شروع به نصب بسته‌ها می‌کند.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;تابع package-install&lt;/h4&gt;

&lt;p&gt;با استفاده از این تابع می‌توانید بدون لود کردن لیست بسته‌ها‌، اقدام به نصب بسته‌ای جدید کنید. روش کار خیلی ساده است:&lt;/p&gt;
&lt;div&gt;&lt;pre&gt;&lt;span&gt;M-x&lt;/span&gt; &lt;span&gt;package-install&lt;/span&gt; &lt;span&gt;RET&lt;/span&gt; &lt;span&gt;PACKAGE_NAME&lt;/span&gt; &lt;span&gt;RET&lt;/span&gt;

&lt;span&gt;M-x&lt;/span&gt; &lt;span&gt;package-install&lt;/span&gt; &lt;span&gt;PACKAGE_NAME&lt;/span&gt; &lt;span&gt;RET&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;ولی من عموما ترجیح می‌دهم که به لیست بسته‌ها بروم و از آن‌جا نصب‌شان کنم. چون با این کار از آخرین تغییرات لیست و توضیحات بسته آگاه می‌شوم. تا همین‌جای کار کافیست‌. کمی در بین بسته‌ها چرخ بزنید و چند‌تایی از آن‌ها را امتحان کنید.&lt;/p&gt;&lt;div&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Shahinism?a=iu8QLmJC3c4:bwvZT8JI85I:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Shahinism?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Shahinism?a=iu8QLmJC3c4:bwvZT8JI85I:Bvu6wjv6hyk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Shahinism?i=iu8QLmJC3c4:bwvZT8JI85I:Bvu6wjv6hyk" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Shahinism/~4/iu8QLmJC3c4" height="1" width="1"&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogroolViaF0rudInGoogleReader/~4/L5GNC39XF_Q" height="1" width="1"/&gt;</summary><author gr:unknown-author="true"><name>(author unknown)</name></author><source gr:stream-id="feed/http://shahinism.com/feed/"><id>tag:google.com,2005:reader/feed/http://shahinism.com/feed/</id><title type="html">Shahinism.com</title><link rel="alternate" href="http://shahinism.github.io" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1368349165982"><id gr:original-id="http://shahinism.github.io/posts/blog13920107yn-ymkhs-dwst-dshtny-mqdmh.html">tag:google.com,2005:reader/item/23794d0377882a13</id><category term="elisp" /><category term="Emacs" /><category term="ادیتور" /><category term="ایمکس" /><category term="ایمکس" /><category term="برنامه نویسی" /><category term="دوره" /><category term="نرم افزار" /><category term="ویندوز" /><category term="کدباز" /><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;این ایمکس دوست داشتنی (مقدمه)&lt;/div&gt;</title><published>2013-03-27T09:09:34Z</published><updated>2013-03-27T09:09:34Z</updated><link rel="alternate" href="http://feedproxy.google.com/~r/Shahinism/~3/SQ4_yZYuueU/blog13920107yn-ymkhs-dwst-dshtny-mqdmh.html" type="text/html" /><link rel="canonical" href="http://shahinism.github.io/posts/blog13920107yn-ymkhs-dwst-dshtny-mqdmh.html" /><summary xml:base="http://shahinism.github.io/" gr:direction="rtl" type="html">&lt;div style="direction:rtl;text-align:right"&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;ایمکس‌، ایمکس‌، ایمکس‌! اگر از دوست‌داران نهضت نرم‌افزار آزاد و شاید نهایتا متن‌باز باشید‌، احتمالا اسمش را شنیده‌اید (این در صورتی است که در حال حاضر از آن استفاده نمی‌کنید D:). خوب اگر شرط ذکر شده شامل حالتان نمی‌شود‌، تنها می‌توانم بگویم که شما هیچ تصوری نسبت به این که ایمکس‌، چه نوع نرم‌افزاری است‌، نمی‌توانید داشته باشید‌! نه‌، خوب به بند آخر جمله توجه کنید‌: &lt;strong&gt;&lt;span style="color:#ff0000"&gt;نمـــی‌توانــــید‌، داشته باشید&lt;/span&gt;&lt;/strong&gt;! اگر اسم ایمکس به گوش‌تان خورده و هنوز پارهٔ تنتان نشده‌، احتمالا تنها با عبارت‌هایی مثل:«من از &lt;strong&gt;vim&lt;/strong&gt; استفاده می‌کنم.» یا مثلا «‌من با &lt;strong&gt;IDE‌ها&lt;/strong&gt; راحت‌تر برنامه توسعه می‌دم.» یا اصلا از این‌ها بدتر‌: «من اصلا برنامه‌نویس نیستم که بخوام بدونم ایمکس چیه» خودتان را گول زده‌اید!
گفتم «شما در صورتی که از ایمکس استفاده نمی‌کنید، نمی‌توانید تصوری از چیستی‌اش داشته باشید» چون عملا با هیچ نمونهٔ مشابهی از آن کار نکرده‌اید‌! شما حتی نمی‌دانید که این نرم‌افزار قادر است کدام نیاز‌تان را بر طرف کند. با خود‌تان رو راست باشید‌‌! قبول کنید که با ابزاری روبرو هستید که نمی‌دانید باید چه انتظاری از آن داشته باشید.&lt;/p&gt;
&lt;p&gt;&lt;a title="ایمکس در ویکی‌پدیا" href="http://wikipedia.org/wiki/Emacs"&gt;&lt;img alt="لوگوی Gnu Emacs." src="http://upload.wikimedia.org/wikipedia/commons/thumb/5/5f/Emacs-logo.svg/270px-Emacs-logo.svg.png" width="270" height="217"&gt;&lt;/a&gt; لوگوی Gnu Emacs.&lt;/p&gt;
&lt;p&gt;خوب احتمالا به قدر کافی گیج شده‌اید‌! حتما با خود می‌گویید که چه نیازی به ابزاری دارم که نمی‌دانم به چه دردی می‌خورد‌؟ خوب کلید مساله همین‌جاست‌! اگر می‌خواهید با ایمکس آشنا شوید‌، باید از او انتظار داشته باشید که تمام کار‌های‌تان را برای‌تان انجام دهد‌! چطور؟ خوب چطوری‌اش را خیلی ساده واگذار می‌کنیم به پست‌هایی که قرار است طی یک سری پست سریالی در این وبلاگ منتشر کنم! اما قبل از شروع به انتشار‌شان باید به چند نکته اشاره کنم:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a title="صفحهٔ خانگی ایمکس" href="http://www.gnu.org/software/emacs/emacs.html"&gt;Gnu Emacs&lt;/a&gt;! آن بیرون چند توزیع مختلف ایمکس وجود دارد. ما در این‌جا موضوع بحث‌مان فرزند خلف ریچارد استالمن Gnu Emacs است که قابلیت نصب روی پلتفرم‌های مختلف‌، از جمله ویندوز را دارد. پس نیاز نیست که بترسید. البته مطمئنم اگر هنوز جرات نکرده‌اید از دمپایی ابری مایکروسافت جدا شوید‌، جرات سوئیچ به هیولایی مثل ایمکس را هم نخواهید داشت. هر چند که ایمکس در ویندوز هم می‌تواند زندگی‌تان را عوض کند. ;-)&lt;/li&gt;
    &lt;li&gt;من هم ایمکس نمی‌دانم‌! ساده است. حدودا یک سالی می‌شود که از ایمکس استفاده می‌کنم‌، ولی حتی تا همین یکی دو هفته پیش همیشه با ترسی قلمبه به سراغش می‌رفتم. اما یک جور‌هایی الان احساس می‌کنم به جایی رسیده‌ام که می‌توانم بهتر از ایمکس کار بکشم.&lt;/li&gt;
    &lt;li&gt;قرار نیست در این‌جا ایمکس یادتان بدهم‌! این یکی حتی از قبلی ساده‌تر است. برای یادگیری ایمکس‌، هیچ منبعی بهتر از خود ایمکس نیست! چطور؟ خیلی ساده‌، ایمکس‌تان را باز کنید و &lt;strong&gt;C-h t&lt;/strong&gt; را وارد کنید. اگر خیلی خیلی تازه‌کارید این دستوری که نوشتم یعنی‌، کلید Ctrl را پایین نگه دارید‌، h را نوازش کنید و سپس هر دو کلید را رها کرده و t را یک بار فشار دهید. ساده بود؟ آماده باشید که با یکی از هیجان‌انگیز‌ترین آموزش‌های عمرتان روبرو شوید (دروغ گفتم‌، احتمالا خیلی خیلی برای‌تان خسته کننده خواهد بود. چون احتمالا فکر می‌کنید که خیلی از این کار‌ها را با Visual Studio یا چه می‌دانم یک ادیتور دیگر که الان استفاده می‌کنید‌، خیلی راحت‌تر انجام می‌دهید. ولی اگر به من اعتماد دارید‌، باور کنید که اشتباه می‌کنید.).&lt;/li&gt;
    &lt;li&gt;این آموزش که انگلیسی است‌! دقیقا‌! شاید فکر کنید که با ترجمهٔ این آموزش بهتر می‌توانستم کمک کنم. ولی نه‌، آن‌قدر چیز برای یادگرفتن در مورد ایمکس به زبان انگلیسی وجود دارد‌، آن‌قدر نیاز به کمک گرفتن از ایمکس خواهیم داشت‌، آن‌قدر راهنماهای خوب در ایمکس وجود دارد که اگر تا الان انگلیسی‌تان داغان است‌، فکری به حال بهبودش بکنید. نیازی هم به کلاس‌ها و کتاب‌های گران‌قیمت ندارید. همین راهنما را باز کنید و شروع به خواندنش کنید. هر وقت هر جایی گیر کردید‌، با یک دیکشنری ترجمه را پیدا کنید. اوائل کمی سخت است‌، ولی هر چه جلوتر که می‌روید‌، به این شیوهٔ یادگیری بیشتر وابسته می‌شوید و لذت می‌برید ;-)&lt;/li&gt;
    &lt;li&gt;اگر ایمکس یاد نمی‌دهی‌، پس این پست‌هایت به درد چه می‌خورد؟ خوب منظورم از آن بند این بود که چیز‌های پایه‌ای را خودتان باید یاد بگیرید. من در این پست‌ها سعی دارم جاهایی را نشان‌تان دهم که در تخیل‌تان هم نمی‌گنجد.&lt;/li&gt;
    &lt;li&gt;چرا پست‌های سریالی؟ خوب ایمکس خیلی گنده است. خیلی خیلی کار می‌تواند انجام دهد. نوشتن یک کتاب ۱۰۰۰ صفحه‌ای هم نمی‌تواند شما را با همهٔ نادیده‌های‌تان آشنا کند. اما پست‌های کوتاه‌، که هم اشاره به نحوهٔ تنظیم قابلیت‌ها و هم اشاره به ویژگی‌های‌شان دارد‌، می‌تواند هم اشتیاق استفاده از آن‌ها را ایجاد کند و هم وقت کافی برای تجربه‌شان بدهد ;-)&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;دیگر ادامه نمی‌دهم‌، همین‌قدر هم برای یک مقدمه کافیست. البته مطمئنم که C-h t برای‌تان مقدمهٔ خیلی خیلی بهتری خواهد بود. پس درنگ نکنید و به سراغش بروید ;-)&lt;/p&gt;&lt;div&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Shahinism?a=SQ4_yZYuueU:aT8Z9X2vsGM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Shahinism?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Shahinism?a=SQ4_yZYuueU:aT8Z9X2vsGM:Bvu6wjv6hyk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Shahinism?i=SQ4_yZYuueU:aT8Z9X2vsGM:Bvu6wjv6hyk" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Shahinism/~4/SQ4_yZYuueU" height="1" width="1"&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogroolViaF0rudInGoogleReader/~4/RnvIZDX_Jvg" height="1" width="1"/&gt;</summary><author gr:unknown-author="true"><name>(author unknown)</name></author><source gr:stream-id="feed/http://shahinism.com/feed/"><id>tag:google.com,2005:reader/feed/http://shahinism.com/feed/</id><title type="html">Shahinism.com</title><link rel="alternate" href="http://shahinism.github.io" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1368349165982"><id gr:original-id="http://shahinism.github.io/posts/blog13911119dryft-mtn-trnhhy-mp3-b-lynwkhs.html">tag:google.com,2005:reader/item/d4b0d3e93acf5ddf</id><category term="bash" /><category term="MP3" /><category term="Python" /><category term="Script" /><category term="برنامه نویسی" /><category term="موسیقی" /><category term="نرم افزار" /><category term="کدباز" /><category term="گنو/لینوکس" /><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;دریافت متن ترانه‌های MP3 با لینوکس&lt;/div&gt;</title><published>2013-02-07T19:38:27Z</published><updated>2013-02-07T19:38:27Z</updated><link rel="alternate" href="http://feedproxy.google.com/~r/Shahinism/~3/M5hOSKs2oCA/blog13911119dryft-mtn-trnhhy-mp3-b-lynwkhs.html" type="text/html" /><link rel="canonical" href="http://shahinism.github.io/posts/blog13911119dryft-mtn-trnhhy-mp3-b-lynwkhs.html" /><summary xml:base="http://shahinism.github.io/" gr:direction="rtl" type="html">&lt;div style="direction:rtl;text-align:right"&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;بله‌، بله‌، خودم خوب می‌دانم که هزار و یک برنامهٔ پخش MP3 آن بیرون است که این کار را خودشان مثل آدم انجام می‌دهند. ولی Nokia N70 بنده‌، شعورش به این چیز‌ها قد نمی‌دهد. همین‌قدر هم که می‌تواند فایل صوتی پخش کند‌، جای شکرش باقی است. خوب حقیقتش می‌شود که با خرج کمی GPRS و البته با یک کمی انگولک این متن‌ها را پیدا کرد‌. ولی خوب کالیبر‌، بالا‌تر از این حرف‌هاست. این است که تصمیم گرفتم‌، برای این کار برنامه‌ای سر هم کنم.
&lt;/p&gt;&lt;h5&gt;مقدمات&lt;/h5&gt;
&lt;p&gt;اولین قدم‌، پیدا کردن سایتی بود که هم متن ترانه‌ها را به قدر کفایت داشته باشد‌، هم یک API درست درمان‌، یعنی رابطی که بتوان مثل آدم از طریق برنامه با آن به تبادل داده پرداخت نیز ارائه کند. خوب‌، خوشبختانه‌، این خارجکی‌ها‌، بر خلاف ما‌، سایت بدرد بخور زیاد دارند. پس انتخاب‌هایم خیلی زیاد بودند. اما کمی بیشتر که جستجو کردم دیدم &lt;a title="Fetching lyrics in the command line" href="https://gist.github.com/febuiles/1549991"&gt;آدم سالاری&lt;/a&gt; قبلا همچین اسکریپتی نوشته که مثل چــی هم کار می‌کند ;-)&lt;/p&gt;
&lt;p&gt;اصل اسکریپت همچین جایی است:&lt;/p&gt;
&lt;div&gt;&lt;pre&gt;curl -s &lt;span&gt;&amp;quot;http://makeitpersonal.co/lyrics?artist=$artist&amp;amp;amp;title=$title&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;خیلی ساده با curl یک درخواست به API سایت می‌فرستیم که در آن ‎$artist اسم خوانندهٔ ترانه و ‎$title اسم خود ترانه است. که البته‌، چون url‌ها نحو (Syntax) خاص خودشان را دارند‌، این اسکریپت‌نویس دوست داشتنی ما‌، با دو خط زیر‌، اسم خواننده و ترانه را معتبر می‌کند:&lt;/p&gt;
&lt;div&gt;&lt;pre&gt;&lt;span&gt;artist&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;perl -MURI::Escape -e &lt;span&gt;'print uri_escape($ARGV[0]);'&lt;/span&gt; &lt;span&gt;"$artist_name"&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;

&lt;span&gt;title&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;perl -MURI::Escape -e &lt;span&gt;'print uri_escape($ARGV[0]);'&lt;/span&gt; &lt;span&gt;"$song_title"&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;همین‌؟ تمام شد؟‌ خوب این اسکریپت کاری که می‌خواستیم را انجام داد. ولی شاهین را که می‌شناسید‌. دوست دارد کار‌هایش را &lt;a title="چ‌چ‌چ (۹): چطور به صورت فله‌ای لینک‌های یوتیوب را از وب‌سایتی استخراج و دانلود کنیم‌!" href="http://shahinism.com/blog/1390/09/26/%da%86%e2%80%8c%da%86%e2%80%8c%da%86-%db%b9-%da%86%d8%b7%d9%88%d8%b1-%d8%a8%d9%87-%d8%b5%d9%88%d8%b1%d8%aa-%d9%81%d9%84%d9%87%e2%80%8c%d8%a7%db%8c-%d9%84%db%8c%d9%86%da%a9%e2%80%8c%d9%87%d8%a7/"&gt;فله‌ای&lt;/a&gt; انجام دهد! یک کمی سخت است که هر بار بیایم اسم ترانه و خواننده را به اسکریپت بگویم‌، بعد شیلنگ خروجی را بگیرم توی یک فایلی که می‌خواهم و از این حرف‌ها. پس می‌رویم سراغ دستکاری بیشتر این اسکریپت.&lt;/p&gt;
&lt;h5&gt;خجالت بکش شاهین&lt;/h5&gt;

&lt;p&gt;حتما می‌دانید که می‌توان به فایل‌های MP3 تگ زد. همین تگ‌هایی که اسم خواننده و ترانه و ژانر و این‌جور حرف‌ها را می‌توان بهشان خوراند که تا دست آخر با MP3 Player خیلی راحت‌تر بشود سر و سامان‌شان داد. البته اگر راست کار‌تان&lt;a title="موسیقی در وب فارسی‌" href="http://shahinism.com/blog/1389/01/15/%d9%85%d9%88%d8%b3%db%8c%d9%82%db%8c_%d8%af%d8%b1_%d9%88%d8%a8_%d9%81%d8%a7%d8%b1%d8%b3%db%8c%e2%80%8c/"&gt; سایت‌های موسیقی ایرانی&lt;/a&gt; است‌، از این تگ‌ها مطمئنا خیری نسیب‌تان نشده‌، چون از دَم مثل ندید بدید‌ها پرش کرده‌اند با آدرس سایت داغان‌شان ;-)&lt;/p&gt;
&lt;p&gt;به هر حال‌، از آن‌جایی که آلبوم موسیقی مورد نظر من‌، مثل آدم تگ خورده بود‌، قصد داشتم تا از این تگ‌ها استفاده کنم. همیشه هم در مخیله‌ام این‌طور تصور می‌کردم که این تگ‌ها با یک روش مخوفی درون فایل موسیقی که اصلا نمی‌دانم چیست قایم شده‌اند و خواندن‌شان نیاز به کتاب‌خانه‌ای چیزی دارد که من از طرز کارش سر در نمی‌آورم. این بود که قصد داشتم اصلا کل اسکریپت را به برنامه‌ای به پایتون تغییر دهم. ولی خوب‌، یک سرچ کوچک کردم و کلی &lt;b&gt;خجالت کشیدم&lt;/b&gt;.&lt;/p&gt;
&lt;p&gt;همان‌طور که در&lt;a title="Bash Script: Reading ID3v1 Tags" href="http://phoxis.org/2011/08/24/bash-script-reading-id3v1-tags/"&gt; این لینک&lt;/a&gt; توضیح داده شده‌، عموما‌، ۱۲۸ بیت آخر فایل MP3 شامل تگ‌های آن است. و ابزار‌های به ظاهر سادهٔ گنو/لینوکسی‌، مثل چـــی‌، کمک‌مان می‌کنند که این تگ‌ها را بخوانیم‌. ببینید:&lt;/p&gt;
&lt;div&gt;&lt;pre&gt;&lt;span&gt;tag&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;$(&lt;/span&gt;tail -c128 &lt;span&gt;"$file"&lt;/span&gt; | tr &lt;span&gt;'\0'&lt;/span&gt; &lt;span&gt;' '&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;

&lt;span&gt;id3&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;$(&lt;/span&gt;head -c10 &lt;span&gt;"$file"&lt;/span&gt; | tr &lt;span&gt;'\0'&lt;/span&gt; &lt;span&gt;' '&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;h5&gt;سر هم کردن اسکریپت نهایی&lt;/h5&gt;

&lt;p&gt;دیگر حالا‌، هم همهٔ ابزار‌های مورد نیاز‌مان را داریم‌، هم کلی چیز جدید یاد گرفته‌ایم. این است که‌، اسکریپت نهایی را سر هم می‌کنیم. که می‌توانید از &lt;a title="lyric script" href="https://github.com/shahinism/Scripts/blob/master/Shell/lyric"&gt;این لینک&lt;/a&gt; دریافتش کنید. برای استفاده از آن هم کافیست که اسم هر تعداد ترانهٔ MP3 را که دل‌تان می‌خواهد در جلویش تایپ کنید تا خودش باقی کار‌ها را انجام دهد.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;نکته:&lt;/b&gt; خوب گاها پیش می‌آید که اسم ترانه‌، شامل کلماتی نظیر (Live) و یا (Bonus) باشد. و یا شاید اسم سایتی‌، چیزی را شامل شود. در این صورت‌، احتمالا API ما بر می‌گرداند که چیزی پیدا نکردم و از این حرف‌ها‌. ولی اسکریپت بیشعور ما آن را هم درون یک فایل هم اسم ترانه با فرمت txt ذخیره می‌کند. این‌جایش را دیگر خودتان می‌توانید با هنر دستکاری فایل لینوکسی‌تان‌، راست و ریست کنید ;-)&lt;/p&gt;&lt;div&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Shahinism?a=M5hOSKs2oCA:c1muL4zWrtU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Shahinism?d=yIl2AUoC8zA" border="0"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Shahinism?a=M5hOSKs2oCA:c1muL4zWrtU:Bvu6wjv6hyk"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Shahinism?i=M5hOSKs2oCA:c1muL4zWrtU:Bvu6wjv6hyk" border="0"&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Shahinism/~4/M5hOSKs2oCA" height="1" width="1"&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogroolViaF0rudInGoogleReader/~4/NjCsTfb1epY" height="1" width="1"/&gt;</summary><author gr:unknown-author="true"><name>(author unknown)</name></author><source gr:stream-id="feed/http://shahinism.com/feed/"><id>tag:google.com,2005:reader/feed/http://shahinism.com/feed/</id><title type="html">Shahinism.com</title><link rel="alternate" href="http://shahinism.github.io" type="text/html" /></source></entry></feed>
