<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>تجربه باز</title>

  <link href="http://kiavash.one//feed.xml" rel="self"/>
  <link href="http://kiavash.one/"/>

  <updated>2023-07-06T03:26:52+0330</updated>
  <id>http://kiavash.one/</id>
  
  <author>
    <name>کیاوش</name>
  </author>
    
  <generator>Mira</generator>

  
  <entry>
    <title>راهنمای بازی در گنو/لینوکس، اتصال دسته بازی Xbox One S</title>
    <link href="http://kiavash.one/2020/06/03/gnu-linux-gaming-tip-how-to-pair-xbox-one-s-controller-via-bluetooth/"/>
    <id>http://kiavash.one/2020/06/03/gnu-linux-gaming-tip-how-to-pair-xbox-one-s-controller-via-bluetooth/</id>

    <published>2020-06-03T17:10:20+0330</published>
    <updated>2020-06-03T17:10:20+0330</updated>

    <content type="html"><![CDATA[<a name="more"></a>
<p>توی چند سال گذشته وضعیت بازی‌ها در سیستم‌عامل‌های آزاد نسبت به گذشته خیلی فرق کرده و با وجود Steam عناوین زیادی از بازی‌ها، برای  نصب مستقیم در گنو/لینوکس منتشر میشن و با کمک wine هم میشه اکثر بازی‌های معروفی که برای ویندوز منتشر شدن رو، روی گنو/لینوکس‌ها هم با کیفیت خیلی خوب نصب و اجرا کرد. اما همچنان مشکلاتی وجود داره و هنوز همه چیز مثل ویندوز، وصل کن و استفاده کن نیست. یکی از این مشکلات هم استفاده وایرلس از کنترلرهای بازی یا همون دسته‌های بازی هست.</p>

<blockquote>
  <p>توضیح: از نظر قیمت و راحتی استفاده و جای دکمه‌ها و خیلی دلایل شخصی دیگه، من چند سال پیش تصمیم گرفتم یک دسته بازی Xbox One S بخرم، ولی باید این نکته رو اضافه کنم که اگه هدف اصلیتون بازی کردن روی استیم هست، دسته‌های Nintendo Switch Pro، جایگزین خیلی خوبی هستند که به شکل رسمی توسط استیم هم پشتیبانی میشن و در ضمن قابل شارژ هم هستند و لازم نیست نگرانی عوض کردن باطری رو هم داشته باشید، اما این کنترلرها هم مشکل اتصال بلوتوث روی اوبونتو رو دارن.</p>
</blockquote>

<p>بارها سعی کردم دسته بازی Xbox One S رو به اوبونتو وصل کنم، متصل کردن دسته با کمک کابل و از طریق پورت usb خیلی کار راحتی بود، کافی بود دسته رو با کابل به کامپیوتر وصل کنم و بدون هیچ مشکلی، اوبونتو دسته بازی رو تشخیص میداد و خیلی راحت از کنترلر استفاده میکردم، اما مشکل از جایی شروع میشد که میخواستم بدون سیم و از طریق بلوتوث دسته رو به کامپیوتر وصل کنم، با وجودی که توی تنظیمات بلوتوث نشون میداد که دسته رو شناخته و توی منو هم کلید connect فعال بود، اما بعد از سعی برای کانکت کردنش، در عرض یکی دو ثانیه، اتصال قطع میشد!</p>

<p><img src="/images/2020-06-03-xbox-one-s-01.gif" alt="connect, disconnect" id="connect__disconnect"></p>

<p>خوب از اونجایی که اوبونتو دسته رو بدون مشکل پیدا میکنه و حتی برای چند ثانیه کوتاه هم بهش کانکت میشه، کاملا مشخصه که یه چیزی این وسط هست که داره اتصال رو بلاک میکنه و باعث قطع شدنش میشه. اعتراف میکنم بعد از بارها جستجو و تلاش برای پیدا کردن راه‌حل این مشکل، از اتصال بلوتوث دسته برای چند سال ناامید شدم و کلا بی‌خیال اموضوع شده بودم تا اینکه بالاخره، خیلی اتفاقی فهمیدم این مردم آزار چیزی نیست به جز یک پروتوکل بلوتوث توی لینوکس که به اسم <strong>Enhanced Re-Transmission Mode</strong> یا <strong>حالت انتقال مجدد بهبود یافته</strong> شناخته میشه. توی ادامه متن به این پروتکل به شکل خلاصه میگم  <code>ertm</code>.</p>

<hr>

<h2 id="راه_حل‌ها">راه حل‌ها</h2>

<h3 id="راه_حل_اول">راه حل اول</h3>

<blockquote>
  <p>قبل از توضیح دادن، باید بگم که خودم از این راه حل استفاده نمیکنم و راه حل دوم رو پیشنهاد میکنم.</p>
</blockquote>

<p>ترمینال رو باز می‌کنیم و این دستور رو تایپ میکنیم:</p>

<pre><code>sudo sh -c 'echo 1 &gt; /sys/module/bluetooth/parameters/disable_ertm'
</code></pre>

<p>عملا همه چیز تمام شد، دسته بازی رو بدون هیچ مشکلی به کامپیوتر وصل کنید. این دستور، پروتکل مذکور رو غیرفعال میکنه، اما باید یادآوری کنم که اثر موقت داره، یعنی بعد از بوت کردن مجدد، همه چیز به حالت قبل برگشته و مجددا ertm فعال میشه. اگر بخوایم این دستور رو همیشگی کنیم، نیاز داریم یک فایل تنظیمات رو ویرایش(یا ایجاد) کنیم.</p>

<pre><code>sudo nano /etc/modprobe.d/bluetooth.conf
</code></pre>

<p>با این دستور، ویرایشگر nano فایل تنظیمات رو برای ویرایش باز میکنه یا در صورتی که فایل از قبل وجود نداشته باشه اون رو ایجاد میکنه. حالا دستور زیر رو توی فایل تنظمیات تایپ کنید:</p>

<pre><code>options bluetooth disable_ertm=1
</code></pre>

<p>با کلیدهای ترکیبی <code>ctrl+O</code> و بعدش زدن کلید اینتر برای تایید اسم فایل، فایل رو ذخیره میکنیم و با کلیدهای ترکیبی <code>Ctrl+X</code> از ویرایشگر خارج میشیم.</p>

<hr>

<p>اگر استفاده کردن از nano رو دوست ندارید میتونید از هر ویرایشگر دیگه‌ای که نصب دارید، استفاده کنید، برای مثال دستور زیر فایل تنظیمات رو با ویرایشگر پیش‌فرض Gnome یعنی برنامه gedit باز میکنه که یه ویرایشگر گرافیکیه و کار باهاش راحت‌تره.</p>

<pre><code>sudo gedit /etc/modprobe.d/bluetooth.conf
</code></pre>

<p>توی این حالت بعد از ویرایش کردن فایل، خیلی راحت با زدن کلید <code>save</code> فایل رو ذخیره کنید و برنامه رو ببندید.</p>

<hr>

<p>کامپیوتر رو یک بار ری‌استارت کنید و تمام، با خیال راحت از این به بعد کنترلرهای بازیتون رو بدون مشکل از طریق اتصال بلوتوث وصل کنید و بازی کنید.</p>

<p>توضیح این دستورات و تنظیمات هم به شکل ساده میشه اینکه، داریم به سیستم عامل میگیم موقع بوت شدن ertm رو غیر فعال کنه.</p>

<p><strong>نکته مهم</strong>: این راه حل در صورت فعال بودن ممکنه باعث ایجاد مشکل در سایر دستگاه های بلوتوث مانند هدفون بشه. اگر بعد از اجرای این راه حل در اتصال بلوتوث سایر دستگاه‌هاتون مشکلی داشتید، کافیه فایل بالا رو دوباره برای ویراش باز کنید و مقدار 1 رو به 0 تغییر بدید.</p>

<p><img src="/images/2020-06-03-xbox-one-s-02.png" alt="connected" id="connected"></p>

<hr>

<h3 id="راه_حل_دوم">راه حل دوم</h3>

<p>یه راه حل دیگه که برای حل کردن این مشکل داریم و من خودم از این راه استفاده کردم و به نظرم راه حل بهتری هست، استفاده از <code>sysfs</code> هست. به شکل خلاصه بزارید اول بگم sysfs چی هست.</p>

<blockquote>
  <p>‫sysfs یک فایل سیستم مجازیه که در هسته‌های لینوکس بعد از نسخه 2.5 اصافه شده و درخت(tree) دستگاه‌های متصل به سیستم رو در اختیار کاربر قرار میده... علاوه بر این، این بسته یک پرونده پیکربندی(فایل تنظیمات) رو در آدرس <code>/etc/sysfs.conf</code> ایجاد میکنه که به کاربر امکان میده به راحتی تنظیمات sysfs را در بوت سیستم (از طریق یک اسکریپت init) تنظیم کنه. توضیحات بیشتر رو میتونید توی <a href="http://linux-diag.sourceforge.net/Sysfsutils.html">صفحه پروژه</a> بخونید</p>
</blockquote>

<p>خوب الان که فهمیدیم sysfs چی هست و چه کار میکنه، بریم برای نصبش.</p>

<pre><code>sudo apt install sysfsutils
</code></pre>

<p>و بعداز نصب، فایل تنظیماتش رو ویرایش میکنیم، این فایل توی آدرس <code>/etc/sysfs.conf</code> قرار داره، پس برای ویرایش کردنش دستور زیر رو تایپ میکنیم:</p>

<pre><code>sudo nano /etc/sysfs.conf
</code></pre>

<p>آخر فایل یک خط جدید ایجاد میکنیم و این تنظیمات رو توی اون خط جدید تایپ میکنیم:</p>

<pre><code>/module/bluetooth/parameters/disable_ertm=1
</code></pre>

<p>با کلیدهای ترکیبی <code>ctrl+O</code> و بعدش زدن کلید اینتر برای تایید اسم فایل، فایل رو ذخیره میکنیم و با کلیدهای ترکیبی <code>Ctrl+X</code> از ویرایشگر خارج میشیم.</p>

<hr>

<p>یک بار دیگه باید یادآوری کنم که اگر استفاده کردن از nano رو دوست ندارید میتونید از هر ویرایشگر دیگه‌ای که نصب دارید، استفاده کنید، برای مثال دستور زیر فایل تنظیمات رو با ویرایشگر پیش‌فرض Gnome یعنی برنامه gedit باز میکنه:</p>

<pre><code>sudo gedit /etc/sysfs.conf
</code></pre>

<p>توی این حالت بعد از ویرایش کردن فایل، خیلی راحت با زدن کلید <code>save</code> فایل رو ذخیره کنید و برنامه رو ببندید.</p>

<hr>

<p>همونطوری که توی توضیحات بالا نوشته بودم، sysfs از init استفاده میکنه، پس به جای بوت کردن مجدد سیستم عامل، فقط اسکریپت مورد نظر رو ری‌استارت میکنیم، دستور زیر رو توی ترمینال اجرا کنید:</p>

<pre><code>sudo systemctl restart sysfsutils.service 
</code></pre>

<p>تمام شد، از این به بعد خیلی راحت و بدون دردسر کنترلرهای Xbox یا Nintendo رو از طریق اتصال بلوتوث به کامپیوتر وصل کنید.</p>

<p><strong>نکته مهم</strong>: این راه حل هم در صورت فعال بودن ممکنه باعث ایجاد مشکل در سایر دستگاه های بلوتوث مانند هدفون بشه. به هر حال این راه حل هم داره ertm رو غیرفعال میکنه، اما اگه از sysfs به عنوان راه حل دارید استفاده میکنید، فقط کافیه که با تایپ کردن دستور زیر توی ترمینال، اجراش رو متوقف کنید:</p>

<pre><code>sudo systemctl stop sysfsutils.service
</code></pre>

<p>و هر وقت که نیاز داشتید، خیلی راحت با دستور زیر، مجددا راه اندازیش کنید</p>

<pre><code>sudo systemctl start sysfsutils.service 
</code></pre>

<p><img src="/images/2020-06-03-xbox-one-s-03.png" alt="connected" id="connected"></p>]]></content>

    <summary>
    &lt;p&gt;توی چند سال گذشته وضعیت بازی‌ها در سیستم‌عامل‌های آزاد نسبت به گذشته خیلی فرق کرده و با وجود Steam عناوین زیادی از بازی‌ها، برای  نصب مستقیم در گنو/لینوکس منتشر میشن و با کمک wine هم میشه اکثر بازی‌های معروفی که برای ویندوز منتشر شدن رو، روی گنو/لینوکس‌ها هم با کیفیت خیلی خوب نصب و اجرا کرد. اما همچنان مشکلاتی وجود داره و هنوز همه چیز مثل ویندوز، وصل کن و استفاده کن نیست. یکی از این مشکلات هم استفاده وایرلس از کنترلرهای بازی یا همون دسته‌های بازی هست.

  توضیح: از نظر قیمت و راحتی استفاده و جای دکمه‌ها و خیلی دلایل شخصی دیگه، من چند سال پیش تصمیم گرفتم یک دسته بازی Xbox One S بخرم، ولی باید ای&lt;/p&gt;
    </summary>
  </entry>
  
  <entry>
    <title>حذف نسخه‌های قدیمی برنامه‌های snap</title>
    <link href="http://kiavash.one/2020/05/16/remove-old-snap-versions-to-free-up-disk-space/"/>
    <id>http://kiavash.one/2020/05/16/remove-old-snap-versions-to-free-up-disk-space/</id>

    <published>2020-05-16T12:17:01+0330</published>
    <updated>2020-05-16T12:17:01+0330</updated>

    <content type="html"><![CDATA[<a name="more"></a>
<p>موقع کار با کامپیوتر یک دسته از پیغام‌هایی که بارها و بارها با اونها مواجه شدیم، انواع اخطارهای فضای ذخیره سازی هستن که یادآوری میکنن فضای دیسک در حال پر شدنه و دیگه جایی برای ذخیره کرن اطلاعات یا نصب برنامه‌های جدید وجود نداره. <br>
خوب یک روز که اصلا انتظار و توقعش رو هم نداشتم، من با یکی از همین اخطارها روبرو شدم که بهم میگفت روی درایوی که دایرکتوری <code>root</code> یا همون <code>/</code> رو پیکربندی کرده بودم جای خالی دیگه وجود نداره، و این در حالی بود که مدت‌ها بود برنامه یا کتابخونه‌ی جدیدی رو نصب نکرده بودم و <code>log</code> ها هم مرتب تمیزکاری شده بودند و آخرین باری هم که چک کرده بودم نزدیک به ۶۰درصد فضای درایو خالی بود، پس منطقا نباید همچین پیغامی از ناکجا ظاهر میشد.</p>

<p>خوب اولین کاری که کردم چک کردن فضای هارد با کمک نرم‌افزار <a href="https://wiki.gnome.org/action/show/Apps/DiskUsageAnalyzer">Baobab</a> یا همون 'disk usage analyzer' معروف که به شکل پیش‌فرض همراه میز کار گنوم نصب میشه، بود و با یک موضوع خیلی جالب روبرو شدم، حجم بالای دایرکتوری اسنپ(snap) <br>
<code>/var/lib/snapd/snaps/</code></p>

<p>با یک جستجوی سریع متوجه شدم که اسنپ ۳ نسخه‌ی آخر هر برنامه‌ای که نصب کرده رو نگه میداره و حذفشون نمیکنه. یعنی تا ۲ بار بعد از آپدیت، ورژن قبلی برنامه رو همچنان به شکل کامل نگهداری میکنه و میتونید به جز آخرین ورژن به ۲نسخه‌ی قبلش هم دسترسی داشته باشید.</p>

<p>دونکته در مورد نگهداری ورژن‌های قبلی:</p>

<ul>
<li>نگهداری نسخه‌های قدیمی شامل نصب برنامه‌های جدید نمیشه، یعنی موقع نصب کردن فقط همون آخرین نسخه رو نصب میکنه، اما وقتی به آپدیت کردن میرسه، به شکل پیش‌فرض از این قانون پیروی میکنه و تا سقف ۳نسخه رو نگهداری میکنه</li>
<li>دوم هم اینکه از نسخه‌ی <code>2.34</code> به بعد خیلی راحت میشه این پیش‌فرض رو تغییر داد.</li>
</ul>

<p>پس اولین کاری که کردم اصلاح این موضوع بود، از نسخه ۲/۳۴ به بعد، خیلی راحت با تغییر مقدار <code>refresh.retain</code> میشه تعداد نسخه‌هایی که قراره نگهداری بشه رو کم یا زیاد کرد.</p>

<pre><code>sudo snap set system refresh.retain=2
</code></pre>

<p>من این گزینه رو از ۳ به ۲ تغییر دادم، یعنی آخرین نسخه و یک نسخه قبل از اون رو داشته باشم، به هرحال پیش اومده بعد از آپدیت کردن بعضی از برنامه‌ها مشکلاتی پیش بیاد، مثلا برنامه درست کار نکنه، یا از تغییرات ورژن جدید خوشتون نیومده باشه یا به هر دلیل دیگه‌ای بخواید به نسخه‌ی قبلی سوییچ کنید.</p>

<hr>

<p>خوب تا الان مشکلات پیش نیومده و احتمال پر شدن هارد دیسکم در آینده رو حل کردم، اما خوب هنوز ورژن‌های قبلی هم روی هارد هستند و من همچنان با اخطار کم بودن فضای دیسک درگیرم، با گرفتن لیست کامل از اسنپ میتونیم تمام نسخه‌های نصب شده‌ی فعال و غیر فعال رو ببینیم:</p>

<pre><code>snap list --all
</code></pre>

<p>خروجی چیزی شبیه به این باید باشه:</p>

<pre><code>Name  Version  Rev  Tracking  Publisher     Notes
atom  1.46.0   250  stable    snapcrafters  classic
vlc   3.0.9    768  stable    videolan✓     disabled
vlc   3.0.9-1  768  stable    videolan✓     disabled
vlc   3.0.9-2  770  stable    videolan✓     -
...
...
</code></pre>

<p>همونطوری که مشخصه، نسخه‌های قدیمی‌تر که در اصل نسخه‌ی غیر فعال شده هستن، با متن 'disabled' در ستون آخر مشخص شدن، برای دیدن فقط این نسخه‌ها میتونیم یه فیلتر کوچیک روی خروجی اعمال کنیم که اگر توی متن ستون آخر کلمه disabled استفاده شده بود، اون خط رو نمایش بده:</p>

<pre><code>snap list --all | perl -lanE 'say if $F[5] =~ /disabled/'
</code></pre>

<p>الان باید خروجی شبیه به این شده باشه:</p>

<pre><code>vlc   3.0.9    768  stable    videolan✓    disabled
vlc   3.0.9-1  768  stable    videolan✓    disabled
</code></pre>

<p>حالا فقط کافیه که این نسخه‌ها رو حذف کنم، برای حذف کردن یک نسخه خاص از بین تمام نسخه‌های نصب شده در اسنپ میتونیم از دستوری با الگوی زیر استفاده کنیم:</p>

<pre><code>snap remove "Name" --revision="Rev"
</code></pre>

<p>که جای <code>Name</code> و <code>Rev</code> باید اسم برنامه و ریویژنی که میخوایم حذف بشه رو بنویسیم، از اونجایی که توی لیست نمایش داده شده، ستون اول اسم برنامه و ستون سوم ریویژن اون برنامه هست، پس فیلتری که نوشته بودم رو با این دستور ترکیب کردم و به این دستور رسیدم:</p>

<pre><code class="language-bash">snap list --all | perl -lanE 'say qx{snap remove "$F[0]" --revision="$f[2]"} if $F[5] =~ /disabled/'

# --- توضیحات ---
# شمارش ستون‌ها رو از صفر شروع میکنیم، پس
# F[0]: ستون اول - اسم برنامه
# F[2]: ستون سوم - ورژن مورد نظرمون
# F[5]: ستون ششم، فعال یا غیرفعال بودن این ورژن
</code></pre>

<p><strong>توصیه:</strong> بهتره قبل از حذف ورژن‌های قدیمی، مطمین باشیم تمام اسنپ‌های در حال اجرا رو متوقف کردیم</p>

<p>تمام. نزدیک به ۴۰ گیگ فضای دیسک آزاد شد :)</p>

<pre><code>atom (revision 223) removed
atom (revision 222) removed
bitwarden (revision 15) removed
bitwarden (revision 16) removed
canonical-livepatch (revision 50) removed
canonical-livepatch (revision 54) removed
chromium (revision 607) removed
chromium (revision 660) removed
core (revision 6531) removed
core (revision 6405) removed
core18 (revision 719) removed
core18 (revision 731) removed
gallery-dl (revision 36) removed
gallery-dl (revision 167) removed
gimp (revision 110) removed
gimp (revision 113) removed
...
...
</code></pre>

<hr>

<p>پی‌نوشت:</p>

<p>قبل از انتشار برای اطمینان از درست بودن تمام چیزهایی که نوشتم یه جست و جوی نهایی کردم و به این مطلب رسیدم، <a href="https://www.linuxuprising.com/2019/04/how-to-remove-old-snap-versions-to-free.html">How To Remove Old Snap Versions To Free Up Disk Space</a> که با توجه به چیزی که توی اون مقاله نوشته شده، برای استفاده بدون دردسر روی سیستم‌هایی که زبان محلی سیستم‌عامل چیزی به جز انگلیسی هست میتونیم یه تغییر خیلی کوچیک دیگه هم اضافه کنیم و اسنپ رو به حالت انگلیسی اجرا کنیم:</p>

<pre><code>LANG=en_US.UTF-8 snap list --all | perl -lanE 'say qx{snap remove "$F[0]" --revision="$f[2]} if $F[5] =~ /disabled/'
</code></pre>

<p>توی اون مقاله برای حذف کردن ورژن‌های قدیمی اسنپ، از یک اسکریپت <code>bash</code> به عنوان راه حل استفاده کرده، که به شکل خلاصه توضیحش میدم:</p>

<p><strong>‍۱-</strong> یه فایل به اسم <code>remove-old-snaps</code> بسازید</p>

<pre><code>touch remove-old-snaps
</code></pre>

<p><strong>۲-</strong> فایل رو باز کنید و متن زیر رو کپی-پیست کنید توی فایل جدید</p>

<pre><code>#!/bin/bash
# Removes old revisions of snaps
# CLOSE ALL SNAPS BEFORE RUNNING THIS
set -eu

LANG=en_US.UTF-8 snap list --all | awk '/disabled/{print $1, $3}' |
    while read snapname revision; do
        snap remove "$snapname" --revision="$revision"
done
</code></pre>

<p><strong>۳-</strong> این فایل رو با کمک دستور زیر قابل اجرا میکنیم:</p>

<pre><code>chmod +x remove-old-snaps
</code></pre>

<p><strong>۴-</strong> و  با دسترسی root اجراش میکنیم</p>

<pre><code>sudo ./remove-old-snaps
</code></pre>]]></content>

    <summary>
    &lt;p&gt;موقع کار با کامپیوتر یک دسته از پیغام‌هایی که بارها و بارها با اونها مواجه شدیم، انواع اخطارهای فضای ذخیره سازی هستن که یادآوری میکنن فضای دیسک در حال پر شدنه و دیگه جایی برای ذخیره کرن اطلاعات یا نصب برنامه‌های جدید وجود نداره. 
