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

--><generator uri="http://www.google.com/reader">Google Reader</generator><id>tag:google.com,2005:reader/user/02742956074443280888/label/Bloggers</id><title>"Bloggers" via PC2st in Google Reader</title><gr:continuation>CMa7osjmoKgC</gr:continuation><author><name>PC2st</name></author><updated>2012-05-26T13:41:09Z</updated><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/pc2st/bloggers" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="pc2st/bloggers" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gr:crawl-timestamp-msec="1338039669363"><id gr:original-id="http://pc2st.wordpress.com/?p=1718">tag:google.com,2005:reader/item/26916cca7da78aa0</id><category term="نوشته شخصی" /><category term="خبر" /><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;توقف فعالیت بلاگ و ادامه فعالیت&lt;/div&gt;</title><published>2012-05-26T13:41:05Z</published><updated>2012-05-26T13:41:05Z</updated><link rel="alternate" href="http://pc2st.wordpress.com/2012/05/26/stopping-of-blog-activity-and-continuing-of-the-activity/" type="text/html" /><summary xml:base="http://pc2st.wordpress.com/" gr:direction="rtl" type="html">&lt;div style="direction:rtl;text-align:right"&gt;سلام، بعد از یکسال دوری… اولین باری است که در اینجا می‌نویسم. در این مدت دوستان خوبی با نظرهایشان مرا یاری کردند و از آنها ممنونم. اما بعد از این توقف طولانی، فعالیت را در www.pc2st.com ادامه خواهم داد و در آنجا خواهم نوشت. خوشحال می‌شوم هرگاه از طریق این نوشته، به آنجا بروید. با [...]&lt;img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=pc2st.wordpress.com&amp;amp;blog=11686360&amp;amp;post=1718&amp;amp;subd=pc2st&amp;amp;ref=&amp;amp;feed=1" width="1" height="1"&gt;&lt;/div&gt;</summary><author><name>‫PC2st‬</name></author><source gr:stream-id="feed/http://pc2st.wordpress.com/feed/"><id>tag:google.com,2005:reader/feed/http://pc2st.wordpress.com/feed/</id><title type="html">PC2st</title><link rel="alternate" href="http://pc2st.wordpress.com" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1337238006449"><id gr:original-id="http://cyberrabbits.net/?p=1093">tag:google.com,2005:reader/item/da828e9faabedcd9</id><category term="Node.js" /><category term="برنامه نویسی" /><category term="AUR" /><category term="log" /><category term="log.io" /><category term="MySQL" /><category term="node.js" /><title type="html">Log.io</title><published>2012-05-17T06:58:08Z</published><updated>2012-05-17T06:58:08Z</updated><link rel="alternate" href="http://cyberrabbits.net/1093/log-io/" type="text/html" /><content xml:base="http://cyberrabbits.net/" gr:direction="rtl" type="html">&lt;div style="direction:rtl;text-align:right"&gt;&lt;p&gt;خیلی وقتها هست که لازمه یک سری فایل Log رو زیر نظر بگیریم. مثلا فایلهای log آپاچی، فایلهای log برای mysql و … در این موارد، من ترجیح میدم ابزاری داشته باشم که بتونم همه اینها رو به صورت همزمان ببینم و نه به کمک ابزارهایی مثل tail که خوب، ممکنه با اون یه چیزهایی رو از دست بدم.&lt;br&gt;
چیزی که ازش استفاده کردم و گذشته از یک سری مشکلات، تقریبا ازش راضیم&lt;a href="http://logio.org/"&gt; Log.io&lt;/a&gt; بوده که با&lt;a href="http://nodejs.org/"&gt; Node.js&lt;/a&gt; کار میکنه . متاسفانه نصبش دردسر زیاد داره، و حتی در یک جاهایی خود اسکریپت نصب مشکلاتی داره. طوری که برای نصبش (بعد از مدتها توقف پروژه و معطلی برای ارایه نسخه جدید) مجبور شدم کلی وقت بگذارم و در نهایت هم برای آرچ یک پکیج AUR بسازم.&lt;br&gt;
در حال حاضر اگر از آرچ استفاده میکنید &lt;a href="https://aur.archlinux.org/packages.php?ID=59024"&gt;این پکیج AUR&lt;/a&gt; میتونه کمکتون کنه ، اگر نه، بهتره مستندات خود Log.io رو مطالعه کنید و کمی تلاش حتما کارتون رو راه میندازه. &lt;a href="https://aur.archlinux.org/packages/no/nodejs-log.io-git/PKGBUILD"&gt;مطالعه این پکیج AUR&lt;/a&gt; هم بد نیست.&lt;br&gt;
– در حال حاضر، باید پکیج Node.js در آرچ downgrade بشه به ۶.۱۱ چون فعلا Log.io با این نسخه کار میکنه. علاوه بر اون، فقط نسخه git پکیج در AUR که من ساختمش درست کار میکنه اون یکی پکیج سالم نیست و کار نمیکنه. هر چی هم با نویسندش سعی کردم تماس بگیرم جواب نداد.&lt;br&gt;
اما طرز کار.&lt;br&gt;
بعد از نصب فایل /etc/log.io/harvester.conf رو ویرایش کنید :&lt;/p&gt;
&lt;pre&gt;
/* Log.io log harvester configuration */

exports.config = {

  // Log server host &amp;amp; port
  server: {
    host: &amp;#39;127.0.0.1&amp;#39;,
    port: 8998,
  },

  // Watch the following log files, defined by label:path mappings
  log_file_paths: {
    slowsql : &amp;#39;/tmp/slowquery.log&amp;#39;,
    mysql : &amp;#39;/tmp/logsql.log&amp;#39;,
    pacman : &amp;#39;/var/lg/pacman.log&amp;#39;,
    apacheaccess : &amp;#39;/var/log/httpd/access_log&amp;#39;,
    apacheerrors : &amp;#39;/var/log/httpd/error_log&amp;#39;,
    logio_harvester: &amp;#39;/var/log/log.io/harvester.log&amp;#39;
  },

  // Define name of current machine.
  // Alternatively, you can set this name in /etc/profile:
  // export LOGIO_HARVESTER_INSTANCE_NAME=&amp;#39;my_log_machine&amp;#39;
  // If so, comment out the line below
  instance_name : &amp;#39;my_laptop&amp;#39;

}
&lt;/pre&gt;
&lt;p&gt;خیلی سخت نیست. فایلهایی که لازمه تو لیست باشن رو اضافه کنید. فقط دقت کنید که دسترسی به این فایلها باید برای کاربر logio باز باشه. همین طور بد نیست که تنظیمات server که در این فایل /etc/log.io/server.conf هست رو هم مرور کنید که با نیازهاتون کاملا هماهنگ باشه : &lt;/p&gt;
&lt;pre&gt;
/* Log.io log server configuration */

exports.config = {

  // Log server port
  port: 8998,

  // Uncomment to enable basic HTTP authentication
  /*
  basic_auth: {
    username: &amp;quot;foo&amp;quot;,
    password: &amp;quot;bar&amp;quot;
  }
  */
}
&lt;/pre&gt;
&lt;p&gt;خوب تقریبا همه چی تمومه. کافیه که هم سرور و هم harvester اجرا بشن . &lt;/p&gt;
&lt;pre&gt;
sudo log.io server start
sudo log.io harvester start
&lt;/pre&gt;
&lt;p&gt;البته ممکنه که سرور یه سیستم دیگه باشه و harvester روی یک سیستم دیگه. به عبارتی Log.io میتونه به شما کمک کنه که اطلاعات رو حتی از روی شبکه و ماشینهای دیگه خودتون جمع آوری کنید.&lt;br&gt;
بعد از اینکار، فقط کافیه که مرورگر مورد علاقتون رو باز کنید و آدرس رو باز کنید : &lt;/p&gt;
&lt;pre&gt;

http://localhost:8998/
&lt;/pre&gt;
&lt;p&gt;– حواستون به تنظیمات سرور و پورتی که اونجا هست باشه.&lt;br&gt;
نتیجه میشه این  : &lt;/p&gt;
&lt;p&gt;&lt;a href="http://cyberrabbits.net/wp-content/uploads/2012/05/2012-05-14-180931_2966x900_scrot.png"&gt;&lt;img src="http://cyberrabbits.net/wp-content/uploads/2012/05/2012-05-14-180931_2966x900_scrot-1024x576.png" alt="" title="2012-05-14-180931_2966x900_scrot" width="1024" height="576"&gt;&lt;/a&gt;&lt;br&gt;
– شاید براتون جالب باشه که چطور میشه کوئری های انجام شده در mysql رو هم اینجا دید. فایل تنظیمات mysql رو باز کنید (فایل my.cnf معمولا و بسته به دیستروی شما جاش متغیره خودتون پیداش کنید ) قسمت mysqld رو پیدا کنید و اینها رو بهش اضافه کنید &lt;/p&gt;
&lt;pre&gt;
# The MySQL server
[mysqld]
# Set All query Log
log=/tmp/logsql.log
# Set Slow Query Log
long_query_time = 1
slow_query_log = 1
slow_query_log_file = /tmp/slowquery.log 
&lt;/pre&gt;
&lt;p&gt;البته اون [mysqld] خودش هست و شما نباید اون رو اضافه کنید. قبل از اجرای log.io دسترسی این دو فایل رو تغییر بدید طوری که logio هم بتونه اونها رو بخونه. &lt;/p&gt;
&lt;div&gt;&lt;/div&gt;&lt;p&gt;پستهای مرتبط :&lt;ol&gt;
&lt;li&gt;&lt;a href="http://cyberrabbits.net/796/my-aur-packages/" rel="bookmark" title="پکیجهای من در آرچ لینوکس"&gt;پکیجهای من در آرچ لینوکس&lt;/a&gt; &lt;small&gt;من از آرچ استفاده میکنم و خیلی هم باهاش راحتم....&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cyberrabbits.net/365/arch-linux/" rel="bookmark" title="آرچ لینوکس، دیسترویی که میشناسمش"&gt;آرچ لینوکس، دیسترویی که میشناسمش&lt;/a&gt; &lt;small&gt;چند روزی هست که درگیر لینوکس بودم و نصب آرچ...&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cyberrabbits.net/909/hiphop/" rel="bookmark" title="HipHop"&gt;HipHop&lt;/a&gt; &lt;small&gt;– این فقط یه معرفی ساده یه پروژه است نه...&lt;/small&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/cyberrabbits/posts/~4/bglmCKUhdFM" height="1" width="1"&gt;&lt;/div&gt;</content><author><name>فرود</name></author><source gr:stream-id="feed/http://feeds2.feedburner.com/cyberrabbits/posts"><id>tag:google.com,2005:reader/feed/http://feeds2.feedburner.com/cyberrabbits/posts</id><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;یادداشتهای بیت نیمسوز&lt;/div&gt;</title><link rel="alternate" href="http://cyberrabbits.net" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1336831425520"><id gr:original-id="http://cyberrabbits.net/?p=1095">tag:google.com,2005:reader/item/4be72e4e7cfc77cf</id><category term="CSS" /><category term="Mini posts" /><category term="bootstrap" /><category term="CSS3" /><category term="github" /><category term="Javascript" /><category term="Less" /><category term="node.js" /><category term="twitter" /><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;دوباره bootstrap – نسخه Less&lt;/div&gt;</title><published>2012-05-12T13:58:59Z</published><updated>2012-05-12T13:58:59Z</updated><link rel="alternate" href="http://cyberrabbits.net/1095/bootstrap-again/" type="text/html" /><content xml:base="http://cyberrabbits.net/" gr:direction="rtl" type="html">&lt;div style="direction:rtl;text-align:right"&gt;&lt;p&gt;چند وقتی هست که bootstrap تبدیل شده به عصای دست من :) و هر کاری رو با اون انجام میدم. منتها شدیدا داره تغییر میکنه و دیگه نسخه‌ای که من راست به چپ کرده بودم، بدرد نمیخورد. این شد که نشستم و دوباره تبدیلش کردم فقط اینکه اینبار به جای نسخه CSS نسخه &lt;a href="http://cyberrabbits.net/977/less-js"&gt;Less&lt;/a&gt; رو تبدیل کردم :))&lt;br&gt;
این پست هم فقط برای اینه که همینو اعلام کنم. برای گرفتنش میتونید از &lt;a href="https://github.com/fzerorubigd/bootstrap"&gt;github&lt;/a&gt; استفاده کنید : &lt;/p&gt;
&lt;pre&gt;
git clone git://github.com/fzerorubigd/bootstrap.git
&lt;/pre&gt;
&lt;p&gt;برای کامپایلش هم نیاز به Node.js دارید. بعد از نصب Node.js اول چند تا وابستگی رو نصب کنید :&lt;/p&gt;
&lt;pre&gt;
npm install recess uglify-js jshint -g
&lt;/pre&gt;
&lt;p&gt;و بعد هم make و همینطور make bootstrap &lt;/p&gt;
&lt;p&gt;&lt;ins&gt;متاسفانه برای ویندوز بدون نصب یک سری چیزها این گزینه ممکن نیست. ابتدا باید mingw رو نصب کنید :&lt;br&gt;
&lt;a href="http://www.mingw.org/" title="MinGW | Minimalist GNU for Windows"&gt;MinGW | Minimalist GNU for Windows&lt;/a&gt;&lt;br&gt;
و بعد هم msys رو : &lt;a href="http://www.mingw.org/wiki/MSYS" title="MSYS | MinGW"&gt;MSYS | MinGW&lt;/a&gt;&lt;br&gt;
و اونوقت میتونید از طریق اونها دستورات رو اجرا کنید.&lt;/ins&gt;&lt;/p&gt;
&lt;p&gt;البته اگه حس اینکارها رو ندارید میتونید&lt;a href="http://cyberrabbits.net/wp-content/uploads/2012/05/bootstrap.zip"&gt; این فایل&lt;/a&gt; رو دانلود کنید و استفاده کنید، ولی شدیدا توصیه میکنم که اینکار رو نکنید، من یادم میره این فایل رو به روز کنم، ولی رپوی اصلی رو به روز نگه می‌دارم.&lt;br&gt;
علاوه بر اینها، یک&lt;a href="https://github.com/twitter/bootstrap/pull/3461"&gt; pull request&lt;/a&gt; هم به رپوی اصلی دادم که بستگی داره که نظر مدیر اصلی پروژه چی باشه و آیا قبول بکنه یا نه.&lt;/p&gt;
&lt;p&gt;اگر مشکلی بود issue رو توی github ثبت کنید و یا اینکه همین جا کامنت بگذارید. &lt;/p&gt;
&lt;div&gt;&lt;/div&gt;&lt;p&gt;پستهای مرتبط :&lt;ol&gt;
&lt;li&gt;&lt;a href="http://cyberrabbits.net/978/twitter-bootstrap/" rel="bookmark" title="Twitter bootstrap"&gt;Twitter bootstrap&lt;/a&gt; &lt;small&gt;آپدیت جدیدی برای این فریم‌ورک نوشتم که میتونید اینجا ببینید....&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cyberrabbits.net/430/crsf-or-how-i-invent-wheel-again/" rel="bookmark" title="CSRF یا چطور چرخ رو دوباره اختراع کردم"&gt;CSRF یا چطور چرخ رو دوباره اختراع کردم&lt;/a&gt; &lt;small&gt;امروز یه اتفاق خیلی ساده، یه درس بزرگ بهم داد....&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cyberrabbits.net/547/install-farsi-font-linux-zenity/" rel="bookmark" title="اسکریپت نصب فونت فارسی برای لینوکس نسخه GUI"&gt;اسکریپت نصب فونت فارسی برای لینوکس نسخه GUI&lt;/a&gt; &lt;small&gt;قبلا یک اسکریپت نوشته بودم برای نصب فونت فارسی در...&lt;/small&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/cyberrabbits/posts/~4/1wabGF_uj4A" height="1" width="1"&gt;&lt;/div&gt;</content><author><name>فرود</name></author><source gr:stream-id="feed/http://feeds2.feedburner.com/cyberrabbits/posts"><id>tag:google.com,2005:reader/feed/http://feeds2.feedburner.com/cyberrabbits/posts</id><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;یادداشتهای بیت نیمسوز&lt;/div&gt;</title><link rel="alternate" href="http://cyberrabbits.net" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1334853913880"><id gr:original-id="http://cyberrabbits.net/?p=1083">tag:google.com,2005:reader/item/63fafa3bba73f4fa</id><category term="PHP" /><category term="لینوکس" /><category term="faq" /><category term="git" /><category term="github" /><category term="linux-faq" /><category term="phing" /><category term="xsl" /><category term="xslt" /><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;سیستم سوالات متداول با کمک github&lt;/div&gt;</title><published>2012-04-19T16:03:21Z</published><updated>2012-04-19T16:03:21Z</updated><link rel="alternate" href="http://cyberrabbits.net/1083/faq-system-using-github/" type="text/html" /><content xml:base="http://cyberrabbits.net/" gr:direction="rtl" type="html">&lt;div style="direction:rtl;text-align:right"&gt;&lt;p&gt;تا الان شده که مدام یه سوال تکراری رو بخواید جواب بدید؟ برای ما توی فروم‌های لینوکسی، اخیرا زیاد پیش میاد. مثلا &lt;a href="http://jadi2.undo.it/"&gt;جادی&lt;/a&gt; دیگه دادش در اومد :))&lt;br&gt;
&lt;a href="http://cyberrabbits.net/wp-content/uploads/2012/04/jadi.png"&gt;&lt;img src="http://cyberrabbits.net/wp-content/uploads/2012/04/jadi.png" alt="" title="jadi" width="539" height="104"&gt;&lt;/a&gt;&lt;br&gt;
 این شد که با خودم گفتم که یه سری سوال و جواب های تکراری یه جا جمع بشن خیلی خوب میشه! نه اینکه همه میرن میخوننش و از دست سوالهای الکی راحت میشیم، نه، چنین چیزی ممکن نیست، ولی خوب بالاخره میشه بهشون لینک داد و کارها خیلی ساده تر میشه. &lt;/p&gt;
&lt;p&gt;اما کجا؟ تو یه فروم؟ ساختار فروم مناسب نیست. ویکی به مراتب بهتره، ولی ویکی کجا؟ بچه‌های اوبونتو خودشون &lt;a href="http://forum.ubuntu.ir/index.php/topic,30797.new.html"&gt;یه بخش سوال و جواب راه انداختن&lt;/a&gt;، ولی همش درباره اوبونتوست (که البته مطمئنم بعدا بهتر میشه) ولی خوب، من یه جای دیگه رو ترجیح میدادم، اینجا : &lt;a href="http://fzerorubigd.github.com/plf/" title="سوالات متداول لینوکسی - سوالات متداول لینوکسی"&gt;سوالات متداول لینوکسی – سوالات متداول لینوکسی&lt;/a&gt;&lt;br&gt;
پیشنهادم، &lt;a href="https://github.com/"&gt;github&lt;/a&gt; بود. این سایت امکان خیلی جالبی رو برای پروژه‌هایی که روی اون هستن به وجود آورده. کافیه یک برنچ داشته باشید به اسم gh-pages و اون توی وب به راحتی قابل دسترسه!اینطوری میشه به راحتی از قابلیت git برای کار گروهی بهره برد.&lt;br&gt;
خوبه، ولی ویرایش یک یا چند html زیاد راحت هم نیست. مدام حواست باید باشه به استیل صفحه، لینکها رو اشتباهی این طرف و اونطرف قاطی نکنی و از طرفی همکاری برای همه سخت میشه، هر کی یه سلیقه داره و کم کم ناهماهنگی پیش میاد (این دلیل از نظر من،‌برای ویکی هم صادقه ).&lt;/p&gt;
&lt;p&gt;این شد که با &lt;a href="http://www.phing.info/trac/"&gt;Phing&lt;/a&gt; یه اسکریپت درست کردم. من هنوز با Phing زیاد آشنا نیستم. ولی بد تجربه‌ای نبود. یه کم &lt;a href="http://www.w3.org/TR/xslt"&gt;xslt&lt;/a&gt; هم قاطیش شد و در نهایت پروژه شکل گرفت. &lt;/p&gt;
&lt;p&gt;ساختار آنچنان هم پیچیده نیست. یه سری فایل xml هست که به این شکله : &lt;/p&gt;
&lt;pre&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;
&amp;lt;page&amp;gt;
	&amp;lt;category&amp;gt;
		&amp;lt;name&amp;gt;linux-terminal&amp;lt;/name&amp;gt;
		&amp;lt;title&amp;gt;ترمینال لینوکس&amp;lt;/title&amp;gt;
		&amp;lt;description&amp;gt;سوالات رایج درباره ترمینال لینوکس&amp;lt;/description&amp;gt;
	&amp;lt;/category&amp;gt;
	&amp;lt;questions&amp;gt;
		&amp;lt;question&amp;gt;
			&amp;lt;q&amp;gt;&amp;lt;![CDATA[1در ترمینال زمانی که رمز باید وارد کنم، ظاهرا همه دکمه های صفحه کلید غیر‌فعال میشوند چون چیزی در ترمینال ثبت نمیشود. چرا؟]]&amp;gt;&amp;lt;/q&amp;gt;
			&amp;lt;a&amp;gt;&amp;lt;![CDATA[کلید‌ها غیرفعال نمیشوند. بنا به دلایل امنیتی کاملا واضح، شما ورودی خودتان را نمیبینید. رمز مورد نظر را وارد کنید و سپس دکمه Enter را بزنید. ]]&amp;gt;&amp;lt;/a&amp;gt;
		&amp;lt;/question&amp;gt;
		&amp;lt;question&amp;gt;
			&amp;lt;q&amp;gt;&amp;lt;![CDATA[چطور میتوانم ....؟]]&amp;gt;&amp;lt;/q&amp;gt;
			&amp;lt;a&amp;gt;&amp;lt;![CDATA[لطفا این سوال را تکمیل کنید]]&amp;gt;&amp;lt;/a&amp;gt;
		&amp;lt;/question&amp;gt;
	&amp;lt;/questions&amp;gt;
