<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>گنجه</title>
	<atom:link href="http://blog.ebrahim.ir/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.ebrahim.ir</link>
	<description># tail -f /var/log/experience</description>
	<lastBuildDate>Fri, 20 Nov 2009 21:03:13 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>fa</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>پاداشی به نیت «خیر»خواهانهٔ شما</title>
		<link>http://blog.ebrahim.ir/1388/08/padashi-be-niyyate-kheir-khahaneye-shoma/</link>
		<comments>http://blog.ebrahim.ir/1388/08/padashi-be-niyyate-kheir-khahaneye-shoma/#comments</comments>
		<pubDate>Fri, 20 Nov 2009 21:00:36 +0000</pubDate>
		<dc:creator>ابراهیم</dc:creator>
				<category><![CDATA[دل]]></category>
		<category><![CDATA[اسلام]]></category>
		<category><![CDATA[قرآن]]></category>
		<category><![CDATA[قرض]]></category>
		<category><![CDATA[پول]]></category>

		<guid isPermaLink="false">http://blog.ebrahim.ir/?p=317</guid>
		<description><![CDATA[آیات ۶ تا ۸ سورهٔ مبارکهٔ «عادیات»:

إِنَّ الْإِنسَانَ لِرَبِّهِ لَكَنُودٌ  ﴿٦﴾ وَإِنَّهُ عَلَىٰ ذَٰلِكَ لَشَهِيدٌ  ﴿٧﴾ وَإِنَّهُ لِحُبِّ الْخَيْرِ لَشَدِيدٌ  ﴿٨﴾

ترجمهٔ استاد فولادوند:
كه انسان نسبت به پروردگارش سخت ناسپاس است، (٦) و او خود بر اين [امر]، نيك گواه است. (٧) و راستى او سخت شيفته مال است. (٨)
ترجمهٔ آیت الله مکارم [...]]]></description>
			<content:encoded><![CDATA[<p>آیات ۶ تا ۸ سورهٔ مبارکهٔ «عادیات»:</p>
<p style="font-size: large;">
إِنَّ الْإِنسَانَ لِرَبِّهِ لَكَنُودٌ  ﴿٦﴾ وَإِنَّهُ عَلَىٰ ذَٰلِكَ لَشَهِيدٌ  ﴿٧﴾ وَإِنَّهُ لِحُبِّ <span style="color: maroon; font-weight: bold;">الْخَيْرِ</span> لَشَدِيدٌ  ﴿٨﴾
</p>
<p>ترجمهٔ استاد فولادوند:<br />
كه انسان نسبت به پروردگارش سخت ناسپاس است، (٦) و او خود بر اين [امر]، نيك گواه است. (٧) و راستى او سخت شيفته <span style="color: maroon; font-weight: bold;">مال</span> است. (٨)</p>
<p>ترجمهٔ آیت الله مکارم شیرازی:<br />
که انسان در برابر نعمتهای پروردگارش بسیار ناسپاس و بخیل است؛  (٦) و او خود (نیز) بر این معنی گواه است!  (٧) و او علاقه شدید به <span style="color: maroon; font-weight: bold;">مال</span> دارد!  (٨)</p>
<p>ترجمهٔ مرحوم الهی قمشه‌ای:<br />
(قسم به اسبان این مجاهدان دین خدا) که انسان نسبت به پروردگارش کافر نعمت و ناسپاس است.  (٦) و (خدا و یا) خود او بر این ناسپاسی محققا گواه است.  (٧) و هم او بر حب <span style="color: maroon; font-weight: bold;">مال دنیا</span> سخت فریفته و بخیل است.  (٨)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ebrahim.ir/1388/08/padashi-be-niyyate-kheir-khahaneye-shoma/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>دست‌کاری بستهٔ deb</title>
		<link>http://blog.ebrahim.ir/1388/07/manipulating-deb-package/</link>
		<comments>http://blog.ebrahim.ir/1388/07/manipulating-deb-package/#comments</comments>
		<pubDate>Fri, 09 Oct 2009 01:26:47 +0000</pubDate>
		<dc:creator>ابراهیم</dc:creator>
				<category><![CDATA[رایانه]]></category>
		<category><![CDATA[deb]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[dpkg]]></category>

		<guid isPermaLink="false">http://blog.ebrahim.ir/?p=301</guid>
		<description><![CDATA[
شاید براتون پیش اومده باشه که بخواهید یک بستهٔ deb رو نصب کنید، ولی یکی از وابستگی‌0هاش مانع شده باشه. مثلاً چند وقت پیش می‌خواستم بستهٔ gparted رو نصب کنم، ولی gksu جزو وابستگی‌هاش بود. (الان در Debian sid درستش کرده‌اند و دیگه جزو وابستگی‌هاش نیست، بلکه جزو توصیه1‌هاشه.) پس چون می‌خواست به خاطر gksu [...]]]></description>
			<content:encoded><![CDATA[<p><!--startnum=0--></p>
<p>شاید براتون پیش اومده باشه که بخواهید یک بستهٔ deb رو نصب کنید، ولی یکی از وابستگی‌<sup>0</sup>هاش مانع شده باشه. مثلاً چند وقت پیش می‌خواستم بستهٔ gparted رو نصب کنم، ولی gksu جزو وابستگی‌هاش بود. (الان در Debian sid درستش کرده‌اند و دیگه جزو وابستگی‌هاش نیست، بلکه جزو توصیه<sup>1</sup>‌هاشه.) پس چون می‌خواست به خاطر gksu بخشی از GNOME رو نصب کنه، و از طرفی من هم به GNOME حساسیت دارم(!)، نمی‌تونستم با این اوضاع gparted رو نصب کنم. ولی یک نکتهٔ مهم این بود که من می‌دونستم که واقعا gksu رو نیاز ندارم و می‌تونم بدون اون هم از gparted استفاده کنم. در این شرایط راهی که به ذهن آدم می‌رسه اینه که بستهٔ deb مربوط به gparted رو دست‌کاری و gksu رو از فهرست وابستگی‌هاش حذف کنه.</p>

<div class="wp_syntax"><div class="code" dir="ltr"><pre class="none" style="font-family:monospace;">$ apt-get install gparted -y --print-uris | grep '/gparted_'
$ wget http://ftp.debian.org/debian/pool/main/g/gparted/gparted_0.3.7-1_amd64.deb
$ mkdir gparted_0.3.7-1.mod_amd64
$ cd gparted_0.3.7-1.mod_amd64
$ dpkg-deb -x ../gparted_0.3.7-1_amd64.deb .
$ dpkg-deb -e ../gparted_0.3.7-1_amd64.deb
$ vim DEBIAN/control</pre></div></div>

<p>(برای پایین‌گذاری<sup>2</sup> پروندهٔ deb می‌شه از debget موجود در بستهٔ debian-goodies هم استفاده کرد)</p>
<p>با ویرایش پروندهٔ<sup>3</sup> control بسته، gksu رو از خطی که با Depends شروع می‌شه حذف می‌کنم. شمارهٔ نسخه رو هم توی خطی که با Version شروع می‌شه تغییر می‌دم.</p>
<p>حالا نوبت بازسازی پروندهٔ deb و نصبش هست:</p>

<div class="wp_syntax"><div class="code" dir="ltr"><pre class="none" style="font-family:monospace;">$ cd ..
$ fakeroot dpkg-deb -b gparted_0.3.7-1.mod_amd64
dpkg-deb: building package `gparted' in `gparted_0.3.7-1.mod_amd64.deb'.
$ sudo dpkg -i gparted_0.3.7-1.mod_amd64.deb</pre></div></div>

<p>به بقیهٔ پرونده‌های داخل پوشهٔ DEBIAN (و حتی بقیهٔ پوشه‌ها) هم نگاهی بندازید! <img src='http://blog.ebrahim.ir/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<ol start="0" class="footnotes"><li id="footnote_0_301" class="footnote">Dependency</li><li id="footnote_1_301" class="footnote">Recommend</li><li id="footnote_2_301" class="footnote">Download</li><li id="footnote_3_301" class="footnote">File</li></ol>]]></content:encoded>
			<wfw:commentRss>http://blog.ebrahim.ir/1388/07/manipulating-deb-package/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>روشی برای تسریع dpkg</title>
		<link>http://blog.ebrahim.ir/1388/07/a-technique-for-speeding-up-dpkg/</link>
		<comments>http://blog.ebrahim.ir/1388/07/a-technique-for-speeding-up-dpkg/#comments</comments>
		<pubDate>Fri, 09 Oct 2009 00:56:15 +0000</pubDate>
		<dc:creator>ابراهیم</dc:creator>
				<category><![CDATA[رایانه]]></category>
		<category><![CDATA[APT]]></category>
		<category><![CDATA[BASH]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[dpkg]]></category>
		<category><![CDATA[Ext4]]></category>
		<category><![CDATA[ReiserFS]]></category>
		<category><![CDATA[SQLite]]></category>
		<category><![CDATA[Tokyo Cabinet]]></category>
		<category><![CDATA[بهینه‌سازی]]></category>
		<category><![CDATA[سامانهٔ عامل]]></category>
		<category><![CDATA[سامانهٔ پرونده]]></category>
		<category><![CDATA[لوح سخت]]></category>
		<category><![CDATA[لینوکس]]></category>
		<category><![CDATA[محک‌زنی]]></category>
		<category><![CDATA[کارآیی]]></category>

		<guid isPermaLink="false">http://blog.ebrahim.ir/?p=292</guid>
		<description><![CDATA[
همون طور که احتمالاً می‌دونید dpkg توساخت0 مدیریت بسته‌ها1 در Debian است. یعنی APT و Synaptic و Aptitude و &#8230; همه روی dpkg بنا شده اند.
dpkg برای نگه‌داری بعضی اطلاعات بسته‌های نصب‌شده، از تعداد زیادی (برای من حدود ۹۰۰۰ تا) پروندهٔ2 کوچک توی مسیر ‎/var/lib/dpkg/info استفاده می‌کنه. هر بار که بسته‌ای رو نصب یا حذف [...]]]></description>
			<content:encoded><![CDATA[<p><!--startnum=0--></p>
<p>همون طور که احتمالاً می‌دونید dpkg توساخت<sup>0</sup> مدیریت بسته‌ها<sup>1</sup> در Debian است. یعنی APT و Synaptic و Aptitude و &#8230; همه روی dpkg بنا شده اند.</p>
<p>dpkg برای نگه‌داری بعضی اطلاعات بسته‌های نصب‌شده، از تعداد زیادی (برای من حدود ۹۰۰۰ تا) پروندهٔ<sup>2</sup> کوچک توی مسیر ‎/var/lib/dpkg/info استفاده می‌کنه. هر بار که بسته‌ای رو نصب یا حذف می‌کنید dpkg همهٔ اون پرونده‌ها رو از روی لوح<sup>3</sup> می‌خونه. این کار روی سامانهٔ پروندهٔ<sup>4</sup> مورد استفادهٔ من، که Ext4 هست، اولین بار بیست-سی ثانیه‌ای طول می‌کشه، که برای من مدت زیادی هست. این کار در دفعات بعدی به علت قرار گرفتن همهٔ اون پرونده‌ها در نهان‌گاه<sup>5</sup> سامانهٔ پرونده در حافظهٔ اصلی، بسیار سریع‌تر انجام می‌شه، تا وقتی که دوباره از نهان‌گاه خارج بشند.</p>
<p>این مشکل هر از گاهی یک سیخی بهم می‌زد و روی اعصابم راه می‌رفت. فکرهای مختلفی برای حلش به ذهنم رسید. از بسیار پیچیده، مثل طراحی و پیاده‌سازی مجدد dpkg روی Tokyo Cabinet یا SQLite، تا بسیار ساده:</p>
<p>شاید بدونید که سامانهٔ پروندهٔ ReiserFS در کار با پرونده‌های کوچک بسیار عالی عمل می‌کنه. علتش هم استفاده از فن «ته‌چِپانی»<sup>6</sup> است.<sup>7</sup> فکر کردم شاید اگر پوشهٔ  ‎/var/lib/dpkg/info رو توی ReiserFS نگه دارم، مشکل حل بشه. این کار رو کردم، ولی به خاطر کارکرد<sup>8</sup> داخلی dpkg روی کل ‎/var/lib/dpkg:</p>

<div class="wp_syntax"><div class="code" dir="ltr"><pre class="none" style="font-family:monospace;">$ sudo su -
# cd /var/lib
# tar cpzf dpkg.tar.gz dpkg
# dd if=/dev/zero of=dpkg.reiserfs bs=$((256*1024*1024)) count=1
# mkreiserfs -f dpkg.reiserfs
# mount -oloop dpkg.reiserfs dpkg
# tar xpf dpkg.tar.gz</pre></div></div>

<p>و بعد آزمودن و دائمی کردن با افزودن به fstab‏:</p>

<div class="wp_syntax"><div class="code" dir="ltr"><pre class="none" style="font-family:monospace;"># echo 3 &gt;/proc/sys/vm/drop_caches
# apt-get install hello
# apt-get purge hello
# echo /var/lib/dpkg.reiserfs /var/lib/dpkg reiserfs loop,noatime 0 1 &gt;&gt;/etc/fstab</pre></div></div>

<p>فکره جواب داد و سرعت dpkg بسیار به‌تر شد. حالا حتی اولین بار هم dpkg اون کار رو در دو-سه ثانیه انجام می‌ده.</p>
<p>علاوه بر مهارت ReiserFS در کار با پرونده‌های کوچک، چند نکتهٔ دیگه هم قابل ذکر هست. یکی این که Ext4 به علت فن «حوزه»<sup>9</sup> در کار با پرونده‌های نسبتاً بزرگی که یک‌جا تخصیص<sup>10</sup> می‌یابند بسیار سریع هست. برای همین به dd گفتم که کل پرونده رو یک‌جا بسازه.</p>
<p>از طرفی چون، در نتیجهٔ نکتهٔ قبل، کل پرونده‌های مربوط به dpkg روی لوح نزدیک به هم قرار می‌گیرند و پراکنده نیستند، با خونده شدن یک پرونده از اون حوالی، تعداد زیادی از بقیه‌شون هم توی نهان‌گاه لوح و تعدادی هم توی نهان‌گاه سامانهٔ پرونده قرار می‌گیرند. همین امر باعث می‌شه کلی زمان جویش<sup>11</sup> که قبلاً برای رسیدن به پرنده‌های پراکنده در اطراف و اکناف لوح هدر می‌رفت، صرفه‌جویی بشه.</p>
<p>به گزینهٔ<sup>12</sup> noatime در fstab هم دقت کنید. رفتار معمولی سامانه‌های پرونده این هست که در هر دست‌رسی (اعم از خواندن یا نوشتن) به یک پرونده، زمان دست‌رسی رو ذخیره می‌کنند. این خیلی بده! هر دست‌رسی = حداقل یک عمل نوشتن روی لوح، و عمل نوشتن هم معمولاً کندتر از خوندن هست. نکته این جاست که برنامه‌های رایج امروزی معمولاً روی اون زمان ثبت‌شده برای آخرین دست‌رسی حساب نمی‌کنند و عملاً اون عدد بی‌استفاده است! گزینهٔ noatime به سامانهٔ پرونده می‌گه که کلاً قید ثبت اون زمان رو بزنه و به این ترتیب کلی عمل نوشتن صرفه‌جویی کنه.</p>
<ol start="0" class="footnotes"><li id="footnote_0_292" class="footnote">Back-end</li><li id="footnote_1_292" class="footnote">Package management</li><li id="footnote_2_292" class="footnote">File</li><li id="footnote_3_292" class="footnote">Disk</li><li id="footnote_4_292" class="footnote">File system</li><li id="footnote_5_292" class="footnote">Cache</li><li id="footnote_6_292" class="footnote">Tail packing</li><li id="footnote_7_292" class="footnote">http://en.wikipedia.org/wiki/ReiserFS#Performance</li><li id="footnote_8_292" class="footnote">Mechanism</li><li id="footnote_9_292" class="footnote">Extent</li><li id="footnote_10_292" class="footnote">Allocation</li><li id="footnote_11_292" class="footnote">Seek</li><li id="footnote_12_292" class="footnote">Option</li></ol>]]></content:encoded>
			<wfw:commentRss>http://blog.ebrahim.ir/1388/07/a-technique-for-speeding-up-dpkg/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>زنده‌ام</title>
		<link>http://blog.ebrahim.ir/1388/07/i-am-alive/</link>
		<comments>http://blog.ebrahim.ir/1388/07/i-am-alive/#comments</comments>
		<pubDate>Thu, 08 Oct 2009 23:43:12 +0000</pubDate>
		<dc:creator>ابراهیم</dc:creator>
				<category><![CDATA[کلمات قصار]]></category>

		<guid isPermaLink="false">http://blog.ebrahim.ir/?p=289</guid>
		<description><![CDATA[ظاهراً هنوز زنده‌ام.
]]></description>
			<content:encoded><![CDATA[<p>ظاهراً هنوز زنده‌ام.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ebrahim.ir/1388/07/i-am-alive/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>توهم اکثریت بودن</title>
		<link>http://blog.ebrahim.ir/1388/03/illusion-of-being-majority/</link>
		<comments>http://blog.ebrahim.ir/1388/03/illusion-of-being-majority/#comments</comments>
		<pubDate>Mon, 15 Jun 2009 15:24:49 +0000</pubDate>
		<dc:creator>ابراهیم</dc:creator>
				<category><![CDATA[دل]]></category>
		<category><![CDATA[رایانه]]></category>
		<category><![CDATA[سیاست]]></category>
		<category><![CDATA[مردم]]></category>

		<guid isPermaLink="false">http://blog.ebrahim.ir/?p=285</guid>
		<description><![CDATA[
گاهی که مدام بین ملت بازمنبع0 زندگی می‌کنم، اخبارشون رو پی‌گیری می‌کنم، تارنوشت1هاشون رو می‌خونم، مطلب می‌نویسم و  خلاصه تو جوّ بازمنبعی‌ها هستم، فکر می‌کنم که اکثر کاربرهای رایانه2 با مقولهٔ نرم‌افزار آزاد3 و بازمنبع آشنا هستند. با خودم می‌گم حتماً اغلب کاربرها روی رایانه‌شون یک توزیع4 Linux نصب دارند. فکر می‌کنم همه حتی [...]]]></description>
			<content:encoded><![CDATA[<p><!--startnum=0--></p>
<p>گاهی که مدام بین ملت بازمنبع<sup>0</sup> زندگی می‌کنم، اخبارشون رو پی‌گیری می‌کنم، تارنوشت<sup>1</sup>هاشون رو می‌خونم، مطلب می‌نویسم و  خلاصه تو جوّ بازمنبعی‌ها هستم، فکر می‌کنم که اکثر کاربرهای رایانه<sup>2</sup> با مقولهٔ نرم‌افزار آزاد<sup>3</sup> و بازمنبع آشنا هستند. با خودم می‌گم حتماً اغلب کاربرها روی رایانه‌شون یک توزیع<sup>4</sup> Linux نصب دارند. فکر می‌کنم همه حتی اگر از Linux یا یکی از BSDها استفاده هم نمی‌کنند، حداقل می‌دونند چیه. واقعاً باورم می‌شه که ما اکثریتیم!</p>
<ol start="0" class="footnotes"><li id="footnote_0_285" class="footnote">Open Source</li><li id="footnote_1_285" class="footnote">Weblog</li><li id="footnote_2_285" class="footnote">Computer</li><li id="footnote_3_285" class="footnote">Free Software</li><li id="footnote_4_285" class="footnote">Distribution</li></ol>]]></content:encoded>
			<wfw:commentRss>http://blog.ebrahim.ir/1388/03/illusion-of-being-majority/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>روشن‌فکری نوین</title>
		<link>http://blog.ebrahim.ir/1388/03/modern-intellectualism/</link>
		<comments>http://blog.ebrahim.ir/1388/03/modern-intellectualism/#comments</comments>
		<pubDate>Fri, 22 May 2009 18:36:46 +0000</pubDate>
		<dc:creator>ابراهیم</dc:creator>
				<category><![CDATA[دل]]></category>
		<category><![CDATA[درد]]></category>
		<category><![CDATA[روشن‌فکری]]></category>
		<category><![CDATA[سیاست]]></category>
		<category><![CDATA[مردم]]></category>

		<guid isPermaLink="false">http://blog.ebrahim.ir/?p=281</guid>
		<description><![CDATA[مردم: هُووو &#8230; شاه رو نگاه! لباس تنش نیست! هُووو &#8230;
بچه: ولی شاه که لباس تنشه!
[نگاه‌های معنی‌دار مردم به بچه و به هم‌دیگر]
بابای بچه: ساکت شو بچه، مردم می‌فهمند روشن‌فکر نیستی.
]]></description>
			<content:encoded><![CDATA[<p>مردم: هُووو &#8230; شاه رو نگاه! لباس تنش نیست! هُووو &#8230;<br />
بچه: ولی شاه که لباس تنشه!<br />
[نگاه‌های معنی‌دار مردم به بچه و به هم‌دیگر]<br />
بابای بچه: ساکت شو بچه، مردم می‌فهمند روشن‌فکر نیستی.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ebrahim.ir/1388/03/modern-intellectualism/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>جادوی یخ‌زن</title>
		<link>http://blog.ebrahim.ir/1388/02/magic-of-freezer/</link>
		<comments>http://blog.ebrahim.ir/1388/02/magic-of-freezer/#comments</comments>
		<pubDate>Fri, 08 May 2009 19:16:55 +0000</pubDate>
		<dc:creator>ابراهیم</dc:creator>
				<category><![CDATA[رایانه]]></category>
		<category><![CDATA[خرابی]]></category>
		<category><![CDATA[لوح سخت]]></category>
		<category><![CDATA[لوح لغزان]]></category>
		<category><![CDATA[یخ‌زن]]></category>

		<guid isPermaLink="false">http://blog.ebrahim.ir/?p=276</guid>
		<description><![CDATA[
چندی پیش در این مورد نوشته بودم که چگونه به کمک یخ‌زن0، لوح سختی1 احیا شد.
چند روز بعدش یکی از دوستان پیامک2 زد که به همون روش، یک لوح لغزان3 رو احیا کرده!
جالب‌تر این که چند روز پیش، یک MP3پخش‌کن4 که چند سالی بود کار نمی‌کرد، به همون روش احیا شد!!!
FreezerHard diskSMSFloppy diskMP3 player]]></description>
			<content:encoded><![CDATA[<p><!--startnum=0--></p>
<p>چندی پیش در این مورد <a href="http://blog.ebrahim.ir/1388/01/reviving-hard-disk/">نوشته بودم</a> که چگونه به کمک یخ‌زن<sup>0</sup>، لوح سختی<sup>1</sup> احیا شد.<br />
چند روز بعدش یکی از دوستان پیامک<sup>2</sup> زد که به همون روش، یک لوح لغزان<sup>3</sup> رو احیا کرده!<br />
جالب‌تر این که چند روز پیش، یک MP3پخش‌کن<sup>4</sup> که چند سالی بود کار نمی‌کرد، به همون روش احیا شد!!!</p>
<ol start="0" class="footnotes"><li id="footnote_0_276" class="footnote">Freezer</li><li id="footnote_1_276" class="footnote">Hard disk</li><li id="footnote_2_276" class="footnote">SMS</li><li id="footnote_3_276" class="footnote">Floppy disk</li><li id="footnote_4_276" class="footnote">MP3 player</li></ol>]]></content:encoded>
			<wfw:commentRss>http://blog.ebrahim.ir/1388/02/magic-of-freezer/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>مقابله با ایرادهای فساد حافظه</title>
		<link>http://blog.ebrahim.ir/1388/01/fighting-memory-corruption-bugs/</link>
		<comments>http://blog.ebrahim.ir/1388/01/fighting-memory-corruption-bugs/#comments</comments>
		<pubDate>Thu, 16 Apr 2009 01:03:31 +0000</pubDate>
		<dc:creator>ابراهیم</dc:creator>
				<category><![CDATA[رایانه]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[C++‎]]></category>
		<category><![CDATA[GCC]]></category>
		<category><![CDATA[Valgrind]]></category>
		<category><![CDATA[ابزار]]></category>
		<category><![CDATA[ایرادزدایی]]></category>
		<category><![CDATA[برنامه‌نویسی]]></category>
		<category><![CDATA[سرریز میان‌گیر]]></category>
		<category><![CDATA[فساد حافظه]]></category>
		<category><![CDATA[هم‌گردان]]></category>

		<guid isPermaLink="false">http://blog.ebrahim.ir/?p=261</guid>
		<description><![CDATA[
مبنای بحث در این مطلب، زبان‌های C++‎ و C هستند، ولی مطالعهٔ آن برای برنامه‌نویسان هر زبانی که در معرض ایراد0های فساد حافظه1 است و حتی هر برنامه‌نویسی، احتمالاً خالی از سود نخواهد بود.
برنامه‌ای نوشته‌اید که ایراد داره. اون رو حسابی آزموده‌اید و هر ایراد منطقی2 رو که فکر می‌کنید ممکن هست وجود داشته باشه [...]]]></description>
			<content:encoded><![CDATA[<p><!--startnum=0--></p>
<p>مبنای بحث در این مطلب، زبان‌های C++‎ و C هستند، ولی مطالعهٔ آن برای برنامه‌نویسان هر زبانی که در معرض ایراد<sup>0</sup>های فساد حافظه<sup>1</sup> است و حتی هر برنامه‌نویسی، احتمالاً خالی از سود نخواهد بود.</p>
<p>برنامه‌ای نوشته‌اید که ایراد داره. اون رو حسابی آزموده‌اید و هر ایراد منطقی<sup>2</sup> رو که فکر می‌کنید ممکن هست وجود داشته باشه بررسی و رفع کرده‌اید، ولی هنوز برنامه ایراد داره!<br />
برنامهٔ شما رفتارهای عجیبی از خودش نشون می‌ده. مثلاً اگر در حالت ایرادزدایی<sup>3</sup> بسازیدش<sup>4</sup> کار می‌کنه، ولی در حالت انتشار<sup>5</sup> یا اشتباه کار می‌کنه، یا کار نمی‌کنه و دچار سانحه<sup>6</sup> می‌شه. یا مثلاً با ورودی‌های مختلف، در جاهای کاملاً متفاوت و نسبتاً بی‌ربط از کد دچار سانحه می‌شه. یا مثلاً همیشه در پایان یک تابع<sup>7</sup> بعد از همهٔ عملیات، ولی قبل از بازگشت (یعنی دقیقاً روی { !!!) دچار سانحه می‌شه.<br />
در چنین شرایطی هست که شما حدس می‌زنید برنامه‌تون دچار ایراد فساد حافظه<sup>1</sup> شده.<br />
اگر برنامه همیشه در یک تابع خاص دچار سانحه می‌شه، حدس می‌زنیم که در یکی از متغیرهای محلی همون تابع خراب‌کاری شده و پشته<sup>8</sup> خراب شده؛ به همین دلیل در هنگام جمع کردن قاب پشتهٔ<sup>9</sup> تابع از روی پشته، به علت فساد نشانی بازگشت<sup>10</sup>، برنامه دچار سانحه می‌شه<sup>11</sup>.<sup>12</sup> معمولاً با خوندن دقیق همون تابع، ایراد یافت و حل می‌شه. اگر نشد، متغیرهای محلی که روی پشته هستند رو به کومه<sup>13</sup> منتقل می‌کنیم (با استفاده از new یا malloc) و می‌ریم به سراغ روش‌های مربوط به فساد کومه که الان می‌خواهیم بگیم.<br />
اولین قدم برای یافتن ایرادهای فساد حافظهٔ کومه، استمداد از حضرت <a href="http://valgrind.kde.org">Valgrind</a> است (که در دبین<sup>14</sup> بسته‌اش valgrind است)):</p>
<div dir="ltr">

<div class="wp_syntax"><div class="code" dir="ltr"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">%</span> <span style="color: #c20cb9; font-weight: bold;">valgrind</span> <span style="color: #660033;">--leak-check</span>=full <span style="color: #660033;">--leak-resolution</span>=high .<span style="color: #000000; font-weight: bold;">/</span>buggy</pre></div></div>

</div>
<p>برنامه با سرعتی بسیار کم‌تر از حد معمول اجرا می‌شه و هر دست‌رسی به حافظهٔ کومه که خارج از حافظهٔ تخصیص‌یافته<sup>15</sup> باشه، با نام تابع و (در حالت ایرادزدایی) شمارهٔ خط کد منبع<sup>16</sup> گزارش می‌شه. البته Valgrind بسیار جای حرف و معرفی و ستایش و غیره داره که از موضوع این مطلب خارجه!<br />
اگر Valgrind مشکل رو یافت و ایراد رفع شد که خدا رو شکر می‌کنیم! اما اگر نه، با یک مورد بدخیم (!) طرف هستیم. یعنی دست‌رسی‌هایی داریم که به رغم ایراد داشتنشون، داخل حافظهٔ تخصیص‌یافته قرار گرفته‌اند. مثلاً دو آرایهٔ ۱۰۰تایی پشت سر هم در کومه گرفته‌ایم و به عنصر ۱۲۵ام از آرایهٔ اول دست زده‌ایم! دست‌رسی هنوز داخل حافظهٔ پردازهٔ<sup>17</sup> خودمان است، ولی نادرست و ایراددار. اگر کسی تا این جای مطلب رو خونده باشه تعجب می‌کنم! البته کسی به جز خودم!<br />
ان‌شاء الله در مطلب بعدی شیوه‌ای برای یافتن این موارد بدخیم معرفی خواهد شد که از یکی از هم‌کاران باتجربه‌ترم (حفظه الله) آموخته‌ام.</p>
<ol start="0" class="footnotes"><li id="footnote_0_261" class="footnote">Bug</li><li id="footnote_1_261" class="footnote">Memory corruption</li><li id="footnote_2_261" class="footnote">Logical</li><li id="footnote_3_261" class="footnote">Debug</li><li id="footnote_4_261" class="footnote">Build</li><li id="footnote_5_261" class="footnote">Release</li><li id="footnote_6_261" class="footnote">Crash</li><li id="footnote_7_261" class="footnote">Function</li><li id="footnote_8_261" class="footnote">Stack</li><li id="footnote_9_261" class="footnote">Stack frame</li><li id="footnote_10_261" class="footnote">Return address</li><li id="footnote_11_261" class="footnote"><span dir="rtl">نوعی سرریز میان‌گیر (Buffer overflow)</span></li><li id="footnote_12_261" class="footnote"><span dir="rtl">البته این رفتار سانحه‌آمیز (!) بستگی به هم‌گردان داره، ولی هم‌گردان‌های جدید مثل GCCهای ۴ به بعد (و شاید بعضی قدیمی‌ترها)، به علت داشتن روش‌هایی برای مقابله با خرابی پشته، عمداً برنامه‌ای تولید می‌کنند که در این شرایط دچار سانحه بشه</span></li><li id="footnote_13_261" class="footnote">Heap</li><li id="footnote_14_261" class="footnote">Debian</li><li id="footnote_15_261" class="footnote">Allocated</li><li id="footnote_16_261" class="footnote">Source code</li><li id="footnote_17_261" class="footnote">Process</li></ol>]]></content:encoded>
			<wfw:commentRss>http://blog.ebrahim.ir/1388/01/fighting-memory-corruption-bugs/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>چند تشکر</title>
		<link>http://blog.ebrahim.ir/1388/01/few-thanks/</link>
		<comments>http://blog.ebrahim.ir/1388/01/few-thanks/#comments</comments>
		<pubDate>Wed, 15 Apr 2009 23:17:43 +0000</pubDate>
		<dc:creator>ابراهیم</dc:creator>
				<category><![CDATA[دل]]></category>
		<category><![CDATA[اسلام]]></category>
		<category><![CDATA[تشکر]]></category>
		<category><![CDATA[جنایت]]></category>
		<category><![CDATA[سپاه]]></category>
		<category><![CDATA[قوهٔ قضاییه]]></category>
		<category><![CDATA[کیهان]]></category>

		<guid isPermaLink="false">http://blog.ebrahim.ir/?p=256</guid>
		<description><![CDATA[
متشکرم0:
از آقای سید ابراهیم رئیسی، معاون اول رییس قوهٔ قضاییه، برای جلوگیری شجاعانه از آزاد کردن شهرام جزایری (یا فراری دادنش1)،
از کیهان و آقای حسین شریعت‌مداری، برای افشای فاجعهٔ مذکور2،
از بر و بچه‌های مرکز بررسی جرایم سازمان‌یافتهٔ سپاه پاسداران، برای پاک کردن اینترنت از لوث چند پایگاه عفت‌ستیز، حیاستیز و دین‌ستیز و دست‌گیری عواملشون.
فارغ از [...]]]></description>
			<content:encoded><![CDATA[<p><!--startnum=0--></p>
<p>متشکرم<sup>0</sup>:<br />
از آقای سید ابراهیم رئیسی، معاون اول رییس قوهٔ قضاییه، برای جلوگیری شجاعانه از آزاد کردن شهرام جزایری (یا فراری دادنش<sup>1</sup>)،<br />
از کیهان و آقای حسین شریعت‌مداری، برای افشای فاجعهٔ مذکور<sup>2</sup>،<br />
از بر و بچه‌های <a href="http://www.gerdab.ir/">مرکز بررسی جرایم سازمان‌یافتهٔ سپاه پاسداران</a>، برای پاک کردن اینترنت از لوث چند پایگاه عفت‌ستیز، حیاستیز و دین‌ستیز و دست‌گیری عواملشون.</p>
<ol start="0" class="footnotes"><li id="footnote_0_256" class="footnote">فارغ از همهٔ سیاست‌بازی‌های رایج</li><li id="footnote_1_256" class="footnote">اگر تکذیب آزاد کردنش راست باشه</li><li id="footnote_2_256" class="footnote">در <a href="http://www.tabnak.ir/pages/?cid=43484">سرمقالهٔ کیهان در تاریخ ۱۳۸۸/۱/۲۲</a></li></ol>]]></content:encoded>
			<wfw:commentRss>http://blog.ebrahim.ir/1388/01/few-thanks/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>باخت به عربستان سعودی</title>
		<link>http://blog.ebrahim.ir/1388/01/losing-to-saudi-arabi/</link>
		<comments>http://blog.ebrahim.ir/1388/01/losing-to-saudi-arabi/#comments</comments>
		<pubDate>Fri, 10 Apr 2009 21:22:18 +0000</pubDate>
		<dc:creator>ابراهیم</dc:creator>
				<category><![CDATA[دل]]></category>
		<category><![CDATA[کلمات قصار]]></category>
		<category><![CDATA[فوت‌بال]]></category>

		<guid isPermaLink="false">http://blog.ebrahim.ir/?p=249</guid>
		<description><![CDATA[باخت اصلی، جست‌وجوی بُرد در زمین فوت‌بال است.
]]></description>
			<content:encoded><![CDATA[<p>باخت اصلی، جست‌وجوی بُرد در زمین فوت‌بال است.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ebrahim.ir/1388/01/losing-to-saudi-arabi/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