خوب یک روز که اصلا انتظار و توقعش رو هم نداشتم، من با یکی از همین اخطارها روبرو شدم که بهم میگفت روی درایوی که دایرکتوری root یا همون / رو پیکربندی کرده بودم جای خالی دیگه وجود نداره، و این در حالی بود که مدت‌ها بود برنامه یا کتابخونه‌ی جدیدی رو نصب نکرده بودم و log ها هم مرتب تمیزکاری شده بودند و آخرین باری هم که چک کرده بودم نزدیک به ۶۰درصد فضای درایو خالی بود، پس م&lt;/p&gt;
    </summary>
  </entry>
  
  <entry>
    <title>چگونه با کمک nmap پورت‌های باز سرور خود را پیدا کنید</title>
    <link href="http://kiavash.one/2020/05/01/how-to-use-nmap-to-scan-for-open-ports/"/>
    <id>http://kiavash.one/2020/05/01/how-to-use-nmap-to-scan-for-open-ports/</id>

    <published>2020-05-01T12:22:12+0330</published>
    <updated>2020-05-01T12:22:12+0330</updated>

    <content type="html"><![CDATA[<a name="more"></a>
<h2 id="مقدمه">مقدمه</h2>

<p>شبکه و مدیریت آن برای بسیاری از مدیران سیستم موضوعی گسترده و پر شاخ و برگ و به نوعی بی‌انتها است که باید به تمام جنبه‌ها و قسمت‌های آن توجه کنند و بی‌توجهی به یک قسمت باعث از بین رفتن کارکرد صحیح سیستم یا آسیب به امنیت آن می‌شود.</p>

<p>لایه‌ها، پروتکل‌ها و رابط‌های گوناگونی برای توجه کردن وجود دارند، و ابزارهای بسیاری وجود دارد که تسلط به آن‌ها نیازمند درک همین موضوعات است.</p>

<p>در این راهنما مفهوم "پورت" یا «درگاه» توضیح داده می‌شود و نحوه استفاده از برنامه nmap را برای به دست آوردن اطلاعات در مورد وضعیت پورت‌های یک کامپیوتر در شبکه را بررسی می‌کنیم.</p>

<p>توجه: این آموزش امنیت IPv4 را پوشش می‌دهد. در گنو/لینوکس، امنیت IPv6 به طور جداگانه از IPv4 حفظ می‌شود. به عنوان مثال ، "nmap" آدرس IPv4 را بطور پیش فرض اسکن می‌کند اما می‌تواند در صورت مشخص بودن گزینه مناسب آدرس IPv6 را هم اسکن کند (nmap -6).</p>

<blockquote>
  <blockquote>
    <blockquote>
      <p>اگر سرور برای IPv6 تنظیم شده است، لطفاً به یاد داشته باشید که رابط‌های شبکه IPv4 و IPv6 خود را با ابزارهای مناسب ایمن کنید.</p>
    </blockquote>
  </blockquote>
</blockquote>

<h2 id="پورت_چیست_">پورت چیست؟</h2>

<p>در مدل شبکه OSI لایه های بسیاری وجود دارد. لایه transport(حمل و نقل) لایه‌ای است که در درجه اول مربوط به ارتباط بین سرویس‌ها و برنامه‌های مختلف است.</p>

<p>این لایه، لایه‌ی اصلی است که پورت ها با آن در ارتباط هستند.</p>

<h3 id="اصطلاحات_مربوط_به_پورت‌ها">اصطلاحات مربوط به پورت‌ها</h3>

<p>دانستن برخی از اصطلاحات به درک بهتر پیکربندی پورت‌ها کمک می‌کند. در اینجا با هم چند اصطلاح که به درک بهتر بحثی که در ادامه می آید کمک می‌کند را، مرور می‌کنیم:</p>

<ul>
<li><p><strong>پورت(Port)</strong>:
یک مکان آدرس‌پذیر در شبکه است، که در داخل سیستم عامل اجرا شده و به تشخیص ترافیک تعیین شده برای برنامه‌ها یا سرویس‌های مختلف کمک می‌کند.</p></li>
<li><p><strong>سوکت(Socket)</strong>:
یک توصیف‌کننده/اشاره‌گر فایل، که یک آدرس IP و یک شماره port را مشخص می‌کند، به‌علاوه پروتکل transport که برای اداره داده‌ها استفاده خواهد شد.</p></li>
<li><p><strong>اتصال(Binding)</strong>:
فرایندی که وقتی یک برنامه یا سرویس از یک سوکت شبکه برای دستیابی به داده‌های ورودی و خروجی استفاده می‌کند، انجام می‌گیرد.</p></li>
<li><p><strong>گوش دادن(Listening)</strong>:
زمانی گفته می‌شود که یک سرویس در حال گوش دادن به یک پورت است كه آن سرویس به یک پورت/پروتكل/آدرس IP، متصل شده باشد و به ترتیب همین ترکیب، در انتظار درخواست‌های مشتریان و سایر سرویس‌گیرندگان سرور، بماند. <br>
یک سرویس می‌تواند پس از دریافت یک درخواست، در صورت نیاز به پاسخ، با استفاده از همان درگاهی(پورت) که به آن گوش کرده است، با مشتری(client) ارتباط برقرار کرده و پاسخ را ارسال کند. از آنجا که سوکت‌های مورد استفاده با یک آدرس IP خاص با مشتری در ارتباط هستند، این مانع از گوش دادن و پاسخ دادن همزمان به درخواست‌های دیگر سرویس‌گیرنده‌های سرور نمی‌شود.</p></li>
<li><p><strong>اسکن پورت(Port scanning)</strong>:
اسکن پورت فرآیند تلاش برای اتصال پیاپی به تعدادی پورت است، با هدف دستیابی به اطلاعاتی که در مورد آن پورت‌ها در دسترس است، ازقبیل سرویس‌ها و سیستم عاملی که در پشت آن پورت‌ها وجود دارند.</p></li>
</ul>

<h3 id="پورت‌های_مشترک">پورت‌های مشترک</h3>

<p>پورت‌ها با مقدار عددی و در بازه‌ای بین 1 تا 65535 مقداردهی می‌شوند.</p>

<ul>
<li><p>معمولا پورت‌های کوچک‌تر از 1024 با خدماتی مرتبط هستند که سیستم عامل‌های گنو/لینوکس و سایر سیتم‌های بر پایه‌ی یونیکس، آن‌ها را عملکردهای اساسی سیستم می‌دانند، بنابراین معمولا برای دسترسی به آن‌ها باید دسترسی ریشه(root) داشته باشید.</p></li>
<li><p>پورت‌ها بین 1024 و 49151 پورت‌های "ثبت شده" در نظر گرفته شده‌اند. این بدان معناست که با صدور درخواست به IANA (اداره اعداد اختصاص داده شده به اینترنت) می‌توان برای برخی از خدمات "رزرو" شوند (به معنای بسیار سست کلمه، چرا که عملا بسیاری از سرویس‌ها از این پورت‌ها استفاده می‌کنند و هیچ محدود کننده‌ی رسمی برای استفاده از این پورت‌ها وجود ندارد). این استاندارد به‌طور جدی اعمال نمی‌شود و عملا یک پیشنهاد است، اما می‌تواند سرنخی در مورد خدمات احتمالی در حال اجرا در یک پورت ارایه دهند.</p></li>
<li><p>پورت‌های بین 49152 و 65535 برای استفاده خصوصی پیشنهاد شده اند.</p></li>
</ul>

<hr>

<p>به شکل عام، به دلیل تعداد زیاد پورت‌های موجود، لازم نیست نگران پورت آزاد برای ارایه‌ی خدمات باشید.</p>

<p>با این حال، ارزش دارد که به برخی از درگاه‌ها که به دلیل خاص بودن استفاده‌شان و معروفیت بالا، آن‌ها را بشناسیم. موارد زیر فقط یک لیست کاملاً ناقص است:</p>

<pre><code>20: FTP data
21: FTP control port
22: SSH
23: Telnet &lt;= Insecure, not recommended for most uses
25: SMTP
43: WHOIS protocol
53: DNS services
67: DHCP server port
68: DHCP client port
80: HTTP traffic &lt;= Normal web traffic
110: POP3 mail port
113: Ident authentication services on IRC networks
143: IMAP mail port
161: SNMP
194: IRC
389: LDAP port
443: HTTPS &lt;= Secure web traffic
587: SMTP &lt;= message submission port
631: CUPS printing daemon port
666: DOOM &lt;= This legacy FPS game actually has its own special port
</code></pre>

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

<p>اکثر برنامه‌ها و سرویس‌ها در فایل تنظیمات خود امکان تغییر پورت پیش‌فرض مورد استفاده خود را ارایه می‌کنند، اما باید اطمینان حاصل کنید که هم کلاینت و هم سرور برای استفاده از پورت غیر استاندارد پیکربندی شده‌اند.</p>

<p>با استفاده از دستور زیر می‌توانید لیست کوتاهی از برخی درگاه‌های متداول را ببینید:</p>

<pre><code>less /etc/services
</code></pre>

<p>این دستور، لیستی از پورت‌های مشترک و خدمات مرتبط با آن‌ها را به شما نشان می‌دهد:</p>

<pre><code>. . .
tcpmux          1/tcp                           # TCP port service multiplexer
echo            7/tcp
echo            7/udp
discard         9/tcp           sink null
discard         9/udp           sink null
systat          11/tcp          users
daytime         13/tcp
daytime         13/udp
netstat         15/tcp
qotd            17/tcp          quote
msp             18/tcp                          # message send protocol
. . .
</code></pre>

<p>در ادامه، در بخشی که در مورد nmap حرف می‌زنیم، نحوه دریافت لیست کامل‌تری را خواهیم دید.</p>

<hr>

<h3 id="چگونه_پورت‌های_باز_خود_را_بررسی_کنید">چگونه پورت‌های باز خود را بررسی کنید</h3>

<p>تعدادی ابزار وجود دارد که می‌تواند برای اسکن پورت‌های باز استفاده شود.</p>

<p>یکی از ابزار‌هایی که به صورت پیش فرض در اکثر توزیع های گنو/لینوکس نصب شده است ss است.</p>

<p>با صدور فرمان با پارامترهای زیر می‌توانید به سرعت متوجه شوید که چه سرویس‌هایی را اجرا می کنید:</p>

<pre><code>ss -tln

State     Recv-Q    Send-Q      Local Address:Port       Peer Address:Port
LISTEN    0         511               0.0.0.0:80              0.0.0.0:*
LISTEN    0         1024              0.0.0.0:6801            0.0.0.0:*
LISTEN    0         511                  [::]:80                 [::]:*
LISTEN    0         1024                 [::]:6801               [::]:*
</code></pre>

<p>یک ابزار دیگر، netstat است، که با استفاده از پارامترهای زیر میتوانید سرویس‌های در حال اجرا و پورت‌هایشان را ببینید</p>

<pre><code>sudo netstat -plunt

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      785/sshd
tcp6       0      0 :::22                   :::*                    LISTEN      785/sshd 
</code></pre>

<p>این درگاه و سوکت گوش دادن همراه با سرویس را نشان می دهد و پروتکل های UDP و TCP را نیز لیست می کند.</p>

<h2 id="نصب_nmap">نصب Nmap</h2>

<p>بخشی از امنیت شبکه شامل انجام آزمایش آسیب پذیری است. این به معنای تلاش برای نفوذ در شبکه شما و کشف نقاط ضعف به همان روشی است که ممکن است یک مهاجم از آن روش‌ها استفاده کند.</p>

<p>از بین تمام ابزارهای موجود برای این کار، nmap شاید رایج ترین و قدرتمندترین باشد.</p>

<p>شما می‌توانید nmap را بر روی اوبونتو یا دبیان از روی مخازن استاندارد یا با استفاده از snap نصب کنید:</p>

<pre><code>sudo apt update
sudo apt install nmap

or

sudo snap install nmap
</code></pre>

<p>یکی از مزایای نصب این نرم افزار، یک فایل نقشه‌برداری درگاه بهبود یافته است. با مراجعه به این پرونده می‌توانید ارتباط بسیار گسترده‌تری بین پورت‌ها و خدمات مشاهده کنید:</p>

<pre><code>less /usr/share/nmap/nmap-service

. . .
tcpmux  1/tcp   0.001995        # TCP Port Service Multiplexer [rfc-1078]
tcpmux  1/udp   0.001236        # TCP Port Service Multiplexer
compressnet     2/tcp   0.000013        # Management Utility
compressnet     2/udp   0.001845        # Management Utility
compressnet     3/tcp   0.001242        # Compression Process
compressnet     3/udp   0.001532        # Compression Process
unknown 4/tcp   0.000477
rje     5/udp   0.000593        # Remote Job Entry
unknown 6/tcp   0.000502
echo    7/tcp   0.004855
echo    7/udp   0.024679
echo    7/sctp  0.000000
. . .
</code></pre>

<p>علاوه بر داشتن تقریباً ۲۰ هزار خط اطلاعات، این پرونده دارای فیلدهای اضافی مانند ستون سوم نیز هست که از اطلاعات جمع شده از اسکن پورت در اینترنت جع‌اوری شده و در غالب یک فرکانس، باز یا بسته بودن هر پورت را لیست می کند.</p>

<h3 id="نحوه_اسکن_پورت‌ها_با_nmap">نحوه اسکن پورت‌ها با Nmap</h3>

<p>Nmap می تواند اطلاعات زیادی درباره سرور را فاش کند. همچنین می تواند مدیران سیستم، در سیستم هدف را به این فکر بیندازد که شخصی به قصد سوء استفاده یا نفوذ در حال تلاش برای ورود به سیستم آن‌هاست. به همین دلیل ، فقط آن را بر روی سرورهایی که خود دارید یا در موقعیت‌هایی که به صاحبان آن اطلاع داده‌اید ، آزمایش کنید.</p>

<p>سازندگان nmap در واقع سرور آزمایشی را در اختیار شما قرار می دهند:</p>

<pre><code>scanme.nmap.org
</code></pre>

<p>این مورد و یا VPS شخصی شما اهداف خوبی برای تمرین nmap هستند.</p>

<dl>
<dt>در ادامه تعدادی عملیات متداول را با کمک nmap انجام می‌دهیم. ما همه آنها را با دسترسی روت و دستور sudo اجرا خواهیم کرد تا از بازگشت و نمایش نتایج جزیی مطمین باشیم.</dt>
<dd>
اجرای برخی از دستورات ممکن است مدت زمان طولانی طول بکشد
</dd>

</dl>

<p>اسکن سیستم عامل میزبان:</p>

<pre><code>sudo nmap -O remote_host
</code></pre>

<p>خروجی: نام سیستم عامل سرور</p>

<p>میتوانید این دستورات را بر روی سرور لوکال خودتان هم تست کنید و فرض کنید میزبان آنلاین است. درصورتیکه پاسخ چیزی شبیه به این بود:</p>

<pre><code>Notes: Host seems down
</code></pre>

<p>این پارامترها را اضافه کنید</p>

<pre><code>sudo nmap -PN remote_host
</code></pre>

<p>دامنه‌ی آدرس‌های مورد جست و جو را با <code>-</code> یا ‍<code>/</code> مشخص کنید تا یک بازه میزبان به طور همزمان اسکن شوند:</p>

<pre><code>sudo nmap -PN xxx.xxx.xxx.xxx-yyy
</code></pre>

<p>دامنه شبکه را برای خدمات موجود اسکن کنید:</p>

<pre><code>sudo nmap -sP network_address_range
</code></pre>

<p>بدون پیش نمایش یک جستجوی DNS معکوس در آدرس IP مشخص شده را اسکن کنید. این کار باید در بیشتر موارد سرعت نمایش نتایج را تسریع کند:</p>

<pre><code>sudo nmap -n remote_host
</code></pre>

<p>به جای همه درگاه های متداول یک پورت خاص را اسکن کنید:</p>

<pre><code>sudo nmap -p port_number remote_host
مثال:
sudo nmap -p 22 xxxx.xxxx.xxxx.xxxx
</code></pre>

<p>برای اسکن اتصالات TCP با استفاده از درگاه هدفمند، nmpap می‌تواند یک دستگیره 3 طرفه (توضیح داده شده در زیر) را انجام دهد. آن را مانند این اجرا کنید:</p>

<pre><code>sudo nmap -sT remote_host
</code></pre>

<p>برای اسکن اتصالات UDP:</p>

<pre><code>sudo nmap -sU remote_host
</code></pre>

<p>اسکن برای هر درگاه باز TCP و UDP:</p>

<pre><code>sudo nmap -n -PN -sT -sU -p- remote_host
</code></pre>

<p>اسکن برای هر درگاه باز TCP:</p>

<pre><code>sudo nmap -n -PN -sT -p- remote_host
</code></pre>

<h4 id="اسکن__syn__از_نحوه_برقراری_اتصال_tcp_استفاده_می_کند.">اسکن "SYN" از نحوه برقراری اتصال TCP استفاده می کند.</h4>

<p>برای شروع اتصال TCP، درخواست کننده بسته "درخواست همگام سازی" را به سرور ارسال می کند. سرور سپس یک بسته "تایید همگام سازی" را برمیگرداند. فرستنده اصلی سپس یک بسته "تایید" را به سرور ارسال می کند و یک اتصال برقرار می شود.</p>

<p>با این حال ، اسکن "SYN" هنگام بازگشت اولین بسته از سرور، اتصال را قطع می‌کند. این اسکن "نیمه باز" نامیده می‌شود و به عنوان روشی برای اسکن کردن سریع درگاه ها از آن استفاده می‌شود، زیرا برنامه مرتبط با آن درگاه ترافیک دریافت نمی‌کند ، چرا که اتصال هرگز کامل نمی‌شود.</p>

<p>این مورد با استفاده از دیوارهای آتش پیشرفته‌تر و برچسب زدن به درخواست‌های ناقص SYN در بسیاری از پیکربندی‌ها، دیگر مخفیانه تلقی نمی‌شود و به سرعت شناسایی می‌شوند.</p>

<p>برای انجام اسکن SYN:</p>

<pre><code>sudo nmap -sS remote_host
</code></pre>

<p>یک رویکرد مخفی‌تر، ارسال هدرهای TCP نامعتبر است که اگر میزبان با مشخصات TCP مطابقت داشته باشد، در صورت بسته بودن آن درگاه(پورت) باید یک بسته را به عنوان پاسخ برگرداند. این کار روی سرورهای غیر ویندوز کار می‌کند.</p>

<p>می توانید از پرچم های <code>-sF</code> ، <code>-sX</code> یا <code>-sN</code> استفاده کنید. همه آنها پاسخی را که ما به دنبال آن هستیم ، تولید می کنند:</p>

<pre><code>sudo nmap -PN -p port_number -sN remote_host
</code></pre>

<p>برای دیدن اینکه کدام نسخه از سرویس روی هاست اجرا می شود، می‌توانید این دستور را امتحان کنید. سعی می شود با آزمایش پاسخ‌های مختلف از سرور، سرویس و نسخه را تعیین کند:</p>

<pre><code>sudo nmap -PN -p port_number -sV remote_host
</code></pre>

<p>بسیاری ترکیب دیگر با پارامترها وجود دارد که می توانید از آنها استفاده کنید، اما باید این کار را با کاوش در مورد آسیب‌پذیری‌های شبکه شروع کنید.</p>

<hr>

<h2 id="نتیجه">نتیجه</h2>

<p>شناخت پیکربندی پورت‌ها و کشف نحوه عملکرد بردارها و الگوریتم‌های حمله بر روی سرور شما، تنها یک قدم برای اطمینان از امنیت اطلاعات و سرور شماست.</p>

<p>کشف اینکه کدام درگاه ها باز هستند و چه اطلاعاتی را می توانید از خدمات پذیرش اتصالات در آن درگاه ها بدست آورید، اطلاعاتی را برای شما فراهم می‌کند تا سرور خود را ایمن‌تر کنید. <br>
هر گونه اطلاعات به دست آمده از دستگاه شما توسط یک کاربر <strong>مخرب</strong> می‌تواند برای سوء استفاده از آسیب پذیری‌های شناخته شده یا ایجاد آسیب‌های جدید استفاده شود. پس دیگران هرچه کمتر از سرور شما اطلاعات به دست آورند، کمتر می‌توانند مخرب و آسیب‌زا باشند.</p>

<hr>

<h4 id="منبع_و_پی‌نوشت">منبع و پی‌نوشت</h4>

<p>این یادداشت ترجمه‌ای پر ایراد به همراه تغییرات کوچک و اضافات کم، از مقاله زیر بود</p>

<p class="left-para"><a href="https://www.digitalocean.com/community/tutorials/how-to-use-nmap-to-scan-for-open-ports-on-your-vps">How To Use Nmap to Scan for Open Ports on your VPS</a></p>

<p>من برای پیدا کردن پورت‌های باز و سطح دسترسی کامپیوتر کاری خودم و همچنین برای پیدا کردن پورت‌های باز آی‌اس‌پی از روی اینترنت از دستور زیر استفاده کردم:</p>

<pre><code>sudo nmap -n -PN -sT -p- 5.127.119.132
</code></pre>

<dl>
<dt>توضیح</dt>
<dd>
آدرس آی‌پی استفاده شده، پابلیک آدرس من در زمان تست بود.
</dd>
<dd>
شاید از نظر امنیت باید گفت خوشبختانه آی‌اس‌پی تمام ۶۵۵۳۵ پورت تست شده را بسته بود، اما در واقع باید بنویسم متاسفانه تمام پورت‌ها بسته بود و عملا امکان دور کاری را از من گرفته و امکان دسترسی به کامپیوتر خودم را از هیچ نقطه‌ی دیگری ندارم.
</dd>

</dl>]]></content>

    <summary>
    &lt;p&gt;مقدمه

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

لایه‌ها، پروتکل‌ها و رابط‌های گوناگونی برای توجه کردن وجود دارند، و ابزارهای بسیاری وجود دارد که تسلط به آن‌ها نیازمند درک همین موضوعات است.

در این راهنما مفهوم &quot;پورت&quot; یا «درگاه» توضیح داده می‌شود و نحوه استفاده از برنامه nmap را برای به دست آوردن اطلاعات در مورد وضعیت پورت‌های یک کامپیوتر در شبکه را بررسی می‌کنیم.