&amp;lt;/page&amp;gt;
&lt;/pre&gt;
&lt;p&gt;فکر نکنم توضیح زیادی بخواد. هر فایل حاوی یه مبحثه. مثلا این فایل مبحث ترمینال لینوکس. یه اسم برای فایل خروجی (linux-terminal) که باید با اسم فایل ورودی هم یکی باشه یه عنوان و در نهایت یه توضیح کوتاه یک خطی. بعد هم همه سوالها خیلی ساده پشت سر هم ردیف شدن.&lt;br&gt;
اینطوری سوالها جدا هستن، راحت برای هر کسی قابل ویرایش هستند و مدیریتشون هم راحت‌تره. فقط مشکل اینه که نمایش سوالها به این روش اصلا برای تازه واردها خوشایند نیست. اما xslt رو برای همین گذاشتن :) خوشبختانه Phing پشتیبانی XSLTransform رو داره. با صرف یک نصفه روز، با توجه به اینکه دفعه اولم بود xsl مینوشتم، یک فایل برای تغییر فایل xml به فایل html نوشتم. &lt;/p&gt;
&lt;p&gt;خوب زیاد وارد جزئیات نشم. الان احتیاج به کمک هست برای پر کردن این سوال دونی :) .&lt;br&gt;
قبل از هرکار phing رو نصب کنید (PHP باید نصب باشه، یعنی توی شل دستور php وجود داشته باشه. نیازی به آپاچی یا هر وب سرور دیگه‌ای نیست. ): &lt;/p&gt;
&lt;pre&gt;
pear channel-discover pear.phing.info
pear install phing/phing
&lt;/pre&gt;
&lt;p&gt;بسته به تنظیمات pear ممکنه لازم باشه که این دستورات رو با sudo اجرا کنید (معمولا هست) البته phing نصبش تمومه، ولی برای این برنامه، شما باید&lt;a href="http://php.net/manual/en/book.xsl.php"&gt; xsl رو هم برای php&lt;/a&gt; تنظیم کنید. (ممکنه لازم باشه php-xsl نصب بشه ولی معمولا با ویرایش فایل php.ini و اضافه کردن  extension=xsl.so اینکار انجام میشه)&lt;br&gt;
اگه اکانت github دارید و تنظیمش کردید از قبل (با ثبت کلید عمومی) یا اینکه دوست دارید اینکار رو انجام بدید، که خیلی خوبه. اگر نه برید به قسمت گرفتن فایلها ( قسمت بعدی رو چشم پوشی کنید) که البته شدیدا توصیه میکنم اینکار رو نکنید و اکانت رو بسازید و تنظیم کنید.&lt;br&gt;
خوب برید تو صفحه پروژه plf و یک fork ازش بگیرید. (دکمه fork کاملا مشخصه ) و بعد یه clone از رپوی خودتون -که براتون ساخته میشه- بگیرید.&lt;br&gt;
اگر اکانت ندارید و نمیخواید داشته باشید، این فایل رو دانلود کنید و محتویاتشو بریزید تو سیستم خودتون.&lt;/p&gt;
&lt;p&gt;اصل قضیه یه پوشه است به اسم questions که توش یه سری فایل xml هست. به جز فایل index باقی فایلها، رو میتونید ویرایش کنید. روش ویرایش رو هم بالاتر گفتم. اگر دسته مورد نظرتون اینجا نیست،‌یکی از این فایلها رو کپی کنید اسمشو به اسم انگلیسی دسته مورد نظرتون تغییر بدید و ویرایشش کنید. فکر نکنم کار سختی باشه :) &lt;/p&gt;
&lt;p&gt;اما فایل index.xml،‌تا زمانی که یه فایل جدید نساخته باشید نیازی به ویرایش این فایل وجود نداره. ولی اگه فایل جدیدی اضافه کردید فایل index.xml رو هم ویرایش کنید و اسم فایلتون رو به آخرش اضافه کنید. این قسمت : &lt;/p&gt;
&lt;pre&gt;
&amp;lt;files&amp;gt;
	&amp;lt;file name=&amp;quot;questions/general.xml&amp;quot; /&amp;gt;
	&amp;lt;file name=&amp;quot;questions/linux-terminal.xml&amp;quot; /&amp;gt;
	&amp;lt;file name=&amp;quot;questions/gnome.xml&amp;quot; /&amp;gt;
	&amp;lt;file name=&amp;quot;questions/kde.xml&amp;quot; /&amp;gt;
	&amp;lt;file name=&amp;quot;questions/unity.xml&amp;quot; /&amp;gt;
&amp;lt;/files&amp;gt;
&lt;/pre&gt;
&lt;p&gt;خوب حالا وقتشه که تغییراتتون رو ببینید. توی پوشه دستور phing رو اجرا کنید. اگه همه چی درست باشه اینو میبینید :&lt;br&gt;
&lt;a href="http://cyberrabbits.net/wp-content/uploads/2012/04/phingout.png"&gt;&lt;img src="http://cyberrabbits.net/wp-content/uploads/2012/04/phingout.png" alt="" title="phingout" width="572" height="215"&gt;&lt;/a&gt;&lt;br&gt;
فایلهای خروجی در پوشه output هستند. فایل index.html رو باز کنید و ببینید.&lt;br&gt;
حالا وقتشه تغییرات رو به من برسونید. اگر که قبلا پروژه رو تو github برای خودتون fork کرده باشید، کافیه تغییراتتون رو توی رپوی خودتون (فقط توی برنچ master )ثبت کنید و در نهایت یه درخواست pull request بدید تا سوالات و تغییرات شما به سوالات قبلی اضافه بشه.&lt;br&gt;
اگر اینکار رو نکردید، تغییراتتون رو برای من میل کنید. من اونها رو اضافه میکنم. &lt;/p&gt;
&lt;p&gt;خوب :) منتظرم دوستان!!!&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;&lt;p&gt;بدون پست مرتبط.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/cyberrabbits/posts/~4/TfpCtiz4S1s" height="1" width="1"&gt;&lt;/div&gt;</content><author><name>فرود</name></author><source gr:stream-id="feed/http://feeds2.feedburner.com/cyberrabbits/posts"><id>tag:google.com,2005:reader/feed/http://feeds2.feedburner.com/cyberrabbits/posts</id><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;یادداشتهای بیت نیمسوز&lt;/div&gt;</title><link rel="alternate" href="http://cyberrabbits.net" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1333617346306"><id gr:original-id="http://cyberrabbits.net/?p=1068">tag:google.com,2005:reader/item/94d1ecaca561cfc3</id><category term="Bash" /><category term="PHP" /><category term="لینوکس" /><category term="bash" /><category term="mini2440" /><category term="pacman" /><category term="sftp" /><category term="ssh" /><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;از یک دانلود ساده تا یک خود درگیری بزرگ!&lt;/div&gt;</title><published>2012-04-05T08:17:57Z</published><updated>2012-04-05T08:17:57Z</updated><link rel="alternate" href="http://cyberrabbits.net/1068/challenge-accepted/" type="text/html" /><content xml:base="http://cyberrabbits.net/" gr:direction="rtl" type="html">&lt;div style="direction:rtl;text-align:right"&gt;&lt;p&gt;یکی از مشکلاتی که لینوکسی همیشه میبینم دربارش بحث میکنن یه دانلودر خوب برای دانلود شبانه‌است. به عبارتی دانلودری که زمان‌بندی هم داشته باشه. البته هستن یه چند تای، ولی هیچکدوم همه شرایط لازم رو همزمان ندارن. ولی خوب، میشه گفت این مشکل خیلی ساده حل میشه.&lt;br&gt;
دانلودرهای خط‌فرمانی خوبی توی لینوکس وجود داره و من،‌به شخصه، شدیدا طرفدار aria2 هستم. بعضیا ممکنه axel رو دوست داشته باشن. ولی خوب برای زمان بندی اینها چه کاری میشه کرد؟ سادست :) cron اینجا به دادتون میرسه.&lt;br&gt;
من برای دانلود از یه &lt;a href="http://www.friendlyarm.net/products/mini2440"&gt;mini2440&lt;/a&gt; استفاده میکنم. علتشم اینه که مصرفش خیلی کمه، و از همه مهمتر سر و صدا نداره و مجبور نیستم یه کامپیوتر یا لپ تاب رو بیخود روشن بذارم. روش خیلی ساده aria2 رو کامپایل کردم و الان مدتهاست مثل ساعت داره کار میکنه :)) خوب حالا چطور این کار رو انجام دادم؟&lt;br&gt;
&lt;a href="http://cyberrabbits.net/wp-content/uploads/2012/04/mini2440_1.jpg"&gt;&lt;img src="http://cyberrabbits.net/wp-content/uploads/2012/04/mini2440_1-300x273.jpg" alt="مینی ۲۴۴۰ یکی از تفریحات من :)" title="mini2440" width="300" height="273"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;توی یه پوشه به خصوص، جایی که میخواید دانلودها اونجا ریخته بشن، یه فایل متنی ساده درست کنید. من اسمشو گذاشتم dl.lst و توی پوشه /mnt/sd این فایل رو قرار دادم. توی هر خط این فایل یه لینک میذارم که قراره دانلود بشه و یه اسکریپت خیلی ساده هم به این صورت مینویسم : &lt;/p&gt;
&lt;pre&gt;
#!/bin/bash

cd /mnt/sd/
aria2c -i /mnt/sd/dl.lst -m 10 -j 2
&lt;/pre&gt;
&lt;p&gt;اینکه آرگومانها چه کاری میکنن، با خودتون :) فقط آرگومان -i رو حواستون بهش باشه که آدرس فایل لیستی که بالاتر درست کردید باید بعدش بیاد.&lt;br&gt;
 و نهایتا میرسه نوبت به cron .&lt;br&gt;
اگه ویرایشگر خاصی مدنظرتونه (مثلا nano یا vim یا هرچی ) اینطوری عمل کنید : &lt;/p&gt;
&lt;pre&gt;
EDITOR=nano crontab -e
&lt;/pre&gt;
&lt;p&gt;اینجوری ویرایشگر مورد علاقتون باز میشه و اگه قبلا cron داشته باشید این فایل که باز شده خالی نیست. ولی ممکنه خالی باشه :)‌اونوقت باید یه چیزی شبیه این توش نوشته بشه : &lt;/p&gt;
&lt;pre&gt;
0  2  *  *  *  /bin/aria.sh
0  8  *  *  *  /usr/bin/killall aria2c
&lt;/pre&gt;
&lt;p&gt;ساعت ۲ و ۸ به ترتیب شروع و پایان دانلود رایگان منه. اگه از قبل چیزی در اون فایل بود، فقط اینو به انتهاش اضافه کنید.&lt;br&gt;
فرض بر اینه که اسم اسکریپتی که بالاتر نوشتم، aria.sh باشه توی پوشه bin باشه (شما جای دیگه بذارید من توی mini یه کم محدودیت داشتم :)) )و اجرایی هم شده باشه به این صورت : &lt;/p&gt;
&lt;pre&gt;
chmod a+x /bin/aria.sh
&lt;/pre&gt;
&lt;p&gt;دستور killall هم معمولا تو همین آدرسه ولی اگه خواستید مطمئن بشید بزنید : &lt;/p&gt;
&lt;pre&gt;
which killall
&lt;/pre&gt;
&lt;p&gt;همین :)) فقط کافیه لیست فایلهایی که میخواید دانلود کنید رو بذارید تو فایل dl.lst که اول ساختید. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;خود درگیری به سبک یک گیک!!!&lt;br&gt;
&lt;/strong&gt;&lt;br&gt;
&lt;span&gt;&lt;/span&gt;&lt;br&gt;
خوب خیلیها تا همین‌جا براشون کافیه، برای من نبود.من میخوام دو تا سیستم رو هم به روز نگه دارم. یکی سیستم خودم که آرچه و یکی دیگه هم سیستم بیتا، که مینته. در حقیقت میخوام آپدیتها توی دانلود شبانه گنجونده بشه، و در نهایت بگیرمشون و روی سیستم خودم داشته باشمشون. و اینکار خیلی ساده انجام بشه. یعنی هی نخوام فایلها رو از رو اون سیستم بیارم اینور کپی کنم و فلان. خوب اینجا دیگه حقیقتا حس bash نوشتن نداشتم این شد که رفتم سراغ PHP .&lt;br&gt;
خوب برای اینکار sftp بهترین گزینست. روی دو سیستم اصلی openssh نصبه و روی مینی هم یه نسخه ساده کامپایل کردم از قبل. خوب برای انتقال فایل از sftp میشه این دستورات رو استفاده کرد : &lt;/p&gt;
&lt;pre&gt;
cd /target/dir/on/local
sftp user@server &amp;lt;&amp;lt;EOF
cd /target/dir/on/remote
put /file/address/in/local
get /file/address/in/remote
quit
EOF
&lt;/pre&gt;
&lt;p&gt;خوب زیاد هم سخت نیست. فرض کنید بخواید یه فایل از اون سرور انتقال بدید این طرف، یه فایل از این طرف بفرستید اون طرف :) اول تو سیستم خودتون وارد پوشه مقصد میشید. دستور sftp رو اجرا میکنید بعد توی sftp با کمک دستور cd (که اونجا هم دقیقا مثل اصلش کار میکنه) وارد پوشه مقصد میشید. با دستور put که بعدش باید آدرس فایل روی ماشین خودتون باشه، فایل فرستاده میشه تو پوشه‌ای که بهش cd کردید تو ماشین دوم (سرور) و با دستور get یه فایل رو میتونید از اونجا بگیرید و توی پوشه‌ای که توی ماشین خودتون قبل از دستور sftp داخلش شدید قرار میگیره. و بعد هم quit که خارج میشه .&lt;br&gt;
اون EOF هم یه چیزی مثل Heredoc ها توی PHP رو برای bash پیاده سازی میکنه و میگه از اینجا تا زمانی که به EOF برسی، یه دستوره و چند خط پیاپی و بی ربط نیست.&lt;br&gt;
تنها دستور دیگه که لازمه rm ـه که توی sftp هم دقیقا مثل rm اصلی عمل میکنه (sftp هم چیزی جدای از ssh نیست :) )&lt;br&gt;
خوب قدم به قدم.&lt;br&gt;
اول نیاز دارم بدونم که چه فایلهایی باید برای آپدیت دانلود شن: &lt;/p&gt;
&lt;pre&gt;
#!/usr/bin/php
&amp;lt;?php
echo &amp;quot;Get update list from pacman...\n&amp;quot;;

$updlist = `sudo pacman -Syup | egrep -o -e &amp;quot;(ht|f)tp://[^\&amp;#39;]+&amp;quot;`;
$updlist = explode(&amp;quot;\n&amp;quot;, $updlist );

$updPkg = `sudo pacman -Sup --print-format %n`;
$updPkg = explode(&amp;quot;\n&amp;quot;, $updPkg );

while (substr($updPkg[0] , 0 , 2) == &amp;#39;::&amp;#39;)
    array_shift($updPkg);

$neededPkg = array ();
foreach ($updlist as $indx =&amp;gt; $pkg)
{
    if (!empty($pkg))
    {
        $neededPkg[$updPkg[$indx]] = $pkg;
	}
}
echo &amp;quot;List updates : &amp;quot;;
print_r($neededPkg);
&lt;/pre&gt;
&lt;p&gt;اول pacman رو اجرا میکنیم با سوییچ p و لیست دانلودها رو میگیریم. منتها من بدم نمیومد که اسم پکیجها رو هم داشته باشم. اجرای دوباره pacman برای گرفتن اسم پکیجهاست. بعد این آدرسها رو توی آرایه neededPkg گذاشتم.&lt;br&gt;
حالا وقت اینه که بررسی کنم ببینم آیا قبلا، هیچکدوم از این فایلها دانلود شدن یا نه؟ اونم به این صورت انجام دادم : &lt;/p&gt;
&lt;pre&gt;
define (&amp;#39;server&amp;#39;,&amp;#39;root@192.168.1.24&amp;#39; );
echo &amp;quot;Get downloaded list... \n&amp;quot;;

$cmnd  = &amp;quot;sftp &amp;quot; . server . &amp;quot; &amp;lt;&amp;lt; EOF
ls /mnt/sd
quit
EOF&amp;quot;;

$files =explode (&amp;quot;\n&amp;quot;,`$cmnd`);

$results = array( );

foreach ( $files as $fi )
{
	$f = trim($fi);
    if ( substr($f , 0 , strlen( &amp;quot;/mnt/sd/&amp;quot; ) ) == &amp;#39;/mnt/sd/&amp;#39;)
        $results[ basename($f)] = $f;
}

echo &amp;quot;This is the list of files available on sd card : \n&amp;quot;;
print_r($results);
&lt;/pre&gt;
&lt;p&gt;خیلی ساده :) sftp رو اجرا میکنم، دستور ls رو اجرا میکنم، بعد خروجی رو میگیرم. نتیجه توی آرایه results ریخته شده.&lt;br&gt;
گام سوم ببینم آیا فایلی از فایلهایی که میخوام تو لیست هست یا نه. aria2 وقتی دانلود هنوز تموم نشده باشه یه فایل کنار فایل اصلی میسازه به اسم همون فایل فقط آخرش یه .aria2 میچسبونه. وجود این فایل میتونه نشون بده که فایل کامل دانلود نشده : &lt;/p&gt;
&lt;pre&gt;

$downloaded = array();
$newList = array();
foreach ($neededPkg as $pkg =&amp;gt; $addreess)
{
    $x = basename($addreess);
    if (isset($results[$x] ) &amp;amp;&amp;amp; !isset( $results[$x . &amp;quot;.aria2&amp;quot;]))
    {
       $downloaded[$pkg] = $x;
       echo $x . &amp;quot; is done. \n&amp;quot;;
    }
    else
    {
        $newList[] = $addreess;
        echo $x . &amp;quot; is NOT done. \n&amp;quot;;
    }
}

$newList = implode(&amp;quot;\n&amp;quot;, $newList );
file_put_contents(&amp;quot;/tmp/upd.lst&amp;quot; , $newList);
&lt;/pre&gt;
&lt;p&gt;اگه دقت کنید یه فایل لیست ایجاد شده (/tmp/upd.lst ) حاوی فایلهایی که لازمن ولی هنوز دانلودشون تموم نشده. آرایه downloaded هم لیست فایلهاییه که دانلود شدن. خوب حالا قدم نهایی گرفتن این فایلهاست از سرور و آوردنشون روی سیستم محلیه.&lt;br&gt;
من میخوام اونها رو بریزم توی پوشه‌ای به نام .upd توی home خودم. برای همین لازمه که اول وارد این پوشه بشم : &lt;/p&gt;
&lt;pre&gt;

chdir (&amp;quot;/home/f0rud/.upd&amp;quot;);

$newCmnd = &amp;#39;sftp &amp;#39; . server . &amp;quot; &amp;lt;&amp;lt;EOF
cd /mnt/sd/
rm /mnt/sd/upd.lst
put /tmp/upd.lst
&amp;quot;;

$pacman = &amp;#39;sudo pacman -S --noconfirm &amp;#39;;
$updateIsAvailable = false;
foreach ($downloaded as $p =&amp;gt; $x)
{
    $newCmnd .= &amp;quot;\nget \&amp;quot;/mnt/sd/$x\&amp;quot;&amp;quot;;
    $newCmnd .= &amp;quot;\nrm \&amp;quot;/mnt/sd/$x\&amp;quot;&amp;quot;;
    $pacman .= &amp;quot; $p &amp;quot;;
    $updateIsAvailable = true;
}

$newCmnd .= &amp;quot;\nquit
EOF
&amp;quot;;

echo $newCmnd;

`$newCmnd`;
&lt;/pre&gt;
&lt;p&gt;یه متغیر newCmnd درست میشه که توی این دستور، فایل upd.lst که دفعه قبل ساخته شد، فرستاده میشه به طرف سرور، فایلهایی که در مرحله قبل فهمیدیم دانلودشون تموم شدن، یکی یکی از سرور گرفته میشن، بعد از روی سرور حذف میشن، و همزمان یه دستوری هم ساخته میشه که باید در مرحله آخر برای آپدیت فایلهای دانلود شده اون دستور اجرا بشه. (منظورم متغیر pacman توی کده. ) خوب، وقتشه newCmnd اجرا میشه (یادم رفت بگم که اپراتور بک تیک ` توی PHP ، دستور رو داخل شل اجرا میکنه :)) ) محض احتیاط، دستور ایجاد شده رو هم چاپ میکنیم که ببینیم چه خبره :)&lt;br&gt;
و حالا گام آخر، وقتشه که پکمن اجرا بشه. &lt;/p&gt;
&lt;pre&gt;

if ($updateIsAvailable)
{
	$str = &amp;quot;sudo mv /home/f0rud/.upd/* /var/cache/pacman/pkg/&amp;quot;;
	`$str`;

	echo $pacman;

	`$pacman`;
}else
	echo &amp;quot;No update for now.&amp;quot;;
&lt;/pre&gt;
&lt;p&gt;اگه آپدیتی باشه، فایلها به پوشه کش پکمن منتقل میشن، و بعد پکمن اجرا میشه.&lt;br&gt;
خوب حالا یه مشکلی هست، این فایل upd.lst که الان اون طرف هست، چطور باید به لیست دانلود اضافه بشه؟ خیلی ساده! اسکریپت بالایی رو که هنوز یادتون هست؟ همونی که aria2 رو اجرا میکرد و اسمش aria.sh بود . تغییرش دادم به این : &lt;/p&gt;
&lt;pre&gt;
#!/bin/bash

cd /mnt/sd/
cat /mnt/sd/upd.lst &amp;gt; /mnt/sd/dl
echo &amp;quot; &amp;quot; &amp;gt;&amp;gt; /mnt/sd/dl
cat /mnt/sd/dl.lst &amp;gt;&amp;gt; /mnt/sd/dl

aria2c -i /mnt/sd/dl -m 10 -j 2
&lt;/pre&gt;
&lt;p&gt;همین :)) حالا کافیه که فایل php رو اجرایی کنم، و بعد هم خیلی ساده اونو اجراش کنم و تمام! خودش همه کارها رو انجام میده. فقط یه مشکل :) این sftp رمز میخواد. sudo هم به همچنین :) حالا sudo قابل تحمله،‌ چون یه بار که میپرسه تا یه مدتی بیخیال میشه :) ولی sftp چی؟ خیلی سادست :)) &lt;/p&gt;
&lt;p&gt;توجه کنید لطفا! اگر قبلا برای مثلا github یا هر جای دیگه یا هر دلیل دیگه کلید خودتون رو درست کردید، گام اول رو انجام ندید وگرنه کلید قبلی از بین میره!!!! &lt;/p&gt;
&lt;pre&gt;
~  ᐅ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/f0rud/.ssh/id_rsa):
Created directory '/home/f0rud/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/f0rud/.ssh/id_rsa.
Your public key has been saved in /home/f0rud/.ssh/id_rsa.pub.
The key fingerprint is:
29:90:f2:bc:3b:61:4a:d1:32:85:03:f0:70:4f:d3:a3 f0rud@elbit
The key's randomart image is:
+--[ RSA 2048]----+
|=...o.           |
| +oo.oo          |
|  o++. .         |
|  ++E.   .       |
|   +o . S        |
|  . o. .         |
| . o..           |
|  . ..           |
|    ..           |
+-----------------+
&lt;/pre&gt;
&lt;p&gt;با دستور ssh-keygen یه کلید جدید درست کنید. هر چی پرسید فقط Enter بزنید. یعد در گام دوم، با دستور ssh-copy-id این کلید رو منتقل کنید به ماشین مقصد : &lt;/p&gt;
&lt;pre&gt;
ssh-copy-id root@192.168.1.24
&lt;/pre&gt;
&lt;p&gt;اینجا رمز ماشین رو میپرسه، بعد کلید رو منتقل میکنه. حالا سعی کنید به ماشین مقصد ssh کنید. اگه همه چی درست باشه دیگه رمز ازتون نمیپرسه. خوب همه چی حله!!!!&lt;br&gt;
اینم کل اسکریپت بالایی به صورت یک جا : &lt;/p&gt;
&lt;pre&gt;
#!/usr/bin/php
&amp;lt;?php
define (&amp;#39;server&amp;#39;,&amp;#39;root@192.168.1.24&amp;#39; );

echo &amp;quot;Get update list from pacman...\n&amp;quot;;

$updlist = `sudo pacman -Syup | egrep -o -e &amp;quot;(ht|f)tp://[^\&amp;#39;]+&amp;quot;`;
$updlist = explode(&amp;quot;\n&amp;quot;, $updlist );

$updPkg = `sudo pacman -Sup --print-format %n`;
$updPkg = explode(&amp;quot;\n&amp;quot;, $updPkg );

while (substr($updPkg[0] , 0 , 2) == &amp;#39;::&amp;#39;)
    array_shift($updPkg);

$neededPkg = array ();
foreach ($updlist as $indx =&amp;gt; $pkg)
{
    if (!empty($pkg))
    {
        $neededPkg[$updPkg[$indx]] = $pkg;
	}
}
echo &amp;quot;List updates : &amp;quot;;
print_r($neededPkg);

echo &amp;quot;Get downloaded list... \n&amp;quot;;

$cmnd  = &amp;quot;sftp &amp;quot; . server . &amp;quot; &amp;lt;&amp;lt; EOF
ls /mnt/sd
quit
EOF&amp;quot;;

$files =explode (&amp;quot;\n&amp;quot;,`$cmnd`);

$results = array( );

foreach ( $files as $fi )
{
	$f = trim($fi);
    if ( substr($f , 0 , strlen( &amp;quot;/mnt/sd/&amp;quot; ) ) == &amp;#39;/mnt/sd/&amp;#39;)
        $results[ basename($f)] = $f;
}

echo &amp;quot;This is the list of files available on sd card : \n&amp;quot;;
print_r($results);

$downloaded = array();
$newList = array();
foreach ($neededPkg as $pkg =&amp;gt; $addreess)
{
    $x = basename($addreess);
    if (isset($results[$x] ) &amp;amp;&amp;amp; !isset( $results[$x . &amp;quot;.aria2&amp;quot;]))
    {
       $downloaded[$pkg] = $x;
       echo $x . &amp;quot; is done. \n&amp;quot;;
    }
    else
    {
        $newList[] = $addreess;
        echo $x . &amp;quot; is NOT done. \n&amp;quot;;
    }
}

$newList = implode(&amp;quot;\n&amp;quot;, $newList );
file_put_contents(&amp;quot;/tmp/upd.lst&amp;quot; , $newList);

chdir (&amp;quot;/home/f0rud/.upd&amp;quot;);

$newCmnd = &amp;#39;sftp &amp;#39; . server . &amp;quot; &amp;lt;&amp;lt;EOF
cd /mnt/sd/
rm /mnt/sd/upd.lst
put /tmp/upd.lst
&amp;quot;;

$pacman = &amp;#39;sudo pacman -S --noconfirm &amp;#39;;
$updateIsAvailable = false;
foreach ($downloaded as $p =&amp;gt; $x)
{
    $newCmnd .= &amp;quot;\nget \&amp;quot;/mnt/sd/$x\&amp;quot;&amp;quot;;
    $newCmnd .= &amp;quot;\nrm \&amp;quot;/mnt/sd/$x\&amp;quot;&amp;quot;;
    $pacman .= &amp;quot; $p &amp;quot;;
    $updateIsAvailable = true;
}

$newCmnd .= &amp;quot;\nquit
EOF
&amp;quot;;

echo $newCmnd;

`$newCmnd`;

if ($updateIsAvailable)
{
	$str = &amp;quot;sudo mv /home/f0rud/.upd/* /var/cache/pacman/pkg/&amp;quot;;
	`$str`;

	echo $pacman;

	`$pacman`;
}else
	echo &amp;quot;No update for now.&amp;quot;;
&lt;/pre&gt;
&lt;p&gt;چقدر نوشتم!!!!!&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;&lt;p&gt;پستهای مرتبط :&lt;ol&gt;
&lt;li&gt;&lt;a href="http://cyberrabbits.net/264/download-with-resume-support-in-php/" rel="bookmark" title="دانلود فایل با قابلیت Resume در PHP"&gt;دانلود فایل با قابلیت Resume در PHP&lt;/a&gt; &lt;small&gt;کد انتهایی یه مشکل کوچک داشت که اصلاح شد :)‌...&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cyberrabbits.net/403/source-forge-redirector/" rel="bookmark" title="دانلود از SourceForge بدون مشکل"&gt;دانلود از SourceForge بدون مشکل&lt;/a&gt; &lt;small&gt;اسکریپت رو اگه نصب کردید دوباره آپدیت کنید، چون sf...&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cyberrabbits.net/360/bash-gui-wget/" rel="bookmark" title="Bash GUI for wget"&gt;Bash GUI for wget&lt;/a&gt; &lt;small&gt;اینبار هم میخوام بازم یه اسکریپت رو که تازه نوشتم...&lt;/small&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/cyberrabbits/posts/~4/Qa9nkCSVqVg" height="1" width="1"&gt;&lt;/div&gt;</content><author><name>فرود</name></author><source gr:stream-id="feed/http://feeds2.feedburner.com/cyberrabbits/posts"><id>tag:google.com,2005:reader/feed/http://feeds2.feedburner.com/cyberrabbits/posts</id><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;یادداشتهای بیت نیمسوز&lt;/div&gt;</title><link rel="alternate" href="http://cyberrabbits.net" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1331218452127"><id gr:original-id="http://cyberrabbits.net/?p=1056">tag:google.com,2005:reader/item/89a930c98a3ea3c1</id><category term="PHP" /><category term="Class" /><category term="interface" /><category term="php 5.4" /><category term="singleton" /><category term="trait" /><title type="html">PHP 5.4 Trait</title><published>2012-03-05T10:32:33Z</published><updated>2012-03-05T10:32:33Z</updated><link rel="alternate" href="http://cyberrabbits.net/1056/php-5-4-trait/" type="text/html" /><content xml:base="http://cyberrabbits.net/" gr:direction="rtl" type="html">&lt;div style="direction:rtl;text-align:right"&gt;&lt;p&gt;یکی از قابلیتهای جدیدی که به PHP 5.4 (که بالاخره چند روز پیش&lt;a href="http://www.php.net/archive/2012.php#id2012-03-01-1"&gt; نسخه نهاییش منتشر شد&lt;/a&gt;) اضافه شده، &lt;a href="https://wiki.php.net/rfc/horizontalreuse"&gt;Trait&lt;/a&gt; ها هستن. خیلی زبانها اجازه ارث بری چندگانه رو میدن ولی PHP از اونها نیست. البته این قابلیت-ارث بری چندگانه-، به نظر شخصی من یکی از اون قابلیتهاییه که توی ایجاد کردن دردسر و ابهام میتونه خیلی نقش داشته باشه.&lt;br&gt;
PHP توی نسخه جدید،‌برای رفع این نقیصه یه موجودیت جدید رو معرفی کرده که البته دقیقا همون ارث بری چندگانه نیست، ولی به اندازه کافی مفید هست.. &lt;/p&gt;
&lt;p&gt;خیلی وقتها کلاسهایی که مینویسیم، شباهتهایی با همدیگه دارن. مثلا برای سینگلتون من همیشه اینطور عمل میکنم : &lt;/p&gt;
&lt;pre&gt;
class Singleton
{
	private static $instance;

	public static function getInstance(){
		if (!self::$instance)
			self::$instance = new self();
		return self::$instance;
	}

}
&lt;/pre&gt;
&lt;p&gt;حالا اگه من تعداد زیادی کلاس داشته باشم که بخوام همه اونها سینگلتون باشن، بای همه رو از این کلاس به ارث ببرم، که عملا ممکن نیست، مثلا من نمیتون کلاس مربوط به دیتابیس و کلاس مربوط به Translation رو از یه کلاس مشترک شروع کنم. &lt;/p&gt;
&lt;p&gt;قبلا &lt;a href="http://ir2.php.net/manual/en/language.oop5.interfaces.php"&gt;interface&lt;/a&gt; ها معرفی شده بودن، ولی اونها فقط یه اعلام تابع هستن و بدنه تابع، برای هر کلاس باید دوباره توی خود کلاس نوشته بشه.&lt;br&gt;
توی زبانهایی مثل C++ میشه اینو خیلی ساده حل کرد، هر کلاس میتونه بیشتر از یه پدر داشته باشه،‌و تمام. (مثلا کلاس دیتابیس میتونه همزمان از کلاس دیتابیس پایه ارث ببره و هم از اینکلاس Singleton ) ولی PHP اون روش رو انتخاب نکرد، و من خوشحالم که اینکار رو نکرد، چون قبلا صابون ارث بری چندگانه به تنم خورده بود :)) &lt;/p&gt;
&lt;p&gt;trait ها، یه موجودیت کامل نیستن. امکان نداره بشه یه شی از یه trait ساخت. اونها کلاس نیستن، بلکه قراره که بخشی از یه کلاس باشن.&lt;br&gt;
مثلا برای مثال سینگلتون : &lt;/p&gt;
&lt;pre&gt;
trait Singleton
{
	private static $instance;

	public static function getInstance(){
		if (!self::$instance)
			self::$instance = new self();
		return self::$instance;
	}
}

class MySingletonClass
{
	use Singleton;
}

$singleton = MySingletonClass::getInstance();
&lt;/pre&gt;
&lt;p&gt;– یه نکته خیلی جالب، تو سایت php.net نوشته که &lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;
Static variables can be referred to in trait methods, but cannot be defined by the trait.
&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;یعنی من نمیتونم یه متغیر استاتیک رو داخل یک trait تعریف کنم، ولی کد بالا بدون مشکل کار میکنه و این عجیبه! (همین کد بالا اجرا میشه،‌اگه به جای private عمومی هم باشه اجرا میشه و کلا مشکلی نیست.)&lt;/p&gt;
&lt;p&gt;این خیلی ساده، باعث میشه که شما از نوشتن کد زاید بی نیاز بشید. مثالهای خیلی بهتر و جامعتری میشه ارایه داد، برای من که در عمل خیلی پیش اومده که یه قسمت از یه کلاس بارها و بارها در کلاسهای دیگه استفاده بشه. توی کامنتهای خود سایت php.net یه مثال جالب بود، و اونهم اینکه trait در حقیقت مثل Copy/Paste عمل میکنه و من تا حدی باهاش موافقم&lt;/p&gt;
&lt;p&gt;مثالهای خود &lt;a href="http://php.net/manual/en/language.oop5.traits.php"&gt;php.net&lt;/a&gt; هم جالبن :&lt;br&gt;
یه کلاس میتونه از یه کلاس دیگه ارث ببره و هر چند تا trait هم داشته باشه مثلا : &lt;/p&gt;
&lt;pre&gt;

class Base {
    public function sayHello() {
        echo &amp;#39;Hello &amp;#39;;
    }
}

trait SayWorld {
    public function sayHello() {
        parent::sayHello();
        echo &amp;#39;World!&amp;#39;;
    }
}

class MyHelloWorld extends Base {
    use SayWorld;
}

$o = new MyHelloWorld();
$o-&amp;gt;sayHello();  //Result is Hello World!
&lt;/pre&gt;
&lt;p&gt;از طرفی تا یه حدی مشکل تداخل هم هست. در بعضی موارد، PHP اونها رو رفع میکنه مثلا در این مورد :&lt;/p&gt;
&lt;pre&gt;
trait HelloWorld {
    public function sayHello() {
        echo &amp;#39;Hello World!&amp;#39;;
    }
}

class TheWorldIsNotEnough {
    use HelloWorld;
    public function sayHello() {
        echo &amp;#39;Hello Universe!&amp;#39;;
    }
}

$o = new TheWorldIsNotEnough();
$o-&amp;gt;sayHello();  //Result is Hello Universe!
&lt;/pre&gt;
&lt;p&gt;متد خود کلاس بعد از use اومده و اونه که اولویت داره. &lt;/p&gt;
&lt;p&gt;یه نکته جالب دیگه اینه که میشه هر چند تا trait رو توی یه کلاس استفاده کرد :‌&lt;/p&gt;
&lt;pre&gt;
trait Hello {
    public function sayHello() {
        echo &amp;#39;Hello &amp;#39;;
    }
}

trait World {
    public function sayWorld() {
        echo &amp;#39; World&amp;#39;;
    }
}

class MyHelloWorld {
    use Hello, World;
    public function sayExclamationMark() {
        echo &amp;#39;!&amp;#39;;
    }
}

$o = new MyHelloWorld();
$o-&amp;gt;sayHello();
$o-&amp;gt;sayWorld();
$o-&amp;gt;sayExclamationMark();
&lt;/pre&gt;
&lt;p&gt;اگه دو trait تو یه کلاس استفاده بشن، و بعد هر دو یه متد رو داشته باشن، با خطای fatal متوقف میشید. برای اینکه بتونید این مشکل رو حل کنید و ابهام به وجود نیاد، PHP کلمه کلیدی جدید معرفی کرده به اسم insteadof (به شباهتش با instanceof توجه کنید، فکر کنم عمدا اینطوری انتخاب شده که شبیه باشن) &lt;/p&gt;
&lt;p&gt;علاوه بر او کلیدواژه as هم میشه برای تغییر اسم دادن یک متد از یک trait توی یک کلاس استفاده میشه مثلا : &lt;/p&gt;
&lt;pre&gt;
trait A {
    public function smallTalk() {
        echo 'a';
    }
    public function bigTalk() {
        echo 'A';
    }
}

trait B {
    public function smallTalk() {
        echo 'b';
    }
    public function bigTalk() {
        echo 'B';
    }
}

class Talker {
    use A, B {
        B::smallTalk insteadof A;
        A::bigTalk insteadof B;
    }
}

class Aliased_Talker {
    use A, B {
        B::smallTalk insteadof A;
        A::bigTalk insteadof B;
        B::bigTalk as talk;
    }
}
&lt;/pre&gt;
&lt;p&gt;البته as یه کاربرد دیگه هم داره و اون تغییر دسترسی یک متده . مثلا اگه یه متد توی trait عمومی باشه (public ) و شما بخواید تو کلاستون اونو محافظت شده داشته باشید : &lt;/p&gt;
&lt;pre&gt;
trait HelloWorld {
    public function sayHello() {
        echo 'Hello World!';
    }
}

// Change visibility of sayHello
class MyClass1 {
    use HelloWorld { sayHello as protected; }
}

// Alias method with changed visibility
// sayHello visibility not changed
class MyClass2 {
    use HelloWorld { sayHello as private myPrivateHello; }
}
&lt;/pre&gt;
&lt;p&gt;یک trait خودش میتونه از trait های دیگه استفاده کنه : &lt;/p&gt;
&lt;pre&gt;
trait Hello {
    public function sayHello() {
        echo &amp;#39;Hello &amp;#39;;
    }
}

trait World {
    public function sayWorld() {
        echo &amp;#39;World!&amp;#39;;
    }
}

trait HelloWorld {
    use Hello, World;
}

class MyHelloWorld {
    use HelloWorld;
}

$o = new MyHelloWorld();
$o-&amp;gt;sayHello();
$o-&amp;gt;sayWorld();
&lt;/pre&gt;
&lt;p&gt;توی trait ها میتونیم متد غایب داشته باشیم (abstract) ولی وقتی یه trait توی یک کلاس استفاده میشه اون کلاس یا باید خودش abstract باشه و اگه نیست باید حتما اون متد رو پیاده سازی کنه : &lt;/p&gt;
&lt;pre&gt;
trait Hello {
    public function sayHelloWorld() {
        echo &amp;#39;Hello&amp;#39;.$this-&amp;gt;getWorld();
    }
    abstract public function getWorld();
}

class MyHelloWorld {
    private $world;
    use Hello;
    public function getWorld() {
        return $this-&amp;gt;world;
    }
    public function setWorld($val) {
        $this-&amp;gt;world = $val;
    }
}
&lt;/pre&gt;
&lt;p&gt;البته trait میتونه property هم تعریف کنه،‌ولی در این صورت کلاسی که ازش استفاده میکنه نمیتونه همون property رو داشته باشه تو ساختارش، چون با هم تداخل پیدا میکنن، و این تداخل، قابل اصلاح نیست (بر خلاف تداخل متدها). البته اگه مقدار اولیه دو خصیصه یکی باشه، خطایی گرفته نمیشه. نکته قابل توجه اینه که این مشکل درباره static property ها نیست، و در اون صورت خطایی اعلام نمیشه، ولی منطقا غلطه و این خطرناکتره به نظر من : &lt;/p&gt;
&lt;pre&gt;

trait PropertiesTrait {
    public $same = true;
    public $different = false;
}

class PropertiesExample {
    use PropertiesTrait;
    public $same = true; // Strict Standards.
    public $different = true; // Fatal error
}
&lt;/pre&gt;
&lt;div&gt;&lt;/div&gt;&lt;p&gt;پستهای مرتبط :&lt;ol&gt;
&lt;li&gt;&lt;a href="http://cyberrabbits.net/1002/phpunit/" rel="bookmark" title="PHPUnit"&gt;PHPUnit&lt;/a&gt; &lt;small&gt;یکی از کارهایی که به عنوان برنامه نویس باید انجام...&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cyberrabbits.net/733/regular-expression-part1/" rel="bookmark" title="عبارات با قاعده در PHP – بخش اول"&gt;عبارات با قاعده در PHP – بخش اول&lt;/a&gt; &lt;small&gt;عبارات با قاعده، به نظر خیلی ها ترسناکه. به نظر...&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cyberrabbits.net/411/mysql-menu-part-3/" rel="bookmark" title="Mysql Menu قسمت سوم"&gt;Mysql Menu قسمت سوم&lt;/a&gt; &lt;small&gt;چند وقت پیش در باره منو و طریقه ایجاد آن...&lt;/small&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/cyberrabbits/posts/~4/XPL9CqSARYs" height="1" width="1"&gt;&lt;/div&gt;</content><author><name>فرود</name></author><source gr:stream-id="feed/http://feeds2.feedburner.com/cyberrabbits/posts"><id>tag:google.com,2005:reader/feed/http://feeds2.feedburner.com/cyberrabbits/posts</id><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;یادداشتهای بیت نیمسوز&lt;/div&gt;</title><link rel="alternate" href="http://cyberrabbits.net" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1330015045418"><id gr:original-id="http://cyberrabbits.net/?p=1014">tag:google.com,2005:reader/item/a4e164383ad7fa1e</id><category term="Mini posts" /><category term="لینوکس" /><category term="community" /><category term="freesoftware" /><category term="fsf" /><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;مشکلات من و جامعه نرم افزار آزاد ایران&lt;/div&gt;</title><published>2012-02-23T14:48:40Z</published><updated>2012-02-23T14:48:40Z</updated><link rel="alternate" href="http://cyberrabbits.net/1014/me-and-freesoftware-community-iran/" type="text/html" /><content xml:base="http://cyberrabbits.net/" gr:direction="rtl" type="html">&lt;div style="direction:rtl;text-align:right"&gt;&lt;p&gt;من الان مدتهاست که از نرم افزارهای آزاد استفاده میکنم و خودمو از این جامعه میدونم. ولی یه سری مشکلات هم با این جامعه (بیشتر منظورم اعضا و رفتارشونه) دارم که تصمیم گرفتم به عنوان یه انتقاد مطرحش کنم. منتها برای اینکه سوتفاهم پیش نیاد، لینک به جاهایی که میتونید مثالش رو ببینید نمیدم :)&lt;br&gt;
&lt;em&gt;یه نکته مهم : این نقطه نظر منه، و مطمئنا میتونید بهش ایراد بگیرید و انتقاد کنید، ولی هیچ توهینی در کامنتها به هیچ شخصی اجازه انتشار پیدا نمیکنه.&lt;br&gt;
&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;۱- من فقط و فقط از فلان نرم افزار استفاده میکنم.&lt;/strong&gt;&lt;br&gt;
این جمله که به خودی خود بد نیست،‌ بیشتر در مورد سیستم عامله، که من فقط و فقط از لینوکس استفاده میکنم. این قسمتش بده که همه رو تشویق میکنن به این سیستم عامل، و کلا باقی سیستم عامل ها بد و اخی هستند و … در حال حاظر من هم فقط و فقط از لینوکس استفاده میکنم. ولی اگه یه سیستم عامل دیگه پیدا بشه (شما بگو همون ویندوز) که نیازهای منو برطرف کنه، حتما به طرفش میرم و لینوکس رو کنار میذارم. مساله اصلی اینه که ما توی جامعه مون اینرو درک نمیکنیم که نیازهای افراد متفاوته. مثلا نیاز اول من آزادیه سیستم عاملمه، یعنی اینکه (مثلا) GPL باشه. یه روز اگه ویندوز GPL بشه، و خیلی مشکلات دیگشو حل کنه،‌ به نحوی که برای نیازهای من مناسب تر بشه، حتما میرم سراغ اون. حتی اگه سیستم عامل اپل هم باشه یا هر سیستم عامل دیگه.&lt;br&gt;
ولی نیازهای من با نیازهای همه برابر نیست. خیلی ها ممکنه بنا به دلایلی که خودشون میدونن اصلا با آزاد بودن یا نبودن براشون مهم نباشه! حالا چرا ما تا حرفی از فلان نرم افزار میاد، سریعا موضع میگیریم که نه اون آزاد نیست! یا اون فلان نیست! خوب شاید برای شما این نرم افزار مناسب نباشه، اما دلیلی نداره که برای بقیه هم اینطور باشه!!! مثلا خود من الان برای درایور کارت گرافیکم از دریاور آزاد استفاده نمیکنم. چون نیازهای منو برآورده نمیکنه، همین! دیگه حالا شما بیا دو ساعت فلسفه بباف!&lt;br&gt;
&lt;strong&gt;۲- بت سازی و لولو سازی&lt;/strong&gt;&lt;br&gt;
این یکی کلا مثل اینکه مشکل جامعه ایرانه. ما عادت داریم بت بسازیم. مثلا شما همین الان به یه سری از دوستای من بگو که استالمن احمقه!‌ (فقط مثاله، من استالمن رو دوست دارم لطفا من رو اعدام نکنید) بلافاصله موضع میگیرن، حتی نمیپرسن چرا! لینوس تروالدز، اریک ریموند و … همه اینها از این دست هستند. حالا برعکسشم هست. برای اینها، بیل گیتز یه لولوی بزرگه، ولی اگه من اعلام کنم ازش خوشم میاد (که همین جا میگم که من یک طرفدار پروپاقرض فعالیتهای انسان دوستانه این بشر هستم و به خاطر این قضیه ستایشش میکنم و در صحبتهای روزانه من یکی از مثالهای منه .)  حتما واکنش نشون میدن.&lt;br&gt;
یا مثلا وقتی مسخره بازی افرادی که تو عمرشون حتی یه محصول اپل رو از نزدیک ندیدن، با مرگ استیوجابز شروع شد، گاهی واکنشهای دوستان ما احمقانه تر بود. خود من مشخصا از این کار هموطنهام خوشم نیومد، ولی عکس العمل های دوستان، برام بیشتر عذاب آور بود!&lt;br&gt;
در این مورد هم،‌دقیقا مثل مورد اول، همه چی برمیگرده به تعریف آدم موفق و الگو از دید افراد مختلف. البته این ایراد بزرگ همیشه وارده که یه آدم موفق در همه زمینه ها که موفق نبوده، پس دلیلی نداره دربست قبولش داشته باشی. کل حرف من اینه : &lt;/p&gt;
&lt;pre&gt;
foreach ( $greatPersons as $person ( {
echo &amp;quot; $person انسان بزرگیه، ولی من ترجیح میدم در همه زمینه ها دنباله رو اون نباشم. کلا زندگی من با اون فرق میکنه، دلیلی نداره منم مثل اون زندگی کنم یا فکر کنم. لطفا اینو بفهمید! \n&amp;quot;

//
&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;۳-توهم برتری&lt;/strong&gt;&lt;br&gt;
این یکی چیز جدایی از دو تای بالایی نیست. این اواخر زیاد میشنوم که مثلا فلان سیستم چه ایده هایی رو از لینوکس/گنوم/KDE یا .. وام گرفته. خوب که چی؟ مثلا ویندوز جدیدا یه چیزی مثل Software Center تو اوبونتو  زده، همه دادشون رفته به هوا که اونها دارن میدزدن اینو یا اینکه …&lt;br&gt;
بد نیست یه مثال بزنم،‌ فکر کنم استالمن، یا شاید کس دیگه ای :) میگه اگه بتهوون الان زنده بود و میخواست آهنگ بسازه، احتمالا به موفقی گذشته نبود، چون کلی باید وقت میذاشت که اون تیکه آهنگهایی که پتنت دارن رو تو آهنگهاش نیاره، و بر خلاف قانون عمل نکنه. خوب این یعنی محدودیت، همه اینو میدونیم و مخالفش هستیم، یعنی تو جامعه ما، بدترین کار پتنت کردن یه ایدست. در مورد کد،‌ما حق داریم که کدی رو که نوشتیم رو لیسانس براش بذاریم، GPL یا هر چیز دیگه ای. ولی در مورد ایده ها این درست نیست. نمونه های زیادی هم هست، مثلا خیلی ها دوباره میان میشینن و یه سری بازی رو برای اینکه آزاد باشن دوباره از نو مینویسن. خیلی از نرم افزارها بر اساس نسخه های غیر آزادشون گسترش داده میشن. یه قابلیت که توسط اونها پیاده سازی میشه، یا چرا راه دور بریم؟ گنو شروعش همین بود. خود استالمن شروع کرد به نوشتن یه سری برنامه، با لیسانس جدید دقیقا شبیه برنامه های قبلی که بودن از اول.&lt;br&gt;
دستور ls مثلا، دقیقا معادل دستور اولیه ls که آزاد نبود و توی یونیکس بود کار میکنه. خوب دقیقا همون قدر که یونیکسی ها میتونن به این قضیه گیر بدن که شما دارید از ایده های ما (نه برنامه های ما) استفاده میکنید، ما هم میتونیم بگیم که آی ویندوزی های یا اپلی ها، شما هم دارید از ایده های ما استفاده میکنید. &lt;/p&gt;
&lt;p&gt;البته یکی دیگه هم هست، منتها نمیخوام بنویسمش، چون خیلی عمومی نیست و محدود میشه به یه عده خاص از دوستان و منم دلم نمیخواد مایه دلخوری بشم. ولی این مواردی که گفتم، همه چیزهایی هستند که توی جامعه کوچیک ولی جذاب ما، منو آزار میده، و چون عمومی بودن از دید من نوشتمشون. &lt;/p&gt;
&lt;p&gt;– انتقاد کنید، ممنون میشم. ولی بازم میگم توهینی منتشر نمیشه.&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;&lt;p&gt;بدون پست مرتبط.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/cyberrabbits/posts/~4/1ll2upQKrUQ" height="1" width="1"&gt;&lt;/div&gt;</content><author><name>فرود</name></author><source gr:stream-id="feed/http://feeds2.feedburner.com/cyberrabbits/posts"><id>tag:google.com,2005:reader/feed/http://feeds2.feedburner.com/cyberrabbits/posts</id><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;یادداشتهای بیت نیمسوز&lt;/div&gt;</title><link rel="alternate" href="http://cyberrabbits.net" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1329909344619"><id gr:original-id="http://cyberrabbits.net/?p=1005">tag:google.com,2005:reader/item/4f5d24e242188a85</id><category term="Mini posts" /><category term="ArchLinux" /><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;سایت کاربران آرچ لینوکس فارسی&lt;/div&gt;</title><published>2012-02-22T10:37:48Z</published><updated>2012-02-22T10:37:48Z</updated><link rel="alternate" href="http://cyberrabbits.net/1005/archlinux-i/" type="text/html" /><content xml:base="http://cyberrabbits.net/" gr:direction="rtl" type="html">&lt;div style="direction:rtl;text-align:right"&gt;&lt;p&gt;بالاخره بعد از یک سال تاخیر، سایت آرچ لینوکس فارسی فعالیت خودش رو رسما شروع کرد. فروم، ویکی و سایت اصلی که تا حد ممکن سعی شده شبیه به سایت اصلی باشن.&lt;br&gt;
&lt;a href="http://cyberrabbits.net/1005/archlinux-i/archlinux-logo/" rel="attachment wp-att-1007"&gt;&lt;img src="http://cyberrabbits.net/wp-content/uploads/2012/02/archlinux-logo.png" alt="" title="archlinux-logo" width="500" height="166"&gt;&lt;/a&gt;&lt;br&gt;
قبلا گاه و بیگاه درباره آرچ لینوکس نوشتم، توزیعی که بیشتر از هرچیزی بر اصل &lt;acronym title="Keep it simple, stupid."&gt;KISS&lt;/acronym&gt; اصرار داره، و بنا به دلایل کاملا شخصی، من اونو به هر توزیع لینوکس دیگه ای ترجیح میدم (دلیل من این نیست که مثلا این از همه بهتره، چنین ادعایی ندارم، منتها برای سلیقه من، نیازهای من خیلی مناسب بوده تا الان) و چند سال اخیر هم با اون کار میکردم و تا الان هم ازش راضیم.&lt;br&gt;
به هر صورت، با کمک دوست خوبم &lt;a href="http://slashrosha.org/blog/"&gt;روزبه&lt;/a&gt; و چند تا دوست جدید، وبسایت بالا اومده و فعاله :)) &lt;/p&gt;
&lt;p&gt;سایت اصلی : &lt;a href="http://archlinux.ir/" title="Persian Arch Linux"&gt;Persian Arch Linux&lt;/a&gt;&lt;br&gt;
فروم : &lt;a href="http://bbs.archlinux.ir/" title="Persian Arch Linux Forums"&gt;Persian Arch Linux Forums&lt;/a&gt;&lt;br&gt;
ویکی : &lt;a href="http://wiki.archlinux.ir/index.php/%D8%B5%D9%81%D8%AD%D9%87%D9%94_%D8%A7%D8%B5%D9%84%DB%8C" title="Persian Arch Linux Wiki"&gt;Persian Arch Linux Wiki&lt;/a&gt;&lt;br&gt;
میلینگ لیست (که ترجیح دادیم فعلا یه گروه گوگل باشه ) : &lt;a href="http://groups.google.com/group/archlinux-ir" title="archlinux-ir | Google Groups"&gt;archlinux-ir | Google Groups&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;&lt;p&gt;پستهای مرتبط :&lt;ol&gt;
&lt;li&gt;&lt;a href="http://cyberrabbits.net/547/install-farsi-font-linux-zenity/" rel="bookmark" title="اسکریپت نصب فونت فارسی برای لینوکس نسخه GUI"&gt;اسکریپت نصب فونت فارسی برای لینوکس نسخه GUI&lt;/a&gt; &lt;small&gt;قبلا یک اسکریپت نوشته بودم برای نصب فونت فارسی در...&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cyberrabbits.net/344/farsifonts-installer-linux/" rel="bookmark" title="اسکریپت نصب فونت فارسی برای لینوکس"&gt;اسکریپت نصب فونت فارسی برای لینوکس&lt;/a&gt; &lt;small&gt;تعداد فونتهایی که به لیست اضافه شدن الان دیگه خیلی...&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cyberrabbits.net/664/arch-custom-kernel-compile/" rel="bookmark" title="پچ جادویی :) برای آرچ لینوکس"&gt;پچ جادویی :) برای آرچ لینوکس&lt;/a&gt; &lt;small&gt;این نوید، باید بازاریاب بشه یا فروشنده! این نوشته رو...&lt;/small&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/cyberrabbits/posts/~4/VbYFveh_oaI" height="1" width="1"&gt;&lt;/div&gt;</content><author><name>فرود</name></author><source gr:stream-id="feed/http://feeds2.feedburner.com/cyberrabbits/posts"><id>tag:google.com,2005:reader/feed/http://feeds2.feedburner.com/cyberrabbits/posts</id><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;یادداشتهای بیت نیمسوز&lt;/div&gt;</title><link rel="alternate" href="http://cyberrabbits.net" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1329237185311"><id gr:original-id="http://cyberrabbits.net/?p=1002">tag:google.com,2005:reader/item/e515fd9ec788c936</id><category term="PHP" /><category term="برنامه نویسی" /><category term="pear" /><category term="PHPUnit" /><category term="test" /><title type="html">PHPUnit</title><published>2012-02-14T16:00:50Z</published><updated>2012-02-14T16:00:50Z</updated><link rel="alternate" href="http://cyberrabbits.net/1002/phpunit/" type="text/html" /><content xml:base="http://cyberrabbits.net/" gr:direction="rtl" type="html">&lt;div style="direction:rtl;text-align:right"&gt;&lt;p&gt;یکی از کارهایی که به عنوان برنامه نویس باید انجام بدهم، ولی تنبلی مانع از انجامش میشود، نوشتن Test برای کد‌ها و ماژولهاست. فرض کنید که یک مدل نوشته شده برای اینکه یک کاربر را شبیه سازی کند. مدلی مثلا به شکل زیر : &lt;/p&gt;
&lt;pre&gt;
&amp;lt;?php
	class UserModel {

		private $userName;

		private $isAuthenticated;

		public function __construct(){

			$this-&amp;gt;userName = null;
			$this-&amp;gt;isAuthenticated = false;
		}

		public function getUserName(){
			return $this-&amp;gt;userName;
		}

		public function getIsAuthenticated(){
			return $this-&amp;gt;isAuthenticated;
		}

		public function login($userName , $password){
			//For this example, I do it simple, but in real world we do it diffrent
			if ( $userName == &amp;#39;admin&amp;#39; &amp;amp;&amp;amp; $password == &amp;#39;bita&amp;#39;)
			{
				$this-&amp;gt;isAuthenticated = true;
				$this-&amp;gt;userName = $userName;
				return true;
			}

			return false;

		}
	}
&lt;/pre&gt;
&lt;p&gt;کد چندان پیچیده نیست، اما در عمل به همین سادگی نخواهد بود. معمولا برای تعیین اعتبار از دیتابیس استفاده میشود و جلسات (Session) هم  در آن نقش دارند. برای سادگی من همین حالت را در نظر گرفته‌ام.&lt;br&gt;
خوب برای اینکه این کلاس را تست کنیم و عملکردش را بررسی کنیم،‌بایستی یک نسخه از آن بسازیم و تک تک متدها را هم امتحان کنیم. چیزی مثل این : &lt;/p&gt;
&lt;pre&gt;
$user = new UserModel();

if ($user-&amp;gt;getIsAuthenticated())
	echo &amp;quot;Not OK&amp;quot;;
else
	echo &amp;quot;OK&amp;quot;;
&lt;/pre&gt;
&lt;p&gt;البته، با توجه به سادگی کد نوشته شده، چنین تستی ممکن است بی معنی به نظر برسد، اما خیلی وقتها همه این تست های ساده هم مهم خواهند بود.&lt;br&gt;
این روش، پاسخگو هست، ولی چندان خوشایند نیست. نوشتن if برای هر تست و چاپ خروجی و متن مناسب و .. همه اینها این روش را دشوار میکند. روش اصلی، استفاده از Unit Testing است.&lt;br&gt;
برای PHP یک کتابخانه کامل و جامع نوشته شده که میتوانید آنرا از طریق PEAR نصب کنید : &lt;/p&gt;
&lt;pre&gt;
pear config-set auto_discover 1
pear install pear.phpunit.de/PHPUnit
&lt;/pre&gt;
&lt;p&gt;و همچنین میتوانید راهنمای کامل آن و برگه تقلب را هم دانلود کنید. برای یک تست ساده، برای کدی که نوشتم،‌ یک کلاس دیگر، که عمل تست را انجام میدهد ولی جزئی از پروژه اصلی نیست لازم داریم :&lt;br&gt;
&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre&gt;
&amp;lt;?php
//This is our model class file
require &amp;#39;UserModel.class.php&amp;#39;;

class UserModelTest extends PHPUnit_Framework_TestCase
{
	public function testInitial()
	{
		$user = new UserModel();
		$this-&amp;gt;assertEquals(false, $user-&amp;gt;getIsAuthenticated());
		$this-&amp;gt;assertEquals(null, $user-&amp;gt;getUserName());
	}
}
&lt;/pre&gt;
&lt;p&gt;کلاس جدید، از کلاس  PHPUnit_Framework_TestCase مشتق شده است، و یک متد دارد که اسم آن با test شروع شده، و داخل آن از یک سری متد استفاده شده است (در اینجا assertEquals ) متدهایی که با assert شروع میشوند، یعنی که در صورتی که شرط آنها برقرار باشد (مثلا equal بودن دو آرگومان) آنها موفق خواهند بود،‌در غیراینصورت ناموفقند. لزومی به require کردن فایلی به جز فایل اصلی که قرار است تست شود نیست، خود phpunit فایلهای مورد نیاز را در وقت اجرا اضافه خواهد کرد.&lt;br&gt;
خود PHPUnit کل کلاسهایی که از این کلاس استفاده کرده اند را پیدا کرده و به صورت اتوماتیک یکی یکی متدهایی که با اسمشان با test شروع شده را اجرا میکند. &lt;/p&gt;
&lt;p&gt;حالا وقت اجرای تست است. بر فرض که فایل تست به نام test.php ذخیره شده باشد، دستور زیر :&lt;/p&gt;
&lt;pre&gt;
phpunit  ./test.php
&lt;/pre&gt;
&lt;p&gt;خروجی‌ای به این صورت خواهد داشت : &lt;/p&gt;
&lt;pre&gt;
PHPUnit 3.6.9 by Sebastian Bergmann.

.

Time: 0 seconds, Memory: 5.50Mb

OK (1 test, 2 assertions)
&lt;/pre&gt;
&lt;p&gt;خوب این یعنی تست با موفقیت انجام شده است و نتیجه مثبت بوده. تعداد نقطه‌های خط سوم، تعداد کل test هاست که انجام شده و در نهایت مقدار حافظه مصرف شده و در نهایت تعداد تست ها و assert های انجام شده را نشان میدهد.&lt;br&gt;
برای بهتر دیده شدن نتیجه، سوییچ –colors را به دستور اضافه کنید خروجی رنگی خواهد بود. حالا یک متد دیگر به تست اضافه میکنیم : &lt;/p&gt;
&lt;pre&gt;
	public function testThisMustFail()
	{
		$user = new UserModel();
		$this-&amp;gt;assertTrue($user-&amp;gt;login(&amp;quot;me&amp;quot;, &amp;quot;mypassword&amp;quot;));
	}
&lt;/pre&gt;
&lt;p&gt;با توجه به کدی که در ابتدا نوشتم، این تابع بازگشتی false خواهد داشت و من از assertTrue استفاده کردم، به این معنی که باید آرگومان true باشد، که نیست. نتیجه تست اینطور خواهد بود : &lt;/p&gt;
&lt;pre&gt;
PHPUnit 3.6.9 by Sebastian Bergmann.

.F

Time: 0 seconds, Memory: 5.50Mb

There was 1 failure:

1) UserModelTest::testThisMustFail
Failed asserting that false is true.

/home/f0rud/test.php:17

FAILURES!
Tests: 2, Assertions: 3, Failures: 1.
&lt;/pre&gt;
&lt;p&gt;در حقیقت، تستها باید طوری نوشته شوند که assert ها فقط در حالاتی اشتباه شوند که واقعا مشکلی وجوددارد،‌در صورتی که در تست دوم، واقعا مشکلی وجود ندارد و کد درست عمل میکند، بنابراین طریقه نوشتن تست اشتباه است نه کد. در حقیقت باید از متد assertFalse استفاده کرد که در این صورت نتیجه درست خواهد بود.&lt;br&gt;
چند نکته را در نظر بگیرید :&lt;br&gt;
۱- اسم تست ها، هر چه واضح تر باشند بهتر است. طول اسم متد مهم نیست، الگویی پیدا کنید و بر اساس الگویی که تعیین کردید اسم گذاری کنید، مثلا testNamespaceClassMethod&lt;br&gt;
۲- وقتی کلاس درست عمل کند تست باید موفقیت آمیز باشد. شاید در بعضی شرایط، کد باید یک خطا ایجاد کند، در این موارد حتما توجه کنید که تست را طوری بنویسید که هر وقت رفتار مورد انتظار نشان داده شد، assert موفقیت آمیز باشد، هیچ تفاوت یا ارجحیتی مثلا بین assertTrue و assertFalse نیست.&lt;br&gt;
۳- خیلی از framework ها، برای تست کد، نیاز به مقدماتی دارند که معمولا در خود framework پیش بینی آن میشود. مثلا در Zend از قبل کلاسهایی برای UnitTest وجود دارد، همچنین در Symfony یا Agavi. برای نوشتن کد تست برای این framework ها بهتر است که راهنمای خود آنها را ببینید و از روش خودشان استفاده کنید.&lt;/p&gt;
&lt;p&gt;برای کد بالا، این تست تقریبا تست مناسبی است :&lt;/p&gt;
&lt;pre&gt;
&amp;lt;?php

require &amp;#39;UserModel.class.php&amp;#39;;

class UserModelTest extends PHPUnit_Framework_TestCase
{
	public function testUserModelInitialize()
	{
		$user = new UserModel();
		$this-&amp;gt;assertEquals(false, $user-&amp;gt;getIsAuthenticated());
		$this-&amp;gt;assertEquals(null, $user-&amp;gt;getUserName());
	}

	public function testUserModelLogin()
	{
		$user = new UserModel();
		$this-&amp;gt;assertFalse($user-&amp;gt;login(&amp;quot;me&amp;quot;, &amp;quot;mypassword&amp;quot;));
		$this-&amp;gt;assertEquals(false, $user-&amp;gt;getIsAuthenticated());
		$this-&amp;gt;assertEquals(null, $user-&amp;gt;getUserName());
		$this-&amp;gt;assertTrue($user-&amp;gt;login(&amp;quot;admin&amp;quot; , &amp;quot;bita&amp;quot;));
		$this-&amp;gt;assertEquals(true, $user-&amp;gt;getIsAuthenticated());
		$this-&amp;gt;assertEquals(&amp;#39;admin&amp;#39;, $user-&amp;gt;getUserName());
	}
}
&lt;/pre&gt;
&lt;p&gt;در آینده هم اگر بتوانم باز درباره UnitTest خواهم نوشت.&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;&lt;p&gt;پستهای مرتبط :&lt;ol&gt;
&lt;li&gt;&lt;a href="http://cyberrabbits.net/1056/php-5-4-trait/" rel="bookmark" title="PHP 5.4 Trait"&gt;PHP 5.4 Trait&lt;/a&gt; &lt;small&gt;یکی از قابلیتهای جدیدی که به PHP 5.4 (که بالاخره...&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cyberrabbits.net/372/mail-for-zend-framework/" rel="bookmark" title="ارسال mail از طریق Zend Framework"&gt;ارسال mail از طریق Zend Framework&lt;/a&gt; &lt;small&gt;لطفا کامنتهای داخل کدها رو هم بخونید!! بعضیاشون واقعا ضروری...&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cyberrabbits.net/485/save-session-in-db/" rel="bookmark" title="ذخیره جلسات در پایگاه داده"&gt;ذخیره جلسات در پایگاه داده&lt;/a&gt; &lt;small&gt;دفعه قبل، درباره دزدیدن جلسه صحبت کردم، هنوز منتشر نشده...&lt;/small&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/cyberrabbits/posts/~4/y81NOPapCdI" height="1" width="1"&gt;&lt;/div&gt;</content><author><name>فرود</name></author><source gr:stream-id="feed/http://feeds2.feedburner.com/cyberrabbits/posts"><id>tag:google.com,2005:reader/feed/http://feeds2.feedburner.com/cyberrabbits/posts</id><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;یادداشتهای بیت نیمسوز&lt;/div&gt;</title><link rel="alternate" href="http://cyberrabbits.net" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1327482620682"><id gr:original-id="http://cyberrabbits.net/?p=984">tag:google.com,2005:reader/item/ec12eeca118b7c8e</id><category term="Bash" /><category term="لینوکس" /><category term="متفرقه" /><category term="پیشنویسها" /><category term="accuweather" /><category term="ArchLinux" /><category term="bash" /><category term="conky" /><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;وضعیت آب و هوا&lt;/div&gt;</title><published>2012-01-25T07:59:58Z</published><updated>2012-01-25T07:59:58Z</updated><link rel="alternate" href="http://cyberrabbits.net/984/accuweather/" type="text/html" /><content xml:base="http://cyberrabbits.net/" gr:direction="rtl" type="html">&lt;div style="direction:rtl;text-align:right"&gt;&lt;p&gt;یکی از مسائلی که گاهی برای من مهم میشه، دونستن وضعیت آب و هوای بعضی شهرهاست. خصوصا اینکه به خاطر کارم توی هفته چندین روز باید به یه شهر دیگه برم.&lt;br&gt;
معمولا چند تا سایت رو دم دست داشتم و چک میکردم وضعیت رو، ولی بعد از تنظیم conky که همین چند روز پیش اتفاق افتاد و من دست از تنبلی برداشتم، به این نتیجه رسیدم داشتن وضعیت آب و هوایی هر دو شهر خودم و شهر محل کارم توی conky کاملا واجبه :)) این شد که گشتم دنبال اسکریپتهای مربوط به آب و هوا توی سایتهای مختلف، و معروفترینشون weather.com بود که متاسفانه رایگان نیست، و کلا به درد ما نمیخوره چرا که دست کم شهرهایی که من باهاش کار داشتم رو نداشت.&lt;br&gt;
این شد که گشتم دنبال یک جایگزین و accuweather.com بهترین گزینه بود.&lt;br&gt;
یه قابلیت جالب این سایت، دادن وضعیت آب و هوا به صورت RSS برای یک نقطه خاصه. کافیه کد شهر رو داشته باشی، مثلا برای تهران این لینک میشه :&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;http://rss.accuweather.com/rss/liveweather_rss.asp?metric=1&amp;amp;locCode=MEA|IR|IR026|TEHRAN|&amp;amp;u=1&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;br&gt;
metric میتونه صفر باشه برای فارنهایت و ۱ باشه برای سیلیسیوس. u هم ربطی به قضیه نداره و فقط فرمت پاسخ رو از rss به xml عوض میکنه که اینجا مد نظر نبود.&lt;br&gt;
میمونه locCode که شاید بیشترین وقت من برای پیدا کردن این locCode گذشت :)) ساختار سایت accuweather کلا تغییر کرده و این کدها رو من که نتونستم تو خود سایت پیدا کنم، و در نهایت با بدبختی تونستم یه فایل حاوی خیلی از این کدها پیدا کنم که &lt;a href="http://cyberrabbits.net/wp-content/uploads/2012/01/Weather-Location-Database.zip"&gt;میذارمش اینجا&lt;/a&gt; و شما میتونید دانلودش کنید و امیدوارم شهرتون توش باشه :)&lt;br&gt;
اما اسکریپت، که من اونو از توی فروم &lt;a href="https://bbs.archlinux.org/viewtopic.php?id=37381"&gt;Archlinux&lt;/a&gt; پیداش کردم و کار خودم نیست : &lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;
# !/usr/bin/bash
METRIC=1 #Should be 0 or 1; 0 for F, 1 for C
LOCCOD=&amp;quot;MEA|IR|IR026|TEHRAN&amp;quot; 

if [ -z $1 ] &amp;amp;&amp;amp; [ -x $LOCCOD ] ; then
        echo
        echo &amp;quot;USAGE: $0 [locationcode]&amp;quot;
        echo
        exit 0;
elif [ ! -z $1 ] ; then
        LOCCOD=$1
fi

wget -q http://rss.accuweather.com/rss/liveweather_rss.asp\?metric\=${METRIC}\&amp;amp;locCode\=$LOCCOD -O - | awk \
&amp;#39;/Currently:/ {CurWeather=$0}
/[0-9] Forecast&amp;lt;\/title&amp;gt;/ {nr=NR+5}
NR==nr    {postIndx[++x]=$0}
# x&amp;gt;2    {exit}
END{
    split(CurWeather,tmp,&amp;quot;Currently: &amp;quot;)
    split(tmp[2],tmp1,&amp;quot;&amp;lt;&amp;quot;)
    CurWeather=sprintf(&amp;quot;%s&amp;quot;,tmp1[1])
    sub(&amp;quot;:&amp;quot;,&amp;quot;,&amp;quot;,CurWeather)
    for(x in postIndx){
    split(postIndx[x],tmp,&amp;quot;;|&amp;amp;&amp;quot;)
    split(tmp[1],tmp,&amp;quot;&amp;gt;&amp;quot;)
    split(tmp[2],statement,&amp;quot; C &amp;quot;) # substitute C for F if metric differs
    split(tmp[2],temp)
    forecast[++y]=sprintf(&amp;quot;%d to %dC %-15s&amp;quot;,temp[5],temp[2],statement[3])
    }
    printf(&amp;quot;Now:      %s\nToday:    %s\nTomorrow: %s&amp;quot;,CurWeather,forecast[1],forecast[2])
}&amp;#39;
&lt;/pre&gt;
&lt;p&gt;خروجیش یه چیزی تو این مایه هاست : &lt;/p&gt;
&lt;pre&gt;
Now:      Intermittent Clouds, -4C
Today:    -6 to 0C Increasing clouds
Tomorrow: -5 to 0C Clouds and sun
&lt;/pre&gt;
&lt;p&gt;حالا برای استفاده از خروجی توی conky خیلی ساده میتونید چنین چیزی رو توی تنظیمات conky بذارید : &lt;/p&gt;
&lt;pre&gt;
${execi 300 /path/to/script/myaccuw.sh}
&lt;/pre&gt;
&lt;p&gt;پ.ن : به هیچ وجه نمیتونم صفحه post-new رو توی WP باز کنم! برای زدن پست جدید مجبور شدم تو پیشخوان یه پیشنویس ایجاد کنم و بعد اونو ویرایش کنم (عجیبه که میتونم ویرایش کنم بی مشکل!) کسی راه حل یا دلیلی سراغ نداره برای این قضیه؟؟؟؟&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;&lt;p&gt;بدون پست مرتبط.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/cyberrabbits/posts/~4/Nsckc1SYTEQ" height="1" width="1"&gt;&lt;/div&gt;</content><author><name>فرود</name></author><source gr:stream-id="feed/http://feeds2.feedburner.com/cyberrabbits/posts"><id>tag:google.com,2005:reader/feed/http://feeds2.feedburner.com/cyberrabbits/posts</id><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;یادداشتهای بیت نیمسوز&lt;/div&gt;</title><link rel="alternate" href="http://cyberrabbits.net" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1325595569028"><id gr:original-id="http://cyberrabbits.net/?p=977">tag:google.com,2005:reader/item/1909125293c7f530</id><category term="CSS" /><category term="جاوا اسکریپت" /><category term="وب" /><category term="CSS3" /><category term="Javascript" /><category term="Less" /><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;Less جاوااسکریپت&lt;/div&gt;</title><published>2012-01-03T12:09:00Z</published><updated>2012-01-03T12:09:00Z</updated><link rel="alternate" href="http://cyberrabbits.net/977/less-js/" type="text/html" /><content xml:base="http://cyberrabbits.net/" gr:direction="rtl" type="html">&lt;div style="direction:rtl;text-align:right"&gt;&lt;p&gt;ساختار CSS بسیار ساده و واضح طراحی شده. کلا هم تمرکز روی سلکتورها و خصایصه. در حالت عادی، نیاز بیشتری هم نیست. ولی گاهی، برای پروژه‌های بزرگتر، کدهایی هستن که بیش از اندازه تکرار میشن. خصوصا با ظهور CSS3 و خصایصی که هنوز برای هر بروزری یه جور باید نوشته بشن. مثلا برای border-radius معمولا اینطور نوشته میشه &lt;/p&gt;
&lt;pre&gt;
selector {
  -webkit-border-radius: 3px;
  -moz-border-radius: 3px;
  border-radius: 3px;
}
&lt;/pre&gt;
&lt;p&gt;میشه یه کلاس به این داد، و هر المنتی که قراره ۳ پیکسل border-radius داشته باشه اون کلاس رو بهش اضافه کرد. ولی برای ۴ پیکسل، باز باید همه چی از نو نوشته بشه :)&lt;br&gt;
حتی در خیلی از موارد، برای همین ۳ پیکسل هم اکثر افراد، ترجیح میدن که کل بلوک رو تکرار کنن. این یعنی کلی تکرار بی مورد!&lt;br&gt;
ساختار اصلی CSS این امکان رو در اختیار شما نمیذاره. ولی &lt;a href="http://lesscss.org/"&gt;Less &lt;/a&gt;میتونه خیلی کمک کنه!&lt;br&gt;
این کتابخونه که برای node.js هم وجود داره، به شما یک زبان ساده تر از CSS و کوتاهتر البته، معرفی میکنه، و بعد، هم میشه در طرف کلاینت، و هم در طرف سرور (البته با node.js) اون رو تبدیل به CSS کرد.&lt;br&gt;
برای استفاده از یه فایل less باید اینطوری عمل بشه، اول فایل less رو به صفحه اضافه کنید بعد خود اسکریپت less رو (حتما بعد از فایل less باید اضافه بشه ) : &lt;/p&gt;
&lt;pre&gt;
&amp;lt;link rel=&amp;quot;stylesheet/less&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;styles.less&amp;quot;&amp;gt;
&amp;lt;script src=&amp;quot;less.js&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&lt;/pre&gt;
&lt;p&gt;همین :) البته مثلا من، به شخصه این روش رو نمیپسندم. بیشتر ترجیح میدم، فقط برای طراحی CSS از less و سینتکس جالبش استفاده کنم و در آخر همون فایل رو با کمک lessc (یه برنامه ساده که برای تبدیل ) به CSS استاندارد تبدیل کنم و بعد از اون فایل ساخته شده استفاده کنم. اینجوری کار طراحی راحت تر، و البته قابل انعطاف‌تر میشه. مثلا برای تغییر رنگ و تم، خیلی ساده میشه از متغیرها استفاده کرد که در CSS وجود نداره یا از توابع که اونها هم در CSS نیستن.&lt;/p&gt;
&lt;p&gt;خوب حالا میرسیم به روش نوشتن less .&lt;br&gt;
دقیقا مثل CSS این less هم از بلاکها تشکیل شده و دو مفهوم متغیر و تابع رو هم معرفی میکنه. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;متغیرها &lt;/strong&gt;&lt;br&gt;
متغیرها با @ معرفی میشن به اینصورت : &lt;/p&gt;
&lt;pre&gt;
  // LESS
@color: #4D926F;

#header {
  color: @color;
}
h2 {
  color: @color;
}
&lt;/pre&gt;
&lt;p&gt;تبدیل میشه به : &lt;/p&gt;
&lt;pre&gt;
#header {
  color: #4D926F;
}
h2 {
  color: #4D926F;
}
&lt;/pre&gt;
&lt;p&gt;در Less کامنت تک خطی هم وجود داره، (با دوتا اسلش) که در CSS نهایی دیده نمیشن.&lt;br&gt;
الان، color یه متغیره که در بلاکها ازش استفاده شده، و به راحتی میتونید از این روش استفاده کنید و رنگهای توی طراحی رو به یکباره عوض کنید بدون اینکه نیاز باشه تک تک المانها رو دست بزنید، فقط با تغییر مقدار متغیر.&lt;br&gt;
&lt;span&gt;&lt;/span&gt;&lt;br&gt;
&lt;strong&gt;توابع &lt;/strong&gt;&lt;br&gt;
در Less توابع به اینصورت به وجود میان : &lt;/p&gt;
&lt;pre&gt;
.rounded-corners (@radius: 5px) {
  border-radius: @radius;
  -webkit-border-radius: @radius;
  -moz-border-radius: @radius;
}

#header {
  .rounded-corners;
}
#footer {
  .rounded-corners(10px);
}
&lt;/pre&gt;
&lt;p&gt;تابعی که الان اینجا هست، توی خط اول، شبیه سلکتور کلاسه، با این تفاوت که لیست آرگومان داره. البته، میتونه هیچ آرگومانی نداشته باشه که با دو تا () مشخص میشه و البته از طرفی هم میتونه (مثل همین که الان اینجا هست) مقدار پیشفرض داشته باشه (۵ پیکسل در این مثال.) خروجی به این صورت خواهد بود : &lt;/p&gt;
&lt;pre&gt;
#header {
  border-radius: 5px;
  -webkit-border-radius: 5px;
  -moz-border-radius: 5px;
}
#footer {
  border-radius: 10px;
  -webkit-border-radius: 10px;
  -moz-border-radius: 10px;
}
&lt;/pre&gt;
&lt;p&gt;به اینترتیب، یکی از مشکلات مرتفع میشه :) &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;قوانین تو در تو &lt;/strong&gt;&lt;br&gt;
یکی دیگه از قابلیتهای جالبی که در Less معرفی شده، تو در تو بودن قوانینه به این صورت : &lt;/p&gt;
&lt;pre&gt;
#header {
  h1 {
    font-size: 26px;
    font-weight: bold;
  }
  p { font-size: 12px;
    a { text-decoration: none;
      &amp;amp;:hover { border-width: 1px }
    }
  }
}
&lt;/pre&gt;
&lt;p&gt;به اینصورت میشه : &lt;/p&gt;
&lt;pre&gt;
#header h1 {
  font-size: 26px;
  font-weight: bold;
}
#header p {
  font-size: 12px;
}
#header p a {
  text-decoration: none;
}
#header p a:hover {
  border-width: 1px;
}
&lt;/pre&gt;
&lt;p&gt;اینطوری، کد بسیار واضح تر میشه و ارتباطشون هم واضح‌تر.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;عملگرها &lt;/strong&gt;&lt;br&gt;
یک نکته جالب، و خیلی وقتها به دردبخور در Less، قابلیت استفاده از اپراتورهایی مثل جمع و ضربه.&lt;br&gt;
مثلا :&lt;/p&gt;
&lt;pre&gt;
@base: 5%;
@filler: @base * 2;
@other: @base + @filler;

#test {
	color: #888 / 4;
	background-color: @base-color + #111;
	height: 100% / 2 + @filler;
}
&lt;/pre&gt;
&lt;p&gt;یک سری توابع مفید هم از قبل وجود داره که برای کار با رنگها درست شدن :&lt;/p&gt;
&lt;pre&gt;
lighten(@color, 10%);     // return a color which is 10% *lighter* than @color
darken(@color, 10%);      // return a color which is 10% *darker* than @color

saturate(@color, 10%);    // return a color 10% *more* saturated than @color
desaturate(@color, 10%);  // return a color 10% *less* saturated than @color

fadein(@color, 10%);      // return a color 10% *less* transparent than @color
fadeout(@color, 10%);     // return a color 10% *more* transparent than @color

spin(@color, 10);         // return a color with a 10 degree larger in hue than @color
spin(@color, -10);        // return a color with a 10 degree smaller hue than @color
&lt;/pre&gt;
&lt;p&gt;قابلیتهای دیگه ای مثل استفاده از Namespace و اسکوپ برای متغییر ها، import ، و حتی استفاده از جاوااسکریپت در CSS ها (نه به اون صورتی که همیشه توصیه میکنیم استفاده نشه) در Less ارایه شدن، که کل راهنماشو میتونید &lt;a href="http://lesscss.org/"&gt;در صفحه اصلی&lt;/a&gt; بخونید. &lt;/p&gt;
&lt;div&gt;&lt;/div&gt;&lt;p&gt;پستهای مرتبط :&lt;ol&gt;
&lt;li&gt;&lt;a href="http://cyberrabbits.net/206/css-messages/" rel="bookmark" title="CSS Messages"&gt;CSS Messages&lt;/a&gt; &lt;small&gt;اینها رو ببینید، میخوام یه توضیح مختصر بدم درباره اینا...&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cyberrabbits.net/197/reset-css/" rel="bookmark" title="Reset CSS"&gt;Reset CSS&lt;/a&gt; &lt;small&gt;همیشه توضیح اینکه چطوری میشه که همه بروزرها یه سایت...&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cyberrabbits.net/1095/bootstrap-again/" rel="bookmark" title="دوباره bootstrap – نسخه Less"&gt;دوباره bootstrap – نسخه Less&lt;/a&gt; &lt;small&gt;چند وقتی هست که bootstrap تبدیل شده به عصای دست...&lt;/small&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/cyberrabbits/posts/~4/tX21lVYchC4" height="1" width="1"&gt;&lt;/div&gt;</content><author><name>فرود</name></author><source gr:stream-id="feed/http://feeds2.feedburner.com/cyberrabbits/posts"><id>tag:google.com,2005:reader/feed/http://feeds2.feedburner.com/cyberrabbits/posts</id><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;یادداشتهای بیت نیمسوز&lt;/div&gt;</title><link rel="alternate" href="http://cyberrabbits.net" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1324409316479"><id gr:original-id="http://cyberrabbits.net/?p=978">tag:google.com,2005:reader/item/5a2ba72dd4e1fb94</id><category term="CSS" /><category term="وب" /><category term="Blueprint CSS" /><category term="bootstrap" /><category term="CSS Framework" /><category term="twitter" /><title type="html">Twitter bootstrap</title><published>2011-12-20T19:32:23Z</published><updated>2011-12-20T19:32:23Z</updated><link rel="alternate" href="http://cyberrabbits.net/978/twitter-bootstrap/" type="text/html" /><content xml:base="http://cyberrabbits.net/" gr:direction="rtl" type="html">&lt;div style="direction:rtl;text-align:right"&gt;&lt;p&gt;&lt;ins&gt;آپدیت جدیدی برای این فریم‌ورک نوشتم که میتونید &lt;a href="http://cyberrabbits.net/1095/bootstrap-again/"&gt;اینجا&lt;/a&gt; ببینید.&lt;br&gt;
&lt;/ins&gt;&lt;br&gt;
قبلا درباره &lt;a href="http://cyberrabbits.net/843/%E2%80%8Cblueprint-css/"&gt;فریم وورکهای  CSS  (به صورت خاص blueprint)&lt;/a&gt;نوشتم. اینبار هم میخوام درباره یه فریم وورک CSS بنویسم که یه کم با blueprint متفاوته. &lt;/p&gt;
&lt;p&gt;این فریم وورک توسط توییتر ارایه داده شده و گسترش داده میشه. یه تفاوت عمده هم با blueprint داره و اونهم استفاده بسیار زیاد این فریم وورک از CSS 3 و قابلیتهای جدیدشه. علاوه بر اون یه سری پلاگینهای مربوط به jQuery هم ارایه شده که با این فریم وورک کار میکنن و خیلی ساده باعث بهتر شدن استفاده از اون میشن، که البته استفاده از اونها کاملا اختیاریه و بدون اونها هم هیچ مشکلی پیش نمیاد. برای استفاده از این فریم وورک میتونید از اینجا &lt;a href="https://github.com/twitter/bootstrap" title="twitter/bootstrap - GitHub"&gt;twitter/bootstrap – GitHub&lt;/a&gt; بگیریدش،‌یا اینکه با کمک GIT اونو بارگزاری کنید : &lt;/p&gt;
&lt;pre&gt;
git clone https://github.com/twitter/bootstrap.git
&lt;/pre&gt;
&lt;p&gt;قابلیتهای این فریم وورک خیلی بیشتر از blueprint هستن و امکانات اضافی خیلی زیاد و جالبی دارن که میتونید دموی اون رو &lt;a href="http://twitter.github.com/bootstrap/"&gt;اینجا&lt;/a&gt; ببینید.&lt;br&gt;
قابلیتهای جالبی، مثل منو، نوار ابزار، هشدارهای متفاوت و جالب، قابلیت layout بندی ساده (بسیار شبیه blueprint اما به صورت کاملتر)‌ استیلهایی برای جداول، فرم و … که باعث میشن این فریم وورک بسیار مفید و کارآمد خواهد بود.&lt;br&gt;
بزرگترین مشکل این فریم وورک برای من، RTL ساپورت نبودنش بود، که دست آخر تصمیم گرفتم خودم انجامش بدم و نتیجش شد این : &lt;a href="https://github.com/fzerorubigd/bootstrap" title="fzerorubigd/bootstrap - GitHub"&gt;fzerorubigd/bootstrap – GitHub&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;تو این یکی یه فایل &lt;a href="https://raw.github.com/fzerorubigd/bootstrap/master/bootstrap.rtl.css"&gt;bootstrap.rtl.css&lt;/a&gt; هم هست که باید بعد از خود bootstrap.css به صفحه اضافه بشه و درنهایت صفحه کاملا راست به چپ میشه. (برای دانلودش از &lt;a href="http://cyberrabbits.net/href="&gt;این لینک&lt;/a&gt; بگیریدش)&lt;/p&gt;
&lt;p&gt;مثال خود این فریم وورک، کامل و جامعه. برای راست به چپ هم همون مثال درست کار میکنه :)، فقط فایل CSS رو بعد از (تاکید میکنم،‌بعد از) فایل اصلی اضافه کنید به صفحه.&lt;br&gt;
در دو مورد صفحه HTML یه کم تغییرات میخواد، و حقیقتا نمیدونم twipsy چرا کار نمیکنه :) ولی فکر کنم این تا الان تنها نسخه راست به چپه :))&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;&lt;p&gt;پستهای مرتبط :&lt;ol&gt;
&lt;li&gt;&lt;a href="http://cyberrabbits.net/1095/bootstrap-again/" rel="bookmark" title="دوباره bootstrap – نسخه Less"&gt;دوباره bootstrap – نسخه Less&lt;/a&gt; &lt;small&gt;چند وقتی هست که bootstrap تبدیل شده به عصای دست...&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cyberrabbits.net/843/%e2%80%8cblueprint-css/" rel="bookmark" title="‌Blueprint CSS"&gt;‌Blueprint CSS&lt;/a&gt; &lt;small&gt;یکی از مهمترین قسمتهای برنامه نویسی وب برای من اینه...&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cyberrabbits.net/977/less-js/" rel="bookmark" title="Less جاوااسکریپت"&gt;Less جاوااسکریپت&lt;/a&gt; &lt;small&gt;ساختار CSS بسیار ساده و واضح طراحی شده. کلا هم...&lt;/small&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/cyberrabbits/posts/~4/pTYl40PBmo8" height="1" width="1"&gt;&lt;/div&gt;</content><author><name>فرود</name></author><source gr:stream-id="feed/http://feeds2.feedburner.com/cyberrabbits/posts"><id>tag:google.com,2005:reader/feed/http://feeds2.feedburner.com/cyberrabbits/posts</id><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;یادداشتهای بیت نیمسوز&lt;/div&gt;</title><link rel="alternate" href="http://cyberrabbits.net" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1316629396940"><id gr:original-id="http://cyberrabbits.net/?p=962">tag:google.com,2005:reader/item/e43897897cfd7ba7</id><category term="PHP" /><category term="برنامه نویسی" /><category term="متفرقه" /><category term="Bot" /><category term="Eli" /><category term="IRC" /><category term="mafia" /><category term="zconf" /><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;ربات مافیا – PHP&lt;/div&gt;</title><published>2011-09-21T16:36:27Z</published><updated>2011-09-21T16:36:27Z</updated><link rel="alternate" href="http://cyberrabbits.net/962/mafia-irc-php/" type="text/html" /><content xml:base="http://cyberrabbits.net/" gr:direction="rtl" type="html">&lt;div style="direction:rtl;text-align:right"&gt;&lt;p&gt;بازی &lt;a href="http://fa.wikipedia.org/wiki/%D9%85%D8%A7%D9%81%DB%8C%D8%A7_(%D8%A8%D8%A7%D8%B2%DB%8C_%DA%AF%D8%B1%D9%88%D9%87%DB%8C)"&gt;مافیا&lt;/a&gt; رو اولین بار وقتی دانشجو بودیم انجام دادم و متاسفانه چون توی فصل امتحانات بود و منم فارغ التحصیل زیاد قاطی قضیه نشدم :)‌&lt;br&gt;
چند وقت پیش، دوست خوبم ایمان، سعی کرد بچه ها رو جمع کنه برای بازی تو Gtalk و همون موقع تصمیم گرفتم که این بازی رو به صورت یه ربات برای IRC پیاده سازی کنم. به عبارتی این ربات نقش خدا رو توی بازی انجام میده.&lt;/p&gt;
&lt;p&gt;تو این بین، تجربه های جالبی هم داشتیم، تو همایش &lt;a href="http://2011.zconf.ir/"&gt;ZConf&lt;/a&gt; بازی رو به صورت حضوری انجام دادیم و بعد هم گویا ترکشهای این بازی به &lt;a href="http://yeenghelabi.wordpress.com/2011/09/18/%D9%85%D8%A7%D9%81%DB%8C%D8%A7-%D9%88-%D8%A7%D9%88%D9%84%DB%8C%D9%86-%D8%AA%D8%AC%D8%B1%D8%A8%D9%87%E2%80%8C%DB%8C-%D9%85%D9%86/"&gt;جشن اصفهان&lt;/a&gt; هم رسید و الی آخر!&lt;/p&gt;
&lt;p&gt;اما ربات. تصمیم گرفتم که منتشرش کنم. قبلا هم &lt;a href="http://cyberrabbits.net/non/mafia/"&gt;راهنماشو&lt;/a&gt; نوشتم و حالا کد.&lt;br&gt;
فقط یه لطفی کنید و اگه میخواید ازش استفاده کنید :‌&lt;br&gt;
۱- خودتون دو تا Channel برای مافیا درست کنید اون اصلی ها رو که من ثبت کردم (##PMG و ##PMGMafais ) رو شما باید تغییر بدید. -module/mafia/MafiaGame.php-&lt;br&gt;
۲-برای ربات هم یه اسم دیگه انتخاب کنید fzBot رو من ثبتش کردم :)&lt;br&gt;
۳- همین دیگه خود دانید :) یادتون باشه این ربات فقط برای تفریح نوشته شده و من اصلا قصد انتشارشو یا حتی رسوندنش به این مرحله رو نداشتم، پس زیاد انتظار یه کد ایده آل نداشته باشید.&lt;/p&gt;
&lt;p&gt;فعلا همین :) تا بعد که نسخه بعدیشو در بیارم، شاید یه تیپ دیگه و …&lt;/p&gt;
&lt;p&gt;پ.ن : امروز تولد الیه. تولدت مبارک خانمی :)&lt;br&gt;
&lt;ins&gt;و اینم Github : https://github.com/fzerorubigd/pmg&lt;/ins&gt;&lt;/p&gt;
&lt;p&gt;برای گرفتن کد از GIT استفاده کنید :))&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;&lt;p&gt;پستهای مرتبط :&lt;ol&gt;
&lt;li&gt;&lt;a href="http://cyberrabbits.net/321/about-past/" rel="bookmark" title="یه کم درباره گذشته…."&gt;یه کم درباره گذشته….&lt;/a&gt; &lt;small&gt;چند وقتی بود که درگیر بودم. یه سر رفتم نمایشگاه....&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cyberrabbits.net/159/linux-and-the-lost-delight/" rel="bookmark" title="لینوکس و شوقی که گم کرده بودم"&gt;لینوکس و شوقی که گم کرده بودم&lt;/a&gt; &lt;small&gt;خیلی سال پیش،‌ وقتی برای اولین بار یک کامپیوتر دیدم،‌بلافاصله...&lt;/small&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/cyberrabbits/posts/~4/WNGadANBUM8" height="1" width="1"&gt;&lt;/div&gt;</content><author><name>فرود</name></author><source gr:stream-id="feed/http://feeds2.feedburner.com/cyberrabbits/posts"><id>tag:google.com,2005:reader/feed/http://feeds2.feedburner.com/cyberrabbits/posts</id><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;یادداشتهای بیت نیمسوز&lt;/div&gt;</title><link rel="alternate" href="http://cyberrabbits.net" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1313780256796"><id gr:original-id="http://cyberrabbits.net/?p=941">tag:google.com,2005:reader/item/94bcee26d6a4a801</id><category term="Bash" /><category term="zenity" /><category term="خیلی پیش میاد!" /><category term="پیشنویسها" /><category term="bash" /><category term="divx" /><category term="ext3" /><category term="ext4" /><category term="ffmpeg" /><category term="mencoder" /><category term="mplayer" /><category term="tune2fs" /><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;پیشنویسها – Bash&lt;/div&gt;</title><published>2011-08-19T16:20:57Z</published><updated>2011-08-19T16:20:57Z</updated><link rel="alternate" href="http://cyberrabbits.net/941/bash-drafts/" type="text/html" /><content xml:base="http://cyberrabbits.net/" gr:direction="rtl" type="html">&lt;div style="direction:rtl;text-align:right"&gt;&lt;p&gt;خیلی پیش میاد که این وبلاگ به صورت یک آرشیو برای خودم مفید میشه! چون من خیلی فراموش کارم و زیاد پیش میاد که یه کار رو که بارها انجام دادم فراموش کنم!&lt;br&gt;
جدیدا از پستهای پیشنویس هم استفاده میکردم برای ذخیره کردن یه سری چیزها، راههای ساده تر هست، میدونم، ولی یه باره شد، و چند تا نکته رو، وقتی خونه نبودم تو وبلاگ ذخیره کردم. حالا به این نتیجه رسیدم که خیلی از اینها میتونه برای دیگران هم بدرد بخور باشه. اینه که پستهای پیشنویس که یه کم پر بار تر بشن منتشرشون میکنم، و این هم یکی از اون پستهای پیشنویسه، که البته یه کم توضیحات به هر تیکش اضافه کردم :&lt;br&gt;
&lt;span&gt;&lt;/span&gt;&lt;br&gt;
&lt;strong&gt;۱-چسباندن صدا به یک ویدئو :&lt;/strong&gt;&lt;br&gt;
یه چند تایی ویدئوکست درست کردم اگه دیده باشید. منتها توی صدا مشکل وجود داشت و تصمیم گرفتم صدا رو توی استودیوی خانگی برادرم ضبط کنم و بعد به هم بچسبونمشون.&lt;br&gt;
&lt;div style="width:310px"&gt;&lt;a href="http://cyberrabbits.net/941/bash-drafts/132457_173761602664360_100000915645085_384705_176747_o/" rel="attachment wp-att-948"&gt;&lt;img src="http://cyberrabbits.net/wp-content/uploads/2011/08/132457_173761602664360_100000915645085_384705_176747_o-300x225.jpg" alt="استودیوی خانگی برادرم" title="استودیوی خانگی برادرم" width="300" height="225"&gt;&lt;/a&gt;&lt;p&gt;استودیوی خانگی برادرم&lt;/p&gt;&lt;/div&gt;&lt;br&gt;
چطور اینکار رو انجام دادم؟ اینطوری :&lt;/p&gt;
&lt;pre&gt;
 ffmpeg -vcodec copy -acodec copy  -i source.mp3 -i source.mkv out.mkv
&lt;/pre&gt;
&lt;p&gt;خیلی ساده :) فقط -acodec میگه که صدا رو تبدیل کنه یا نه که من نمیخواستم هیچ تغییری اتفاق بیفته در مورد کیفیت ویدئو هم -vcodec همین رو میگه.&lt;br&gt;
اگه مشکلی پیش اومد، سعی در تغییر این دو عبارت copy معمولا چاره سازه، منتها اونوقت باید کدک ها رو خودتون انتخاب کنید.&lt;br&gt;
پسوند فایل خروجی، اگه مشخص و شناخته شده باشه، ffmpeg اشتباه نمیکنه. ولی در غیر اینصورت فرمت خروجی رو با سوئیچ -f میتونید بهش بگید. مثلا برای اینکه من نوشتم، mkv خودش میشناسونه همه چی رو.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;۲- اضافه کردن زیرنویس به فیلم &lt;/strong&gt;&lt;br&gt;
این دستگاههای ویدئو پلیر که دایوایکس میخونن و فلش و از این حرفها، معمولا فایل زیرنویس رو هم میتونن از فایل srt نمایش بدن، ولی متاسفانه فقط انگلیسی رو، و تمام اونچیزهایی که من دیدم با فارسی مشکل داشتن :(&lt;br&gt;
از طرفی تو خونه ما ترجیح بر دیدن فیلم با تلویزیونه، که اگه اینکار رو هم باهاش انجام ندیم کلا میشه یه وسیله بی مصرف!!!&lt;br&gt;
اینه که گشتم دنبال یه راهی برای اینکار، و راه حل mplayer بود. البته قسمت mencoder این برنامه. -نمیدونم چرا با ffmpeg موفق نشدم :)-&lt;br&gt;
یه اسکریپت ساده نوشتم که اینکار رو برام انجام میده :) اینه :&lt;/p&gt;
&lt;pre&gt;
#!/bin/bash

movie_file=`zenity --file-selection --title=&amp;quot;Choose movie file&amp;quot;`
echo $movie_file

sub_file=`zenity --file-selection --title=&amp;quot;Choose subtitle file&amp;quot;`
echo $sub_file

sub_encoding=`zenity --entry --title=&amp;quot;Sub title encoding&amp;quot; --text=&amp;quot;Your subtitle encoding :&amp;quot; --entry-text=&amp;quot;windows-1256&amp;quot;`
echo $sub_encoding

scale=`zenity --scale --title=&amp;quot;Sub font text scale&amp;quot; --value=3 --min-value=1 --max-value=10`
echo $scale

mencoder &amp;quot;$movie_file&amp;quot; -oac copy -ovc xvid \
		-xvidencopts bitrate=687 -sub &amp;quot;$sub_file&amp;quot;\
		 -subcp $sub_encoding -subfont-text-scale $scale \
		 -o &amp;quot;$movie_file&amp;quot;.out.avi
&lt;/pre&gt;
&lt;p&gt;خیلی سادست، فقط اینکه اگه هر قسمت رو لغو کنید، کار ادامه پیدا میکنه، با Ctrl+C متوقفش کنید :) حسش نبود خیلی امکانات اضافه کنم براش.&lt;br&gt;
-oac copy هم گاهی جواب نمیده -تو قسمت آخر اسکریپت-، مثلا برای فایلهای mkv، اون مواقع بد نیست بزنید : oac pam یا هر چیز دیگه ای.&lt;br&gt;
البته چون تبدیل به divx صورت میگیره این اسکریپت کارش طول میکشه :) &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;۳-راحت شدن از فضای رزرو پارتیشنهای ext3 , ext4 و شاید ext2&lt;/strong&gt;&lt;br&gt;
پارتیشنهای ext3 و ext4 به صورت پیشفرض ۵ درصد از فضای پارتیشن رو رزرو میکنن. اما خیلی وقتها واقعا لازم نیست. مثلا من یه پارتیشن ۱ ترا بایتی دارم که ۵۰ گیگا! فضا رو ازش رزرو کردن. اطلاعاتش هم حساس نیست، فقط فیلمه :) و سریال و انیمه :D نتیجه اینکه دوست داشتم از دست این فضای خالی الکی راحت بشم.&lt;br&gt;
این دستور به دادم رسید :&lt;/p&gt;
&lt;pre&gt;
tune2fs -m 1 /dev/sdXX
&lt;/pre&gt;
&lt;p&gt;با تغییر ۱ به هر عدد دیگه ای، میتونید درصد فضای رزرو شده رو از ۵ به این عدد تغییر بدید. مثلا با مقدار صفر کلا فضای رزرو استفاده نمیشه البته دستور باید با دسترسی root اجرا بشه و به جای XX هم اسم پارتیشن شما نوشته بشه، چیزی مثل sda1 . برای درایوهای سیستمی و اطلاعاتی که مهم هستن اصلا توصیه نمیشه که اینکار رو انجام بدید!&lt;/p&gt;
&lt;p&gt;فعلا تا همین اندازه کافیه، اگه مشکلی بود یا پیشنهادی خوشحال میشم تو کامنتها مطرح کنید :)&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;&lt;p&gt;پستهای مرتبط :&lt;ol&gt;
&lt;li&gt;&lt;a href="http://cyberrabbits.net/360/bash-gui-wget/" rel="bookmark" title="Bash GUI for wget"&gt;Bash GUI for wget&lt;/a&gt; &lt;small&gt;اینبار هم میخوام بازم یه اسکریپت رو که تازه نوشتم...&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cyberrabbits.net/893/zshell/" rel="bookmark" title="zsh جایگزینی مناسب برای bash"&gt;zsh جایگزینی مناسب برای bash&lt;/a&gt; &lt;small&gt;یکی از اجزای جدا ناشدنی از گنو/لینوکس، ترمینال و دستوراتیه...&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cyberrabbits.net/775/zenity-part-3/" rel="bookmark" title="zenity بخش سوم"&gt;zenity بخش سوم&lt;/a&gt; &lt;small&gt;برای اینکه کم کم داشت کارهای ناتمومم زیاد میشد، تصمیم...&lt;/small&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/cyberrabbits/posts/~4/-Ogp_TosETs" height="1" width="1"&gt;&lt;/div&gt;</content><author><name>فرود</name></author><source gr:stream-id="feed/http://feeds2.feedburner.com/cyberrabbits/posts"><id>tag:google.com,2005:reader/feed/http://feeds2.feedburner.com/cyberrabbits/posts</id><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;یادداشتهای بیت نیمسوز&lt;/div&gt;</title><link rel="alternate" href="http://cyberrabbits.net" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1313004987235"><id gr:original-id="http://cyberrabbits.net/?p=932">tag:google.com,2005:reader/item/f3b3d44d6fade414</id><category term="Bash" /><category term="لینوکس" /><category term="ویدئو" /><category term="bash" /><category term="gnu" /><category term="pipes" /><category term="shell" /><category term="videocast" /><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;ویدئو کست دوم : پایپها در گنو/لینوکس – بخش دوم و پایانی&lt;/div&gt;</title><published>2011-08-10T19:39:31Z</published><updated>2011-08-10T19:39:31Z</updated><link rel="alternate" href="http://cyberrabbits.net/932/videocast-ii-pipes/" type="text/html" /><content xml:base="http://cyberrabbits.net/" gr:direction="rtl" type="html">&lt;div style="direction:rtl;text-align:right"&gt;&lt;p&gt;و بالاخره با کلی تاخیر :) قسمت دوم ویدئوکست من، پایپها در گنو/لینوکس – بخش دوم.&lt;br&gt;
تو این قسمت در مورد پایپهای بی نام و نامدار صحبت شده.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=Hnxkp8bbrGk"&gt;&lt;img src="http://img.youtube.com/vi/Hnxkp8bbrGk/2.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=Hnxkp8bbrGk"&gt;Click here to view the video on YouTube&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dl.dropbox.com/u/17051717/CyberRabbits.net%20-%20Pipes%20-%20Part%20II.mkv"&gt;و لینک دانلود از دراپ باکس&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;&lt;p&gt;پستهای مرتبط :&lt;ol&gt;
&lt;li&gt;&lt;a href="http://cyberrabbits.net/924/videocast-pipes-part1/" rel="bookmark" title="اولین ویدئوکست من :) – پایپها در گنو لینوکس بخش اول"&gt;اولین ویدئوکست من :) – پایپها در گنو لینوکس بخش اول&lt;/a&gt; &lt;small&gt;این اولین باره که سعی میکنم یه ویدئوکست درست کنم...&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cyberrabbits.net/547/install-farsi-font-linux-zenity/" rel="bookmark" title="اسکریپت نصب فونت فارسی برای لینوکس نسخه GUI"&gt;اسکریپت نصب فونت فارسی برای لینوکس نسخه GUI&lt;/a&gt; &lt;small&gt;قبلا یک اسکریپت نوشته بودم برای نصب فونت فارسی در...&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cyberrabbits.net/344/farsifonts-installer-linux/" rel="bookmark" title="اسکریپت نصب فونت فارسی برای لینوکس"&gt;اسکریپت نصب فونت فارسی برای لینوکس&lt;/a&gt; &lt;small&gt;تعداد فونتهایی که به لیست اضافه شدن الان دیگه خیلی...&lt;/small&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/cyberrabbits/posts/~4/nlXaDtPvEWk" height="1" width="1"&gt;&lt;/div&gt;</content><author><name>فرود</name></author><source gr:stream-id="feed/http://feeds2.feedburner.com/cyberrabbits/posts"><id>tag:google.com,2005:reader/feed/http://feeds2.feedburner.com/cyberrabbits/posts</id><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;یادداشتهای بیت نیمسوز&lt;/div&gt;</title><link rel="alternate" href="http://cyberrabbits.net" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1311540210235"><id gr:original-id="http://cyberrabbits.net/?p=924">tag:google.com,2005:reader/item/035bf2d3729b0895</id><category term="Bash" /><category term="لینوکس" /><category term="ویدئو" /><category term="bash" /><category term="gnu" /><category term="pipes" /><category term="shell" /><category term="videocast" /><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;اولین ویدئوکست من :) – پایپها در گنو لینوکس بخش اول&lt;/div&gt;</title><published>2011-07-24T20:20:42Z</published><updated>2011-07-24T20:20:42Z</updated><link rel="alternate" href="http://cyberrabbits.net/924/videocast-pipes-part1/" type="text/html" /><content xml:base="http://cyberrabbits.net/" gr:direction="rtl" type="html">&lt;div style="direction:rtl;text-align:right"&gt;&lt;p&gt;این اولین باره که سعی میکنم یه ویدئوکست درست کنم :) زیاد جالب هم نشده با اینکه دست کم دو روز داشتم سروکله میزدم باهاش.&lt;br&gt;
به هر حال این اولین تجربه تو این زمینه است. اگه مشکلی داره ببخشید و اگر هم مشکل قابل رفعی هستش، بگید تا برای کارهای بعدی رفعش کنم.&lt;br&gt;
این قسمت درباره پایپها ( البته بیشتر هدایت خروجی/ورودی برنامه ها به/از فایل ) هستش. قسمت بعدیش هم به زودی میذارم.&lt;br&gt;
– دلیل اصلی من &lt;a href="http://linuxfm.com/podcasts/live-5/"&gt;این پست فرید احمدیان &lt;/a&gt;بود، و اینکه من قالب صدای تنها رو زیاد دوست نداشتم و تصمیم گرفتم اونو با ویدئو ترکیب کنم، و اینکه معتقدم بالاخره باید یه کاری انجام بشه :)&lt;br&gt;
– فعلا فقط روی youtube هستش و اصل فایل هم توی Dropbox :) تا ببینم چی میشه :D&lt;br&gt;
&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=FuTVX3XrRj8"&gt;&lt;img src="http://img.youtube.com/vi/FuTVX3XrRj8/2.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=FuTVX3XrRj8"&gt;Click here to view the video on YouTube&lt;/a&gt;.&lt;/p&gt;
&lt;/p&gt;
&lt;p&gt;اصل فایل هم &lt;a href="https://dl.dropbox.com/u/17051717/pipes-part1.mkv"&gt;اینجاست&lt;/a&gt;.&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;&lt;p&gt;پستهای مرتبط :&lt;ol&gt;
&lt;li&gt;&lt;a href="http://cyberrabbits.net/932/videocast-ii-pipes/" rel="bookmark" title="ویدئو کست دوم : پایپها در گنو/لینوکس – بخش دوم و پایانی"&gt;ویدئو کست دوم : پایپها در گنو/لینوکس – بخش دوم و پایانی&lt;/a&gt; &lt;small&gt;و بالاخره با کلی تاخیر :) قسمت دوم ویدئوکست من،...&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cyberrabbits.net/589/bing-pic-as-gnome-background/" rel="bookmark" title="تصاویر بینگ، پسزمینه دسکتاپ لینوکس"&gt;تصاویر بینگ، پسزمینه دسکتاپ لینوکس&lt;/a&gt; &lt;small&gt;داشتم گوگل ریدرمو میخوندم :) که رسیدم به این پست...&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cyberrabbits.net/159/linux-and-the-lost-delight/" rel="bookmark" title="لینوکس و شوقی که گم کرده بودم"&gt;لینوکس و شوقی که گم کرده بودم&lt;/a&gt; &lt;small&gt;خیلی سال پیش،‌ وقتی برای اولین بار یک کامپیوتر دیدم،‌بلافاصله...&lt;/small&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/cyberrabbits/posts/~4/iCLexL7lFO4" height="1" width="1"&gt;&lt;/div&gt;</content><author><name>فرود</name></author><source gr:stream-id="feed/http://feeds2.feedburner.com/cyberrabbits/posts"><id>tag:google.com,2005:reader/feed/http://feeds2.feedburner.com/cyberrabbits/posts</id><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;یادداشتهای بیت نیمسوز&lt;/div&gt;</title><link rel="alternate" href="http://cyberrabbits.net" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1309725895653"><id gr:original-id="http://cyberrabbits.net/?p=909">tag:google.com,2005:reader/item/80194450109b9f56</id><category term="PHP" /><category term="برنامه نویسی" /><category term="لینوکس" /><category term="C++" /><category term="CMake" /><category term="HipHop" /><category term="webserver" /><title type="html">HipHop</title><published>2011-07-02T06:27:30Z</published><updated>2011-07-02T06:27:30Z</updated><link rel="alternate" href="http://cyberrabbits.net/909/hiphop/" type="text/html" /><content xml:base="http://cyberrabbits.net/" gr:direction="rtl" type="html">&lt;div style="direction:rtl;text-align:right"&gt;&lt;p&gt;&lt;em&gt;– این فقط یه معرفی ساده یه پروژه است نه راهنمای کاملش. &lt;/em&gt;&lt;br&gt;
یکی از معروفترین سایتهای فعلی، فیسبوکه و شکی در این نیست (نمیدونم با وجود گوگل پلاس وضع همینطوری میمونه یا نه؟). ولی این سایت همینجوری که تبدیل نشده به اینی که الان هست! یک تیم برنامه نویسی قدرتمند هم پشت این پروژه هست و چیزی که امروز میخوام معرفی کنم، دلیلی بر این مدعاست.&lt;/p&gt;
&lt;p&gt;پروژه &lt;a href="https://github.com/facebook/hiphop-php/wiki/"&gt;HipHop for PHP&lt;/a&gt; پروژه ای است که بر اساس نیازهای آنها -فیس بوکی ها- ساخته شده. پروژه ای که یه کار – به ظاهر – ساده انجام میده. خیلی ساده، کدهای PHP رو تبدیل میکنه به C++ و بعد اون رو کامپایل میکنه، در نهایت کل پروژه تبدیل میشه به یه فایل اجرایی تکی، که خودش یک وب سرور کامل هم هست.&lt;br&gt;
اینجوری، سرعت اجرای کد به طرز کاملا محسوسی بالاتر میره و فشار اجرای مفسری PHP به شدت کم میشه . البته هنوز فایلهای استاتیک به صورت مجزا از این فایل وجود دارند ولی دیگه PHP وجود نداره، کد باینری واقعی هست. یه چیزی مثل &lt;a href="https://live.gnome.org/Vala"&gt;vala&lt;/a&gt; که تبدیل میشه به C . مثل پروژه هایی که حتما دیدید و فایل PHP رو توی یک فایل اجرایی میچپونن هم نیست -&lt;a href="http://www.bambalam.se/bamcompile/"&gt;مثلا این پروژه&lt;/a&gt;-.&lt;br&gt;
 این پروژه یه بازنویسی از کل کد PHP هستش نه یه پروژه مشتق شده از PHP. یه سری توابع از دست میرن (مثلا تابع eval) ولی در نهایت توابعی هم که از دست میرن جایگزین مناسبی دارن :) مثلا همین eval یه جورایی از دید من یه تابع خیلی خطرناک محسوب میشه و استفاده ازش احتیاط خیلی زیادی رو میطلبه!&lt;br&gt;
این برنامه در کل ممکنه برای ما هم خیلی کاربردی نباشه چون به درد همه جا نمیخوره. کلا  بعید میدونم به همین راحتی رو ویندوز کامپایل بشه! ولی گاهی وقتها میتونه کارتون رو راه بندازه،مثلا ما الان نیاز به یه وب سرویس داریم تو یه پروژه که روی سرورهای داخلی یه شرکت قراره نصب بشه و فقط یک ارتباط ساده رو با دیتابیس برقرار کنه و از طرفی نصب آپاچی و PHP هم یه جورایی از طرف مدیر شبکه منع شده -یه جور سرور radius هستش و میخوان سبک بمونه – خوب بهتر از HipHop چی میتونه به ما کمک کنه؟ &lt;/p&gt;
&lt;p&gt;حالا میرسیم به چگونگی استفاده از این به اصطلاح HipHop!&lt;br&gt;
&lt;span&gt;&lt;/span&gt;&lt;br&gt;
&lt;strong&gt;نصب !&lt;/strong&gt;&lt;br&gt;
برای آرچ لینوکس توی &lt;a href="http://aur.archlinux.org/packages.php?ID=35023"&gt;AUR&lt;/a&gt; هستش. و نصبش هم نیاز به خیلی چیزها داره که شاید بد نباشه از اینجا بخونیدش : &lt;a href="https://github.com/facebook/hiphop-php/wiki/Building-and-installing" title="Building and installing - GitHub"&gt;Building and installing – GitHub&lt;/a&gt;&lt;br&gt;
به هر حال سورسش اینجاست :&lt;/p&gt;
&lt;pre&gt;
git clone git://github.com/facebook/hiphop-php.git
&lt;/pre&gt;
&lt;p&gt;نمیرم تو بحث نصب به صورت کامل، توصیه میکنم بگردید دنبال پکیج یا راهنمای مناسب برای دیستروی خودتون، چون دردسر داره و کلی هم طول میکشه. فقط اگه رفتید برای نصب از سورس چند تا نکته رو در نظر داشته باشید :&lt;br&gt;
۱- یه چیزی که برای من عجیبه اینه که دولوپرهاش فراموش کردن فایلهای زاید رو پاک کنن. فایل CMakeCache.txt رو از توی پوشه اصلی پروژه پاک کنید که بودنش دردسر ساز میشه و اصلا اجازه کامپایل به شما نمیده مگه اینکه مستقیما توی opt کامپایل بشه که بازم نمیشه خیلی وقتا!&lt;br&gt;
۲- بعد از اینکه رفتید برای cmake دوباره یه فایل CMakeCahce.txt براتون میسازه. کامپایل رو متوقف کنید، توی اون فایل رو بگردید و هر چی -O3 (منهای O او بزرگ بعدش بلافاصله یه ۳ ) هست رو عوض کنید با -O2 (همون فقط ۲ به جای ۳ ) یه مشکل عجیب وقت لینک کردن دامنگیر من و یه عده دیگه -البته نه همه- شده بود که با این روش حل شد.&lt;br&gt;
۳- توی آرچ لینوکس libmemcached 0.50-1 با این کار نمیکنه (تا تاریخ نوشتن این پست) و مجبورید برگردید به نسخه قبلی، libmemcached-0.49-1 بدون مشکل کار میکنه.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;طریقه استفاده &lt;/strong&gt;&lt;br&gt;
برای استفاده از این برنامه،‌ به لیست فایلهای PHP که قراره تبدیل بشن احتیاج دارید. یادتون باشه هر فایلی که توش PHP هست باید توی این لیست باشه.&lt;br&gt;
برای اجرای هیپ هاپ باید برید توی پوشه خود پروژه و چند تا متغیر رو تنظیم بکنید برای استفاده در شل:&lt;/p&gt;
&lt;pre&gt;
cd .. # into the root of the hphp checkout
export HPHP_HOME=`pwd`
export HPHP_LIB=`pwd`/bin
# if you followed the Ubuntu 9.10 instructions, you also need
export CMAKE_PREFIX_PATH=`/bin/pwd`/../
&lt;/pre&gt;
&lt;p&gt;این دستورات باید یک بار قبل از اجرای هیپ هاپ استفاده بشن و گرنه درست کار نمیکنه. شاید یه اسکریپت مثل این :‌&lt;/p&gt;
&lt;pre&gt;
#!/bin/sh
export CMAKE_PREFIX_PATH=/path/to/hiphop/top/folder #Parent folder of hip hop not root folder
export HPHP_HOME=$CMAKE_PREFIX_PATH/hiphop-php
export HPHP_LIB=$HPHP_HOME/bin
$HPHP_HOME/src/hphp/hphp $*
&lt;/pre&gt;
&lt;p&gt;-این اسکریپت توی پکیج AUR آرچ لینوکس هستش و من از اونجا کپیش کردم :) -&lt;br&gt;
من یه کد خیلی ساده PHP نوشتم در این حد ساده : &lt;/p&gt;
&lt;pre&gt;
&amp;lt;?php
echo &amp;quot;Hello world!&amp;quot;;
&lt;/pre&gt;
&lt;p&gt;و با این دستور تبدیلش کردم : &lt;/p&gt;
&lt;pre&gt;
/opt/hiphop/hphp.sh test.php --keep-tempdir=1 --log=3
&lt;/pre&gt;
&lt;p&gt;یه فایل اجرایی بهم تحویل داد به نام program تو یه پوشه داخل tmp به حجم ۲۶ مگا بایت! که با strip کردن شد ۲۱.۳ مگابایت :) و بدون نیاز به هیچگونه فایل اضافی و کاملا مستقل، که هم توی ترمینال درست عمل میکرد (فراخوانی مستقیم بدون هیچگونه سوییچ اضافه) و هم به صورت سرور :&lt;/p&gt;
&lt;pre&gt;
/tmp/hphp_p6vSsP/program -m server -p 8080
&lt;/pre&gt;
&lt;p&gt;- نکته نسبتا انحرافی! اینه که روت وب سرور شما میشه جایی که شما هیپ هاپ رو اجرا میکنید. مثلا من اول به جای test.php زدم ~/test.php و بعد برای حالت سرور باید کل مسیر فایل رو هم تو بروزر میزدم.&lt;br&gt;
یه سوییچ -f هم داره که انتظار میره فایل PHP بهش بدی و مستقیم بدون کامپایل – مثل خود PHP – اجراش کنه که هر کاری کردم خطا گرفتم، و در کل خود PHP که هست چه مرضیه آخه!&lt;br&gt;
برای اجرای یه پروژه کامل اول یه لیستی از فایلهای PHP اون پروژه ایجاد کنید : &lt;/p&gt;
&lt;pre&gt;
cd /project/root
find . -name &amp;quot;*.php&amp;quot; &amp;gt; files.list
&lt;/pre&gt;
&lt;p&gt;و بعد یه دستوری تو این مایه ها : &lt;/p&gt;
&lt;pre&gt;
$HPHP_HOME/src/hphp/hphp --input-list=files.list -k 1 --log=3 \
  --force=1 --cluster-count=50
&lt;/pre&gt;
&lt;p&gt;برای کامپایل، البته انتخابهای بیشتری هست خیلی بیشتر. بعد اگه همه چی خوب پیش بره پروژه شما توی tmp ساخته میشه و شما میتونید اونو اجرا کنید : &lt;/p&gt;
&lt;pre&gt;
cd /project/root/
sudo /full/path/to/program -m server -v &amp;quot;Server.SourceRoot=`pwd`&amp;quot; \
  -v &amp;quot;Server.DefaultDocument=index.php&amp;quot; -c $HPHP_HOME/bin/mime.hdf
&lt;/pre&gt;
&lt;p&gt;این دستور باید از توی جایی اجرا بشه که فایلهای استاتیک مثل عکس و CSS و … قرار دارن.&lt;br&gt;
البته انتخابهای بشتری هم هست، ولی اینجا جای توضیحشون نیست،‌در حقیقت این پروژه در حال پیشرفته و ممکنه همه اینها تغییر کنه، بنابراین ویکی خود پروژه انتخاب مناسبتریه برای راهنما :) &lt;/p&gt;
&lt;p&gt;من با هیپ هاپ یه چند تایی برنامه رو به صورت کامل کامپایل کردم بدک نبود، ولی برای من فقط تنها استفاده ای که میتونه داشته باشه همون پروژه ای هستش که بالاتر گفتم ولی این چیزی از ارزش این پروژه کم نمیکنه. به هر حال من اصلا از فیسبوک خوشم نمیاد،‌ولی بابت این پروژه ازشون ممنونم!!&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;&lt;p&gt;پستهای مرتبط :&lt;ol&gt;
&lt;li&gt;&lt;a href="http://cyberrabbits.net/811/zend-translate-and-gnugettext/" rel="bookmark" title="Zend_Translate و GnuGetText"&gt;Zend_Translate و GnuGetText&lt;/a&gt; &lt;small&gt;یکی از اصولی که سعی میکنم هنگام طراحی رعایت کنم،...&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cyberrabbits.net/403/source-forge-redirector/" rel="bookmark" title="دانلود از SourceForge بدون مشکل"&gt;دانلود از SourceForge بدون مشکل&lt;/a&gt; &lt;small&gt;اسکریپت رو اگه نصب کردید دوباره آپدیت کنید، چون sf...&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cyberrabbits.net/372/mail-for-zend-framework/" rel="bookmark" title="ارسال mail از طریق Zend Framework"&gt;ارسال mail از طریق Zend Framework&lt;/a&gt; &lt;small&gt;لطفا کامنتهای داخل کدها رو هم بخونید!! بعضیاشون واقعا ضروری...&lt;/small&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/cyberrabbits/posts/~4/sMho-2_1db4" height="1" width="1"&gt;&lt;/div&gt;</content><author><name>فرود</name></author><source gr:stream-id="feed/http://feeds2.feedburner.com/cyberrabbits/posts"><id>tag:google.com,2005:reader/feed/http://feeds2.feedburner.com/cyberrabbits/posts</id><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;یادداشتهای بیت نیمسوز&lt;/div&gt;</title><link rel="alternate" href="http://cyberrabbits.net" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1309552358218"><id gr:original-id="http://cyberrabbits.net/?p=910">tag:google.com,2005:reader/item/0315a8c2605c2dfb</id><category term="Bash" /><category term="Mini posts" /><category term="لینوکس" /><category term="bash" /><category term="Caps Lock" /><category term="Gnome" /><category term="KDE" /><category term="xmodmap" /><category term="xorg" /><title type="html">دکمه Caps Lock</title><published>2011-07-01T20:34:11Z</published><updated>2011-07-01T20:34:11Z</updated><link rel="alternate" href="http://cyberrabbits.net/910/caps-lock-key/" type="text/html" /><content xml:base="http://cyberrabbits.net/" gr:direction="rtl" type="html">&lt;div style="direction:rtl;text-align:right"&gt;&lt;p&gt;Caps Lock : نمیدونم این دکمه بی فایده و بی معنی رو کی درستش کرد؟ اگه میدونید بگید، سایتی چیزی داره معرفی کنید برم یکم سایتشو مسخره کنم دلم خنک شه!! خواهشمندم دفاع نکنید از این دکمه کذایی!!!&lt;br&gt;
با وجود دکمه شیفت، اصولا نیازی به دکمه Caps نیست. خوب بهترین جای کیبرد رو هم اشغال کرده! حیف نیست آخه؟ حالا یه آدم بی عقل هم میاد و یه روز توی ۲۰۱۱ رو به عنوان روز Caps Lock معرفی میکنه نمیدونید من چه حالی میشم. خیلی خودمو کنترل کردم و ژست آدم خوب به خودم گرفتم که نرفتم فحش بنویسم! فردا هم حتما روز جهانی باقالی میخوایم راه بندازیم! یا مثلا روز جهانی ویندوز! یا هر چیز مسخره دیگه!&lt;br&gt;
اگه مثلا این دکمه میشد دکمه Ctrl چی میشد! ولی من بیشترین مشکل رو باهاش وقتی پیدا میکنم که میخوام دکمه Tab رو بزنم که یکی از دکمه های محبوب منه! این شد که گشتم دنبال راه حلی برای حذف این دکمه مزاحم ، (نه برای گنوم یا KDE  برای ترمینال و ssh بیشتر)&lt;/p&gt;
&lt;pre&gt;
#!/bin/bash
xmodmap -e &amp;quot;remove Lock = Caps_Lock&amp;quot; # Remove Caps Lock
xmodmap -e &amp;quot;keycode 66 = Tab&amp;quot; # Make the key into Tab (Or other keys, its your choice!)
&lt;/pre&gt;
&lt;p&gt;سادست! فقط باید پکیج xorg-xmodmap (برای آرچ لینوکس، برای اوبونتو یا بقیه دیستروها هم یه چیزی باید باشه تو همین مایه ها، میدونید تو نظر بگید اصلاح کنم.)&lt;br&gt;
برای گنوم هم میتونید توی تنظیمات Keyboard Layout دکمه Option بخش Caps Lock key behavior کار این دکمه رو عوض کنید. برای KDE هم میدونم که داره ولی نمیدونم کجا :)‌&lt;/p&gt;
&lt;p&gt;پی نوشت :&lt;br&gt;
 &lt;a href="http://www.huffingtonpost.com/2011/06/28/caps-lock-day-2011-_n_885924.html#s299523&amp;amp;title=Eric_Dale_Bader" title="CAPS LOCK DAY 2011: Celebrate Capital Letters With TWEETS!"&gt;CAPS LOCK DAY 2011: Celebrate Capital Letters With TWEETS!&lt;/a&gt;  روز جهانی!!!! Caps Lock&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;&lt;p&gt;پستهای مرتبط :&lt;ol&gt;
&lt;li&gt;&lt;a href="http://cyberrabbits.net/775/zenity-part-3/" rel="bookmark" title="zenity بخش سوم"&gt;zenity بخش سوم&lt;/a&gt; &lt;small&gt;برای اینکه کم کم داشت کارهای ناتمومم زیاد میشد، تصمیم...&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cyberrabbits.net/383/zenity-part-on/" rel="bookmark" title="zenity بخش اول"&gt;zenity بخش اول&lt;/a&gt; &lt;small&gt;زنیتی (zenity) یک برنامه کوچک برای نمایش دیالوگ GTK+ از...&lt;/small&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/cyberrabbits/posts/~4/ED51jft-i_g" height="1" width="1"&gt;&lt;/div&gt;</content><author><name>فرود</name></author><source gr:stream-id="feed/http://feeds2.feedburner.com/cyberrabbits/posts"><id>tag:google.com,2005:reader/feed/http://feeds2.feedburner.com/cyberrabbits/posts</id><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;یادداشتهای بیت نیمسوز&lt;/div&gt;</title><link rel="alternate" href="http://cyberrabbits.net" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1308555435672"><id gr:original-id="http://cyberrabbits.net/?p=893">tag:google.com,2005:reader/item/703f0d4ca91a792e</id><category term="لینوکس" /><category term="bash" /><category term="terminal" /><category term="zsh" /><category term="zshell" /><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;zsh جایگزینی مناسب برای bash&lt;/div&gt;</title><published>2011-06-20T07:37:55Z</published><updated>2011-06-20T07:37:55Z</updated><link rel="alternate" href="http://cyberrabbits.net/893/zshell/" type="text/html" /><content xml:base="http://cyberrabbits.net/" gr:direction="rtl" type="html">&lt;div style="direction:rtl;text-align:right"&gt;&lt;p&gt;یکی از اجزای جدا ناشدنی از گنو/لینوکس، ترمینال و دستوراتیه که باید توی ترمینال اجرا بشن. به همین دلیل ساده، ترمینالهای گنو/لینوکس به طرز شگفت آوری برتر از ترمینال مسخره ویندوز عمل میکنن.&lt;br&gt;
یه نکته جالبتر اینکه توی لینوکس، انتخابهای متفاوتی برای ترمینال وجود داره. تقریبا اکثر دیستروها از bash استفاده میکنن. یه پوسته ساده که تقریبا تبدیل شده به یه استاندارد.&lt;br&gt;
منتها چند وقت پیش در پی دسته گلی که به آب دادم و آرچ رو داغون کردم، برای بالا اومدن به صورت لایو از &lt;a href="http://grml.org/" title="grml.org - Debian Live system / CD for sysadmins and texttool-users"&gt;grml.org – Debian Live system / CD for sysadmins and texttool-users&lt;/a&gt; آستفاده کردم و اگر چه نتونستم سیستم رو دوباره برگردونم، ولی بی هیچ تعارفی لینوکس رو که عوض کردم،‌ حتی قبل از نصب گنوم، zsh رو نصب کردم.&lt;br&gt;
&lt;a href="http://cyberrabbits.net/893/zshell/powertoolzny0/" rel="attachment wp-att-900"&gt;&lt;img src="http://cyberrabbits.net/wp-content/uploads/2011/06/powertoolzny0-200x300.jpg" alt="" title="powertoolzny0" width="200" height="300"&gt;&lt;/a&gt;&lt;br&gt;
&lt;span&gt;&lt;/span&gt;&lt;br&gt;
برای نصب zsh توی دیستروی خودتون مطمئنا میتونید از Repo های اصلی استفاده کنید.&lt;br&gt;
برای آرچ : &lt;/p&gt;
&lt;pre&gt;
pacman -S zsh
&lt;/pre&gt;
&lt;p&gt;برای اوبونتو و مینت : &lt;/p&gt;
&lt;pre&gt;
apt-get install zsh
&lt;/pre&gt;
&lt;p&gt;گام بعدی تغییر Login Shell کاربر شما به این شل جدیده. یه راه اینه که فایل /etc/passwd رو ویرایش کنید که برای اینکار باید حتما روت باشید (یعنی با sudo دستور رو اجرا کنید) بعد از باز کردن فایل مورد نظر خط کاربری که مورد نظرتونه توش پیدا کنید، یه خطی شبیه این :&lt;/p&gt;
&lt;pre&gt;
eli:x:1000:1000:eli,,,:/home/eli:/bin/bash
&lt;/pre&gt;
&lt;p&gt;تو این فایل به ازای هر یه کاربر یه خط وجود داره. قسمت آخر خط، دقیقا بعد از :‌ آخری، نشون دهنده shell مورد استفاده این کاربره، و برای تغییر باید عوض بشه به آدرس کامل zsh. توی دیستروهای مختلف، ممکنه جای zsh متفاوت باشه. برای اینکه مطمئن بشید دستور زیر رو اجرا کنید تا آدرس کاملشو پیدا کنید : &lt;/p&gt;
&lt;pre&gt;
which zsh
&lt;/pre&gt;
&lt;p&gt;و بعد اینو به جای شل فعلی مورد استفاده کاربرتون بنویسید. یعنی خط بالایی میشه-این دقیقا از یه سیستم لینوکس مینت کپی شده، برای دیستروی شما شاید متفاوت باشه، کپی پیست نکنید لطفا!- : &lt;/p&gt;
&lt;pre&gt;
eli:x:1000:1000:eli,,,:/home/eli:/usr/bin/zsh
&lt;/pre&gt;
&lt;p&gt;این راه سختترش بود :) اما یه دستور هم ارایه شده برای تغییر شل کاربر فعلی، توی ترمینال بزنید &lt;/p&gt;
&lt;pre&gt;
chsh
&lt;/pre&gt;
&lt;p&gt;بعد ازتون میپرسه که شل جدید چی باشه.&lt;br&gt;
با یه logout/login شل جدید جایگزین میشه. برای اولین بار، یه سری سوال میپرسه که براتون تنظیمات اصلی رو توی پوشه خانگی بنویسه یا نه که هر طور دوست دارید انتخاب کنید. با ویرایش فایل .zshrc که یک فایل مخفی در پوشه خانگی شماست میتونید تنظیمات این شل رو تغییر بدید.&lt;br&gt;
من الان همین شل رو روی یک &lt;a href="http://www.friendlyarm.net/products/mini2440" title="Mini2440 | S3C2440 ARM9 Board - FriendlyARM"&gt;Mini2440&lt;/a&gt; نصب کردم و این هم فایل تنظیمات این دستگاه هستش -تا حدی بهش معتاد شدم که حتی تو این دستگاه هم نصبه!-&lt;/p&gt;
&lt;pre&gt;
#Some alias
alias ls=&amp;#39;ls --color=auto&amp;#39;
alias rm=&amp;quot;rm -i&amp;quot;
#Default editor
export EDITOR=nano
#Auto load stuff
autoload -U compinit promptinit
compinit
promptinit
#Set mask for new directory permision
umask 022

#Left prompt :)
PROMPT=&amp;#39;%(0?.&amp;#39;&amp;#39;.%S%?%s )%U%n%u@%B%m% %b %# &amp;#39;
# prompt for right side of screen
RPROMPT=&amp;#39;[%C]&amp;#39;
#History in zsh
HISTSIZE=1000
SAVEHIST=1000
HISTFILE=~/.history
&lt;/pre&gt;
&lt;p&gt;امکانات این شل، بسیار بیشتر از Bash هستش و از اونها میشه به auto complete بسیار جالب-که حتی متغیرهای محیطی رو تشخیص میده و میاره- ، PROMPT های فوق العاده قابل انعطاف (با یک سری امکانات که میشه اونها رو به صورت شرطی در آورد، مثلا %(0?.”.%S%?%s ) میگه در صورتی که آخرین برنامه خروجیش غیر صفر بود، خروچی رو به صورت highligh شده بنویس) . بیشتر از اینو میسپرم به خودتون، این آدرسها برای شروع خوبن :&lt;br&gt;
&lt;a href="http://www.nparikh.org/unix/prompt.php" title="Customizing your shell prompt"&gt;Customizing your shell prompt&lt;/a&gt;&lt;br&gt;
&lt;a href="http://aperiodic.net/phil/prompt/" title="Phil!"&gt;Phil!’s ZSH Prompt&lt;/a&gt;&lt;br&gt;
نکته ای که شاید دونستنش خالی از لطف نباشه، اینه که اسم این شل رو نویسندش Paul Falstad از اسم professor Zhong Shao گرفته که همیشه نام کاربریش zsh بوده و به نظرش اسم این پروفسور،‌ مناسب بوده که اسم یک شل باشه! (به نقل از &lt;a href="http://en.wikipedia.org/wiki/Zsh" title="Z shell - Wikipedia, the free encyclopedia"&gt;Wikipedia – Z shell&lt;/a&gt;)&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;&lt;p&gt;بدون پست مرتبط.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/cyberrabbits/posts/~4/llyhY3l1LaU" height="1" width="1"&gt;&lt;/div&gt;</content><author><name>فرود</name></author><source gr:stream-id="feed/http://feeds2.feedburner.com/cyberrabbits/posts"><id>tag:google.com,2005:reader/feed/http://feeds2.feedburner.com/cyberrabbits/posts</id><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;یادداشتهای بیت نیمسوز&lt;/div&gt;</title><link rel="alternate" href="http://cyberrabbits.net" type="text/html" /></source></entry><entry gr:crawl-timestamp-msec="1307086816337"><id gr:original-id="http://cyberrabbits.net/?p=885">tag:google.com,2005:reader/item/908c930b0c0bb241</id><category term="PHP" /><category term="برنامه نویسی" /><category term="فوت کوزه گری" /><category term="array" /><category term="bug" /><category term="strings" /><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;رشته ها و آرایه ها PHP&lt;/div&gt;</title><published>2011-06-03T07:40:48Z</published><updated>2011-06-03T07:40:48Z</updated><link rel="alternate" href="http://cyberrabbits.net/885/string-array-php/" type="text/html" /><content xml:base="http://cyberrabbits.net/" gr:direction="rtl" type="html">&lt;div style="direction:rtl;text-align:right"&gt;&lt;p&gt;امروز درگیر یک کد بودم شبیه این : &lt;/p&gt;
&lt;pre&gt;
&amp;lt;?php
	$string = &amp;quot;This is a string&amp;quot;;

	if (isset($string[&amp;#39;default&amp;#39;]))
		echo $string[&amp;#39;default&amp;#39;];
&lt;/pre&gt;
&lt;p&gt;به نظر شما خروجیش چیه؟؟؟ یعنی اصلا چیزی باید چاپ بشه یا نه؟ من معتقدم که نباید چیزی چاپ بشه. یعنی شرط if اصلا درست نیست که بخواد برسه به echo ولی مساله مسخره اینه که &lt;a href="http://ir.php.net/manual/en/function.isset.php"&gt;isset&lt;/a&gt; میگه این ایندکس  وجود داره و  -&lt;strong&gt;برداشت شخصی من اینه که&lt;/strong&gt;- PHP وقتی میخواد یه رشته رو باهاش به صورت آرایه ای برخورد کنه، اول ایندکس آرایه رو به صورت عدد درمیاره با اون قواعدی که خودش داره، ( قواعد استاندارد خودش ) بعد اون کاراکتر رو چاپ میکنه.&lt;br&gt;
نتیجه خیلی غیر قابل تصور بود برای من!!!!!&lt;br&gt;
حالا اگه بگم تا ۱ ساعت درگیر این مساله مسخره بودم و این کد : &lt;/p&gt;
&lt;pre&gt;
		foreach ($opts as $opt =&amp;gt; $value)
		{
			if (isset($value[&amp;#39;default&amp;#39;]) )
			{
				$result[$opt] = $value[&amp;#39;default&amp;#39;];
			}
			elseif (isset($value[&amp;#39;type&amp;#39;]))
			{
				$result[$opt] = &amp;#39;&amp;#39;;
			}
			else
			{
				$result[$opt] = $value;
			}
		}
&lt;/pre&gt;
&lt;p&gt;چقدر منو عذاب داد مطمئن باشید راست میگم و اصلا اغراق نیست!!!!!!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;نظر شما چیه؟ این باگه؟ یا همینه که هست؟ باید گزارش بشه یا نه؟؟؟؟ کلا درسته که تبدیل روی ایندکس هم انجام بشه؟&lt;/strong&gt;&lt;br&gt;
– خیلی وقت بود ننوشته بودم :)‌چقدر دلم تنگ شده بود!!&lt;br&gt;
– پی نوشت :‌نمیدونم چطوری اشتباهی :) نظرها رو بسته بودم. الان بازه دیگه ….&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;&lt;p&gt;پستهای مرتبط :&lt;ol&gt;
&lt;li&gt;&lt;a href="http://cyberrabbits.net/750/php-and-simple-notes/" rel="bookmark" title="بازم PHP و نکات کوچیکش!"&gt;بازم PHP و نکات کوچیکش!&lt;/a&gt; &lt;small&gt;یه پرسشنامه برای گرفتن چند تا برنامه نویس PHP طرح...&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cyberrabbits.net/411/mysql-menu-part-3/" rel="bookmark" title="Mysql Menu قسمت سوم"&gt;Mysql Menu قسمت سوم&lt;/a&gt; &lt;small&gt;چند وقت پیش در باره منو و طریقه ایجاد آن...&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cyberrabbits.net/585/php-simple-note/" rel="bookmark" title="بازم یک نکته کوچک تو PHP"&gt;بازم یک نکته کوچک تو PHP&lt;/a&gt; &lt;small&gt;یکی از مشکلاتی که برنامه نویسهای تازه کار با اون...&lt;/small&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/cyberrabbits/posts/~4/rurPDwazux4" height="1" width="1"&gt;&lt;/div&gt;</content><author><name>فرود</name></author><source gr:stream-id="feed/http://feeds2.feedburner.com/cyberrabbits/posts"><id>tag:google.com,2005:reader/feed/http://feeds2.feedburner.com/cyberrabbits/posts</id><title type="html">&lt;div style="direction:rtl;text-align:right"&gt;یادداشتهای بیت نیمسوز&lt;/div&gt;</title><link rel="alternate" href="http://cyberrabbits.net" type="text/html" /></source></entry></feed>