توجه: این آموزش امنیت IPv4 را پوشش می‌دهد. &lt;/p&gt;
    </summary>
  </entry>
  
  <entry>
    <title>بعد از نصب اوبونتو ۲۰.۰۴</title>
    <link href="http://kiavash.one/2020/04/28/after-installing-ubuntu-20-04/"/>
    <id>http://kiavash.one/2020/04/28/after-installing-ubuntu-20-04/</id>

    <published>2020-04-28T15:09:47+0330</published>
    <updated>2020-04-28T15:09:47+0330</updated>

    <content type="html"><![CDATA[<a name="more"></a>
<p>این یادداشت شامل لیستی از کارهاییست که بعد از نصب نسخه‌ی پایدار جدید اوبونتو با اسم  Focal Fossa انجام دادم. <br>
(۱) این لیست را با توجه به عادت‌ها و سلیقه‌های شخصیم و کاربردهای روزانه‌ای که از کامپیوتر انتظار دارم، برای استفاده روی لپ‌تاپ خانگیم تهیه کردم، ممکن است بخشی از این یادداشت برای شما جالب نباشد یا نیازی به آن نداشته باشید، به راحتی از این قسمت‌ها بگذرید بدون اینکه نگران باشید چیزی را از دست داده‌اید. <br>
(۲) مطمینا با کمی جست‌و‌جو، نوشته‌های مشابه و بهتری از این یادداشت را از افراد دیگر با سلیقه‌ها و دیدگاه‌های متفاوت و از دیدگاه فنی با صلاحیت‌تر پیدا خواهید کرد، یا می‌توانید لیست کارهای خودتان را با توجه به نیازهای روزانه‌تان بنویسید و با من و دیگران به اشتراک بگذارید.</p>

<p>دقت داشته باشید که این لیست برای اوبونتو با دسکتاپ <a href="https://www.gnome.org/">گنوم</a> نوشته شده، هرچند قسمت‌هایی از آن را میتوانید روی سایر دسکتاپ‌ها هم بدون مشکل انجام دهید.</p>

<ul>
<li><a href="#نگاه_به_تغییرات">نگاه به تغییرات</a></li>
<li><a href="#فعال_کردن_مخازن_اضافه_برای_نرم‌افزارهای_بیشتر">فعال کردن مخازن اضافه برای نرم‌افزارهای بیشتر</a></li>
<li><a href="#به_روز_بودن">به روز بودن</a></li>
<li><a href="#نصب_پیش‌نیازهای_نصب">نصب پیش‌نیازهای نصب</a></li>
<li><a href="#نصب_قلم‌های_فارسی">نصب قلم‌های فارسی</a></li>
<li><a href="#نصب_codecهای_چند_رسانه‌ای">نصب codecهای چند رسانه‌ای</a></li>
<li><a href="#تنظیم_نور_برای_شب">تنظیم نور برای شب</a></li>
<li><a href="#بهینه_سازی_مصرف_باتری">بهینه سازی مصرف باتری</a></li>
<li><a href="#غیرفعال_کردن_suspend_اتوماتیک">غیرفعال کردن suspend اتوماتیک</a></li>
<li><a href="#مقیاس‌پذیری_صفحه_نمایش">مقیاس‌پذیری صفحه نمایش</a></li>
<li><a href="#لذت_جدید_بازی_کردن_با_کمک_steam__proton_و_game_mode">لذت جدید بازی کردن با کمک Steam، Proton و game mode</a></li>
<li><a href="#دسترسی_به_تنظیمات_بیشتر">دسترسی به تنظیمات بیشتر</a>
<ul>
<li><a href="#نصب_گسترش‌دهنده‌های_GNOME">نصب گسترش‌دهنده‌های GNOME</a></li>
<li><a href="#تغییر_داک">تغییر داک</a></li>
</ul></li>
<li><a href="#نصب_برنامه‌های_بیشتر">نصب برنامه‌های بیشتر</a>
<ul>
<li><a href="#دانلود_منیجر_پرسپولیس">دانلود منیجر پرسپولیس</a></li>
<li><a href="#vC">VLC</a></li>
<li><a href="#gimp">Gimp</a></li>
<li><a href="#krita">Krita</a></li>
<li><a href="#atom">atom</a></li>
<li><a href="#shutter">Shutter</a></li>
<li><a href="#برنامه‌های_دیگر">برنامه‌های دیگر</a></li>
</ul></li>
</ul>

<h2 id="نگاه_به_تغییرات">نگاه به تغییرات</h2>

<p>اوبونتو <code>20.04 LTS</code> یک به روز رسانی با پشتیبانی طولانی مدت است، برای کنونیکال در این نسخه‌ها پایداری حداکثری سیستم عامل هدف اصلی است و نباید توقع تغییرات انقلابی نسبت به نسخه قبلی را از آن‌ها داشت. اما با این حال این نسخه ویژگی‌های جدید زیاد و تغییرات قابل توجهی دارد که با هم نگاهی به آن‌ها می‌کنیم.</p>

<ul>
<li>اضافه شدن حالت تیره و روشن، در کنار حالت استاندارد به پوسته‌ی پیش فرض
<img src="/images/2020-04-28-appearance.png" alt="repositories" id="repositories"></li>
<li>گنوم 3.36 با تمام تغییرات ظاهری و کاربردی آن</li>
<li>حذف کردن تمام پیام‌های دسکتاپ در حالت ’Do Not Disturb‘</li>
<li>مقیاس پذیری صفحه نمایش</li>
<li>استفاده و اهمیت دادن بیشتر به snap، استفاده از <a href="https://snapcraft.io/snap-store">snap store</a> به جای <code>gnome software</code> به عنوان پیش فرض گرافیکی نصب کننده برنامه‌ها</li>
<li>کرنل لینوکس نسخه 5.4</li>
<li>نصب پیش‌فرض <code>game mode</code></li>
</ul>

<h2 id="فعال_کردن_مخازن_اضافه_برای_نرم‌افزارهای_بیشتر">فعال کردن مخازن اضافه برای نرم‌افزارهای بیشتر</h2>

<p>با فشار دادن کلید سوپر(ویندوز) برنامه‌ی <strong>Software &amp; Updates</strong> را پیدا میکنیم و بعد از اجرای آن در همان زبانه‌ی اول چک می‌کنیم که مخازن <strong>Main</strong> - <strong>Universe</strong> - <strong>Restricted</strong> - <strong>Multiverse</strong> انتخاب شده باشند، سپس به زبانه‌ی <strong>Other Sofwares</strong> می‌رویم و تیک انتخاب <strong>Canonical Partners</strong> را هم فعال می‌کنیم.</p>

<p><img src="/images/2020-04-28-ubusoft.png" alt="repositories" id="repositories">
<img src="/images/2018-04-29-software-repository-ubuntu-17-10.jpeg" alt="partners repo" id="partners_repo"></p>

<h2 id="به_روز_بودن">به روز بودن</h2>

<p>یکی از مهمترین کارهایی که باید بعد از نصب اوبونتو انجام داد به روز رسانی سیستم است. شاید کمی عجیب و غریب به نظر برسد چرا یک سیستم عامل تازه نصب شده را که تنها چند روز است منتشر شده باید به روز رسانی کرد؟ اما ازآنجا که در دنیای نرم‌افزار هر روز یک مشکل جدید و یک باگ تا دیروز ناشناخته کشف می‌شود و تمام توضیع‌های شناخته شده، از جمله اوبونتو، همیشه سعی می‌کنند در بهترین حالت و بی‌عیب‌ترین شکل ممکن کار کنند، هر ساعت ممکن است یک آپدیت جدید منتشر بشود و تجربه من می‌گوید اگر سیستم به درستی به‌روز رسانی نشده باشد، در هنگام تلاش برای نصب یک برنامه جدید، ممکن است مشکلاتی ایجاد شود.</p>

<p>برای این‌کار میتوان از به روز رسان گرافیکی نرم افزار <strong>software updater</strong> کمک بگیریم یا مستقیما از طریق خط فرمان کارمان را انجام دهیم</p>

<pre><code>sudo apt update &amp;&amp; sudo apt upgrade
</code></pre>

<p><img src="/images/2018-04-29-software-update-ubuntu.jpg" alt="software updater" id="software_updater"></p>

<h2 id="نصب_پیش‌نیازهای_نصب">نصب پیش‌نیازهای نصب</h2>

<p>برای نصب کردن بعضی از برنامه‌ها نیاز به ابزارهایی داریم که به شکل پیش فرض همراه با اوبونتو نصب نمی‌شوند، مانند make یا git. برای نصب این پیش‌نیازها در ترمینال دستور زیر را وارد می‌کنیم</p>

<pre><code>sudo apt install curl make git build-essential zsh vim gdebi terminator synaptic
</code></pre>

<p>برنامه‌های <strong>curl</strong>, <strong>make</strong>, <strong>git</strong>, <strong>build-essential</strong>, <strong>zsh</strong>, <strong>vim</strong>, <strong>gdebi</strong> و <strong>synaptic</strong> را نصب کردیم. همینطور که میبینید zsh را هم نصب کرده‌ام. به نظر من که از bash بهتر و کاربردی‌تر است، اما اگر به آن نیاز ندارید از لیست نصب آن‌را حذف کنید، ولی اگر میخواهید از آن استفاده کنید توصیه میکنم oh-my-zsh را هم نصب کنید:</p>

<pre><code>sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
</code></pre>

<h2 id="نصب_قلم‌های_فارسی">نصب قلم‌های فارسی</h2>

<p><a href="https://github.com/kiamazi/kateb">کاتب</a> یک مدیریت کننده قلم‌های فارسی برای نصب و به روز رسانی قلم‌های آزاد است. با استفاده از <a href="https://github.com/kiamazi/kateb">کاتب</a> قلم‌های آزاد فارسی را نصب می‌کنیم</p>

<p>ابتدا نصب کاتب</p>

<pre><code>sudo cpan kateb
</code></pre>

<p>و بعد از آن نصب تمامی قلم‌هایی که کاتب پشتیبانی می‌کند</p>

<pre><code>kateb install all
</code></pre>

<p>لیست قلم‌های پشتیبانی شده توسط کاتب:</p>

<pre><code>behdad / farbod / gandom / ganjnameh / mikhak / nahid
nika / noon / parastoo / pfont / sahel / samim / shabnam
shahab / tanha / vazir / vazircode
</code></pre>

<h2 id="نصب_codecهای_چند_رسانه‌ای">نصب codecهای چند رسانه‌ای</h2>

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

<pre><code>sudo apt install ubuntu-restricted-extras
</code></pre>

<h2 id="تنظیم_نور_برای_شب">تنظیم نور برای شب</h2>

<p>یکی از امکاناتی که در اوبونتو ۲۰.۰۴ نسبت به نسخه‌ی قبلی باز هم بهینه‌تر از قبل شده، تنظیم نور شب است. برای فعال کردن و تنظیم آن:</p>

<p><img src="/images/2020-04-28-nightmode.png" alt="night mode" id="night_mode"></p>

<p class="left-para">Settings > Displays > Night Light</p>

<h2 id="بهینه_سازی_مصرف_باتری">بهینه سازی مصرف باتری</h2>

<p>با نصب یک برنامه برای بهبود مصرف باتری، هم عمر باتری بیشتر می‌شود و هم از گرمای بیش از حد باتری جلوگیری می‌کنیم.</p>

<p>برای جلوگیری از گرمای بیش از حد در لپ تاپ های لینوکسی، TLP یک ابزار فوق العاده است که دمای CPU را کنترل می کند و عمر باتری لپ تاپ ها را در بلند مدت افزایش می‌دهد. بهتراست که همراه با TLP هیچ نرم افزار ذخیره انرژی دیگری مانند Laptop Mode نصب نشده باشد. می توانیم آن را با استفاده از دستور زیر در ترمینال نصب کنیم:</p>

<pre><code>sudo apt install tlp tlp-rdw
</code></pre>

<p>یا اگر می‌خواهید از روی مخازن ppa آن را نصب کنید</p>

<pre><code>sudo add-apt-repository ppa:linrunner/tlp
# sudo apt update
sudo apt install tlp tlp-rdw
</code></pre>

<p>در این نسخه از اوبونتو بعد از اضافه کردن مخازن، به شکل پیش‌فرض دستور apt update اجرا می‌شود و نیازی به اجرای آن نداریم. پس از نصب، با اجرای دستور زیر کار برنامه را شروع می‌کنیم:</p>

<pre><code>sudo tlp start
</code></pre>

<h2 id="غیرفعال_کردن_suspend_اتوماتیک">غیرفعال کردن suspend اتوماتیک</h2>

<p>هنگام استفاده از باتری، اوبونتو در صورتی که بیش از ۲۰دقیقه با سیستم کاری نکنید، آن‌را suspend خواهد کرد. برای حفظ باتری گزینه‌ی خوبی به نظر می‌آید، اما مشکل اینجاست که اگر برای انجام کاری بخواهید لپ‌تاپ را به حال خود بگذارید، مثلا دانلود یک فایل بزرگ یا پردازش و محاسبات، بعد از بیست دقیقه برنامه‌های شما غیرفعال خواهند شد. به هر حال همیشه هم که نمی‌توان با استفاده از برق مستقیم با لپ‌تاپ کار کرد، از طرف دیگر من هر وقت با لپ‌تاپ کاری نداشته باشم آن‌را میبندم، پس اگر باز باشد یعنی در حال انجام کاری است و نباید به حالت غیرفعال برود. برای حل این مشکل در تنظیمات به این مسیر می‌رویم:</p>

<p class="left-para">System Settings -> Power</p>

<p>زیر قسمت Suspend &amp; Power Button بر روی automatic suspend کلیک می‌کنیم و تنظیمات را تغییر می‌دهیم.</p>

<p><img src="/images/2020-04-28-power.png" alt="auto suspend" id="auto_suspend"></p>

<h2 id="مقیاس‌پذیری_صفحه_نمایش">مقیاس‌پذیری صفحه نمایش</h2>

<p>اگر مانیتوری با رزولیشن بالا یا اصطلاحا 2K یا حتی 4K دارید، میتوانید با استفاده از حالت جدید مقیاس‌پذیری، اندازه فونت‌ها، آیکون‌ها و همه چیز را بزرگ‌تر و مناسب صفحه نمایش خودتان بسازید.</p>

<p><img src="/images/2020-04-28-scaling.png" alt="auto suspend" id="auto_suspend"></p>

<h2 id="لذت_جدید_بازی_کردن_با_کمک_steam__proton_و_game_mode">لذت جدید بازی کردن با کمک Steam، Proton و game mode</h2>

<p>بازی در لینوکس مسیری طولانی را طی کرده است و شما دیگر محدود به تعداد انگشت شماری از بازی‌های پیش‌فرض نیستید. می توانید Steam را روی اوبونتو نصب کنید و از تعداد قابل توجهی از بازی‌ها لذت ببرید.</p>

<p>پروژه جدید Proton Steam نیز این امکان را فراهم می‌کند تا تعداد زیادی از بازی هایی که تا پیش از این فقط مخصوص Windows بودند را در GNU/Linux انجام دهید. علاوه بر این، به همراه اوبونتو ۲۰.۰۴ حالت بازی(<a href="https://github.com/FeralInteractive/gamemode">FeralInteractive / gamemode</a>) به صورت پیش‌فرض نصب شده است که به طور خودکار عملکرد سیستم عامل را هنگام اجرای بازی‌ها تنظیم می‌کند تا نسبت به سایر فرآیندهای پس‌زمینه اولویت بیشتری داشته باشند.</p>

<p>این بدان معناست که برخی از بازی هایی که از GameMode پشتیبانی می کنند (مانند Rise of Tomb Raiders) عملکرد بهتری در اوبونتو خواهند داشت.</p>

<h2 id="دسترسی_به_تنظیمات_بیشتر">دسترسی به تنظیمات بیشتر</h2>

<p>برای شخصی‌سازی بیشتر و دسترسی به تنظیماتی که در setting اوبونتو در اختیارمان نیست، tweaks را نصب می‌کنیم</p>

<pre><code>sudo apt install gnome-tweak-tool
</code></pre>

<p>بعد از نصب با کمک tweak به مواردی که از قبل در دسترسمان نبودند، دسترسی پیدا می‌کنیم، از جمله:</p>

<ul>
<li>تغییر ظاهر GTK</li>
<li>حرکت دکمه های پنجره به سمت چپ</li>
<li>تنظیم رفتار ماوس/پد لمسی</li>
<li>فعال کردن نمایش «درصد باتری» را در نوار بالا</li>
<li>تغییر فونت سیستم</li>
<li>مدیریت پسوندهای فایل در گنوم</li>
<li>و خیلی چیزهای دیگر...</li>
</ul>

<h3 id="نصب_گسترش‌دهنده‌های_gnome">نصب گسترش‌دهنده‌های GNOME</h3>

<p>می توانیم ابزار کوچک و بزرگی برای تغییر ظاهر یا بهبود کارکرد GNOME به آن اضافه کنیم، این ابزار را می‌توان به راحتی با استفاده از مرورگر نصب کرد.</p>

<p>برای شروع، نیاز داریم که <strong>۱-</strong> نصب افزونه مرورگر وب که هنگام ورود به <a href="https://extensions.gnome.org">وب‌سایت گستردنی‌های گنوم</a>، برای نصب آن اطلاع داده می‌شود. و <strong>۲-</strong> نصب <code>chrome-gnome-shell</code> (البته با وجود داشتن "کروم" در نام خود، با فایرفاکس هم به خوبی کار می کند):</p>

<pre><code>sudo apt install chrome-gnome-shell
</code></pre>

<p>پس از انجام این کار می توان با مراجعه به  <a href="https://extensions.gnome.org">وب‌سایت گستردنی‌های گنوم</a> در فایرفاکس یا گوگل کروم، یک گسترش‌دهنده را انتخاب کنید و با استفاده از دکمه‌ی on/off آن‌را نصب-فعال/غیرفعال کنید.</p>

<p><img src="/images/2018-04-29-gnome-extensions-install-button.png" alt="extensions gnome" id="extensions_gnome"></p>

<h3 id="تغییر_داک">تغییر داک</h3>

<p>همراه با نصب اوبونتو، یک نسخه از افزونه‌ی <em><a href="https://extensions.gnome.org/extension/307/dash-to-dock/">dash to dock</a></em> هم نصب می‌شود که به نظر من نه تنها تغییر یا بهبود خاصی در افزونه داده نشده، که تمام خاصیت‌های تنظیم آن هم غیرفعال شده. به همین دلیل ترجیح می‌دهم که آن را حذف کنم و از نسخه‌ی اصلی افزونه استفاده کنم.</p>

<pre><code>sudo apt remove gnome-shell-extension-ubuntu-dock
rm -rf ~/.local/share/gnome-shell/extensions/dash-to-dock@micxgx.gmail.com
</code></pre>

<p>سپس با مراجعه به صفحه‌ی افزونه <a href="https://extensions.gnome.org/extension/307/dash-to-dock/">dash to dock</a> آن‌را نصب می‌کنیم.</p>

<h2 id="نصب_برنامه‌های_بیشتر">نصب برنامه‌های بیشتر</h2>

<p>تقریبا همه چیز آماده شده و نوبت نصب برنامه‌های مورد نیاز است</p>

<h3 id="دانلود_منیجر_پرسپولیس">دانلود منیجر پرسپولیس</h3>

<p>مدیریت دانلود <a href="https://persepolisdm.github.io/fa">پرسپولیس</a> یک برنامه خوب برای مدیریت دانلودها</p>

<pre><code>sudo add-apt-repository ppa:persepolis/ppa
sudo apt install persepolis
</code></pre>

<h3 id="vlc">VLC</h3>

<p>پخش کننده‌ی چندرسانه‌ای با قابلیت پشتیبانی و پخش اکثر فرمت‌های موجود</p>

<pre><code>sudo apt install vlc
or
sudo snap install vlc
</code></pre>

<h3 id="gimp">Gimp</h3>

<p>ادیتور تصاویر، جایگزین خیلی خوب برای فوتوشاپ در کارهای روزانه و شخصی</p>

<pre><code>sudo snap install gimp
</code></pre>

<h3 id="krita">Krita</h3>

<p>ادیتور تصاویر، کشیدن نقاشی و تصویرسازی دیجیتال، جایگزین خیلی خوب برای گیمپ :) و فوتوشاپ</p>

<pre><code>sudo snap install krita
</code></pre>

<h3 id="atom">atom</h3>

<pre><code>sudo snap install atom
</code></pre>

<h3 id="shutter">Shutter</h3>

<p>گرفتن اسکرین شات از صفحه</p>

<pre><code>sudo add-apt-repository ppa:linuxuprising/shutter
sudo apt install shutter
</code></pre>

<h3 id="برنامه‌های_دیگر">برنامه‌های دیگر</h3>

<p>با سر زدن به <strong>Ubuntu Software</strong> تعداد بیشماری برنامه‌های کاربردی دیگری را پیدا خواهید کرد، از جمله می‌توان به این‌ها اشاره کرد:</p>

<ul>
<li>Spotify - سرویس پخش آنلاین موسیقی</li>
<li>Telegram - پیام رسانی متنی و صوتی</li>
<li>Skype - تماس صوتی و تصویری</li>
<li>Mailspring - مدیریت ای‌میل</li>
<li>Simplenote - یادداشت برداری با پشتیبانی ابری</li>
<li>Blender - نرم‌افزار ۳بعدی سازی</li>
<li>Discord</li>
<li>Slack</li>
<li>VirtualBox</li>
<li>Kdenlive - ویرایش کننده‌ی ویدیو</li>
</ul>]]></content>

    <summary>
    &lt;p&gt;این یادداشت شامل لیستی از کارهاییست که بعد از نصب نسخه‌ی پایدار جدید اوبونتو با اسم  Focal Fossa انجام دادم. 
(۱) این لیست را با توجه به عادت‌ها و سلیقه‌های شخصیم و کاربردهای روزانه‌ای که از کامپیوتر انتظار دارم، برای استفاده روی لپ‌تاپ خانگیم تهیه کردم، ممکن است بخشی از این یادداشت برای شما جالب نباشد یا نیازی به آن نداشته باشید، به راحتی از این قسمت‌ها بگذرید بدون اینکه نگران باشید چیزی را از دست داده‌اید. 
(۲) مطمینا با کمی جست‌و‌جو، نوشته‌های مشابه و بهتری از این یادداشت را از افراد دیگر با سلیقه‌ها و دیدگاه‌های متفاوت و از دیدگاه فنی با صلاحیت‌تر پیدا خواهید کرد، یا می‌توانید لیست کارهای &lt;/p&gt;
    </summary>
  </entry>
  
  <entry>
    <title>zsh: فایل خراب شده‌ تاریخچه</title>
    <link href="http://kiavash.one/2020/02/25/zsh-corrupt-history-file/"/>
    <id>http://kiavash.one/2020/02/25/zsh-corrupt-history-file/</id>

    <published>2020-02-25T21:03:17+0330</published>
    <updated>2020-02-25T21:03:17+0330</updated>

    <content type="html"><![CDATA[<a name="more"></a>
<p>اگر از zsh استفاده می‌کنید یکی از مشکلاتی که ممکن است هراز گاهی با آن روبرو شوید یک فایل تاریخچه‌ی خراب شده است که مانع دسترسی شما به تاریخچه دستورات تایپ شده و اجرای صحیح عملکردها و دستورهایی مانند <code>history</code>، <code>fc</code> یا <code>Crtl+R</code> می‌شود.</p>

<p>خطایی که با آن مواجه می‌شوید چیزی شبیه به خط زیر است:</p>

<pre><code>zsh: corrupt history file /home/kiavash/.zsh_history
</code></pre>

<h3 id="چه_کار_کنیم_">چه کار کنیم؟</h3>

<p>حل این مشکل یک راه  حل ساده در ۴قدم دارد،</p>

<ul>
<li>به دایرکتوری خانه برگردید،</li>
<li>فایل تاریخچه را تغییر نام دهید.</li>
<li>تاریخچه را بازسازی کنید.</li>
</ul>

<pre><code>cd ~
mv .zsh_history .zsh_history_bad
strings .zsh_history_bad &gt; .zsh_history
fc -R .zsh_history
</code></pre>

<ul>
<li>بعد از چک کردن درستی مراحل، فایل تغییر نام داده شده را هم پاک می‌کنیم.</li>
</ul>

<pre><code>rm ~/.zsh_history_bad
</code></pre>

<h3 id="ساختن_یک_اسکریپت">ساختن یک اسکریپت</h3>

<p>اگر برای شما هم مثل من بیشتر از چندبار این اتفاق افتاده و حوصله تکرار این مراحل را هم ندارید، می‌توانید تمام مراحل بالا را در قالب یک اسکریپت ذخیره کنید و یک بار برای همیشه خودتان را راحت کنید.</p>

<p>برای این‌کار در دایرکتوری <code>~/bin</code> یا هرجای دیگری که برای اجرای اسکریپت‌های دستوری در <code>$PATH</code> خود مشخص کرده‌اید، یک فایل جدید، با اسمی شبیه به <code>zsh_history_fix</code> یا هر اسم دیگری که دوست دارید، بسازید و تمام مراحل بالا را در آن ذخیره کنید.</p>

<pre><code>cd ~/bin
touch zsh_history_fix
</code></pre>

<p>فایل <code>zsh_history_fix</code> را با هر ادیتوری که می‌خواهید باز کنید و چند خط‌ زیر را در آن کپی کنید</p>

<pre><code class="language-zsh">#!/usr/bin/env zsh

mv ~/.zsh_history ~/.zsh_history_bad
strings ~/.zsh_history_bad &gt; ~/.zsh_history
fc -R ~/.zsh_history
rm ~/.zsh_history_bad
</code></pre>

<p>و در نهایت فایل ساخته شده را قابل اجرا کنید</p>

<pre><code>chmod +x zsh_history_fix
</code></pre>

<p>از این به بعد هروقت که لازم داشتید از هر مسیری که هستید، دستور زیر را در خط فرمان تایپ کنید</p>

<pre><code>zsh_history_fix
</code></pre>

<hr>

<h4 id="منبع_انگلیسی">منبع انگلیسی</h4>

<p class="left-para"><a href="https://shapeshed.com/zsh-corrupt-history-file/">How to fix a corrupt zsh history file</a></p>]]></content>

    <summary>
    &lt;p&gt;اگر از zsh استفاده می‌کنید یکی از مشکلاتی که ممکن است هراز گاهی با آن روبرو شوید یک فایل تاریخچه‌ی خراب شده است که مانع دسترسی شما به تاریخچه دستورات تایپ شده و اجرای صحیح عملکردها و دستورهایی مانند history، fc یا Crtl+R می‌شود.

خطایی که با آن مواجه می‌شوید چیزی شبیه به خط زیر است:

zsh: corrupt history file /home/kiavash/.zsh_history

چه کار کنیم؟

حل این مشکل یک راه  حل ساده در ۴قدم دارد،

به دایرکتوری خانه برگردید،
فایل تاریخچه را تغییر نام دهید.
تاریخچه را بازسازی کنید.

cd ~
mv .zsh_history .zsh_history_bad
strings .zsh_history_bad &amp;gt; .zsh_history
fc -R .zsh_history

بعد از چک کردن درس&lt;/p&gt;
    </summary>
  </entry>
  
  <entry>
    <title>بلاک کردن ماینرها یا استخراج‌کننده‌های بی‌اجازه</title>
    <link href="http://kiavash.one/2018/09/30/mining-blocker/"/>
    <id>http://kiavash.one/2018/09/30/mining-blocker/</id>

    <published>2018-09-30T15:58:39+0330</published>
    <updated>2018-09-30T15:58:39+0330</updated>

    <content type="html"><![CDATA[<a name="more"></a>
<p>این روزها استخراج ارزهای دیجیتال یا اصطلاحا ماینینگِ کریپتوکارنسی بیشتر از قبل مورد توجه داره قرار میگیره و هرچیزی که جذابیتش بره بالا، مطمینا افراد بیشتری هم به سمتش حجوم میبرن، به اصطلاح تبدیل میشه به مد روز. توی این وضعیت مطمینا باید انتظار داشته باشیم سر و کله کسایی هم که همیشه سعی می‌کنن از راه‌های غیرقانونی یا غیراخلاقی به هدفشون برسن پیدا بشه و از این وضعیت بخوان سو استفاده کنن.</p>

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

<p>اما اگر کسی نخواد اخلاقی عمل کنه و سو استفاده از دیگران هم براش عذاب وجدان نیاره خیلی راحت سعی میکنه که جای اینکه خودش هزینه کنه، به شکلی از کامپیوتر هرکی به دستش برسه برای این پردازش کمک بگیره و مسیر خودش رو راحت‌تر کنه. یکی از کارایی که این روزها خیلی هم داره زیاد میشه، گذاشتن یه تکه کد توی وب‌سایت‌ها هست که یه اسکریپت رو روی کامپیوتر کارابری که در حال بازدید از سایت هست اجرا میکنه و توی مدتی که بازدید کاربر، بدون اجازه و حتی خبر، از توان پردازشی کامپیوترش برای حل مسئله استفاده میکنن و کامپیوتر کاربر از همه جا بی‌خبر، ماینینگ یا استخراج رمزپول رو برای یکی دیگه انجام میده.</p>

<p>چطور میتونیم متوجه این قضیه بشیم؟ تقریبا راحته، اگر در حال بازدید از یک سایت احساس کردید کامپیوترتون کلا کند شد، یه نگاه به منابع در حال استفاده سیستم بندازید، اگر دیدید که براوزر داره درصد بالایی از cpu رو مثلا استفاده میکنه، خوب تقریبا مشخصه قضیه چیه، خیلی سریع از اون سایت خارج بشید و دیگه هم بهش برنگردید.</p>

<p>ولی یه وقت‌هایی هست که نمیتونیم سایت رو ترک کنیم، کارمون بهش گیر هست، مثل اتفاقی که ۲-۳ روز پیش افتاد و احتمالا کسایی با نفوذ به سایت بعضی از شعبه‌های دانشگاه‌ آزاد، کد استخراج خودشون رو توی سایت جا گذاشته بودن، دانشجویی هم که برای انتخاب واحد یا حذف-اضافه رفته سراغ سایت، نمیتونه سایت رو در جا ببنده و تا تموم شدن کارش باید تحمل کنه (تا الان که این متن رو مینویسم، تهران-شرق هنوز این مشکل رو داره و دانشگاه شیراز هم یکی دو ساعت پیش کدهای سواستفاده کننده رو بعد از چند روز از سایتش حذف کرد.)</p>

<p><img src="/images/2018-09-30-mining-blocker-01.jpeg" alt="shiraz iau" id="shiraz_iau"></p>

<p>حالا راه حل چیه؟ پیشنهاد من نصب کردن یه افزونه برای جلوگیری از این نوع سو استفاده‌هاست، افزونه‌های بلاک کننده‌ی ماینینگ هست، که کارشون دقیقا پیدا کردن این اسکریپت‌ها توی هر سایتی و جلوگیری از اجرا شدنشون رو کامپیوتر شماست</p>

<p><a href="https://addons.mozilla.org/en-US/firefox/addon/coin-mining-blocker/">فایرفاکس - نسخه دسکتاپ</a>  </p>

<p><a href="https://addons.opera.com/en/extensions/details/no-coin/">اپرا</a></p>

<p><a href="https://chrome.google.com/webstore/detail/no-coin-block-miners-on-t/gojamcfopckidlocpkbelmpjcgmbgjcl">کرومیوم - کروم</a></p>]]></content>

    <summary>
    &lt;p&gt;این روزها استخراج ارزهای دیجیتال یا اصطلاحا ماینینگِ کریپتوکارنسی بیشتر از قبل مورد توجه داره قرار میگیره و هرچیزی که جذابیتش بره بالا، مطمینا افراد بیشتری هم به سمتش حجوم میبرن، به اصطلاح تبدیل میشه به مد روز. توی این وضعیت مطمینا باید انتظار داشته باشیم سر و کله کسایی هم که همیشه سعی می‌کنن از راه‌های غیرقانونی یا غیراخلاقی به هدفشون برسن پیدا بشه و از این وضعیت بخوان سو استفاده کنن.

به شکل خیلی خلاصه و از دید کسی که این کار رو انجام نداده و بلد نیست، برای استخراج رمز ارز (رمز پول؟) یا همون ارز دیجیتال باید از قدرت پردازشی کامپیوتر برای حل یک مسئله زودتر از بقیه استفاده کنیم، هر چی توان پرد&lt;/p&gt;
    </summary>
  </entry>
  
  <entry>
    <title>ایمکس، خیلی ساده</title>
    <link href="http://kiavash.one/2018/08/15/emacs/"/>
    <id>http://kiavash.one/2018/08/15/emacs/</id>

    <published>2018-08-15T22:25:45+0330</published>
    <updated>2018-08-15T22:25:45+0330</updated>

    <content type="html"><![CDATA[<a name="more"></a>
<p>برای خیلی‌ها زمان‌هایی پیش اومده که به محیط گرافیکی دسترسی نداشتن، مثلا از راه دور به سرور روصل شده باشید، و بخواید یک کد یا فایل‌های تنظیمات و... رو تغییر بدید، برای خیلی‌هامون که این‌روزها به ابزار گرافیکی و IDEهای به اصطلاح مدرن امروزی عادت کردیم، این ویرایش فایل یکی از سخت‌ترین کارهای دنیاست، محیط‌های متفاوت با کلیدها و میانبرهای متفاوت از چیزی که بهش عادت کردیم.</p>

<p>توی این ویدیو سعی داریم emacs رو برای استفاده توی ترمینال آماده کنیم با این هدف که ظاهر، میانبرها، کلیدها و ابزاری که ازشون استفاده میکنیم، خیلی شبیه بشه به عادت‌های روزانه‌ای که ابزارهای گرافیکی برامون درست کردن. برای مثال کلید کپی همون کنترل+سی معروف باشه و...</p>

<p><a href="https://www.youtube.com/watch?v=4NelkJqLyAM&amp;index=5&amp;list=PLqxSVwpwJpWabsxE_qnh84OIAnKNsj7fX">لینک پلی لیست ویدیوها در یوتیوب</a></p>

<div id="15347909532563355"><script type="text/JavaScript" src="https://www.aparat.com/embed/PzlIv?data[rnddiv]=15347909532563355&data[responsive]=yes"></script></div>

<div id="1534790942731527"><script type="text/JavaScript" src="https://www.aparat.com/embed/tJXST?data[rnddiv]=1534790942731527&data[responsive]=yes"></script></div>

<div id="15347909308851714"><script type="text/JavaScript" src="https://www.aparat.com/embed/qiYGk?data[rnddiv]=15347909308851714&data[responsive]=yes"></script></div>

<div id="15347908798519453"><script type="text/JavaScript" src="https://www.aparat.com/embed/nSMkF?data[rnddiv]=15347908798519453&data[responsive]=yes"></script></div>

<div id="15347910051409197"><script type="text/JavaScript" src="https://www.aparat.com/embed/BMY2W?data[rnddiv]=15347910051409197&data[responsive]=yes"></script></div>

<p>برای شروع یک فایل با نام <code>.emacs</code> رو توی دایرکتوری home خودمون درست میکنیم . و این چند خط رو بهش اضافه می‌کنیم</p>

<pre><code>(setq cua-auto-tabify-rectangles nil) ;; Don't tabify after rectangle commands
(transient-mark-mode 1) ;; No region when it is not highlighted
(setq cua-keep-region-after-copy t) ;; Standard Windows behaviour

(cua-mode t)
</code></pre>

<p>با کلیدهای <code>ctrl+x ctrl+c</code> ایمکس رو میبندیم و دوباره اجرا میکنیم، از این به بعد کلیدهای کپی و پیست و کات و آندو و... همه به شکلی که میشناسیم کار میکنن، یعنی با ctrl+c - ctrl+v , ctrl+z و...</p>

<p>برای نمایش شماره هر خط، در ابتدا، این خطوط رو به <code>.emacs</code> اضافه میکنیم:</p>

<pre><code>(global-linum-mode t)
(setq linum-format "%4d \u2502 ")
</code></pre>

<p>و بعد چندتا پکیج رو نیاز داریم که نصب کنیم که برای این هم این چند خط رو به به فایل <code>.emacs</code> اضافه مکینم</p>

<pre><code>(require 'package)
(let* ((no-ssl (and (memq system-type '(windows-nt ms-dos))
                    (not (gnutls-available-p))))
       (proto (if no-ssl "http" "https")))
  ;; Comment/uncomment these two lines to enable/disable MELPA and MELPA Stable as desired
  (add-to-list 'package-archives (cons "melpa" (concat proto "://melpa.org/packages/")) t)
  ;;(add-to-list 'package-archives (cons "melpa-stable" (concat proto "://stable.melpa.org/packages/")) t)
  (when (&lt; emacs-major-version 24)
    ;; For important compatibility libraries like cl-lib
    (add-to-list 'package-archives '("gnu" . (concat proto "://elpa.gnu.org/packages/")))))
(package-initialize)
</code></pre>

<p>فایل رو ذخیره میکنیم و ایمکس رو میبندیم و دوباره راه اندازی میکنیم و با این دستورها این ۳ پکیج رو نصب میکنیم</p>

<pre><code>package-install  (enter)
tabbar (enter)

package-install  (enter)
neotree (enter)

package-install  (enter)
sublime-theme (enter)
</code></pre>

<p>و این چند خط رو به فایل <code>.emacs</code> اضافه میکنیم</p>

<pre><code>(defun my-tabbar-buffer-groups () ;; customize to show all normal files in one group
  (list (cond ((string-equal "*" (substring (buffer-name) 0 1)) "emacs")
              ((eq major-mode 'dired-mode) "emacs")
              (t "user"))))
(setq tabbar-buffer-groups-function 'my-tabbar-buffer-groups)

(tabbar-mode 1)

;;;;

(require 'neotree)
(global-set-key [f5] 'neotree-toggle)



;;need tabbar for active forward / backward
(global-set-key [f6] 'tabbar-backward-tab)
(global-set-key [f7] 'tabbar-forward-tab)

(global-set-key [f8] 'kill-buffer)
(global-set-key [f9] 'kill-buffer-and-window)

;;;

(load-theme 'hickey t) ;; from sublime-theme package
</code></pre>

<p>ایمکس رو میبندیم و مجددا باز میکنیم. تقریبا تمام شد، برای اینکه تنظیمات بیشتری رو هم داشته باشیم این فایل رو میتونید یه نگاه بندازید</p>

<p><a href="https://kiavash.one/assets/emacs.txt">.emacs</a></p>]]></content>

    <summary>
    &lt;p&gt;برای خیلی‌ها زمان‌هایی پیش اومده که به محیط گرافیکی دسترسی نداشتن، مثلا از راه دور به سرور روصل شده باشید، و بخواید یک کد یا فایل‌های تنظیمات و... رو تغییر بدید، برای خیلی‌هامون که این‌روزها به ابزار گرافیکی و IDEهای به اصطلاح مدرن امروزی عادت کردیم، این ویرایش فایل یکی از سخت‌ترین کارهای دنیاست، محیط‌های متفاوت با کلیدها و میانبرهای متفاوت از چیزی که بهش عادت کردیم.

توی این ویدیو سعی داریم emacs رو برای استفاده توی ترمینال آماده کنیم با این هدف که ظاهر، میانبرها، کلیدها و ابزاری که ازشون استفاده میکنیم، خیلی شبیه بشه به عادت‌های روزانه‌ای که ابزارهای گرافیکی برامون درست کردن. برای مثال کلید &lt;/p&gt;
    </summary>
  </entry>
  
  <entry>
    <title>امضای کامیت‌ها با GPG</title>
    <link href="http://kiavash.one/2018/05/23/use-gpg-for-sign-commits/"/>
    <id>http://kiavash.one/2018/05/23/use-gpg-for-sign-commits/</id>

    <published>2018-05-23T00:29:55+0330</published>
    <updated>2018-05-23T00:29:55+0330</updated>

    <content type="html"><![CDATA[<a name="more"></a>
<p>این یادداشت یک راهنما برای استفاده از GPG برای امضا کردن کامیت‌های گیت است، اگر دنبال یک راهنمای نسبتا مفصل برای GPG هستید، خواندن این مطلب را توصیه می‌کنم:
<strong><a href="http://fzero.rubi.gd/post/general/gpg-step-by-step/">GPG یک راهنمای نسبتا مفصل</a></strong></p>

<ul>
<li><a href="#gpg_یا_pgp_چی_هست_اصلا_">GPG یا PGP چی هست اصلا؟</a></li>
<li><a href="#ساختن_کلید_شخصی">ساختن کلید شخصی</a></li>
<li><a href="#دادن_کلید_به_گیت">دادن کلید به گیت</a></li>
<li><a href="#امضای_کامیت‌ها">امضای کامیت‌ها</a></li>
<li><a href="#معرفی_کلید_به_سرویس‌هایی_مثل_گیت‌هاب_یا_گیت‌لب">معرفی کلید به سرویس‌هایی مثل گیت‌هاب یا گیت‌لب</a></li>
<li><a href="#کامیت‌های_تایید_شده">کامیت‌های تایید شده</a></li>
</ul>

<p>برای شروع اجازه بدید پاراگراف اول از منبعی که در شروع یادداشت معرفی کردم رو کپی کنم:</p>

<h2 id="gpg_یا_pgp_چی_هست_اصلا_">GPG یا PGP چی هست اصلا؟</h2>

<p>این یک الگوریتم رمز گذاری شخصی حساب میشه. در حقیقت PGP اون الگوریتمه، و من از برنامه آزاد GPG برای مدیریتش استفاده میکنم. درسته که بگم این این کلید PGP منه، ولی حقیقت اینه که ناخواسته خیلی وقتا متوجه میشم که گفتم این کلید GPG منه، عمدی نیست ولی از لحاظ تکنیکی اگه اهل خورده گرفتن باشی غلط میتونه باشه.</p>

<h2 id="ساختن_کلید_شخصی">ساختن کلید شخصی</h2>

<p><strong>۱.</strong> اگر gpg روی سیستمتون نصب نیست، باید دریافت و نصبش کنیم. برای تست دستور زیر رو اجرا میکنیم</p>

<pre><code>gpg --version
</code></pre>

<p>اگر خروجی معتبری داشت که خیلی هم خوب، یعنی نیازی به نصب نداریم، اگر هم نه که از <a href="https://www.gnupg.org/download/index.html">این آدرس</a> دریافت و نصبش می‌کنیم.</p>

<p><strong>۲.</strong> با استفاده از دستور زیر یک کلید خصوصی/عمومی می‌سازیم</p>

<pre><code>gpg --full-gen-key
</code></pre>

<p>اجرای این دستور مجموعه‌ای از سوالات رو به مانشون میده که با جواب دادن بهشون کلیدمون رو می‌سازیم. اگر سوال‌ها رو بدون جواب دادن و تنها با زدن کلید اینتر رد کنیم جواب پیش‌فرض برای هر سوال انتخاب میشه.</p>

<p><strong>۳.</strong> اولین سوال این است که از کدام الگوریتم می‌خواهید استفاده کنید. شماره ۱ رو انتخاب می‌کنیم.</p>

<pre><code>Please select what kind of key you want:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
Your selection? 1
</code></pre>

<p><strong>۴.</strong> سوال بعد در مورد طول  رشته‌ی کلید است، هرچه کلید طولانی‌تر، امن‌تر :) مقدار ۴۰۹۶ رو به عنوان طول رشته انتخاب می‌کنیم.</p>

<pre><code>RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) 4096
Requested keysize is 4096 bits
</code></pre>

<p><strong>۵.</strong> سوال بعدی که پرسیده می‌شود، مدت زمان اعتبار کلید است، که ما گزینه‌ی اعتبار همیشگی یا «بدون تاریخ انقضا» رو انتخاب می‌کنیم. جواب گزینه‌ی ۰ است.</p>

<pre><code>Please specify how long the key should be valid.
         0 = key does not expire
      &lt;n&gt;  = key expires in n days
      &lt;n&gt;w = key expires in n weeks
      &lt;n&gt;m = key expires in n months
      &lt;n&gt;y = key expires in n years
Key is valid for? (0) 0
Key does not expire at all
</code></pre>

<p><strong>۶.</strong> جواب‌ها رو تایید می‌کنیم.</p>

<pre><code>Is this correct? (y/N) y
</code></pre>

<p><strong>۷.</strong> نامی که برای امضای کلیدها قرار است استفاده شود و آدرس ایمیل‌ را وارد می‌کنیم. از آنجا که می‌خواهیم با کمک این کلید کامیت‌های گیت را امضا کنیم، بهتر است با نام و آدرس ایمیلی که به تنظیمات گیت داده‌ شده یکی باشد. سوال آخر را هم با وارد کردن گزینه‌ی O و تایید مشخصات جواب می‌دهیم.</p>

<pre><code>GnuPG needs to construct a user ID to identify your key.

Real name: kiavash
Email address: me@kiavash.one
Comment:
You selected this USER-ID:
    "kiavash &lt;me@kiavash.one&gt;"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
</code></pre>

<p><strong>۸.</strong> یک پسورد خوب و قوی به کلید می‌دهیم.</p>

<p><strong>۹.</strong> با کمک دستور زیر کلید‌هایی که ساخته شده را می‌توان دید.</p>

<pre><code>gpg --list-secret-keys
</code></pre>

<h2 id="دادن_کلید_به_گیت">دادن کلید به گیت</h2>

<p><strong>۱.</strong> با استفاده از دستور زیر مشخصات کاملی از کلید‌هایی که ساخته‌ایم را می‌توانیم ببینیم:</p>

<pre><code>gpg --list-secret-keys --keyid-format LONG me@kiavash.one
</code></pre>

<p>نیاز به توضیح نیست که باید از آدرس ایمیلی که برای ساختن کلید خودتان استفاده کرده‌اید استفاده کنید.</p>

<p><strong>۲.</strong> کلیدی که با <code>sec</code> شروع شده است را پیدا کنید و <code>GPG key ID</code> آن‌را کپی کنید. در این مثال مقدار آن برابر با <code>30F2B65B9246B6CA</code> است:</p>

<pre><code>sec   rsa4096/30F2B65B9246B6CA 2017-08-18 [SC]
      D5E4F29F3275DC0CDA8FFC8730F2B65B9246B6CA
uid                   [ultimate] kiavash &lt;me@kiavash.one&gt;
ssb   rsa4096/B7ABC0813E4028C0 2017-08-18 [E]
</code></pre>

<p><strong>۳.</strong> برای گیت مشخص کنید که کامیت‌ها را با کمک این کلید امضا کند</p>

<pre><code>git config --global user.signingkey 30F2B65B9246B6CA
</code></pre>

<p>(مقدار ID که از مرحله قبل به دست آوردید را جایگزین مقدار پیش‌فرض در این مثال <code>30F2B65B9246B6CA</code> باید بکنید)</p>

<h2 id="امضای_کامیت‌ها">امضای کامیت‌ها</h2>

<p>بعد از ساختن کلید GPG و دادن مقدار آن به گیت می‌توانید شروع به امضا کردن کامیت‌هایتان بکنید. چند راه برای این‌کار داریم</p>

<p><strong>۱.</strong> راه ول استفاده از سوییچ <code>-S</code> برای امضا کردن هر کامیت است</p>

<pre><code>git commit -S -m "My commit msg"
</code></pre>

<p><strong>۲.</strong> اگر نمی‌خواهیم بعد از هر بار کامیت کردن از سوییچ S استفاده کنیم، می‌توان برای گیت مشخص کرد که بعد از هر بار کامیت کردن آن‌ها را اتوماتیک امضا کند</p>

<pre><code>git config --global commit.gpgsign true
</code></pre>

<p><strong>۳.</strong> در هر دو حالت بعد از هر بار کامیت کردن باید پسورد کلید را وارد کنیم، البته امروزه اکثر سیستم‌عامل‌ها برنامه‌های پیش‌فرضی به همراه دارند که میتوانند این پسورد را در خود ذخیره کنند و نیاز به تایپ پسورد در هر سری را از بین ببرند. اگر مطمین هستید که کسی جز شما از کامپیوترتان استفاده نمی‌کند می‌توانید پسورد را ذخیره کنید. <em>من این کار را نمی‌کنم</em></p>

<h2 id="معرفی_کلید_به_سرویس‌هایی_مثل_گیت‌هاب_یا_گیت‌لب">معرفی کلید به سرویس‌هایی مثل گیت‌هاب یا گیت‌لب</h2>

<p><strong>۱.</strong> از کلید عمومی با کمک دستور زیر می‌توان خروجی گرفت(ID خودتان را جایگزین مقدار پیش‌فرض این مثال باید بکنید)</p>

<pre><code>gpg --armor --export 30F2B65B9246B6CA
</code></pre>

<p><strong>۲.</strong> مقدار خروجی را کپی کنید. خروجی شبیه به این خواهد بود:</p>

<pre><code>-----BEGIN PGP PUBLIC KEY BLOCK-----
blahblahblah
blahblahblah
...
...
...
-----END PGP PUBLIC KEY BLOCK-----
</code></pre>

<p><strong>۳.</strong> به قسمت تنظیمات اکانت در سرویس مورد نظر می‌رویم، در گیت‌هاب به قسمت <code>SSH and GPG keys</code> یا در گیت‌لب <code>GPG keys</code> می‌رویم و مقدار کلید عمومی را در آن کپی می‌کنیم.</p>

<h2 id="کامیت‌های_تایید_شده">کامیت‌های تایید شده</h2>

<p><strong>۱.</strong> به زبانه‌ی commits هر مخزن در سرویس مورد نظر که برویم، به راحتی می‌توان کامیت‌های امضا شده‌ی معتبر، نامعتبر و کلا امضا نشده‌ها را از هم تشخیص داد.</p>

<p><img src="/images/2018-5-23-use-gpg-for-sign-commits-github.png" alt="github" id="github">
<img src="/images/2018-5-23-use-gpg-for-sign-commits-gitlab-01.png" alt="gitlab" id="gitlab"></p>

<p><strong>۲.</strong> با کلیک بر روی نشان امضای هر کلید می‌توان مشخصات آن‌را دید
<img src="/images/2018-5-23-use-gpg-for-sign-commits-gitlab-02.png" alt="gitlab" id="gitlab">
<img src="/images/2018-5-23-use-gpg-for-sign-commits-gitlab-03.png" alt="gitlab" id="gitlab"></p>

<p>منبع ۳عکس آخر و مقادیر پیش‌فرض مثال‌ها:</p>

<p class="left-para">https://gitlab.com/help/user/project/repository/gpg_signed_commits/index.md</p>]]></content>

    <summary>
    &lt;p&gt;این یادداشت یک راهنما برای استفاده از GPG برای امضا کردن کامیت‌های گیت است، اگر دنبال یک راهنمای نسبتا مفصل برای GPG هستید، خواندن این مطلب را توصیه می‌کنم:
GPG یک راهنمای نسبتا مفصل

GPG یا PGP چی هست اصلا؟
ساختن کلید شخصی
دادن کلید به گیت
امضای کامیت‌ها
معرفی کلید به سرویس‌هایی مثل گیت‌هاب یا گیت‌لب
کامیت‌های تایید شده

برای شروع اجازه بدید پاراگراف اول از منبعی که در شروع یادداشت معرفی کردم رو کپی کنم:

GPG یا PGP چی هست اصلا؟

این یک الگوریتم رمز گذاری شخصی حساب میشه. در حقیقت PGP اون الگوریتمه، و من از برنامه آزاد GPG برای مدیریتش استفاده میکنم. درسته که بگم این این کلید PGP منه، ولی حقیق&lt;/p&gt;
    </summary>
  </entry>
  
  <entry>
    <title>بعد از نصب اوبونتو ۱۸.۰۴</title>
    <link href="http://kiavash.one/2018/04/29/after-installing-ubuntu-18-04/"/>
    <id>http://kiavash.one/2018/04/29/after-installing-ubuntu-18-04/</id>

    <published>2018-04-29T16:36:28+0330</published>
    <updated>2018-04-29T16:36:28+0330</updated>

    <content type="html"><![CDATA[<a name="more"></a>
<p>این یادداشت شامل لیستی از کارهایی است که بعد از نصب نسخه‌ی پایدار جدید اوبونتو با اسم  Bionic Beaver با توجه به عادت‌ها و سلیقه‌های شخصیم و کاربردهای روزانه‌ای که از کامپیوتر انتظار دارم، برای استفاده روی لپ‌تاپ انجام داده‌ام، ممکن است بخشی از این یادداشت برای شما جالب نباشد یا نیازی به آن نداشته باشید، مطمینا با کمی جست‌و‌جو، نوشته‌های مشابه این یادداشت را از افراد دیگر با سلیقه‌ها و دیدگاه‌های متفاوت پیدا خواهید کرد، یا می‌توانید لیست کارهای خودتان را با توجه به نیازهای روزانه‌تان بنویسید.</p>

<p>دقت داشته باشید که این لیست برای اوبونتو با دسکتاپ <a href="https://www.gnome.org/">گنوم</a> نوشته شده، هرچند قسمت‌هایی از آن را میتوانید روی سایر دسکتاپ‌ها هم بدون مشکل انجام دهید.</p>

<ul>
<li><a href="#نگاه_به_تغییرات">نگاه به تغییرات</a></li>
<li><a href="#فعال_کردن_مخازن_اضافه_برای_نرم‌افزارهای_بیشتر">فعال کردن مخازن اضافه برای نرم‌افزارهای بیشتر</a></li>
<li><a href="#به_روز_بودن">به روز بودن</a></li>
<li><a href="#نصب_پیش‌نیازهای_نصب">نصب پیش‌نیازهای نصب</a></li>
<li><a href="#نصب_codecهای_چند_رسانه‌ای">نصب codecهای چند رسانه‌ای</a></li>
<li><a href="#تنظیم_نور_برای_شب">تنظیم نور برای شب</a></li>
<li><a href="#بهینه_سازی_مصرف_باتری">بهینه سازی مصرف باتری</a></li>
<li><a href="#غیرفعال_کردن_suspend_اتوماتیک">غیرفعال کردن suspend اتوماتیک</a></li>
<li><a href="#دسترسی_به_تنظیمات_بیشتر">دسترسی به تنظیمات بیشتر</a>
<ul>
<li><a href="#تغییر_پوسته_و_آیکون‌ها">تغییر پوسته و آیکون‌ها</a></li>
<li><a href="#نصب_گسترش‌دهنده‌های_GNOME">نصب گسترش‌دهنده‌های GNOME</a></li>
<li><a href="#تغییر_داک">تغییر داک</a></li>
</ul></li>
<li><a href="#نصب_برنامه‌های_بیشتر">نصب برنامه‌های بیشتر</a>
<ul>
<li><a href="#دانلود_منیجر_پرسپولیس">دانلود منیجر پرسپولیس</a></li>
<li><a href="#VLC">VLC</a></li>
<li><a href="#Gimp">Gimp</a></li>
<li><a href="#atom">atom</a></li>
<li><a href="#Shutter">Shutter</a></li>
<li><a href="#TOR">TOR</a></li>
<li><a href="#برنامه‌های_دیگر">برنامه‌های دیگر</a></li>
</ul></li>
</ul>

<h2 id="نگاه_به_تغییرات">نگاه به تغییرات</h2>

<p>اوبونتو <code>18.04 LTS</code> یک به روز رسانی بزرگ است که ویژگی‌های جدید زیاد و تغییرات قابل توجهی دارد. دسکتاپ جدید، کرنل جدید لینوکس، برنامه های جدید - تقریبا همه چیز جدید!</p>

<p>سایت <a href="https://www.omgubuntu.co.uk/">omgubuntu</a> ویدیویی کوتاه را برای نگاه انداختن سریع به این تغییرات در یوتیوب خود منتشر کرده که می‌توانید برای آشنایی با این تغییرات آن را ببینید.</p>

<div class="video-container">
<iframe width="100%" height="100%" src="https://www.youtube.com/embed/ONXfL6evR0Q" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>
</div>

<h2 id="فعال_کردن_مخازن_اضافه_برای_نرم‌افزارهای_بیشتر">فعال کردن مخازن اضافه برای نرم‌افزارهای بیشتر</h2>

<p>با فشار دادن کلید سوپر(ویندوز) برنامه‌ی <strong>Software &amp; Updates</strong> را پیدا میکنیم و بعد از اجرای آن در همان زبانه‌ی اول چک می‌کنیم که مخازن <strong>Main</strong> - <strong>Universe</strong> - <strong>Restricted</strong> - <strong>Multiverse</strong> انتخاب شده باشند، سپس به زبانه‌ی <strong>Other Sofwares</strong> می‌رویم و تیک انتخاب <strong>Canonical Partners</strong> را هم فعال می‌کنیم.</p>

<p><img src="/images/2018-04-29-repositories-ubuntu-18.png" alt="repositories" id="repositories">
<img src="/images/2018-04-29-software-repository-ubuntu-17-10.jpeg" alt="partners repo" id="partners_repo"></p>

<h2 id="به_روز_بودن">به روز بودن</h2>

<p>یکی از مهمترین کارهایی که باید بعد از نصب اوبونتو انجام داد به روز رسانی سیستم است. شاید کمی عجیب و غریب به نظر برسد چرا یک سیستم عامل تازه نصب شده را که تنها چند روز است منتشر شده باید به روز رسانی کرد؟ اما ازآنجا که در دنیای نرم‌افزار هر روز یک مشکل جدید و یک باگ تا دیروز ناشناخته کشف می‌شود و تمام توضیع‌های شناخته شده، از جمله اوبونتو، همیشه سعی می‌کنند در بهترین حالت و بی‌عیب‌ترین شکل ممکن کار کنند، هر ساعت ممکن است یک آپدیت جدید منتشر بشود و تجربه من می‌گوید اگر سیستم به درستی به‌روز رسانی نشده باشد، در هنگام تلاش برای نصب یک برنامه جدید، ممکن است مشکلاتی ایجاد شود.</p>

<p>برای این‌کار میتوان از به روز رسان گرافیکی نرم افزار <strong>software updater</strong> کمک بگیریم یا مستقیما از طریق خط فرمان کارمان را انجام دهیم</p>

<pre><code>sudo apt update &amp;&amp; sudo apt upgrade
</code></pre>

<p><img src="/images/2018-04-29-software-update-ubuntu.jpg" alt="software updater" id="software_updater"></p>

<h2 id="نصب_پیش‌نیازهای_نصب">نصب پیش‌نیازهای نصب</h2>

<p>برای نصب کردن بعضی از برنامه‌ها نیاز به ابزارهایی داریم که به شکل پیش فرض همراه با اوبونتو نصب نمی‌شوند، مانند make یا git. برای نصب این پیش‌نیازها در ترمینال دستور زیر را وارد می‌کنیم</p>

<pre><code>sudo apt install curl make git build-essential zsh vim gdebi synaptic
</code></pre>

<p>برنامه‌های <strong>curl</strong>, <strong>make</strong>, <strong>git</strong>, <strong>build-essential</strong>, <strong>zsh</strong>, <strong>vim</strong>, <strong>gdebi</strong> و <strong>synaptic</strong> را نصب کردیم. همینطور که میبینید zsh را هم نصب کرده‌ام. به نظر من که از bash بهتر و کاربردی‌تر است، اما اگر به آن نیاز ندارید از لیست نصب آن‌را حذف کنید، ولی اگر میخواهید از آن استفاده کنید توصیه میکنم oh-my-zsh را هم نصب کنید:</p>

<pre><code>sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
</code></pre>

<h2 id="نصب_codecهای_چند_رسانه‌ای">نصب codecهای چند رسانه‌ای</h2>

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

<pre><code>sudo apt install ubuntu-restricted-extras
sudo apt install libavcodec-extra
sudo apt install libdvd-pkg
</code></pre>

<h2 id="تنظیم_نور_برای_شب">تنظیم نور برای شب</h2>

<p>یکی از امکاناتی که همراه با اوبونتو ۱۸.۰۴ به شکل بهینه‌تری از قبل در اختیارم قرار گرفته تنظیم نور شب است. برای فعال کردن و تنظیم آن:</p>

<p class="left-para">Settings > Devices > Displays and toggle the Night Light on</p>

<h2 id="بهینه_سازی_مصرف_باتری">بهینه سازی مصرف باتری</h2>

<p>با نصب یک برنامه برای بهبود مصرف باتری، هم عمر باتری بیشتر می‌شود و هم از گرمای بیش از حد باتری جلوگیری می‌کنیم.</p>

<p>برای جلوگیری از گرمای بیش از حد در لپ تاپ های لینوکسی، TLP یک ابزار فوق العاده است که دمای CPU را کنترل می کند و عمر باتری لپ تاپ ها را در بلند مدت افزایش می‌دهد. بهتراست که همراه با TLP هیچ نرم افزار ذخیره انرژی دیگری مانند Laptop Mode نصب نشده باشد. می توانیم آن را با استفاده از دستور زیر در ترمینال نصب کنیم:</p>

<pre><code>sudo apt install tlp tlp-rdw
</code></pre>

<p>یا اگر می‌خواهید از روی مخازن ppa آن را نصب کنید</p>

<pre><code>sudo add-apt-repository ppa:linrunner/tlp
# sudo apt update
sudo apt install tlp tlp-rdw
</code></pre>

<p>در این نسخه از اوبونتو بعد از اضافه کردن مخازن، به شکل پیش‌فرض دستور apt update اجرا می‌شود و نیازی به اجرای آن نداریم. پس از نصب، با اجرای دستور زیر کار برنامه را شروع می‌کنیم:</p>

<pre><code>sudo tlp start
</code></pre>

<h2 id="غیرفعال_کردن_suspend_اتوماتیک">غیرفعال کردن suspend اتوماتیک</h2>

<p>هنگام استفاده از باتری، اوبونتو در صورتی که بیش از ۲۰دقیقه با سیستم کاری نکنید، آن‌را suspend خواهد کرد. برای حفظ باتری گزینه‌ی خوبی به نظر می‌آید، اما مشکل اینجاست که اگر برای انجام کاری بخواهید لپ‌تاپ را به حال خود بگذارید، مثلا دانلود یک فایل بزرگ یا پردازش و محاسبات، بعد از بیست دقیقه برنامه‌های شما غیرفعال خواهند شد. به هر حال همیشه هم که نمی‌توان با استفاده از برق مستقیم با لپ‌تاپ کار کرد، از طرف دیگر من هر وقت با لپ‌تاپ کاری نداشته باشم آن‌را میبندم، پس اگر باز باشد یعنی در حال انجام کاری است و نباید به حالت غیرفعال برود. برای حل این مشکل در تنظیمات به این مسیر می‌رویم:</p>

<p class="left-para">System Settings -> Power</p>

<p>زیر قسمت Suspend &amp; Power Button بر روی automatic suspend کلیک می‌کنیم و تنظیمات را تغییر می‌دهیم.</p>

<p><img src="/images/2018-04-29-auto-suspend.png" alt="auto suspend" id="auto_suspend"></p>

<h2 id="دسترسی_به_تنظیمات_بیشتر">دسترسی به تنظیمات بیشتر</h2>

<p>برای شخصی‌سازی بیشتر و دسترسی به تنظیماتی که در setting اوبونتو در اختیارمان نیست، tweaks را نصب می‌کنیم</p>

<pre><code>sudo apt install gnome-tweak-tool
</code></pre>

<p>بعد از نصب با کمک tweak به مواردی که از قبل در دسترسمان نبودند، دسترسی پیدا می‌کنیم، از جمله:</p>

<ul>
<li>تغییر ظاهر GTK</li>
<li>حرکت دکمه های پنجره به سمت چپ</li>
<li>تنظیم رفتار ماوس/پد لمسی</li>
<li>فعال کردن نمایش «درصد باتری» را در نوار بالا</li>
<li>تغییر فونت سیستم</li>
<li>مدیریت پسوندهای فایل در گنوم</li>
<li>و خیلی چیزهای دیگر...</li>
</ul>

<h3 id="تغییر_پوسته_و_آیکون‌ها">تغییر پوسته و آیکون‌ها</h3>

<p>من تصمیم دارم از پوسته‌ی ظاهری <strong>arc</strong> و مجموعه آیکون‌های <strong>paper</strong> استفاده کنم. اول آن‌را نصب می‌کنیم</p>

<p>برای نصب arc-theme:</p>

<pre><code class="language-bash"> # arc-theme:
sudo apt install arc-theme
</code></pre>

<p>و برای نصب paper-icon-theme:</p>

<pre><code class="language-bash"> # paper Theme:
sudo add-apt-repository ppa:snwh/pulp
#sudo apt-get update
sudo apt-get install paper-icon-theme
</code></pre>

<p>بعد از نصب، با اجرای Tweaks تغییرات جدید را اعمال می‌کنم</p>

<p><img src="/images/2018-04-29-change-theme.png" alt="change theme" id="change_theme"></p>

<h3 id="نصب_گسترش‌دهنده‌های_gnome">نصب گسترش‌دهنده‌های GNOME</h3>

<p>می توانیم ابزار کوچک و بزرگی برای تغییر ظاهر یا بهبود کارکرد GNOME به آن اضافه کنیم، این ابزار را می‌توان به راحتی با استفاده از مرورگر نصب کرد.</p>

<p>برای شروع، نیاز داریم که <strong>۱-</strong> نصب افزونه مرورگر وب که هنگام ورود به <a href="https://extensions.gnome.org">وب‌سایت گستردنی‌های گنوم</a>، برای نصب آن اطلاع داده می‌شود. و <strong>۲-</strong> نصب <code>chrome-gnome-shell</code> (البته با وجود داشتن "کروم" در نام خود، با فایرفاکس هم به خوبی کار می کند):</p>

<pre><code>sudo apt install chrome-gnome-shell
</code></pre>

<p>پس از انجام این کار می توان با مراجعه به  <a href="https://extensions.gnome.org">وب‌سایت گستردنی‌های گنوم</a> در فایرفاکس یا گوگل کروم، یک گسترش‌دهنده را انتخاب کنید و با استفاده از دکمه‌ی on/off آن‌را نصب-فعال/غیرفعال کنید.</p>

<p><img src="/images/2018-04-29-gnome-extensions-install-button.png" alt="extensions gnome" id="extensions_gnome"></p>

<h3 id="تغییر_داک">تغییر داک</h3>

<p>همراه با نصب اوبونتو، یک نسخه از افزونه‌ی <em><a href="https://extensions.gnome.org/extension/307/dash-to-dock/">dash to dock</a></em> هم نصب می‌شود که به نظر من نه تنها تغییر یا بهبود خاصی در افزونه داده نشده، که تمام خاصیت‌های تنظیم آن هم غیرفعال شده. به همین دلیل ترجیح می‌دهم که آن را حذف کنم و از نسخه‌ی اصلی افزونه استفاده کنم.</p>

<pre><code>sudo apt remove gnome-shell-extension-ubuntu-dock
rm -rf ~/.local/share/gnome-shell/extensions/dash-to-dock@micxgx.gmail.com
</code></pre>

<p>سپس با مراجعه به صفحه‌ی افزونه <a href="https://extensions.gnome.org/extension/307/dash-to-dock/">dash to dock</a> آن‌را نصب می‌کنیم.</p>

<h2 id="نصب_برنامه‌های_بیشتر">نصب برنامه‌های بیشتر</h2>

<p>تقریبا همه چیز آماده شده و نوبت نصب برنامه‌های مورد نیاز است</p>

<h3 id="دانلود_منیجر_پرسپولیس">دانلود منیجر پرسپولیس</h3>

<p>مدیریت دانلود <a href="https://persepolisdm.github.io/fa">پرسپولیس</a> یک برنامه خوب برای مدیریت دانلودها</p>

<pre><code>sudo add-apt-repository ppa:persepolis/ppa
sudo apt install persepolis
</code></pre>

<h3 id="vlc">VLC</h3>

<p>پخش کننده‌ی چندرسانه‌ای با قابلیت پشتیبانی و پخش اکثر فرمت‌های موجود</p>

<pre><code>sudo apt install vlc browser-plugin-vlc
</code></pre>

<h3 id="gimp">Gimp</h3>

<p>ادیتور تصاویر، جایگزین خیلی خوب برای فوتوشاپ در کارهای روزانه و شخصی</p>

<pre><code>sudo apt install gimp gimp-data gimp-plugin-registry gimp-data-extras
</code></pre>

<h3 id="atom">atom</h3>

<p>یک IDE خوب برای کدنویسی و هر کار مشابه دیگر</p>

<pre><code>sudo add-apt-repository ppa:webupd8team/atom
sudo apt install atom
</code></pre>

<p>یا با استفاده از snap آن‌را نصب می‌کنیم</p>

<pre><code>sudo snap install atom
</code></pre>

<h3 id="shutter">Shutter</h3>

<p>گرفتن اسکرین شات از صفحه</p>

<pre><code>sudo apt install shutter
</code></pre>

<h3 id="tor">TOR</h3>

<p>حفاظت از حریم خصوصی، امنیت، عبور از تحریم‌های بین‌المللی و متاسفانه داخلی و...</p>

<pre><code>sudo apt install tor

sudo apt install obfs4proxy
    sudo gedit /etc/tor/torrc
        UseBridges 1
        ClientTransportPlugin obfs4 exec /usr/bin/obfs4proxy
        Bridge YOUR-OBFS4-BRIDGE

sudo systemctl daemon-reload
sudo systemctl restart tor.service
systemctl status tor.service

sudo apt install privoxy
    sudo gedit /etc/privoxy/config
        # این خط را از کامنت خارج کنید(از ابتدای خط # را حذف کنید)
             forward-socks5t / 127.0.0.1:9050 .

sudo apt install torsocks
    less /etc/tor/torsocks.conf
        # چک کنید که این ۲خط کامنت نباشند(در ابتدای خط # نباشد)
            TorAddress 127.0.0.1
            TorPort 9050

sudo apt install dnscrypt-proxy
</code></pre>

<h3 id="برنامه‌های_دیگر">برنامه‌های دیگر</h3>

<p>با سر زدن به <strong>Ubuntu Software</strong> تعداد بیشماری برنامه‌های کاربردی دیگری را پیدا خواهید کرد، از جمله می‌توان به این‌ها اشاره کرد:</p>

<ul>
<li>Steam           - یک چهارچوب عالی برای بازی‌</li>
<li>Spotify          - سرویس پخش آنلاین موسیقی</li>
<li>Telegram     - پیام رسانی متنی و صوتی</li>
<li>Skype            - تماس صوتی و تصویری</li>
<li>Mailspring   - مدیریت ای‌میل</li>
<li>Corebird      - اپلیکیشن توییتر</li>
<li>Simplenote  - یادداشت برداری با پشتیبانی ابری</li>
<li>megasync - پشتیبان گیری ابری و بک اپ اتوماتیک برای سایت mega</li>
</ul>

<hr>

<h4 id="پانویس">پانویس</h4>

<p>به عنوان یک آدم تنبل، ۳ اسکرین شات ابتدایی را از صفحه نمایش خودم نگرفتم، منبع آن‌ها این دو سایت هستند:</p>

<p class="left-para">https://www.omgubuntu.co.uk/ <br>
https://itsfoss.com/</p>]]></content>

    <summary>
    &lt;p&gt;این یادداشت شامل لیستی از کارهایی است که بعد از نصب نسخه‌ی پایدار جدید اوبونتو با اسم  Bionic Beaver با توجه به عادت‌ها و سلیقه‌های شخصیم و کاربردهای روزانه‌ای که از کامپیوتر انتظار دارم، برای استفاده روی لپ‌تاپ انجام داده‌ام، ممکن است بخشی از این یادداشت برای شما جالب نباشد یا نیازی به آن نداشته باشید، مطمینا با کمی جست‌و‌جو، نوشته‌های مشابه این یادداشت را از افراد دیگر با سلیقه‌ها و دیدگاه‌های متفاوت پیدا خواهید کرد، یا می‌توانید لیست کارهای خودتان را با توجه به نیازهای روزانه‌تان بنویسید.

دقت داشته باشید که این لیست برای اوبونتو با دسکتاپ گنوم نوشته شده، هرچند قسمت‌هایی از آن را میتوانید ر&lt;/p&gt;
    </summary>
  </entry>
  
  <entry>
    <title>مارک مور داون (مارک‌مود) / MarkMoreDown~>markmod</title>
    <link href="http://kiavash.one/2018/04/14/markmoredown/"/>
    <id>http://kiavash.one/2018/04/14/markmoredown/</id>

    <published>2018-04-14T11:28:05+0330</published>
    <updated>2018-04-14T11:28:05+0330</updated>

    <content type="html"><![CDATA[<a name="more"></a>
<p>برای کامل کردن <a href="http://miraxy.github.io">میرا</a> نیاز به یک تحلیل‌کننده‌ی متن به روز‌تر از تحلیل‌گر استاندارد مارک‌داون داشتم که علائم بیشتر و نگارش کامل‌تری داشته باشه، ازونجایی که میرا با پرل نوشته شده و چیزی که مورد نیازم بود با پرل نوشته نشده بود هنوز، ناچارا خودم دست به کار شدم.</p>

<p>اول تصمیم داشتم مارک‌داون با طعم گیت‌هاب رو بازنویسی کنم، اما با مرور زمان نیازهای بیشتری رو دیدم، مخصوصا برای متن‌هایی که نیاز هست راست به چپ بنویسیم و هر از گاهی ممکنه بخوایم چیزی رو چپ به راست بنویسیم که باعث شد به این فکر بیفتم که <strong>مارک‌داون با طعم میرا</strong> رو بنویسم که بعد از مدتی هم اسمش رو به markmoredown یا ساده تر markmod، مارک‌مود تغییر دادم.</p>

<p>برای دیدن یک مثال از متن‌های نوشته شده با مارک‌مود میتوانید متن همین پست را در <a href="/assets/markmod.txt">این لینک</a> ببینید.</p>

<ul>
<li><a href="#معرفی">معرفی</a></li>
<li><a href="#نصب">نصب</a></li>
<li><a href="#دستور_زبان">دستور زبان</a>
<ul>
<li><a href="#سربرگ‌ها">سربرگ‌ها</a>
<ul>
<li><a href="#برچسب‌های_دلخواه_در_سربرگ">برچسب‌های دلخواه</a></li>
</ul></li>
<li><a href="#جداکننده‌های_افقی">جداکننده‌های افقی</a></li>
<li><a href="#پاراگراف‌ها_و_خطوط_جدید">پاراگراف‌ها و خطوط جدید</a>
<ul>
<li><a href="#استایل_دادن_به_پاراگراف">استایل دادن به پاراگراف</a></li>
</ul></li>
<li><a href="#تایپوگرافی">تایپوگرافی</a>
<ul>
<li><a href="#متن_پررنگ_یا_قوی">متن پررنگ یا قوی</a></li>
<li><a href="#متن_کج_یا_مورد_تاکید">متن کج یا مورد تاکید</a></li>
<li><a href="#مارک_کردن">مارک کردن</a></li>
<li><a href="#متن_اضافه_شده">متن اضافه شده</a></li>
<li><a href="#متن_کوچک">متن کوچک</a></li>
<li><a href="#متن_حذف_شده">متن حذف شده</a></li>
<li><a href="#متن_حذف_اضافه_شده">متن حذف/اضافه شده</a></li>
<li><a href="#متن_بالانویس">متن بالانویس</a></li>
<li><a href="#متن_زیرنویس">متن زیرنویس</a></li>
</ul></li>
<li><a href="#لیست‌ها">لیست‌ها</a>
<ul>
<li><a href="#لیست‌های_ساده">لیست‌های ساده</a></li>
<li><a href="#لیست‌های_شماره‌دار">لیست‌های شماره‌دار</a></li>
<li><a href="#لیست‌های_تعریفی">لیست‌های تعریفی</a></li>
<li><a href="#جداساز‌_لیست‌ها">جداساز‌ لیست‌ها</a></li>
</ul></li>
<li><a href="#نقل_قول‌ها">نقل قول‌ها</a>
<ul>
<li><a href="#جداساز_نقل_قول‌ها">جداساز نقل قول‌ها</a></li>
</ul></li>
<li><a href="#لینک‌ها">لینک‌ها</a>
<ul>
<li><a href="#لینک‌های_درون‌خطی">لینک‌های درون‌خطی</a></li>
<li><a href="#لینک‌های_ارجاعی">لینک‌های ارجاعی</a></li>
<li><a href="#تعیین_خواص_لینک‌ها">تعیین خواص لینک‌ها</a></li>
</ul></li>
<li><a href="#تصاویر">تصاویر</a>
<ul>
<li><a href="#تصاویر_درخط">تصاویر درخط</a></li>
<li><a href="#تصاویر_ارجاعی">تصاویر ارجاعی</a></li>
<li><a href="#تعیین_خواص_تصاویر">تعیین خواص تصاویر</a></li>
</ul></li>
<li><a href="#کد">کد (code)</a>
<ul>
<li><a href="#کدهای_درخط">کدهای درخط</a></li>
<li><a href="#بلوک‌های_کد">بلوک‌های کد</a>
<ul>
<li><a href="#جداساز_بلوک‌های_کد">جداساز بلوک‌های کد</a></li>
</ul></li>
<li><a href="#بلوک‌های_کد_محصور">بلوک‌های کد محصور</a></li>
</ul></li>
<li><a href="#جداول">جداول</a></li>
<li><a href="#فرمول‌های_ریاضی">فرمول‌های ریاضی</a>
<ul>
<li><a href="#نمایش_بلوکی_فرمول‌های_ریاضی">نمایش بلوکی فرمول‌های ریاضی</a></li>
<li><a href="#نمایش_درخط_فرمول‌های_ریاضی">نمایش درخط فرمول‌های ریاضی</a></li>
</ul></li>
<li><a href="#پانویس">پانویس</a></li>
<li><a href="#کتاب_نگاری">کتاب نگاری</a></li>
</ul></li>
</ul>

<h2 id="معرفی">معرفی</h2>

<p>مارک‌مورداون یک کتابخانه‌ی آزاد با لایسنس MIT است برای تبدیل متن‌های شبه مارک‌داون به html که از مارک‌داون استاندارد به همراه تعدادی اصلاحات و امکانات اضافه که اکثرا از پارسرهای دیگر مارک‌داون مانند PHP Markdown Extra, MultiMarkdown, kramdown و... الهام گرفته شده‌اند پشتیبانی می‌کند.</p>

<h2 id="نصب">نصب</h2>

<p>اگر خارج از محیط میرا بخواهید از مارک‌مود استفاده کنید نیاز به پرل دارید. سیستم‌عامل‌های شبه یونیکس مثل توزیع‌های گنو/لینوکسی یا مک، پرل را به شکل پیش‌فرض دارند، برای ویندوز هم می‌توانید <a href="http://strawberryperl.com/">پرل توت‌فرنگی</a> را نصب کنید. بعد از مطمین شدن از نصب پرل با این دستور مارک‌مود را نصب کنید:</p>

<pre><code>cpan -i Text::Markmoredown
</code></pre>

<p>اگر بخواهید خارج از محیط برنامه نویسی از مارک‌مود استفاده کنید در خط فرمان این دستور را برای فایلی که نیاز به ترجمه دارد استفاده کنید:</p>

<pre><code>markmod filename.md
</code></pre>

<p>به این ترتیب خروجی ترجمه شده روی خط فرمان نمایش داده میشود. یا میتوانید آن را در یک فایل ذخیره کنید</p>

<pre><code>markmod filename &gt; name.html
</code></pre>

<p>همچنین کدهای منبع هم در <a href="https://github.com/kiamazi/markmoredown">مخزن گیت‌هاب پروژه</a> در دسترس هستند و میتونید از روی سورس نصبش کنید یا در گسترشش مشارکت کنید.</p>

<h2 id="دستور_زبان">دستور زبان</h2>

<h3 id="سربرگ‌ها">سربرگ‌ها</h3>

<p>سربرگ‌ها از h1 تا h6 fh با کمک # ها ساخته می‌شوند.</p>

<pre><code># h1 Heading
## h2 Heading
### h3 Heading
#### h4 Heading
##### h5 Heading
###### h6 Heading

&lt;h1&gt;h1 Heading&lt;/h1&gt;
&lt;h2&gt;h2 Heading&lt;/h2&gt;
&lt;h3&gt;h3 Heading&lt;/h3&gt;
&lt;h4&gt;h4 Heading&lt;/h4&gt;
&lt;h5&gt;h5 Heading&lt;/h5&gt;
&lt;h6&gt;h6 Heading&lt;/h6&gt;
</code></pre>

<p>برای سربرگ‌های ۱ و ۲ دستور زبان متفاوتی هم وجود دارد:</p>

<pre><code>Alt-H1
======

Alt-H2
------

&lt;h1&gt;Alt-H1&lt;/h1&gt;
&lt;h2&gt;Alt-H2&lt;/h2&gt;
</code></pre>

<h4 id="برچسب‌های_دلخواه_در_سربرگ">برچسب‌های دلخواه در سربرگ</h4>

<pre><code>## h2 #:head-label
#### h4 ######## :my-label

&lt;h2 id="head-label"&gt;h2&lt;/h2&gt;
&lt;h4 id="my-label"&gt;h4&lt;/h4&gt;

Alt-h1
====== :my-label

&lt;h1 id="my-label"&gt;Alt-H1&lt;/h1&gt;
</code></pre>

<h3 id="جداکننده‌های_افقی">جداکننده‌های افقی</h3>

<p>جداکننده‌های افقی با استفاده از تکرار بیشتر از ۳تای - یا ـ یا * شناخته می‌شوند که میتوانند بینشان از یک فاصله‌ی دلخواه هم استفاده کرد</p>

<pre><code>***
---
___
* * * * * * * * *
--------
______________

&lt;hr&gt;
</code></pre>

<hr>

<h3 id="پاراگراف‌ها_و_خطوط_جدید">پاراگراف‌ها و خطوط جدید</h3>

<p>پاراگراف‌ها <code>&lt;p&gt;</code> با استفاده از یک خط خالی بین دو بلوک متن مشخص می‌شوند و خطوط جدید<code>&lt;hr&gt;</code> با دو فاصله(space) در آخر خط شناخته می‌شوند.</p>

<p style="font-family:mono;font-szie:12px;background-color:#EEE;padding:10px;">لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ و با استفاده از طراحان گرافیک است. چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است و برای شرایط فعلی تکنولوژی مورد نیاز و کاربردهای متنوع با هدف بهبود ابزارهای کاربردی می باشد.
<br><br>
کتابهای زیادی در شصت و سه درصد گذشته، حال و آینده شناخت فراوان جامعه و متخصصان را می طلبد تا با نرم افزارها شناخت بیشتری را برای طراحان رایانه ای علی الخصوص طراحان خلاقی و فرهنگ پیشرو در زبان فارسی ایجاد کرد.⋅⋅
در این صورت می توان امید داشت که تمام و دشواری موجود در ارائه راهکارها و شرایط سخت تایپ به پایان رسد وزمان مورد نیاز شامل حروفچینی دستاوردهای اصلی و جوابگوی سوالات پیوسته اهل دنیای موجود طراحی اساسا مورد استفاده قرار گیرد.</p>

<p>در پاراگراف دوم ⋅⋅ به معنی ۲ فاصله(space) متوالی است. نتیجه دو پاراگراف فوق این است:</p>

<p style="background-color:#EEE;padding:10px;">لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ و با استفاده از طراحان گرافیک است. چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است و برای شرایط فعلی تکنولوژی مورد نیاز و کاربردهای متنوع با هدف بهبود ابزارهای کاربردی می باشد.</p>

<p style="background-color:#EEE;padding:10px;">کتابهای زیادی در شصت و سه درصد گذشته، حال و آینده شناخت فراوان جامعه و متخصصان را می طلبد تا با نرم افزارها شناخت بیشتری را برای طراحان رایانه ای علی الخصوص طراحان خلاقی و فرهنگ پیشرو در زبان فارسی ایجاد کرد. <br>
در این صورت می توان امید داشت که تمام و دشواری موجود در ارائه راهکارها و شرایط سخت تایپ به پایان رسد وزمان مورد نیاز شامل حروفچینی دستاوردهای اصلی و جوابگوی سوالات پیوسته اهل دنیای موجود طراحی اساسا مورد استفاده قرار گیرد.</p>

<h4 id="استایل_دادن_به_پاراگراف">استایل دادن به پاراگراف</h4>

<p>برای استایل دادن به یک پاراگراف در آخر هر پاراگراف در یک خط جدید بین یک آکولاد و یک مساوی بلافاصله بعد از آن و آکولاد بسته میتوان کلاس‌ها، id و هر چیز موردد نیا دیگری را نوشت. هر کلاس با یک . و هر id با یک # در ابتدا مشخص میشوند و با یک فاصله از هم جدا میشوند. به جز جدا کردن این مشخصه ها از هم در هیچ جای دیگری از فاصله نباید استفاده شود.</p>

<pre><code>{= .class #id style="..." dir="..." align="..." style="background:#DDD;font-size:12px;" more... }
</code></pre>

<pre><code>Lorem ipsum dolor sit amet, graecis denique ei vel, at duo primis mandamus.
Et legere ocurreret pri, animal tacimates complectitur ad cum. Cu eum
inermis inimicus efficiendi.⋅⋅
Labore officiis his ex, soluta officiis
concludaturque ei qui, vide sensibus vim ad.
{= .class #entry .more align="center" #body width="200px" }
</code></pre>

<p class="class more" id="entry body" align="center" width="200px">Lorem ipsum dolor sit amet, graecis denique ei vel, at duo primis mandamus. Et legere ocurreret pri, animal tacimates complectitur ad cum. Cu eum inermis inimicus efficiendi.
<br>
Labore officiis his ex, soluta officiisconcludaturque ei qui, vide sensibus vim ad.</p>

<h3 id="تایپوگرافی">تایپوگرافی</h3>

<h4 id="متن_پررنگ_یا_قوی">متن پررنگ یا قوی</h4>

<p>متن های پررنگ با تکرار دو ستاره قبل و بعد از کلمات مشخص میشوند</p>

<p>این قسمت از متن **پر رنگ** یا **قوی** است.</p>

<p>این قسمت از متن <strong>پر رنگ</strong> یا <strong>قوی</strong> است.</p>

<h4 id="متن_کج_یا_مورد_تاکید">متن کج یا مورد تاکید</h4>

<p>برای کج نوشتن یا موردتاکید قرار دادن یک کلمه از یک زیرخط _ قبل و بعد از کلمات استفاده می‌کنیم.</p>

<p>این کلمه <strong>_مورد تاکید_</strong> است</p>

<pre><code>این کلمه &lt;em&gt;مورد تاکید&lt;/em&gt; است
</code></pre>

<p>این کلمه <em>مورد تاکید</em> است</p>

<h4 id="مارک_کردن">مارک کردن</h4>

<p>کلمات با دو مساوی = قبل و بعدشان مارک می‌شوند</p>

<pre><code>می‌توان قسمتی از متن را ==مارک== کرد

می‌توان قسمتی از متن را &lt;mark&gt;مارک&lt;/mark&gt; کرد
</code></pre>

<p>می‌توان قسمتی از متن را <mark>مارک</mark> کرد</p>

<h4 id="متن_اضافه_شده">متن اضافه شده</h4>

<p>با استفاده از دو بعلاوه + متن اضافه شده مشخص میشود</p>

<p>این یک متن است که این <strong>++کلمه++</strong> به آن اضافه شده است.</p>

<pre><code>این یک متن است که این &lt;ins&gt;کلمه&lt;/ins&gt; به آن اضافه شده است.
</code></pre>

<p>این یک متن است که این <ins>کلمه</ins> به آن اضافه شده است.</p>

<h4 id="متن_کوچک">متن کوچک</h4>

<p>با استفاده از دو منفی - قبل و بعد از هر کلمه آن را کوچک می‌کنیم</p>

<p>این کلمه <strong>--کوچک‌تر--</strong> است</p>

<pre><code>این کلمه &lt;small&gt;کوچکتر&lt;/small&gt; است
</code></pre>

<p>این کلمه <small>کوچکتر</small> است</p>

<h4 id="متن_حذف_شده">متن حذف شده</h4>

<p>با استفاده از دو آکولاد ~ قبل و بعد از کلمات آن‌ها را حذف شده معرفی می‌کنیم</p>

<p>قسمتی از متن <strong>~~ابتشاه~~</strong> نوشته شده</p>

<pre><code>قسمتی از متن &lt;del&gt;ابتشاه&lt;/del&gt; نوشته شده
</code></pre>

<p>قسمتی از متن <del>ابتشاه</del> نوشته شده</p>

<h4 id="متن_حذف_اضافه_شده">متن حذف/اضافه شده</h4>

<p>این قسمت از متن <strong>~~ابتشاه~>اشتباه~~</strong> نوشته شده بود</p>

<pre><code>این قسمت از متن &lt;del&gt;ابتشاه&lt;/del&gt; &lt;ins&gt;اشتباه&lt;/ins&gt; نوشته شده بود
</code></pre>

<p>این قسمت از متن <del>ابتشاه</del> <ins>اشتباه</ins> نوشته شده بود</p>

<p>قبل و بعد از ~> یک فاصله اختیاری است.</p>

<h4 id="متن_بالانویس">متن بالانویس</h4>

<pre><code>x ^y + z^

x &lt;sup&gt;y + z&lt;/sup&gt;
</code></pre>

<p>اکس به توان وای بعلاوه زد یا اکس <sup>وای + زد</sup> در نظر گرفته شود. <br>
x <sup>y + z</sup></p>

<h4 id="متن_زیرنویس">متن زیرنویس</h4>

<p>متن <strong>~زیرنویس~</strong></p>

<p>متن <sub>زیرنویس</sub></p>

<pre><code>C~6~H~12~O~6~

C&lt;sub&gt;6&lt;/sub&gt;H&lt;sub&gt;12&lt;/sub&gt;O&lt;sub&gt;6&lt;/sub&gt;
</code></pre>

<p>C<sub>6</sub>H<sub>12</sub>O<sub>6</sub></p>

<h3 id="لیست‌ها">لیست‌ها</h3>

<h4 id="لیست‌های_ساده">لیست‌های ساده</h4>

<p>لیست های ساده با خط تیره (-) علامت جمع (+) یا ستاره (*) در ابتدای خط مشخص میشوند. با هر بار تو رفتگی با چهار اسپیس میتوان یک زیر لیست در لیست قبلی مشخص کرد. ترتیب استفاده از علایم هیچ اهمیتی ندارد.</p>

<pre><code>+ لورم ایپسوم
+ متن ساختگی
+ با تولید سادگی نامفهوم
+ از صنعت چاپ
+ و با استفاده از
+ طراحان گرافیک است.
    - چاپگرها
    - متون
    - روزنامه
    - مجله
        * در ستون
        * و سطرآنچنان که
        * لازم است
    - برای شرایط فعلی
    - تکنولوژی مورد نیاز
+ کاربردهای متنوع
+ با هدف بهبود
+ ابزارهای کاربردی می باشد.

&lt;ul&gt;
  &lt;li&gt;لورم ایپسوم&lt;/li&gt;
  ...
  &lt;li&gt;طراحان گرافیک است.&lt;/li&gt;
    &lt;ul&gt;
      &lt;li&gt;چاپگرها&lt;/li&gt;
      ...
      &lt;li&gt;مجله&lt;/li&gt;
        &lt;ul&gt;
          &lt;li&gt;در ستون&lt;/li&gt;
          ...
          &lt;li&gt;لازم است
        &lt;/ul&gt;
      ...
      &lt;li&gt;تکنولوژی مورد نیاز
    &lt;/ul&gt;
  ...
  &lt;li&gt;ابزارهای کاربردی می باشد.&lt;/li&gt;
</code></pre>

<ul>
<li>لورم ایپسوم</li>
<li>متن ساختگی</li>
<li>با تولید سادگی نامفهوم</li>
<li>از صنعت چاپ</li>
<li>و با استفاده از</li>
<li>طراحان گرافیک است.
<ul>
<li>چاپگرها</li>
<li>متون</li>
<li>روزنامه</li>
<li>مجله
<ul>
<li>در ستون</li>
<li>و سطرآنچنان که</li>
<li>لازم است</li>
</ul></li>
<li>برای شرایط فعلی</li>
<li>تکنولوژی مورد نیاز</li>
</ul></li>
<li>کاربردهای متنوع</li>
<li>با هدف بهبود</li>
<li>ابزارهای کاربردی می باشد.</li>
</ul>

<h4 id="لیست‌های_شماره‌دار">لیست‌های شماره‌دار</h4>

<p>این لیست‌ها با یک عدد در ابتدا به همراه یک نقطه بلافاصله بعد از آن شناخته می‌شوند.</p>

<pre><code>1. لورم ایپسوم
2. متن ساختگی
3. با تولید سادگی نامفهوم
  1. از صنعت چاپ
  2. و با استفاده از
4. طراحان گرافیک است.
5. چاپگرها
  - متون
  - روزنامه
  - مجله
    1. در ستون
    2. و سطرآنچنان که
    3. لازم است
6. برای شرایط فعلی
7. تکنولوژی مورد نیاز
8. کاربردهای متنوع
  + با هدف بهبود
  + ابزارهای کاربردی می باشد.
</code></pre>

<ol>
<li>لورم ایپسوم</li>
<li>متن ساختگی</li>
<li>با تولید سادگی نامفهوم
<ol>
<li>از صنعت چاپ</li>
<li>و با استفاده از</li>
</ol></li>
<li>طراحان گرافیک است.</li>
<li>چاپگرها
<ul>
<li>متون</li>
<li>روزنامه</li>
<li>مجله
<ol>
<li>در ستون</li>
<li>و سطرآنچنان که</li>
<li>لازم است</li>
</ol></li>
</ul></li>
<li>برای شرایط فعلی</li>
<li>تکنولوژی مورد نیاز</li>
<li>کاربردهای متنوع
<ul>
<li>با هدف بهبود</li>
<li>ابزارهای کاربردی می باشد.</li>
</ul></li>
</ol>

<h4 id="لیست‌های_تعریفی">لیست‌های تعریفی</h4>

<pre><code>سیب
:   درخت سیب (نام علمی: M. pumila) درختی برگریز از خانواده گلسرخیان است 
    که به خاطر میوه شیرین و گوشتی‌اش شناخته شده‌است. 
:   در برخی از منابع مذهبی به عنوان گیاه ممنوعه‌ای که باعث اخراج آدم از بهشت شد معرفی شده‌است.

پرتقال
:    میوه‌ای از خانواده مرکبات می‌باشد. درخت آن همیشه سبز و پر برگ است و ارتفاع آن تا ۱۰ متر هم می‌رسد. 
</code></pre>

<p>برابر است با:</p>

<pre><code>&lt;dl&gt;
&lt;dt&gt;سیب&lt;/dt&gt;
&lt;dd&gt;درخت سیب (نام علمی: M. pumila) درختی برگریز از خانواده گلسرخیان است که به خاطر میوه شیرین و گوشتی‌اش شناخته شده‌است.&lt;/dd&gt;
&lt;dd&gt;در برخی از منابع مذهبی به عنوان گیاه ممنوعه‌ای که باعث اخراج آدم از بهشت شد معرفی شده‌است.&lt;/dd&gt;

&lt;dt&gt;پرتقال&lt;/dt&gt;
&lt;dd&gt;میوه‌ای از خانواده مرکبات می‌باشد. درخت آن همیشه سبز و پر برگ است و ارتفاع آن تا ۱۰ متر هم می‌رسد.&lt;/dd&gt;
&lt;/dl&gt;
</code></pre>

<dl>
<dt>سیب</dt>
<dd>
درخت سیب (نام علمی: M. pumila) درختی برگریز از خانواده گلسرخیان است 
که به خاطر میوه شیرین و گوشتی‌اش شناخته شده‌است. 
</dd>
<dd>
در برخی از منابع مذهبی به عنوان گیاه ممنوعه‌ای که باعث اخراج آدم از بهشت شد معرفی شده‌است.
</dd>

<dt>پرتقال</dt>
<dd>
میوه‌ای از خانواده مرکبات می‌باشد. درخت آن همیشه سبز و پر برگ است و ارتفاع آن تا ۱۰ متر هم می‌رسد.
</dd>

</dl>

<h4 id="جداساز‌_لیست‌ها">جداساز‌ لیست‌ها</h4>

<p>اگر می‌خواهید یک لیست بلافاصله بعد از لیست قبلی داشته باشید برای جدا کردن این لیست‌ها از یک خط که تنها یک ^ دارد بین دو لیست استفاده کنید.</p>

<pre><code>* List one

^

* List two
</code></pre>

<h3 id="نقل_قول‌ها">نقل قول‌ها</h3>

<p>خطوطی که با یک > در ابتدا شروع میشوند یک نقل قول هستند. نقل قول‌ها میتوانند تو در تو باشند و از یک نقل قول درون یک نقل قول دیگر استفاده کرد. همچنین سایر علایم مارک‌داون شامل لیست‌ها، سربرگ‌ها و کدها هم در بین نقل قول‌ها معتبر هستند.</p>

<pre><code>&gt; این یک نقل قول در ۲پاراگراف است. نقل قول‌ها برای نمایش
&gt; متنی سخن دیگران یا ارجاع دادن به مطالبی از منابع متفاوت و
&gt; خارج از متن اصلی است
&gt;
&gt; ادامه نقل قول در پاراگراف دوم

&lt;blockquote&gt;
&lt;p&gt;
این یک نقل قول در ۲پاراگراف است. نقل قول‌ها برای نمایش متنی سخن دیگران یا ارجاع دادن به مطالبی از منابع متفاوت و خارج از متن اصلی است
&lt;/p&gt;
&lt;p&gt;
ادامه نقل قول در پاراگراف دوم
&lt;/p&gt;
&lt;/blockquote&gt;
</code></pre>

<p>مارک‌داون به شدت ساده‌گیر است و میتوان پاراگراف را مانند مثال بالا در چندین خط جدا از هم یا به شکل مثال پایین به صورت متوالی نوشت</p>

<pre><code>&gt; این یک نقل قول در ۲پاراگراف است. نقل قول‌ها برای نمایش متنی سخن دیگران یا ارجاع دادن به مطالبی از منابع متفاوت و خارج از متن اصلی است

&gt; ادامه نقل قول در پاراگراف دوم
</code></pre>

<p>همچنین در هر نقل قول میتوان از سایر اجزای مارک‌داون شامل نقل قول، سربرگ‌ها لیست ها و بلوک‌های کد استفاده کرد</p>

<pre><code>&gt; این یک نقل قول است
&gt;
&gt; &gt; این یک نقل قول درون یک نقل قول دیگر است
&gt;
&gt; ## سربرگ سطح دو
&gt;
&gt;1. آیتم یک
&gt;2. آیتم دوم
&gt;
&gt;        return shell_exec("echo $input | $markdown_script"); [بلوک کد]
</code></pre>

<blockquote>
  <p>این یک نقل قول است</p>
  
  <blockquote>
    <p>این یک نقل قول درون یک نقل قول دیگر است</p>
  </blockquote>
  
  <h2 id="سربرگ_سطح_دو">سربرگ سطح دو</h2>
  
  <ol>
  <li>آیتم یک</li>
  <li><p>آیتم دوم</p>
  
  <p>return shell_exec("echo $input | $markdown_script"); [بلوک کد]</p></li>
  </ol>
</blockquote>

<h4 id="جداساز_نقل_قول‌ها">جداساز نقل قول‌ها</h4>

<p>اگر می‌خواهید یک نقل قول بلافاصله بعد از یک نقل قول دیگر داشته باشید برای جدا کردنشان از یک خط که تنها یک ^ دارد بین دو بلوک استفاده کنید.</p>

<pre><code>&gt; block1

^

&gt; block2
</code></pre>

<h3 id="لینک‌ها">لینک‌ها</h3>

<p>مارک‌داون از ۲ نوع لینک پشتیبانی میکند، لینک‌های درون خطی و لینک‌های ارجاعی.</p>

<h4 id="لینک‌های_درون‌خطی">لینک‌های درون‌خطی</h4>

<p>لینک‌های درون‌خطی را به این شکل میتوان ایجاد کرد</p>

<pre><code>This is [an example](http://example.com/ "Title") inline link.

[This link](http://example.net/) has no title attribute.

---

&lt;p&gt;This is &lt;a href="http://example.com/" title="Title"&gt;
an example&lt;/a&gt; inline link.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://example.net/"&gt;This link&lt;/a&gt; has no
title attribute.&lt;/p&gt;
</code></pre>

<h4 id="لینک‌های_ارجاعی">لینک‌های ارجاعی</h4>

<p>و لینک های ارجاعی نیز ساختاری به این صورت دارند</p>

<pre><code>This is [an example][id] reference-style link.
یا
This is [an example] [id] reference-style link.
ادامه متن و متن و متن و متن.

[id]: http://example.com/  "Optional Title Here"

---

&lt;p&gt;This is &lt;a href="http://example.com/" title="Optional Title Here"&gt;an example&lt;/a&gt; reference-style link.&lt;/p&gt;

&lt;p&gt;This is &lt;a href="http://example.com/" title="Optional Title Here"&gt;an example&lt;/a&gt; reference-style link.&lt;/p&gt;

&lt;p&gt;ادامه متن و متن و متن و متن.&lt;/p&gt;
</code></pre>

<p>همچنین لینک‌های ارجاعی رو به این صورت هم میتوان نوشت</p>

<pre><code>my name is [kiavash][]

سایر پاراگراف‌ها و....

[kiavash]: https://kiavash.one/
</code></pre>

<h4 id="تعیین_خواص_لینک‌ها">تعیین خواص لینک‌ها</h4>

<p>در مارک‌مود برای لینک‌ها میتوان خاصیت‌های شخصی هم تعریف کرد. برای اینکار باید بلافاصله بعد از پرانتز یا براکت پایانی یک آکولاد باز و بسته کرد و نشخصات را در آن تعریف کرد.</p>

<pre><code>This is [an example][id]{.class1 .class2 #id1 style="..." #id3 other-attributes}
یا
[This link](http://kiavash.one/){.class1 .class2 #id1 style="..." #id3 name="link-name" other-attributes=""}

&lt;a class="class1 class2" id="id1 id3" style="..." name="link-name" other-attributes=""&gt;This link&lt;/a&gt;
</code></pre>

<p><strong>از کاراکتر فاصله در مشخصات استفاده نکنید</strong></p>

<pre><code>اشتباه
style="border: 1px; width: 150px"

صحیح
style="border:1px;width:150px"
</code></pre>

<h3 id="تصاویر">تصاویر</h3>

<p>برای اضافه کردن تصاویر از همان کاراکترهای مورد استفاده برای افزودن لینک‌ها استفاده میکنیم، تنها یک علامت تعجب اضافه در ابتدای آن باید قید شود.</p>

<h4 id="تصاویر_درخط">تصاویر درخط</h4>

<pre><code>![Alt text](/path/to/img.jpg)

![Alt text](/path/to/img.jpg "Optional title")
</code></pre>

<h4 id="تصاویر_ارجاعی">تصاویر ارجاعی</h4>

<pre><code>![Alt text][id]

سایر پاراگراف‌ها و....

[id]: url/to/image  "Optional title attribute"
</code></pre>

<h4 id="تعیین_خواص_تصاویر">تعیین خواص تصاویر</h4>

<p>در مارک‌مود برای تصاویر میتوان خاصیت‌های شخصی هم تعریف کرد. برای اینکار باید بلافاصله بعد از پرانتز یا براکت پایانی یک آکولاد باز و بسته کرد و نشخصات را در آن تعریف کرد.</p>

<pre><code>![Alt text](/path/to/img.jpg){.class1 .class2 #id1 style="..." #id3 width="100px" height="100px"}

![Alt text][id]{.class1 .class2 #id1 style="border:2px;max-width:100%" #id3 other-attributes}
</code></pre>

<p><strong>از کاراکتر فاصله در مشخصات استفاده نکنید</strong></p>

<pre><code>اشتباه
style="border: 1px; width: 150px"

صحیح
style="border:1px;width:150px"
</code></pre>

<h3 id="کد">کد (code)</h3>

<h4 id="کدهای_درخط">کدهای درخط</h4>

<p>تنها کافی است قبل و بعد از هر کد درون خطی یک (`) گذاشته شود</p>

<p>برای پرینت کردن در خروجی از `printf()` استفاده کنید</p>

<p>برای پرینت کردن در خروجی از <code>printf()</code> استفاده کنید</p>

<h4 id="بلوک‌های_کد">بلوک‌های کد</h4>

<p>برای نوشتن یک بلوک کد تنها کافی است به اندازه‌ی یک tab یا ۴کاراکتر فاصله(space) در ابتدای هر خط خالی جلو برویم.</p>

<pre><code>This is a normal paragraph:

    This is a code block.
</code></pre>

<p>برابر است با</p>

<pre><code>&lt;p&gt;This is a normal paragraph:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;This is a code block.
&lt;/code&gt;&lt;/pre&gt;
</code></pre>

<p>همچنین فرورفتگی‌ها در کدهای بلوکی حفظ می‌شوند.</p>

<pre><code>Here is an example of AppleScript:

    tell application "Foo"
        beep
    end tell
</code></pre>

<p>برابر است با:</p>

<pre><code>&lt;p&gt;Here is an example of AppleScript:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;tell application "Foo"
    beep
end tell
&lt;/code&gt;&lt;/pre&gt;
</code></pre>

<h5 id="جداساز_بلوک‌های_کد">جداساز بلوک‌های کد</h5>

<p>اگر می‌خواهید یک بلوک کد بلافاصله بعد از یک بلوک دیگر داشته باشید برای جدا کردنشان از یک خط که تنها یک ^ دارد بین دو بلوک استفاده کنید.</p>

<pre><code>    code block1
    code block1

^

    code block2
    code block2
</code></pre>

<h4 id="بلوک‌های_کد_محصور">بلوک‌های کد محصور</h4>

<p>از یک حصار ``` برای مشخص کردن این بلوک‌ها استفاده میشود و نیازی به اعمال فرورفتگی‌ها ندارند.</p>

<pre><code>```
codes...
```
</code></pre>

<p>میتوان کلاس زبان یا خواص دیگر class را برای این حصارها مشخص کرد. اگر بعد از کلاس نام زبان برنامه نویسی مورد نظرتان را بنویسید کلاس زبان در نظر گرفته خواهد شد.</p>

<pre><code>``` perl
code...
code...
code...
```

&lt;pre&gt;&lt;code class="language-perl"&gt;
    code...
    code...
    code...
&lt;/code&gt;&lt;/pre&gt;
</code></pre>

<p>و اگر با : بعد از حصار نام کلاس را بنویسید، کلاس شخصی در نظر گرفته خواهد شد.</p>

<pre><code>``` :class-name
some codes...
```

&lt;pre&gt;&lt;code class="class-name"&gt;
some codes...
&lt;/code&gt;&lt;/pre&gt;
</code></pre>

<h3 id="جداول">جداول</h3>

<p>جدول ها به سادگی نمایششان با خطوط ساخته میشوند.</p>

<pre><code>|              | Grouping                    ||
| First Header | Second Header | Third Header |
| ------------ | :-----------: | -----------: |
| Content      | *Long Cell*                 ||
| Content      | **Cell**     | Cell         |
| New section  | More          | Data         |
</code></pre>

<table class="markmod_table">
<col>
<col align="center">
<col align="right">
<thead>
<tr>
	<th> </th>
	<th colspan="2">Grouping</th>
</tr>
<tr>
	<th>First Header</th>
	<th>Second Header</th>
	<th>Third Header</th>
</tr>
</thead>
<tbody>
<tr>
	<td>Content</td>
	<td colspan="2" align="center"><em>Long Cell</em></td>
</tr>
<tr>
	<td>Content</td>
	<td align="center"><strong>Cell</strong></td>
	<td align="right">Cell</td>
</tr>
<tr>
	<td>New section</td>
	<td align="center">More</td>
	<td align="right">Data</td>
</tr>
</tbody>
</table>

<h3 id="فرمول‌های_ریاضی">فرمول‌های ریاضی</h3>

<p>فرمول‌های ریاضی را به صورت در خط و بلوکی میتوان نمایش داد. در حال حاضر مارک مود تنها از MathML2 پشتیبانی میکند. <small>(ممکن است فرمول‌ها را به صورت کامل و صحیح نبینید، بعضی از مرورگها مثل اپرا یا کروم، پشتیبانی کامل از MathML ندارند، اما اگر از فایرفاکس استفاده می‌کنید فرمول‌ها را کامل و صحیح خواهید دید.)</small></p>

<h4 id="نمایش_بلوکی_فرمول‌های_ریاضی">نمایش بلوکی فرمول‌های ریاضی</h4>

<pre><code>$$
{e}^{i\pi }+1=0
$$
</code></pre>

<p>یا</p>

<pre><code>    \\[
    {(2x,+,17y,=,23),(x,-,y,=,5):}
    \\]
</code></pre>

<p>که به ترتیب به این صورت به نمایش در میایند:<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><mstyle><msup><mrow><mo>{</mo><mi>e</mi><mo>}</mo></mrow><mrow><mi>i</mi><mi>&#x03C0;</mi></mrow></msup><mo>+</mo><mn>1</mn><mo>=</mo><mn>0</mn></mstyle></math>و<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><mstyle><mrow><mo>{</mo><mtable columnalign="left"><mtr><mtd><mn>2</mn><mi>x</mi></mtd><mtd><mo>+</mo></mtd><mtd><mn>17</mn><mi>y</mi></mtd><mtd><mo>=</mo></mtd><mtd><mn>23</mn></mtd></mtr><mtr><mtd><mi>x</mi></mtd><mtd><mo>-</mo></mtd><mtd><mi>y</mi></mtd><mtd><mo>=</mo></mtd><mtd><mn>5</mn></mtd></mtr></mtable></mrow></mstyle></math><h4 id="نمایش_درخط_فرمول‌های_ریاضی">نمایش درخط فرمول‌های ریاضی</h4></p>

<pre><code>    $Math formula$

یا

    \\(
    formula
    \\)
</code></pre>

<p>که به ترتیب به اینصورت استفاده میشوند.</p>

<p>تست یک فرمول \$sum_(i=1)<sup>n i</sup>3=((n(n+1))/2)^2\$ به صورت بر خط</p>

<p dir="ltr">a formula test \\(sum_(i=1)<sup>n i</sup>3=((n(n+1))/2)^2\\)</p>

<p>تست یک فرمول $sum_(i=1)<sup>n i</sup>3=((n(n+1))/2)^2$ به صورت بر خط</p>

<p>تست همان فرمول <math xmlns="http://www.w3.org/1998/Math/MathML" display="inline"><mstyle><mrow><munderover><mo>&#x2211;</mo><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>n</mi></munderover></mrow><msup><mi>i</mi><mn>3</mn></msup><mo>=</mo><msup><mrow><mo>(</mo><mfrac><mrow><mi>n</mi><mrow><mo>(</mo><mi>n</mi><mo>+</mo><mn>1</mn><mo>)</mo></mrow></mrow><mn>2</mn></mfrac><mo>)</mo></mrow><mn>2</mn></msup></mstyle></math> به شکل دیگر</p>

<h3 id="پانویس">پانویس</h3>

<p>برای مثال میتوان گفت که این کتابخانه با استفاده از پرل[^perl] نوشته شده است.</p>

<p>[^perl]: پرل یک زبان برنامه نویسی است</p>

<p>که نتیجه به این صورت خواهد بود:</p>

<p>برای مثال میتوان گفت که این کتابخانه با استفاده از پرل<a href="#fn:perl" id="fnref:perl" class="footnote">1</a> نوشته شده است.</p>

<h3 id="کتاب_نگاری">کتاب نگاری</h3>

<p>این مطالب برگرفته از این کتاب بود [پاراگراف پنجم، خط دوم][#منبع]</p>

<p>[#منبع]: یک کتاب تخیلی، فصل سوم، پاراگراف پنجم، خط دوم، نوشته شده توسط کیاوش، انتشارات نامعلوم</p>

<p>که به این صورت نمایش داده خواهد شد:</p>

<p>این مطالب برگرفته از این کتاب بود <span class="markdowncitation"> (<a href="#منبع">1</a>, <span class="locator">پاراگراف پنجم، خط دوم</span>)</span></p>

<div class="footnotes">
<hr>
<ol>

<li id="fn:perl"><p>پرل یک زبان برنامه نویسی است<a href="#fnref:perl" class="reversefootnote">&#160;&#8617;</a></p></li>

</ol>
</div>

<div class="bibliography">
<hr>

<div id="منبع"><p>[1] <span class="item">یک کتاب تخیلی، فصل سوم، پاراگراف پنجم، خط دوم، نوشته شده توسط کیاوش، انتشارات نامعلوم</span></p></div>

</div>]]></content>

    <summary>
    &lt;p&gt;برای کامل کردن میرا نیاز به یک تحلیل‌کننده‌ی متن به روز‌تر از تحلیل‌گر استاندارد مارک‌داون داشتم که علائم بیشتر و نگارش کامل‌تری داشته باشه، ازونجایی که میرا با پرل نوشته شده و چیزی که مورد نیازم بود با پرل نوشته نشده بود هنوز، ناچارا خودم دست به کار شدم.

اول تصمیم داشتم مارک‌داون با طعم گیت‌هاب رو بازنویسی کنم، اما با مرور زمان نیازهای بیشتری رو دیدم، مخصوصا برای متن‌هایی که نیاز هست راست به چپ بنویسیم و هر از گاهی ممکنه بخوایم چیزی رو چپ به راست بنویسیم که باعث شد به این فکر بیفتم که مارک‌داون با طعم میرا رو بنویسم که بعد از مدتی هم اسمش رو به markmoredown یا ساده تر markmod، مارک‌مود تغییر&lt;/p&gt;
    </summary>
  </entry>
  
  <entry>
    <title>مارک داون / MarkDown</title>
    <link href="http://kiavash.one/2018/03/19/markdown/"/>
    <id>http://kiavash.one/2018/03/19/markdown/</id>

    <published>2018-03-19T23:59:29+0330</published>
    <updated>2018-03-19T23:59:29+0330</updated>

    <content type="html"><![CDATA[<a name="more"></a>
<p>همه ما روزانه کم یا زیاد، به بهانه‌های مختلف و برای موضوعات متفاوت نیاز به نوشتن و یادداشت برداری داریم، تا چندسال پیش بیشتر با کاغذ و قلم و این روزها بیشتر با کامپیوترهای کوچیک و بزرگی که همه جا دم دستمون هستن. معمولا موقع نوشتن از امکاناتی مثل پررنگ کردن قسمتی از متن برای جلب توجه بیشتر یا استفاده از تیترها، پی‌نوشت‌ها، ارجاع‌ها و سایر موارد نگارشی هم استفاده می‌کنیم، اما یکی از مشکلاتی که خیلی وقت‌ها توی این یاداشت برداری‌ها باهاش مواجه میشیم برنامه‌هایی هست که برای اینکار استفاده میکنیم، ممکنه از مایکروسافت آفیس و برنامه word استفاده کنیم اما روی خیلی از موبایل‌ها نتونیم بازشون کنیم یا بخوایم نوشته هامون رو برای کسی ایمیل کنیم و نگران این باشیم که آیا نرم افزار مورد نیاز رو برای باز کردن و خوندن فایل ارسالی داره یا نه و خیلی مشکلاتی مثل این.</p>

<p>اما چه کار میتونیم بکنیم که این مشکلات رو نداشته باشیم؟ راه‌های زیادی هست، مثلا ذخیره کردن نوشته‌هامون به شکل عکس یا تبدیل کردن متن‌ها به pdf یا نوشتن توی یک فایل متنی ساده، که مطمینا هرکدوم دردسرها و محدودیتای خودشون رو هم دارن. یا اینکه خیلی راحت برای نوشتن متن‌هامون از فرمت مارک داون استفاده کنیم.</p>

<p>مارک داون در اصل یه فرمت برچسب زنی متن مثل خیلی از زبان‌های برچسب زنی دیگه مثل POD, html، ReStructuredText، Grutatext و EtText هست، اما با یک سری تفاوت‌های ساختاری خیلی بزرگ توی فلسفه‌ش.</p>

<p><img src="/images/2018-3-18-markdown.png" alt="markdown" id="markdown" title="markdown"></p>

<h3 id="فلسفه_markdown">فلسفه Markdown</h3>

<p>مارک داون یک فرمت برچسب زنی متن با فلسفه‌ی <strong>راحت نوشتن - راحت خواندن</strong> تا حد امکان است که البته، قابلیت خوانایی بیشتر مورد تاکید قرار گرفته. مهمترین قسمت فلسفه مارک داون اینه که یک سند فرمت Markdown باید به تنهایی به عنوان یک متن ساده قابل انتشار باشه، بدون اینکه به نظر برسه با برچسب یا دستورالعمل قالب بندی مشخص شده. در حالی که نحو Markdown تحت تأثیر سایر فرمت‌های برچسب‌زنی بوده اما بزرگترین منبع الهام بخش Markdown، فرمت ایمیل متن ساده(plain text email) است.</p>

<p>به همین دلیل، دستور نگارش Markdown به طور کامل از اجزای متمایز تشکیل شده، که شخصیت‌های متمایز با دقت انتخاب شدند تا مفهوم متن بدون نیاز به هیچ تبدیلی به سایر فرمت‌ها قابل درک باشه. به عنوان مثال، ستاره ها در اطراف یک کلمه که همونطور که به نظر می رسه مفهوم * <em>تاکید</em> * رو داره. یا مثلا لیست ها که با کمک یک خط تیره - در خط جدید از هم جدا میشن یا نقل قول‌ها که با > از سایر قسمت‌های متن جدا میشن. برای مقایسه میتونید متن همین مقاله رو با فرمت مارک‌داون و به شکل <a href="/assets/markdown.txt">متن ساده توی این آدرس</a> بخونید، همونطوری که دیدید چه قبل از تبدیل و چه بعد از تبدیل متن خوانا هست و مفهومش رو به خوبی بیان میکنه.</p>

<h3 id="نسخه‌های_متفاوت_مارک‌داون">نسخه‌های متفاوت مارک‌داون</h3>

<p>مارک‌داون بعد از معرفی و انتشار اولیه، تقریبا هیچ تغییری نکرده، اما به مرور زمان نسخه‌های متفاوتی از آن منتشر شده که ویژگی‌های متفاوتی را به نسخه اصلی اضافه کرده‌اند.</p>

<h4 id="markdown">Markdown</h4>

<p><a href="https://daringfireball.net/projects/markdown/">مارک‌داون</a> در سال ۲۰۰۴ به وسیله‌ی John Gruber به دنیا معرفی شد. او در معرفی مارک داون اینطور نوشت:</p>

<blockquote>
  <p>مارک داون به عنوان یک ابزار تبدیل متن به html است که به شما اجازه میده راحت بنویسید و راحت بخوانید. این برنامه از دو جز تشکیل شده (۱)فرمت نگارش مارک‌داون و (۲)یک برنامه با زبان <a href="https://www.perl.org/">پرل</a> که کار تبدیل را انجام میدهد.</p>
</blockquote>

<h4 id="multimarkdown">MultiMarkdown</h4>

<p><a href="http://fletcherpenney.net/multimarkdown/">مالتی مارک داون</a> در سال ۲۰۰۵ توسط Fletcher T. Penney معرفی شد و در پایه و مفهوم تقریبا همون مارک داون هست با همون فلسفه با چند تفاوت، (۱)برنامه‌ی تبدیل کننده متن با perl و بر پایه‌ی برنامه اصلی مارک داون نوشته شد اما به جز html امکان تبدیل متن به فرمت‌های دیگه مثل pdf, latex, ompl, openDocument, word رو هم داره و (۲)دستور نگارشی که همه‌ی خاصیت‌های مارک‌داون رو به همراه چندتا قابلیت بیشتر مثل فرمت جدول‌ها و بلوک‌های کد و چیزهایی مثل این‌ها که این روزها جاهای زیادی مثل گیت هاب میبینیم رو داره.</p>

<p><img src="/images/2018-3-18-markdown2.png" alt="markdown" id="markdown" title="markdown"></p>

<h4 id="php_markdown_extra">PHP Markdown Extra</h4>

<p><a href="https://michelf.ca/projects/php-markdown/extra/">php markdown extra</a></p>

<h4 id="kramdown">kramdown</h4>

<p><a href="https://kramdown.gettalong.org/index.html">kramdown</a></p>

<h4>...</h4>

<h2 id="دستور_نگارش_مارک‌داون">دستور نگارش مارک‌داون</h2>

<h4 id="__پاراگراف‌ها_و_خطوط_جدید">> پاراگراف‌ها و خطوط جدید</h4>

<p>هر پاراگراف در مارک‌داون معادل یک خط خالی است، دقت کنید که رفتن به خط جدید بدون ایجاد یک خالی بین دو بلوک متن به معنی ایجاد پاراگراف جدید نیست. معادل هر پاراگراف در html برچسب p میباشد.</p>

<pre><code>پاراگراف یک

پاراگراف دو

&lt;p&gt;پاراگراف یک&lt;/p&gt;
&lt;p&gt;پاراگراف دو&lt;/p&gt;
</code></pre>

<p>برای شروع خط جدید، بدون ایجاد یک پاراگراف تازه، باید قبل از رفتن به خط جدید، در آخر خط فعلی از دو کاراکتر فاصله یا همان space استفاده کنید، خط جدید معادل br در html است</p>

<pre><code>    خط اول  (فاصله‌ی دوتایی)
    خط دوم

    خط اول&lt;br&gt;
    خط دوم
</code></pre>

<h4 id="__سربرگ">> سربرگ</h4>

<p>سربرگ یا header در مارک‌داون با کمک کاراکتر # در ابتدای خط ایجاد میشوند، تعداد توالی # های پشت سر هم به معنی وزن کمتر سربرگ میباشد</p>

<pre><code># سربرگ یک
## سربرگ دو
### سربرگ سه
...
###### سربرگ شش

&lt;h1&gt;سربرگ یک&lt;/h1&gt;
&lt;h2&gt;سربرگ دو&lt;h2&gt;
&lt;h3&gt;سربرگ سه&lt;h3&gt;
...
&lt;h6&gt;سربرگ شش&lt;/h6&gt;
</code></pre>

<h4 id="__نقل_قول">> نقل قول</h4>

<p>نقل قول یا همان blockquote در مارک‌داون با کاراکتر > در ابتدای خط تعریف میشود</p>

<pre><code>&gt; این یک نقل قول در ۲پاراگراف است. نقل قول‌ها برای نمایش 
&gt; متنی سخن دیگران یا ارجاع دادن به مطالبی از منابع متفاوت و 
&gt; خارج از متن اصلی است
&gt;
&gt; ادامه نقل قول در پاراگراف دوم 

&lt;blockquote&gt;
&lt;p&gt;
این یک نقل قول در ۲پاراگراف است. نقل قول‌ها برای نمایش متنی سخن دیگران یا ارجاع دادن به مطالبی از منابع متفاوت و خارج از متن اصلی است
&lt;/p&gt;
&lt;p&gt;
ادامه نقل قول در پاراگراف دوم 
&lt;/p&gt;
&lt;/blockquote&gt;
</code></pre>

<p>مارک‌داون به شدت ساده‌گیر است و میتوان پاراگراف را مانند مثال بالا در چندین خط جدا از هم یا به شکل مثال پایین به صورت متوالی نوشت</p>

<pre><code>&gt; این یک نقل قول در ۲پاراگراف است. نقل قول‌ها برای نمایش متنی سخن دیگران یا ارجاع دادن به مطالبی از منابع متفاوت و خارج از متن اصلی است

&gt; ادامه نقل قول در پاراگراف دوم 
</code></pre>

<p>همچنین در هر نقل قول میتوان از سایر اجزای مارک‌داون شامل نقل قول، سربرگ‌ها لیست ها و بلوک‌های کد استفاده کرد</p>

<pre><code>&gt; این یک نقل قول است
&gt;
&gt; &gt; این یک نقل قول درون یک نقل قول دیگر است
&gt;
&gt; ## سربرگ سطح دو
&gt;
&gt;1. آیتم یک
&gt;2. آیتم دوم
&gt;
&gt;   return shell_exec("echo $input | $markdown_script"); [بلوک کد]
</code></pre>

<h4 id="__لیست‌ها">> لیست‌ها</h4>

<p>مارک‌داون از دو نوع لیست شامل لیست‌های ساده و لیست‌های شماره‌دار پشتیبانی میکند. لیست های ساده با خط تیره (-) علامت جمع (+) یا ستاره (*) در ابتدای خط مشخص میشوند و لیست های شماره دار با اعداد به همراه یک نقطه در ابتدای خط. لیست‌های ساده در html با ul و لیست‌های شماره دار با ol برابر هستند</p>

<pre><code>* آبی
* قرمز
* سبز

- آبی
- قرمز
- سبز

+ آبی
+ قرمز
+ سبز

1. آبی
2. قرمز
3. سبز
</code></pre>

<p>اگر بخواهید لیست اعدادتان را بدون ترتیب بسازید باید از یک \ قبل از نقطه استفاده کنید</p>

<pre><code>۱۳۹۶\. سال تولد
</code></pre>

<h4 id="__کد_و_بلوک‌های_کد">> کد و بلوک‌های کد</h4>

<p>کدها با ` در اطراف یک متن و بلوک‌های کد با tab یا ۴اسپیس در ابتدای خط تعریف میشوند</p>

<pre><code>`کد`
    bcode block
    block

&lt;code&gt;کد&lt;/code&gt;
&lt;pre&gt;&lt;code&gt;
code block
block
&lt;/code&gt;&lt;/pre&gt;
</code></pre>

<p>در مالتی مارک‌داون شیوه‌ی دیگری هم برای نوشتن بلوک‌های کد مشخص شد که استفاده از سه ` متوالی در ابتدا و انتهای هر کد هست</p>

<pre><code>```
بلوک کد
خط کد
ادامه
 ```

&lt;pre&gt;&lt;code&gt;
بلوک کد
خط کد
ادامه
&lt;/code&gt;&lt;/pre&gt;
</code></pre>

<h4 id="__خطوط_افقی___جدا_کننده‌ها">> خطوط افقی / جدا کننده‌ها</h4>

<p>خطوط افقی جدا کننده یا همان hr در html با توالی بیشتر از ۳ تای یکی از کاراکترهای * یا - قابل ایجاد هستند</p>

<pre><code>* * *

***

*****

- - -

---------------------------------------
</code></pre>

<h4 id="__لینک‌ها">> لینک‌ها</h4>

<p>مارک‌داون از ۲ نوع لینک پشتیبانی میکند، لینک‌های درون خطی و لینک‌های ارجاعی.</p>

<p>لینک‌های درون‌خطی را به این شکل میتوان ایجاد کرد</p>

<pre><code>This is [an example](http://example.com/ "Title") inline link.

[This link](http://example.net/) has no title attribute.

---

&lt;p&gt;This is &lt;a href="http://example.com/" title="Title"&gt;
an example&lt;/a&gt; inline link.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://example.net/"&gt;This link&lt;/a&gt; has no
title attribute.&lt;/p&gt;
</code></pre>

<p>و لینک های ارجاعی نیز ساختاری به این صورت دارند</p>

<pre><code>This is [an example][id] reference-style link.
یا
This is [an example] [id] reference-style link.
ادامه متن و متن و متن و متن.

[id]: http://example.com/  "Optional Title Here"

---

&lt;p&gt;This is &lt;a href="http://example.com/" title="Optional Title Here"&gt;an example&lt;/a&gt; reference-style link.&lt;/p&gt;

&lt;p&gt;This is &lt;a href="http://example.com/" title="Optional Title Here"&gt;an example&lt;/a&gt; reference-style link.&lt;/p&gt;

&lt;p&gt;ادامه متن و متن و متن و متن.&lt;/p&gt;
</code></pre>

<p>همچنین لینک‌های ارجاعی رو به این صورت هم میتوان نوشت</p>

<pre><code>my name is [kiavash][]

[kiavash]: https://kiavash.one/
</code></pre>

<h4 id="__لینک‌های_خودکار">> لینک‌های خودکار</h4>

<p>با قرار دادن آدرس‌ها بین دو علامت &lt; و > در متن به صورت لینک به نمایش در میایند</p>

<pre><code>&lt;https://kiavash.one&gt;
</code></pre>

<h4 id="__عکس‌ها">> عکس‌ها</h4>

<p>قرار دادن عکس در متن هم مانند لینک ها از دو راه مستقیم و ارجاعی قابل انجام است، قرار دادن عکس به صورت مستقیم</p>

<pre><code>![Alt text](/path/to/img.jpg)

![Alt text](/path/to/img.jpg "Optional title")
</code></pre>

<p>و به صورت ارجاعی</p>

<pre><code>![Alt text][id]

[id]: url/to/image  "Optional title attribute"
</code></pre>

<h4 id="__حروف_مایل">> حروف مایل</h4>

<p>برای <em>مایل</em> نوشتن یا italic میتوان از متن را بین دو ستاره یا دو زیرخط قرار داد</p>

<pre><code>*متن مایل*
_متن مایل_

&lt;em&gt;متن مایل&lt;/em&gt;
</code></pre>

<h4 id="__حروف_پررنگ">> حروف پررنگ</h4>

<p>برای <strong>پررنگ</strong> نوشتن باید متن را بین دو جفت ستاره یا دو جفت زیرخط قرار داد</p>

<pre><code>**متن پررنگ**
__متن پررنگ__

&lt;strong&gt;متن پررنگ&lt;/strong&gt;
</code></pre>]]></content>

    <summary>
    &lt;p&gt;همه ما روزانه کم یا زیاد، به بهانه‌های مختلف و برای موضوعات متفاوت نیاز به نوشتن و یادداشت برداری داریم، تا چندسال پیش بیشتر با کاغذ و قلم و این روزها بیشتر با کامپیوترهای کوچیک و بزرگی که همه جا دم دستمون هستن. معمولا موقع نوشتن از امکاناتی مثل پررنگ کردن قسمتی از متن برای جلب توجه بیشتر یا استفاده از تیترها، پی‌نوشت‌ها، ارجاع‌ها و سایر موارد نگارشی هم استفاده می‌کنیم، اما یکی از مشکلاتی که خیلی وقت‌ها توی این یاداشت برداری‌ها باهاش مواجه میشیم برنامه‌هایی هست که برای اینکار استفاده میکنیم، ممکنه از مایکروسافت آفیس و برنامه word استفاده کنیم اما روی خیلی از موبایل‌ها نتونیم بازشون کنیم یا بخو&lt;/p&gt;
    </summary>
  </entry>
  
  <entry>
    <title>هک کردن جی‌میل برای استفاده کردن روی دامنه شخصی با کمک mailgun</title>
    <link href="http://kiavash.one/2018/03/17/hacking-gmail-to-use-custom-domains-for-free-with-mailgun/"/>
    <id>http://kiavash.one/2018/03/17/hacking-gmail-to-use-custom-domains-for-free-with-mailgun/</id>

    <published>2018-03-17T16:41:42+0330</published>
    <updated>2018-03-17T16:41:42+0330</updated>

    <content type="html"><![CDATA[<a name="more"></a>
<p>من فکر میکنم که جی‌میل سرویس جذاب و کاربردی برای دریافت و ارسال و دسته بندی ایمیل‌ها هست، سریع هست، با سرویس‌های دیگه گوگل مثل درایو به خوبی یکپارچه شده و به جز برنامه استانداردی که برای مدیریت ایمل‌ها داره، میشه از <a href="http://www.google.com/inbox/">inbox</a> هم برای مدیریت ایمیل‌ها استفاده کرد. در کل پر از خوبیای ریز و درشت و هست، البته به جز اون قسمتی که به گوگل امکان بیشتری میدیم که ثانیه به ثانیه زندگیمون رو بیشتر نظارت کنه.</p>

<p>از اونطرف داشتن یه آدرس ایمیل روی دامین شخصی هم جذاب هست، و اگر بخواید از ایمیل گوگل روی دامین شخصی خودتون استفاده کنید باید <a href="https://www.google.com/work/apps/business/">سرویس گوگل بیزینس</a> رو با قیمت ماهیانه ۵ تا ۱۰دلار بخرید که برای اکثر کاربران امکانات گوگل بیزینس مورد نیاز نیستن و در نهایت تمام امکانات سرویس‌های شخصی رو هم، مثل inbox، دریافت نمیکنید.</p>

<p>بگذریم، به هرحال راه‌هایی هست که بشه از اکانت جی‌میل به صورت رایگان روی دامین شخصی استفاده کرد، یکی از این راه‌ها استفاده از <a href="https://mailgun.com/">mailgun</a> هست. و تفاوت اصلیش با خیلی از روش‌های دیگه این هست که نیاز نداریم سرور ایمیل رو خودمون اجرا یا مدیریت کنیم و فقط ثبت کردن یک دامنه شخصی برامون کافیه و هزینه‌ی هاست یا سرور رو از دوش خودمون برمیداریم.</p>

<p><img src="/images/2018-3-17-mailgun-000.png" alt="mailgun" id="mailgun"></p>

<p>mailgun خودش رو به این صورت معرفی میکنه:</p>

<blockquote>
  <p>API های قدرتمند که شما را قادر می سازد، بدون زحمت ایمیل‌ها را ارسال، دریافت و دنبال کنید </p>
</blockquote>

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

<p>بعد از نوشتن تمام این توضیحات، بهتره که دیگه بریم سراغ اصل مطلب، به شکل ساده mailgun دو جز داره که بهمون اجازه میده کاری که میخوایم رو انجام بدیم، یک سرویس فوروارد کردن ایمیل و یک سرور SMTP.</p>

<h2 id="تنظیم_mailgun">تنظیم mailgun</h2>

<p>در mailgun با استفاده از اکانت جی‌میل <a href="https://mailgun.com/signup">ثبت نام</a> میکنیم، یک ایمیل برای تایید ثبت نام برامون فرستاده میشه که روی لینک تایید کلیک میکنیم و به mailgun لاگین میکنیم. وارد داشبورد کاربریمون میشیم، در منوی بالا وارد <a href="https://app.mailgun.com/app/domains">قسمت Domains</a> میشیم و روی <a href="https://app.mailgun.com/app/domains/new">Add New Domain</a> کلیک میکنیم و آدرس دامنه رو وارد میکنیم</p>

<p><img src="/images/2018-3-17-mailgun-001.png" alt="add domain in mail gun" id="add_domain_in_mail_gun"></p>

<p>بر اساس دستور العملی که سایت بهمون میده، DNS های دامنه‌مون رو تنظیم میکنیم. من از cloudflare برای مدیریت DNSهاس دامنه‌م استفاده میکنم به شکل خلاصه و سریع کارهایی که باید انجام بدیم رو در ادامه می‌نویسم</p>

<p><strong>۱-</strong> یک cname با این مشخصات بسازید</p>

<pre><code>CNAME record &gt; Name = email, Value = mailgun.org, TTL = Automatic
</code></pre>

<p><strong>۲-</strong> دو رکورد MX با این مشخصات اضافه میکنیم</p>

<pre><code>Name = domain.com (no www), value = mxa.mailgun.org, Priority = 10
Name = domain.com (no www), value = mxb.mailgun.org Priority = 10
</code></pre>

<p>به جای domain.com باید نام دامنه خودتون رو جایگزین کنید.</p>

<p><strong>۳-</strong> دو رکورد TXT هم اضافه میکنیم</p>

<pre><code>Name= domain.com (no www), value = v=spf1…
Name = smtp._domainkey, value = k=rsa;…
</code></pre>

<p>اینجا هم باید در خط اول اسم دامنه خودتون رو به جای domain.com بنویسید و آخر خط دوم هم بعد از rsa; به جای ... کلیدی که خود سایت بهتون داده رو اضافه کنید.</p>

<p>حالا باید صبر کنیم تا DNS ها تنظیم بشن که بین چند دقیقه تا چند ساعت ممکنه وقت بگیره. برای فعال شدن دامنه روی mailgun باید منتظر این تنظیم شدن بمونیم. بعد از تنظیم شدنشون برگردید به mailgun و دامنه رو فعال کنید.</p>

<p>حالا باید وارد قسمت Routes بشیم و روی دکمه‌ی Create Route در قسمت بالای صفحه کلیک میکنم، فیلدها رو به این صورت پر میکنیم:</p>

<pre><code>Expression Type : Match Recipient
Recipient       : custom_mail@kiavash.one
Action          : Forward
                  google_account@gmail.com
Priority        : 10
Description     : هر توضیحی که دوست دارید
</code></pre>

<p><img src="/images/2018-3-17-mailgun-002.png" alt="add route" id="add_route"></p>

<p>قدم اول تموم شد، از این به بعد هر ایمیلی که به آدرس custoam_mail@kiavash.one فرستاده بشه رو من توی اینباکس google_account@gmail.com دریافت می‌کنیم.</p>

<h2 id="ارسال_ایمیل">ارسال ایمیل</h2>

<p>در داشبورد دامنه وارد قسمت <a href="https://app.mailgun.com/app/domains/site.com/credentials">Manage SMTP credentials</a> میشیم و روی New SMTP Credential کلیک میکنم و آدرس ایمیلی رو که میخوایم میسازیم، مثلا custom_mail@kiavash.one و یک پسور هم براش تنظیم میکنیم.</p>

<p>بعد توی قسمت تنظیمات gmail وارد تب <a href="https://mail.google.com/mail/u/0/#settings/accounts">Accounts and Import</a> میشیم و توی قسمت Send mail as روی Add another email address you own کلیک میکنیم و آدرس ایمیلی که میخوایم برای فرستادن ایمیل ها ازش استفاده کنیم و توی مرحله قبل ساختیم رو وارد میکنیم.</p>

<p><img src="/images/2018-3-17-mailgun-003.png" alt="add gmail" id="add_gmail"></p>

<p>و تنظیمات SMTP رو وارد میکنیم</p>

<p><img src="/images/2018-3-17-mailgun-004.png" alt="set smtp" id="set_smtp"></p>

<pre><code>Server: smtp.mailgun.org
Port: 587
Username: The full email address, e.g. “custom_mail@kiavash.one”
Password: YOUR PASSWORD set in mailgun
</code></pre>

<p>روی Add Account کلیک کنید، تمام شد. از سرویس رایگان ایمیل دامنه شخصی تا سقف ۱۰،۰۰۰ ایمیل در ماه لذت ببرید.</p>]]></content>

    <summary>
    &lt;p&gt;من فکر میکنم که جی‌میل سرویس جذاب و کاربردی برای دریافت و ارسال و دسته بندی ایمیل‌ها هست، سریع هست، با سرویس‌های دیگه گوگل مثل درایو به خوبی یکپارچه شده و به جز برنامه استانداردی که برای مدیریت ایمل‌ها داره، میشه از inbox هم برای مدیریت ایمیل‌ها استفاده کرد. در کل پر از خوبیای ریز و درشت و هست، البته به جز اون قسمتی که به گوگل امکان بیشتری میدیم که ثانیه به ثانیه زندگیمون رو بیشتر نظارت کنه.

از اونطرف داشتن یه آدرس ایمیل روی دامین شخصی هم جذاب هست، و اگر بخواید از ایمیل گوگل روی دامین شخصی خودتون استفاده کنید باید سرویس گوگل بیزینس رو با قیمت ماهیانه ۵ تا ۱۰دلار بخرید که برای اکثر کاربران امک&lt;/p&gt;
    </summary>
  </entry>
  
  <entry>
    <title>اتصال دامنه شخصی به صفحات گیت‌هاب و فعال کردن https با کمک cloudflare</title>
    <link href="http://kiavash.one/2018/03/13/cloudflare/"/>
    <id>http://kiavash.one/2018/03/13/cloudflare/</id>

    <published>2018-03-13T21:54:13+0330</published>
    <updated>2018-03-13T21:54:13+0330</updated>

    <content type="html"><![CDATA[<a name="more"></a>
<p>من برای مدیریت dns سایت از cloudflare استفاده می‌کنم و از اونجایی که این سایت رو به صورت استاتیک می‌سازم و از قابلیت صفحه‌های گیت‌هاب برای میزبانی استفاده می‌کنم دلایل زیادی برای این انتخاب دارم، مثلا فعال کردن https برای دامین یا استفاده از cdnهای cloudflar یا محافظت در مقابل حمله‌هایی که ممکنه به سایت بشه، لود شدن سریع‌تر سایت و... و تمام این امکانات رو هم با استفاده از نسخه‌ی رایگان این سرویس می‌گیرم، البته اگر از سرور خودتون استفاده کنید این امکانات رو میتونید خودتون روی سرور فعال کنید، اما اگر دانش یا وقت کافی برای مدیریت سرور نداشته باشیم باز هم استفاده از سرویس‌هایی مثل cloudflare راه مطمین‌تری هست که میدونیم تقریبا به صورت تمام وقت فعال هستن و توسط افراد با تجربه‌ای هم مدیریت و اداره میشن.</p>

<p>اما این مواردی که گفتم چه اهمیتی دارن؟ مثلا چرا باید مهم باشه که از https استفاده کنیم؟ بزارید به صورت ساده و خلاصه یه نگاه به تفاوت http و https بندازیم. وقتی از http استفاده می‌کنیم هر کسی که بین ما و سایت مورد نظر باشه میتونه محتوای ارسال و دریافت شده رو، شامل متن سایت، رمزهایی که وارد می‌کنیم، عکس‌هاو هرچیز دیگه‌ای رو میتونه ببینه و حتی تغییر بده. اما وقتی از https استفاده میکنیم داده‌های رد و بدل شده رمز نگاری میشه و برای افراد و کامپیوترهایی که بین ما و سایت موردنظرمون هستن غیرقابل فهم.</p>

<p>خوب چه کار کنیم که cloudflare رو به عنوان واسط بین دامین و گیت‌هاب فعال کنیم؟ </p>

<p>۱ - اول مراجعه به <a href="https://www.cloudflare.com/">cloudflare</a> و ساختن یک اکانت.</p>

<p>۲ - وارد کردن نام سایت و کلیک بر روی begin scan</p>

<p><img src="/images/2018-03-13-cloudflare1.png" alt="add site" id="add_site"></p>

<p>صبر کنید تا اسکن تمام شود، تمام dnsهای فعال روی سایت نمایش داده می‌شوند و dnsهای جدیدی به شما برای جایگزین کردن پیشنهاد می‌شود. به پنجره‌ مدیریت دامین خود بروید و dnsهای cloudflare را با dns های خودتان جایگزین کنید. باید بین چند دقیقه تا چند ساعت، صبر کنید تا dnsهای جدید بر روی دامین شما فعال شود. بعد از فعال شدنشنان، میتوانیم از این به بعد dnsهای خودمان را با استفاده از cloudflare مدیریت کنیم.</p>

<p>برای مثال من ۲ رکورد A ساخته‌ام که به IPهای گیت هاب اشاره میکنند و یک cname برای یکی کردن آدرس سایت با و بدون www</p>

<table class="markmod_table">
<col align="center">
<col align="left">
<col align="left">
<thead>
<tr>
	<th>type</th>
	<th>name</th>
	<th>value</th>
</tr>
</thead>
<tbody>
<tr>
	<td align="center">a</td>
	<td align="left">site.com</td>
	<td align="left">192.30.252.153</td>
</tr>
<tr>
	<td align="center">a</td>
	<td align="left">site.com</td>
	<td align="left">192.30.252.154</td>
</tr>
<tr>
	<td align="center">CNAME</td>
	<td align="left">www</td>
	<td align="left">site.com</td>
</tr>
</tbody>
</table>

<p>تمام شد، به همین سادگی. البته خیلی چیزهای بیشتری برای تنظیم کردن در پنل مدیریت هست که منتظر شما هستند.</p>]]></content>

    <summary>
    &lt;p&gt;من برای مدیریت dns سایت از cloudflare استفاده می‌کنم و از اونجایی که این سایت رو به صورت استاتیک می‌سازم و از قابلیت صفحه‌های گیت‌هاب برای میزبانی استفاده می‌کنم دلایل زیادی برای این انتخاب دارم، مثلا فعال کردن https برای دامین یا استفاده از cdnهای cloudflar یا محافظت در مقابل حمله‌هایی که ممکنه به سایت بشه، لود شدن سریع‌تر سایت و... و تمام این امکانات رو هم با استفاده از نسخه‌ی رایگان این سرویس می‌گیرم، البته اگر از سرور خودتون استفاده کنید این امکانات رو میتونید خودتون روی سرور فعال کنید، اما اگر دانش یا وقت کافی برای مدیریت سرور نداشته باشیم باز هم استفاده از سرویس‌هایی مثل cloudflare راه م&lt;/p&gt;
    </summary>
  </entry>
  
  <entry>
    <title>راه اندازی یک وبلاگ استاتیک با کمک میرا و گیت‌هاب</title>
    <link href="http://kiavash.one/2018/03/11/weblog-with-mira-and-github/"/>
    <id>http://kiavash.one/2018/03/11/weblog-with-mira-and-github/</id>

    <published>2018-03-11T18:17:56+0330</published>
    <updated>2018-03-11T18:17:56+0330</updated>

    <content type="html"><![CDATA[<a name="more"></a>
<p>شاید پیش اومده که بخواید مطلبی رو توی اینترنت منتشر کنید، حالا چه به عنوان وبلاگ، صفحات معرفی و راهنمای پروژه، صفحات معرفی شخصی و رزومه، یک کتاب آنلاین یا هر چیز دیگه‌ای. اگر همچین تجربه‌ای رو داشتید احتمالا با موضوعاتی مثل خرید هاست، انتقال فایل‌ها، بک‌آپ گرفتن، خرید دامنه، پایگاه داده یا همون دیتابیس ها و خیلی اسامی دیگه شبیه به این‌ها مواجه شده باشید، این پست قصد داره که یه راه حل برای خلاصی از تمام این موضوعات رو ارائه کنه و اگر هم که تا امروز درگیر این مسایل نشدید که قصد داره جلوی مواجهه و درگیریتون رو با خیلی از مسایل فنی انتشار سایت روی اینترنت رو بگیره. و البته با حذف این موارد و نگهداری فایل‌هامون روی کامپیوتر شخصی و گیت‌هاب، مسائل مالی رو هم حذف کنیم و تقریبا به صفر برسونیمش یا حداکثر هزینه‌ی ثبت یک دامنه به عنوان تنها هزینه‌ برامون مطرح باشه.</p>

<p>بدون شک راه اندازی یک سرویس مثل ایمیل یا فروشگاه آنلاین یا یک شبکه اجتماعی و امثال این‌ها رو نمیشه با استفاده از یک راه حل استاتیک و نگهداری فایل‌ها روی کامپیوتر شخصی و با حذف کردن دیتابیس و با کمک سرویس‌های میزبانی آزاد مثل گیت‌هاب و... راه‌اندازی کرد.</p>

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

<h3 id="چرا_استاتیک_">چرا استاتیک؟</h3>

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

<h3 id="یک_توضیح_کوچک">یک توضیح کوچک</h3>

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

<ul>
<li>نصب نرم افزار روی کامپیوتر شخصی</li>
<li>استفاده ساده و ابتدایی از گیت</li>
<li>ثبت نام در گیت هاب و داشتن یک اکانت</li>
</ul>

<h3 id="شروع">شروع</h3>

<h4 id="قدم_اول__مدیریت_محتوا">قدم اول، مدیریت محتوا</h4>

<p>صفحات ایستا رو میشه به راحتی با استفاده از html و css ساخت و آپلود کرد، اما اگر بخوایم کنترل بییشتری برای مدیریت محتوایی که تولید میکنیم، قالب بندی پوسته‌ها، آرشیو کردن و دسته بندی اتوماتیک موضوعات، صفحه بندی نوشته‌های قدیمی‌تر و مسائلی مثل این‌ها داشته باشیم، باید از یک سایت ساز استاتیک استفاده کنیم، که البته از تیتر این نوشته مشخصه که تصمیم داریم از <a href="https://miraxy.github.io/fa">میرا</a> استفاده کنیم، اما چرا؟ برای من چند دلیل وجود دارد:</p>

<ul>
<li>میرا را خودم نوشته‌ام :) دلیل منطقی نیست اما به هر حال یک دلیل است دیگر</li>
<li>بیشتر از یک پروژه یا سایت را میشود با میرا در یک مخزن مدیریت کرد و نیازی نیست برای هر سایت جدید یک مخزن جدید ایجاد کنیم</li>
<li>انعطاف پذیری بالایی دارد و برای هرکاری میتونه مورد استفاده قرار بگیره</li>
<li>...</li>
</ul>

<p>پس کار را با نصب میرا شروع می‌کنیم، میرا برای نصب به پرل نسخه 5.12 به بالا نیاز دارد، برای تست این که پرل را روی سیستم خود دارید یا نه، terminal یا command line را باز کنید و تایپ کنید: </p>

<pre><code>perl -v
</code></pre>

<p>اگر پرل از قبل نصب شده باشد متنی شبیه به این را خواهید دید که ورژن پرل نصب شده را به شما نشان خواهد داد</p>

<pre><code>This is perl 5, version 26, subversion 0 (v5.26.0)
</code></pre>

<p>اگر از سیستم عامل‌های شبه یونیکس استفاده میکنید احتمالا پرل روی دستگاه شما نصب شده است، اما اگر از ویندوز استفاده میکنید <a href="http://strawberryperl.com/">Strawberry Perl</a> یا «پرل توت فرنگی» را ابتدا نصب کنید 
توت فرنگی cpan minus را به شکل توکار همراه خود دارد، برای نصب میرا تایپ کنید:</p>

<pre><code>cpanm Mira
</code></pre>

<p>و برای سیستم‌های شبه یونیکس اگر capan minus را ندارید آن‌را نصب کنید</p>

<pre><code>curl -L https://cpanmin.us | perl - --sudo App::cpanminus
</code></pre>

<p>و بعد برای نصب میرا</p>

<pre><code>sudo cpanm Mira
</code></pre>

<p>یا بدون استفاده از cpanm و مستقیم از طریق perl shell میرا را نصب کیند:</p>

<pre><code>$ sudo perl -MCPAN -e shell
&gt; install Mira
</code></pre>

<p>حالا برای محل نگهداری منابع، نوشته‌های خام و خروجی سایت یک دایرکتوری جدید می‌سازیم، داخل این دایرکتوری جدید می‌شویم و این دستور را تایپ میکنیم:</p>

<p>mira init
میرا در این مسیر جدید پیکربندی شده و تمام دایرکتوری‌ها و فایل‌های مورد نیاز خودش رو میسازه. قدم بعدی نوشتن یک پست جدید در وبلاگ هست</p>

<pre><code>mira new -t "hello word" -f blog
</code></pre>

<p>بعد از تایپ این دستور میرا یک پیام نمایش میده که محل ذخیره شدن و اسم فایل رو نشون میده، فایل رو ویرایش میکنیم و هر متنی بخوایم توی بدنه ای فایل بعد از --- دوم مینویسیم، مثلا <a href="/2018/01/hello-world-from-mira/">اولین نوشته همین وبلاگ</a> چیزی شبیه به این هست:</p>

<pre><code>---
utid: 20180301002154
date: 2018-03-01 00:21:54
title: سلام دنیا از دریچه‌ی میرا
_index: hello world from mira
categories:
  - میرا
tag:
  - میرا
  - سلام دنیا
---
من اهل تجربه کردن هر چیز جدیدی هستم، حتی شاید بشه گفت که به شکلی معتاد تست کردن باشم، البته اکثرا بعد از مدتی به خاطر تکرار نشدن از یادم میرن و از اونجایی که هیچ وقت هم دیگه نیازی بهشون پیدا نمیکنم چندان برام مهم نیست، اما خیلی وقت‌ها هم بوده که چیزهایی که بارها بهشون نیاز پیدا کردم یا کس دیگه‌ای براش سوال شده بوده رو فراموش کرده بودم. سالها بود که تصمیم داشتم مواردی که رو به نظرم کاربردی‌تر میان رو به شکل یک وبلاگ بنویسم تا هم آرشیوی برای خودم باشه و همینکه شاید به کار یکی دیگه بیاد.

نهایتا تصمیم گرفتم که یک وبلاگ رو به شکل استاتیک برای این کار بسازم، مدتی رو میگشتم و دنبال گزینه برای ساختن وبلاگ استاتیک بودم، هر کدوم از سایت‌سازهای استاتیک نکات مثبت و منفی خودشون رو داشتن، تصمیم گیری برام سخت شده بود و خوب چون من اهل اختراع کردن دوباره‌ی چرخ هستم، تصمیم گرفتم که تمام نکاتی رو که از نظر خودم مثبت بودن و حس میکردم مورد نیازم هستن رو کنار هم جمع کنم و مشکل خودم رو یک بار برای همیشه حل کنم، این شد که نوشتن [میرا](miraxy.githu.io/fa/) رو شروع کردم.

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

میرا به شکل یک نرم افزار آزاد و با لایسنس GPL-3.0 توسعه پیدا میکنه و به کدهاش میتونید در مخازن [گیت‌هاب](https://github.com/kiamazi/mira) پروژه دسترسی داشته باشید.

### سلام دنیا.

این اولین نوشته این وبلاگ است که با کمک [میرا](miraxy.githu.io/fa/) ساخته شده.
</code></pre>

<p>در آخر کار هم خروجی سایت رو میسازیم</p>

<pre><code>mira build
</code></pre>

<p>میرا تمام چیزی که برای انتشار نیاز داریم رو توی دایرکتوری public برامون ساخته و فقط کافیه که به محلی که میخوایم توی اینترنت منتشر بشه منتقلش کنیم. اگر دوست داشته باشیم پیش نمایشی از چیزی که تولید شده رو ببینیم هم میتونیم از این دستور استفاده کنیم:</p>

<pre><code>mira view
</code></pre>

<p>یک سرور از محتوایی که تولید کردیم روی کامپیوتر شخصیمون استارت میشه که روی لوکال هاست و پورت ۵۰۰۰ قابل دیدن هست.</p>

<p>برای خواندن بیشتر در مورد میرا و کارکردش میتونید به <strong><a href="https://miraxy.github.io/doc-fa/">صفحات مستندات میرا</a></strong> مراجعه کنید</p>

<h4 id="قدم_دوم__انتشار_محتوا">قدم دوم، انتشار محتوا</h4>

<p>تصمم داریم که از گیت هاب به عنوان بستر انتشار استفاده کنیم، پس اولین کاری که میکنیم یک مخزن در گیت‌هاب با الگویی شبیه به این میسازیم:</p>

<pre><code>username.github.io
</code></pre>

<p>به جای username اسم یوزر خودمون راباید بنویسیم، حالا بر میگردیم به ترمینال و وارد دایرکتوری public میشیم، گیت رو توی این دایرکتوری پیکربندی میکنیم و محتوای تولید شده توی این دایرکتوری رو به مخزنی که توی گیت هاب ساختیم push میکنیم</p>

<p>تمام، چند دقیقه صبر کنید و به این آدرس مراجعه کنید</p>

<pre><code>https://username.github.io/
</code></pre>

<p>برای دیدن جزییات بیشتر برای انتخاب محل انتشار می‌تونید این قسمت از مستندات میرا رو مطالعه کنید: <a href="https://miraxy.github.io/start-fa/#%D8%A7%D9%86%D8%AA%D8%AE%D8%A7%D8%A8%20%D9%85%D8%AD%D9%84%20%D8%A7%D9%86%D8%AA%D8%B4%D8%A7%D8%B1">انتخاب محل انتشار</a></p>]]></content>

    <summary>
    &lt;p&gt;شاید پیش اومده که بخواید مطلبی رو توی اینترنت منتشر کنید، حالا چه به عنوان وبلاگ، صفحات معرفی و راهنمای پروژه، صفحات معرفی شخصی و رزومه، یک کتاب آنلاین یا هر چیز دیگه‌ای. اگر همچین تجربه‌ای رو داشتید احتمالا با موضوعاتی مثل خرید هاست، انتقال فایل‌ها، بک‌آپ گرفتن، خرید دامنه، پایگاه داده یا همون دیتابیس ها و خیلی اسامی دیگه شبیه به این‌ها مواجه شده باشید، این پست قصد داره که یه راه حل برای خلاصی از تمام این موضوعات رو ارائه کنه و اگر هم که تا امروز درگیر این مسایل نشدید که قصد داره جلوی مواجهه و درگیریتون رو با خیلی از مسایل فنی انتشار سایت روی اینترنت رو بگیره. و البته با حذف این موارد و نگهدا&lt;/p&gt;
    </summary>
  </entry>
  
  <entry>
    <title>نصب پرینتر cannon lbp6000 برای دبیان/اوبونتو</title>
    <link href="http://kiavash.one/2018/03/03/cannon-lbp6000/"/>
    <id>http://kiavash.one/2018/03/03/cannon-lbp6000/</id>

    <published>2018-03-03T20:31:56+0330</published>
    <updated>2018-03-03T20:31:56+0330</updated>

    <content type="html"><![CDATA[<a name="more"></a>
<p>درایور پرینترهای cannon آزاد نیستند و کتابخانه‌های باینری تهیه شده توسط cannon برای معماری i386 هستند. پس اگر میخواهید از این پرینترها روی سیستم‌های ۶۴بیتی استفاده کنید، باید در ابتدا معماری چندگانه را فعال کنید و چند کتابخانه را نصب کنید:</p>

<pre><code class="language-bash"># amd64 only
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libstdc++6:i386 libxml2:i386 zlib1g:i386 libpopt0:i386
</code></pre>

<p>اگر cups نصب نیست آن‌را نصب کنید:</p>

<pre><code class="language-bash">sudo apt-get install cups
</code></pre>

<p>درایورهای کنون را <a href="http://support-asia.canon-asia.com/contents/ASIA/EN/0100459601.html">دانلود</a> و از حالت فشرده خارج کنید:</p>

<pre><code class="language-bash">یا اینکه مستقمیا از طریق خط فرمان فایل مورد نیاز را دانلود کنید
wget http://gdlp01.c-wss.com/gds/6/0100004596
tar -zxvf Linux_CAPT_PrinterDriver_V260_uk_EN.tar.gz/03/Linux_CAPT_PrinterDriver_V260_uk_EN.tar.gz
</code></pre>

<p>درایور ۳۲ یا ۶۴ بیتی مورد نیاز را نصب کنید:</p>

<pre><code class="language-bash"> - 32-bit:
sudo dpkg -i Linux_CAPT_PrinterDriver_V260_uk_EN/32-bit_Driver/Debian/*.deb

 - 64-bit:
sudo dpkg -i Linux_CAPT_PrinterDriver_V260_uk_EN/64-bit_Driver/Debian/*.deb
</code></pre>

<p>حالا برای پیدا کردن فایل ppd مناسب به این مسیر:</p>

<pre><code>/usr/share/cups/model
</code></pre>

<p>نگاه میکنیم، هم‌نام یا شبیه‌ترین نام به مدل دستگاه خود را پیدا کنید.</p>

<pre><code class="language-bash">grep -H ModelName /usr/share/cups/model/*.ppd | less
...
    /usr/share/cups/model/CNCUPSLBP6018CAPTS.ppd:*ModelName: "Canon LBP6000/LBP6018 CAPT (US)"
</code></pre>

<p>برای این مورد ما <code>CNCUPSLBP6018CAPTS.ppd</code> را که با مدل LBP6000 همخوانی دارد را انتخاب میکنیم.</p>

<pre><code class="language-bash">sudo lpadmin -p LBP6000 -m CNCUPSLBP6018CAPTS.ppd -v ccp://localhost:59687
sudo lpadmin -p LBP6000 -E
sudo ccpdadmin -p LBP6000 -o /dev/usb/lp0
</code></pre>

<p>و سیستم را برای شروع کردن دایمون cannon ccpd پیکربندی میکنیم</p>

<pre><code class="language-bash">sudo update-rc.d ccpd defaults
</code></pre>

<p>گاهی اوقات ccpd هنگ میکند و queue تنها پیغام Processing since را نمایش می‌دهد و هیچ پرینتی صورت نمیگیرد، در این حالت برای پرینت گرفتن این دستورات را به ترتیب اجرا کنید یا یک فایل bash بسازید که تمام این دستورات را به ترتیب اجرا کند:</p>

<pre><code class="language-bash">pkill -9 -x ccpd
pkill -9 -x captmoncnabc
/etc/init.d/ccpd start
/etc/init.d/ccpd status
</code></pre>

<p>احتمالا برای اجرای اکثر دستورات بالا به sudo هم نیاز خواهید داشت.</p>

<p>برای به اشتراک گذاشتن پرینتر در شبکه با کامپیوترهایی که از ویندوز استفاده میکنند هم samba را نصب کیند و این تغییرات را در تنظیمات آن اعمال کنید:</p>

<pre><code>sudo gedit /etc/samba/smb.conf
</code></pre>

<p>در قسمت [printers] :</p>

<pre><code>browseable = yes
guest ok = yes
</code></pre>

<p>و samba را ری‌استارت کنید:</p>

<pre><code>sudo service smbd restart
sudo service nmbd restart
</code></pre>

<p>در setting سیستم، قسمت printer منوی server را انتخاب کنید و Publish shared printers connected to this server را فعال کنید، بر روی پرینتر نصب شده کلیک راست کنید و Shared را چک بزنید.</p>]]></content>

    <summary>
    &lt;p&gt;درایور پرینترهای cannon آزاد نیستند و کتابخانه‌های باینری تهیه شده توسط cannon برای معماری i386 هستند. پس اگر میخواهید از این پرینترها روی سیستم‌های ۶۴بیتی استفاده کنید، باید در ابتدا معماری چندگانه را فعال کنید و چند کتابخانه را نصب کنید:

# amd64 only
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libstdc++6:i386 libxml2:i386 zlib1g:i386 libpopt0:i386

اگر cups نصب نیست آن‌را نصب کنید:

sudo apt-get install cups

درایورهای کنون را دانلود و از حالت فشرده خارج کنید:

یا اینکه مستقمیا از طریق خط فرمان فایل مورد نیاز را دانلود کنید
wget http://gdlp01.c-wss.com/gds/6/0&lt;/p&gt;
    </summary>
  </entry>
  
  <entry>
    <title>سلام دنیا از دریچه‌ی میرا</title>
    <link href="http://kiavash.one/2018/03/01/hello-world-from-mira/"/>
    <id>http://kiavash.one/2018/03/01/hello-world-from-mira/</id>

    <published>2018-03-01T00:21:54+0330</published>
    <updated>2018-03-01T00:21:54+0330</updated>

    <content type="html"><![CDATA[<a name="more"></a>
<p>من اهل تجربه کردن هر چیز جدیدی هستم، حتی شاید بشه گفت که به شکلی معتاد تست کردن باشم، البته اکثرا بعد از مدتی به خاطر تکرار نشدن از یادم میرن و از اونجایی که هیچ وقت هم دیگه نیازی بهشون پیدا نمیکنم چندان برام مهم نیست، اما خیلی وقت‌ها هم بوده که چیزهایی که بارها بهشون نیاز پیدا کردم یا کس دیگه‌ای براش سوال شده بوده رو فراموش کرده بودم. سالها بود که تصمیم داشتم مواردی که رو به نظرم کاربردی‌تر میان رو به شکل یک وبلاگ بنویسم تا هم آرشیوی برای خودم باشه و همینکه شاید به کار یکی دیگه بیاد.</p>

<p>نهایتا تصمیم گرفتم که یک وبلاگ رو به شکل استاتیک برای این کار بسازم، مدتی رو میگشتم و دنبال گزینه برای ساختن وبلاگ استاتیک بودم، هر کدوم از سایت‌سازهای استاتیک نکات مثبت و منفی خودشون رو داشتن، تصمیم گیری برام سخت شده بود و خوب چون من اهل اختراع کردن دوباره‌ی چرخ هستم، تصمیم گرفتم که تمام نکاتی رو که از نظر خودم مثبت بودن و حس میکردم مورد نیازم هستن رو کنار هم جمع کنم و مشکل خودم رو یک بار برای همیشه حل کنم، این شد که نوشتن <a href="https://miraxy.githu.io/fa/">میرا</a> رو شروع کردم.</p>

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

<p>میرا به شکل یک نرم افزار آزاد و با لایسنس GPL-3.0 توسعه پیدا میکنه و به کدهاش میتونید در مخازن <a href="https://github.com/kiamazi/mira">گیت‌هاب</a> پروژه دسترسی داشته باشید.</p>

<h3 id="سلام_دنیا.">سلام دنیا.</h3>

<p>این اولین نوشته این وبلاگ است که با کمک <a href="https://miraxy.githu.io/doc-fa/">میرا</a> ساخته شده.</p>]]></content>

    <summary>
    &lt;p&gt;من اهل تجربه کردن هر چیز جدیدی هستم، حتی شاید بشه گفت که به شکلی معتاد تست کردن باشم، البته اکثرا بعد از مدتی به خاطر تکرار نشدن از یادم میرن و از اونجایی که هیچ وقت هم دیگه نیازی بهشون پیدا نمیکنم چندان برام مهم نیست، اما خیلی وقت‌ها هم بوده که چیزهایی که بارها بهشون نیاز پیدا کردم یا کس دیگه‌ای براش سوال شده بوده رو فراموش کرده بودم. سالها بود که تصمیم داشتم مواردی که رو به نظرم کاربردی‌تر میان رو به شکل یک وبلاگ بنویسم تا هم آرشیوی برای خودم باشه و همینکه شاید به کار یکی دیگه بیاد.

نهایتا تصمیم گرفتم که یک وبلاگ رو به شکل استاتیک برای این کار بسازم، مدتی رو میگشتم و دنبال گزینه برای ساختن &lt;/p&gt;
    </summary>
  </entry>
  
</feed>