<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>گزیر &#187; آموزش</title>
	<atom:link href="http://www.gozir.com/category/training/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.gozir.com</link>
	<description>گاهنوشتهای حمیدرضا محمدی</description>
	<lastBuildDate>Sat, 10 Dec 2011 06:31:32 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=3.1.3</generator>
	<language>fa</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>رابط برنامه‌نویسی گنجور رومیزی – بخش دوم</title>
		<link>http://www.gozir.com/1389/11/10/docx2gdb/</link>
		<comments>http://www.gozir.com/1389/11/10/docx2gdb/#comments</comments>
		<pubDate>Sun, 30 Jan 2011 15:43:45 +0000</pubDate>
		<dc:creator>حمیدرضا</dc:creator>
				<category><![CDATA[آموزش]]></category>
		<category><![CDATA[برنامه‌نویسی]]></category>

		<guid isPermaLink="false">http://www.gozir.com/?p=2018</guid>
		<description><![CDATA[
در ادامهٔ بحث نوشتهٔ پیشین در این نوشته به عنوان یک نمونهٔ عملی از نحوهٔ استفاده از رابط برنامه‌نویسی گنجور رومیزی، من قسمتی از یک فایل docx در دسترس از طریق سایت تصوف ایران -مربوط به اشعار وحدت کرمانشاهی- را به کمک تکه کدی که شرح آن در ادامه می‌آید به قالب گنجور رومیزی تبدیل [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
در ادامهٔ بحث <a href="http://www.gozir.com/1389/11/05/dg-api/" title="رابط برنامه‌نویسی گنجور رومیزی – بخش اول">نوشتهٔ پیشین</a> در این نوشته به عنوان یک نمونهٔ عملی از نحوهٔ استفاده از رابط برنامه‌نویسی گنجور رومیزی، من قسمتی از یک فایل docx در دسترس از طریق سایت <a href="http://www.sufi.ws/">تصوف ایران</a> -مربوط به اشعار وحدت کرمانشاهی- را به کمک تکه کدی که شرح آن در ادامه می‌آید به قالب گنجور رومیزی تبدیل کرده‌ام (اصل فایل <a href="http://www.sufi.ws/books/download/farsi/divan-vahdat.doc">اینجا</a>ست، من آن را دریافت کرده‌ام، با کمک <acronym title="Word">ورد</acronym> ۲۰۰۷ با پسوند docx ذخیره کرده و آن را در فایل <acronym title="zip">زیپ</acronym> پروژهٔ مربوط به این مطلب -قابل دریافت از <a href="http://j.mp/hDR779">این نشانی</a>-  گنجانده‌ام).
</p>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
برای انجام این کار باید علاوه بر ویژوال استودیو (با امکان برنامه‌نویسی برای سکوی ‎.NET ویرایش ۳.۵ یا ۴) کتابخانهٔ برنامه‌نویسی OpenXML را نیز نصب داشته باشید. این کتابخانه را از <a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyId=C6E744E5-36E9-45F5-8D8C-331DF206E0D0&displaylang=en">این صفحه</a> دریافت و نصب کنید (OpenXMLSDKv2.msi با حجم کمتر از ۴ مگابایت برای مقصود مورد نظر ما کافیست، البته پیش‌نیاز نصب این کتابخانه سکوی ‎.NET ویرایش ۳.۵ با سرویس پک ۱ است).
</p>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
پس از نصب کتابخانهٔ یاد شده و ایجاد پروژه، <acronym title="reference">ارجاع</acronym> متناظر با آن را به فهرست ارجاعهای پروژه اضافه می‌کنیم تا فضاهای نام مورد نیاز در دسترس قرار گیرند.
</p>
<img src="http://www.gozir.com/logman/wp-content/uploads/2011/01/openxmlref.gif" alt="ارجاعهای لازم برای دستیابی به کتابخانهٔ OpenXML شامل DocumentFormat.OpenXml و WindowsBase است" width="232" height="253" class="centered" />
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
برای پیاده‌سازی تبدیل مورد نظر لازم است الگوی تایپ فایل ورودی را استخراج کنیم. با بررسی ظاهر فایل ورودی الگوی عمومی زیر را مشاهده می‌کنیم:
</p>
<img src="http://www.gozir.com/logman/wp-content/uploads/2011/01/doc2gdbsample.gif" alt="سلولهای جدول حاوی متن اشعار در فایل ورودی مورد نظر" width="400" height="374" class="centered" />
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
بنابراین در ترتیب معمول بازخوانی محتوای این فایل (چگونه فایل تایپ شده): هر مصرع در تمام سلولهای حاوی متن از مصرعهای دیگر با یک break جدا شده است. محتوای سلول اول جدول (۱)، مربوط به مصرعهای اول ابیات است، بعد از این سلول، سلولی خالی داریم (۲)، محتوای سلول بعدی (۳) مربوط به مصرعهای دوم ابیات است، بعد یک سلول خالی (۴) (استثنایی وجود دارد که توضیح می‌دهم)، بعد سلولی شامل دو مصرع متوالی که مربوط به بیت تخلص شاعر است (۵) و پس از آن تا شعر بعدی یک سلول خالی دیگر داریم (۶).
</p>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
پس ما در هنگام تبدیل فایل ورودی در هر لحظه انتظار یکی از سه نوع سلول جدول مصرعهای سمت راست، چپ یا وسط را می‌کشیم:
</p>
<span id="more-2018"></span>
<div style="direction:ltr;text-align:left"><script type="text/javascript" src="https://gist.github.com/802943.js?file=gistfile1.cs"></script></div>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
در صورتی که فایل را بیشتر بررسی کنیم این استثنا را می‌بینیم:
</p>
<img src="http://www.gozir.com/logman/wp-content/uploads/2011/01/doc2gdbsampleexp.gif" alt="استثنای الگوی جدولی فایل ورودی" width="400" height="378" class="centered" />
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
همچنان که می‌بینید پس از سلول (۳)، در حالی که انتظار یک سلول خالی را داریم (۴) با یک سلول شامل ادامهٔ مصرعهای اول مواجه می‌شویم (۱) لذا در صورتی که بعد از سلول شامل محتوای مصرعهای دوم سلول خالی نداشته باشیم، سلول بعدی شامل ادامهٔ مصاریع اول همان شعر است و نه بیت تخلص.
</p>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
برای بازخوانی فایلهای docx ارجاعهای لازم به کتابخانهٔ OpenXml را اضافه می‌کنیم تا <acronym title="namespace">فضاهای نام</acronym> مورد نیاز در دسترس قرار گیرند:
</p>
<div style="direction:ltr;text-align:left"><script type="text/javascript" src="https://gist.github.com/802947.js?file=gistfile1.cs"></script></div>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
با توجه به توضیحی که در مورد نحوهٔ سازماندهی مصاریع در این فایل دادم الگوریتم تبدیل اینچنین است (در کد کامل و قابل اجرای پروژه، کدهای اضافی برای پردازش استثناها و ... گنجانده شده که اینجا برای ساده‌تر شدن مطالعهٔ کد فرایند اصلی حذف شده):
</p>
<div style="direction:ltr;text-align:left"><script type="text/javascript" src="https://gist.github.com/802952.js?file=gistfile1.cs"></script></div>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
همچنان که از تصاویر و احتمالاً توضیحات بالا پیداست، فایل ورودی اولیهٔ مورد استفادهٔ من دیوان وحدت کرمانشاهی نبوده بلکه دیوان شاه نعمت الله ولی (قابل دریافت از <a href="http://www.sufi.ws/MysticalBooks%289%29.php">این نشانی</a>) را بررسی کرده‌ام. از آنجا که این دیوان یکدست تایپ نشده و پس از بخش قصاید الگوهای تایپ دیگری دارد (مثلاً بعضی غزلها را بدون بیت تخلص در میانه تایپ کرده‌اند و ...) در تنظیم نهایی مطلب، ورودی یکدست‌تری را انتخاب کردم و راهکاری نیز برای رفع یک مورد استثنا در فایل ورودی جدید (در <a href="http://j.mp/hDR779">پروژهٔ قابل دریافت</a>) پیش‌بینی کردم. در هر حال سی و خرده‌ای قصیدهٔ ابتدایی شاه نعمت الله نیز توسط سازوکار شرح داده شده در اینجا قابل تبدیل است.
</p>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
همچنان که پیشتر اشاره کردم کد این پروژه را -‎.NET ویرایش ۴، <acronym title="Windows Forms">ویندوز فرمز</acronym>، ویژوال C#‎ اکسپرس ۲۰۱۰- از <a href="http://j.mp/hDR779">اینجا</a> می‌توانید دریافت کنید (نشانی اسمبلی گنجور رومیزی را در کامپایل مجدد احتمالاً باید تصحیح کنید). به عنوان نکته‌ای که احتمالاً به ذهن خودتان هم می‌رسد اما یادآوریش ضرری ندارد، اشاره می‌کنم به این که فایل خروجی را می‌توانید فایل پایگاه داده‌های اصلی گنجور رومیزی تعیین کنید تا بتوانید خروجی کار را به شکل زنده مشاهده کنید. البته، برنامه در صورت وجود فایل خروجی از کاربر تأییدیهٔ حذف می‌گیرد و <strong>فایل موجود را حذف می‌کند</strong>، مواظب باشید اگر اطلاعات شخصی پشتیبان گرفته نشده در فایل خروجی دارید (نشانه‌ها در گنجور رومیزی) این اطلاعات را از دست ندهید.
</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gozir.com/1389/11/10/docx2gdb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>رابط برنامه‌نویسی گنجور رومیزی &#8211; بخش اول</title>
		<link>http://www.gozir.com/1389/11/05/dg-api/</link>
		<comments>http://www.gozir.com/1389/11/05/dg-api/#comments</comments>
		<pubDate>Tue, 25 Jan 2011 07:29:27 +0000</pubDate>
		<dc:creator>حمیدرضا</dc:creator>
				<category><![CDATA[آموزش]]></category>
		<category><![CDATA[برنامه‌نویسی]]></category>

		<guid isPermaLink="false">http://www.gozir.com/?p=2000</guid>
		<description><![CDATA[
یکی از نکاتی که شاید به کار برنامه‌نویسانی بیاید که دوست دارند در گسترش دامنهٔ داده‌های گنجور با استفاده از گنجور رومیزی مشارکت کنند این است که بدانند تنها راه تبدیل منابع اینترنتی یا فایلهای موجود به فرمت گنجور رومیزی کپی دستی اشعار از این منابع در ویرایشگر گنجور رومیزی نیست و می‌توان با استفاده [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
یکی از نکاتی که شاید به کار برنامه‌نویسانی بیاید که دوست دارند در گسترش دامنهٔ داده‌های <a href="http://ganjoor.net">گنجور</a> با استفاده از <a href="http://ganjoor.sourceforge.net">گنجور رومیزی</a> مشارکت کنند این است که بدانند تنها راه تبدیل منابع اینترنتی یا فایلهای موجود به فرمت گنجور رومیزی کپی دستی اشعار از این منابع در <a href="http://blog.ganjoor.net/1389/04/27/dg-editor/">ویرایشگر گنجور رومیزی</a> نیست و می‌توان با استفاده از ‎C#‎ یا هر یک از دیگر زبانهای ‎.NET تقریباً به آسانی فایلهای مناسب برای نمایش در گنجور رومیزی را ساخت.
</p>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
البته همانطور که احتمالاً این دسته از دوستان مطلعند فایلهای گنجور رومیزی در واقع پایگاه داده‌های <a href="http://www.sqlite.org" title="اسکیولایت">SQLite</a> هستند و راه متداول برای ایجاد آنها به کمک زبانهای برنامه‌نویسی، استفاده از دستورات SQL است که نیازمند بازبینی ساختار پایگاه داده‌های برنامه و به دست آوردن روابط بین جداول است. اما روشی که در این نوشته در مورد آن توضیح خواهم داد آسان‌تر است.
</p>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
مقدمهٔ کار در <acronym title="Microsoft Visual Studio">ویژوال استودیو</acronym>، اضافه کردن یک <acronym title="Reference">ارجاع</acronym> به <acronym title="Assembly">اسمبلی</acronym> ganjoor.exe است (فایل اجرایی گنجور رومیزی که در مسیر نصب برنامه قرار دارد) تا <acronym title="namespace">فضای نام</acronym> ganjoor در برنامه در دسترس قرار گیرد.<a href="http://www.gozir.com/1389/11/05/dg-api/#fn1" name="hn1">*</a>
</p>
<img src="http://www.gozir.com/logman/wp-content/uploads/2011/01/add-ref.gif" alt="اضافه کردن ارجاع در ویژوال استودیو" width="293" height="244" class="centered" />
<img src="http://www.gozir.com/logman/wp-content/uploads/2011/01/ganjoor-ref.gif" alt="ارجاع به اسمبلی گنجور رومیزی در ویژوال استودیو" width="164" height="121" class="centered" />
[code lang="c#"]
using ganjoor;
[/code]
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
پس از این کار به کلاس اصلی مدیریت داده‌ها در گنجور رومیزی که DbBrowser نام دارد دسترسی داریم. تکه‌کد زیر -که به نظرم به اندازهٔ کافی گویاست- نشان می‌دهد که چگونه می‌توان با استفاده از این کلاس (و کلاسهای جانبی فضای نام ganjoor که اطلاعات داده‌ها را در خود دارند) یک فایل سادهٔ gdb یا s3db ساخت که گنجور رومیزی توانایی نمایش اطلاعات آن را دارد:
</p>
<span id="more-2000"></span>
<div style="direction:ltr;text-align:left"><script src="https://gist.github.com/794637.js" type="text/javascript"> </script></div>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
همین کلاسها امکان بازخوانی اطلاعات از یک فایل پایگاه داده‌های گنجور رومیزی (و مثلاً ذخیرهٔ آن با فرمتهای دیگر را) در اختیار می‌گذارند:
</p>
<div style="direction:ltr;text-align:left"><script src="https://gist.github.com/794638.js" type="text/javascript"> </script></div>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
در نوشتهٔ بعدی یک نمونهٔ عملی را برای استخراج اطلاعات از یک فایل docx خاص و ذخیرهٔ آن در قالب گنجور رومیزی ارائه خواهم داد.
</p>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
<small>
<a href="#hn1" name="fn1">*</a>این اسمبلی ارجاعی به اسمبلی System.Data.SQLite.dll دارد که یک اسمبلی Mixel Mode مبتنی بر ویرایش ۲ سکوی ‎.NET است لذا در صورت استفاده در برنامه‌های مبتنی بر ویرایش ۴ سکوی ‎.NET لازم است خطوط زیر (جهت رفع خطای مرتبط کامپایلری) در App.config اضافه شود (<a href="http://stackoverflow.com/questions/2455654/what-additional-configuration-is-necessary-to-reference-a-net-2-0-mixed-mode-a">منبع</a>):
</small>
</p>
<a href="http://stackoverflow.com/questions/2455654/what-additional-configuration-is-necessary-to-reference-a-net-2-0-mixed-mode-a"><img src="http://www.gozir.com/logman/wp-content/uploads/2011/01/dotnet2mixed-in-dotnet4.gif" alt="load .NET 2 mixed mode assembly in .NET 4" width="498" height="94" class="centered" /></a>]]></content:encoded>
			<wfw:commentRss>http://www.gozir.com/1389/11/05/dg-api/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>برنامه‌نویسی با C++‎ آسان است؟!</title>
		<link>http://www.gozir.com/1389/09/18/lrm/</link>
		<comments>http://www.gozir.com/1389/09/18/lrm/#comments</comments>
		<pubDate>Thu, 09 Dec 2010 16:30:51 +0000</pubDate>
		<dc:creator>حمیدرضا</dc:creator>
				<category><![CDATA[آموزش]]></category>
		<category><![CDATA[زبان فارسی]]></category>
		<category><![CDATA[سایت]]></category>
		<category><![CDATA[نوشته‌های پراکنده]]></category>

		<guid isPermaLink="false">http://www.gozir.com/?p=1952</guid>
		<description><![CDATA[
البته که نه! برنامه‌نویسی با C#‎ و به کمک سکوی ‎.NET آسان‌تر است. بحث اینجا البته نه C++‎ است نه C#‎، نه سکوی ‎.NET و نه حتی برنامه‌نویسی.


خواستم نکته‌ای را که مدتی پیش یاد گرفته‌ام به شما هم یاد بدهم. سعی کنید عنوان این مطلب را در Notepad ویندوز تایپ کنید. ابتدا آن را راست [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
البته که نه! برنامه‌نویسی با C#‎ و به کمک سکوی ‎.NET آسان‌تر است. بحث اینجا البته نه C++‎ است نه C#‎، نه سکوی ‎.NET و نه حتی برنامه‌نویسی.
</p>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
خواستم نکته‌ای را که مدتی پیش یاد گرفته‌ام به شما هم یاد بدهم. سعی کنید عنوان این مطلب را در Notepad ویندوز تایپ کنید. ابتدا آن را راست به چپ کنید و تایپ کنید «برنامه‌نویسی با C++‎ آسان است.»   چه اتفاقی می‌افتد؟
</p>
<img src="http://www.gozir.com/logman/wp-content/uploads/2010/12/notepad-cpp1.gif" alt="جهت C++‎ در جملهٔ تایپ شده درست نیست" width="496" height="337" class="centered" />
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
چرا این اتفاق می‌افتد؟ آیا این ایراد نرم‌افزاری نوت‌پد است؟ من چنین تصوری داشتم و مطلب را در انجمن <a href="http://groups.google.com/group/persian-computing">رایانش فارسی</a> سؤال کردم (<a href="http://groups.google.com/group/persian-computing/browse_thread/thread/ed8344dd28966447">اینجا</a>). پاسخ آن است که خیر این یک ایراد نیست. بر طبق <a href="http://unicode.org/reports/tr9/" title="Unicode Bidirectional Algorithm">الگوریتم دوسونویسی استاندارد یونیکد</a> (<a href="http://unicode.org/reports/tr9/">UBA</a>) <acronym title="character">نویسه</acronym>هایی مانند + و # <acronym title="weak">کم‌توان</acronym> محسوب می‌شوند و جهت آنها در متن توسط نویسهٔ <acronym title="strong">پرتوان</acronym> بعدی آنها تعیین می‌شود. به همین جهت اضافه کردن یک نویسهٔ پرتوان استاندارد غیرقابل مشاهده مثل نویسهٔ <a href="http://en.wikipedia.org/wiki/Left-to-right_mark">LRM (Left-to-Right Mark)‎</a> (قابل تایپ توسط Ctrl+Shift+3 در صفحه‌کلید استاندارد ویندوز در حالتی که صفحه‌کلید فارسی است) مشکل را حل می‌کند (برنامه‌نویسی با C++&lt;LRM&gt;‎ آسان است).
</p>
<img src="http://www.gozir.com/logman/wp-content/uploads/2010/12/notepad-cpp2.gif" alt="جهت C++‎ به کمک نویسهٔ LRM بعد از آن درست شده است." title="notepad-cpp2" width="496" height="337" class="centered" />
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
نظیر همین مشکل برای تایپ «سکوی ‎.NET» وجود دارد، در این مورد باید نویسهٔ کنترلی را پیش از نقطه گذاشت. البته من راجع به دلیلش مطمئن نیستم. طبق چیزی که بالا نقل کردم باید نویسهٔ بعدی نقطه جهت را چپ به راست می‌کرد، اما این گونه نمی‌شود و نیاز است قبل از آن نویسهٔ کنترلی بگذاریم. احتمالاً دلیلش با بررسی مستندات UBA مشخص می‌شود. اگر از دوستان کسی دلیلش را می‌داند بنویسد (<strong>بعدنوشت:</strong> جوابش را آقای سید رضی داد: <a href="http://www.gozir.com/1389/09/18/lrm/#comment-15866">اینجا</a>).
</p>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
علاوه بر این از نویسه‌های کنترلی LRM و RLM برای تایپ ممیزهای بین اعداد تاریخ طوری که در مرورگرهای مختلف متن نهایی یکسان دیده شود می‌توان استفاده کرد. گویا <acronym title="Microsoft Word">مایکروسافت ورد</acronym> این نویسه‌ها را به صورت خودکار در جای لازم درج می‌کند و به همین دلیل کسانی که با <acronym title="Word">ورد</acronym> تایپ می‌کنند احتمالاً این مشکل را زیاد مشاهده نکرده‌اند.

</p>
<h3>دنبالهٔ ۱</h3>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
پیرو بحث پاراگراف اول دربارهٔ تقابل  C++‎ و  C#‎، بارها دوستان تقاضا کرده‌اند گنجور رومیزی را روی لینوکس یا مک‌اوس بتوانند اجرا کنند. من پیشتر دنبال راه حلهایی مانند مونو بودم (<a href="http://www.gozir.com/1388/07/17/linjoor/">اینجا</a> را ببینید) که به نتیجه نرسید. با ویرایشهای جدیدتر مونو حتی در حد همان دلخوشکنک ابتدایی نمایش پنجرهٔ برنامه هم، برنامه اجرا نمی‌شود. آقای <a href="http://www.pojh.co.cc/">سیدرضی علوی‌زاده</a> در حال تهیهٔ برنامه‌ای سازگار با پایگاه داده‌های گنجور رومیزی با استفاده از Qt هستند که تحت سه سیستم عامل ویندوز، لینوکس و مک اجرا می‌شود. اطلاعات بیشتر راجع به «ساغر» را <a href="http://www.pojh.co.cc/saaghar/">اینجا</a> بخوانید و تصاویری از آن را ببینید.
</p>
<h3>دنبالهٔ ۲</h3>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
از آنجا که حدس می‌زنم عنوان نوشته اغواگر جستجوگران  اینترنتی «C++‎ آسان» باشد سایت <a href="http://p30codenevis.ir">پی‌سی‌کدنویس</a> را به این دسته از مشتریان نوشته توصیه می‌کنم.
</p>
<h3>دنبالهٔ ۳</h3>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
در راستای دنبالهٔ ۱ و بر اساس دلایلی که در <a href="http://blog.ganjoor.net/1389/09/14/ganjoor-facebook/">اینجا</a> راجع به آن صحبت کرده‌ام صفحهٔ فیس‌بوک گنجور را راه‌اندازی کرده‌ام (<a href="http://www.facebook.com/ganjoor/">http://www.facebook.com/ganjoor</a>). اگر اهل فیس‌بوک هستید و به <a href="http://ganjoor.net">گنجور</a> علاقه دارید سری به آن بزنید و آن را به دوستانتان بشناسانید.
</p>
<a href="http://www.facebook.com/ganjoor/"><img src="http://www.gozir.com/logman/wp-content/uploads/2010/12/fad.gif" alt="صفحهٔ گنجور در فیس‌بوک" width="500" height="158" class="centered" /></a>
<h3>دنبالهٔ ۴</h3>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
این نوشته را تقدیم می‌کنم به <a href="http://www.gozir.com/1389/07/02/titanic-khayyam/#comment-15810">شیخنا</a>.
</p>]]></content:encoded>
			<wfw:commentRss>http://www.gozir.com/1389/09/18/lrm/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>شاید به وقتش به فکر شما هم نرسد</title>
		<link>http://www.gozir.com/1389/05/30/ssh-rasdial/</link>
		<comments>http://www.gozir.com/1389/05/30/ssh-rasdial/#comments</comments>
		<pubDate>Sat, 21 Aug 2010 14:37:18 +0000</pubDate>
		<dc:creator>حمیدرضا</dc:creator>
				<category><![CDATA[آموزش]]></category>

		<guid isPermaLink="false">http://www.gozir.com/?p=1860</guid>
		<description><![CDATA[
۱

چند روز پیش تصمیم داشتم از سرور گنجور بک‌آپ بگیرم تا پس از تغییر احتمالی بستهٔ میزبانی بک‌آپ گرفته شده را روی آن بازگردانم. روی سرور گنجور دسترسی SSH دارم و به همین دلیل می‌توانم به سرعت از دیتابیسهای سایت بک‌آپ تهیه کنم و بک‌آپها را به همراه فایلهای موجود روی سرور را فشرده کنم [...]]]></description>
			<content:encoded><![CDATA[<br />
<h3>۱</h3>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
چند روز پیش تصمیم داشتم از سرور گنجور <acronym title="backup">بک‌آپ</acronym> بگیرم تا پس از تغییر احتمالی بستهٔ میزبانی بک‌آپ گرفته شده را روی آن بازگردانم. روی سرور گنجور دسترسی <a href="http://en.wikipedia.org/wiki/Secure_Shell">SSH</a> دارم و به همین دلیل می‌توانم به سرعت از <acronym title="پایگاه داده‌ها, database">دیتابیس</acronym>های سایت بک‌آپ تهیه کنم و بک‌آپها را به همراه فایلهای موجود روی سرور را فشرده کنم و نهایتاً مجموعهٔ بک‌آپها را در قالب یک فایل دریافت کنم.
</p>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
مشکل اینجا بود که حجم نهایی فایل بک‌آپ زیاد شد و این شد که مجبور شدم یک شب تا صبح کامپیوترم را برای دریافت این فایل روشن بگذارم.
</p>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
راه حل بهتر -به جای دریافت یک فایل چند صد مگابایتی- صبح روز داونلود به ذهنم رسید: وقتی که هنوز چند ده مگابایتی از فایل مذکور مانده بود. من روی <a href="http://www.gozir.com">گزیر</a> هم یک بستهٔ میزبانی جدا دارم. می‌توانستم به جای داونلود این فایل عظیم روی کامپیوتر خودم و احتمالاً علافی چند ساعتهٔ آتی برای آپلودش آن را از طریق خط فرمان SSH و دستور ftp به سرور گزیر منتقل کنم و بعداً هم با امکانی مشابه آن را به محل نهایی منتقل کنم. کاری که به کمک ارتباط ِ -اگر درست یادم مانده باشد- ۷۵۰ کیوبایت بر ثانیه‌ای دو میزبان در کمتر از یک دقیقه به انجام رسید!
</p>
<h3>۲</h3>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
مشکلی که در داونلودهای بزرگ گاهی وجود دارد قطع ارتباط اینترنت است. من همچنانکه پیشتر اشاره کرده‌ام در حال حاضر از اینترنت ADSL داتک استفاده می‌کنم و پیش از آن از آسیاتک (یکی از مشکلاتم هم با داتک همین قطعیهای ناگهانی است که البته بلافاصله بعد از قطعی می‌شود دوباره وصل شد و نیازی به تماس با بخش پشتیبانی نیست، یک بار قضیه را به پشتیبانی داتک گفتم گفتند مشکل از مودم من است که مودم خوبی نیست!). برای حل این مشکل، آن وقتها که آسیاتک داشتم یک فایل <acronym title="batch">بچ</acronym> درست کرده بودم که در آن به کمک دستور rasdial ویندوز؛ ارتباط را شماره‌گیری می‌کردم و این فایل بچ را در <acronym title="Windows Task Scheduler">اسکجولر</acronym> ویندوز گذاشته بودم هر نیم ساعت یا یک ساعت یک بار اجرا شود و قطعی ارتباطهای احتمالی را در زمانی که من پشت کامپیوتر نیستم رفع کند. اما برای داتک این روش درست کار نمی‌کرد، چرا که در پیکربندی داتک تلاشهای متوالی برای اتصال مجدد با یک نام کاربری و گذرواژه وقتی که هنوز قطع نشده‌اید در نهایت باعث قفل شدن حساب کاربری می‌شد. راه حل دم دستی این می‌توانست باشد که پیش از شماره‌گیری به کمک سوییچ disconnect دستور rasdial اتصال موجود را قطع کنم، مدتی منتظر بمانم و سپس دوباره شماره‌گیری کنم. مشکل اینجاست که خط فرمان استاندارد ویندوز دستوری برای sleep ندارد، جستجوی مختصری کردم و متوجه شدم که با استفاده از سوییچهای دستور پینگ می‌شود وقفهٔ چندثانیه‌ای ایجاد کرد. این بچ‌فایل جدید همان کاری را که من نیاز دارم انجام می‌دهد که ممکن است برای شما مفید باشد:
</p>


<blockquote><p class="lft" style="text-align:left">rasdial datak /disconnect</p>
<p class="lft" style="text-align:left">ping 127.0.0.1 -n 10 -w 1000 > nul</p>
<p class="lft" style="text-align:left">rasdial datak username password</p>
</blockquote>

<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
هر چند به نظرم باید راهکار استانداردی برای اطلاع از قطع اتصال وجود داشته باشد تا نیاز نباشد اتصال موجود را قطع کنیم. شما چنین راهکاری سراغ ندارید؟
</p>]]></content:encoded>
			<wfw:commentRss>http://www.gozir.com/1389/05/30/ssh-rasdial/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>فایرفاکس جدید، اپراهای موبایل و &#8230;</title>
		<link>http://www.gozir.com/1388/11/19/ff36-opera-etc/</link>
		<comments>http://www.gozir.com/1388/11/19/ff36-opera-etc/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 18:11:25 +0000</pubDate>
		<dc:creator>حمیدرضا</dc:creator>
				<category><![CDATA[آموزش]]></category>
		<category><![CDATA[اینترنت]]></category>
		<category><![CDATA[دستگاهها]]></category>
		<category><![CDATA[نرم‌افزار]]></category>

		<guid isPermaLink="false">http://www.gozir.com/?p=1700</guid>
		<description><![CDATA[
فایرفاکس ۳.۶ خیلی وقت است که آمده، ولی من همین یکی دو روز پیش نصبش کرده‌ام. با نصب (در واقع ارتقا به) این ویرایش، بعضی افزونه‌های ناسازگارم از کار افتادند. راه حلی که برای ویرایشهای قدیمی‌تر این مشکل را حل می‌کرد برای این ویرایش با کمی تغییر کار می‌کند: کافیست در about:config کلیدی با نام [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
<a href="http://www.getfirefox.com/">فایرفاکس ۳.۶</a> خیلی وقت است که آمده، ولی من همین یکی دو روز پیش نصبش کرده‌ام. با نصب (در واقع ارتقا به) این ویرایش، بعضی افزونه‌های ناسازگارم از کار افتادند. <a href="http://www.gozir.com/1387/03/30/enable-ext-ff3/">راه حلی که برای ویرایشهای قدیمی‌تر این مشکل را حل می‌کرد</a> برای این ویرایش با کمی تغییر کار می‌کند: کافیست در <span class="lft">about:config</span> کلیدی با نام <span class="lft">extensions.checkCompatibility.3.6</span> ایجاد کنید و مقدار آن را false بگذارید (دستورالعمل این کار مطابق همان روش قدیمی است که می‌توانید آن را <a href="http://www.gozir.com/1387/03/30/enable-ext-ff3/">اینجا</a> بازخوانی کنید).
</p>
<span id="more-1700"></span>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
از جمله تغییرات فایرفاکس جدید این است که لینکهایی را که با کلیک وسط یا کنترل+کلیک می‌خواهید در برگهٔ جدیدی بازشان کنید -گویا مثل گوگل کروم- در برگه‌ای سمت راست برگهٔ جاری باز می‌کند در حالی که در ویرایشهای قدیمی‌تر، جایگاه این برگهٔ جدید؛ سمت راست‌ترین برگه می‌شد. اگر شما هم مثل من، عملکرد ویرایشهای قدیمی را می‌پسندید می‌توانید مقدار کلید <span class="lft">browser.tabs.insertRelatedAfterCurrent</span> را در همان <span class="lft">about:config</span> برابر با false بگذارید تا فایرفاکس برگهٔ جدید را در جایگاه قدیمی باز کند.
</p>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
این روزها، دسترسی به <a href="http://www.gmail.com">جی‌میل</a> کمی مشکل شده. برای رفع این مشکل آخرین نسخهٔ <a href="http://www.mozillamessaging.com/en-US/thunderbird/" title="Thunderbird">تاندربرد</a> را دریافت و نصب کردم. این ویرایش از این نرم‌افزار به آسانی و بدون دردسر اضافی (در صورت فعال بودن POP3 و IMAP در حساب کاربری جی‌میل) ایمیلها را دریافت می‌کند. برچسبها را به صورت پوشه نشان می‌دهد و قابلیتهای معمول جی‌میل مثل آرشیو کردن ایمیلها هم در آن در دسترس است. دو قابلیتِ -به نظر من- ضروری را این نرم‌افزار ندارد که هر دو را با استفاده از افزونه‌های آن می‌توان حل کرد. یکی قابلیت راست به چپ نویسی را که با نصب افزونهٔ <a href="https://addons.mozilla.org/en-US/thunderbird/addon/310">BiDi Mail UI</a> می‌توان اضافه‌اش کرد و دیگری <acronym title="Minimize">مینیمایز</acronym> شدن در <acronym title="tray">تری</acronym> را که با نصب <a href="https://addons.mozilla.org/en-US/thunderbird/addon/2831">MinimizeToTray Plus</a> اضافه می‌شود.
</p>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
راه دیگر دسترسی به جی‌میل -در صورتی که با موبایلتان به اینترنت دسترسی دارید- استفاده از برنامه‌ایست که گوگل برای دسترسی به آن از طریق موبایل طراحی کرده (<a href="http://www.google.com/mobile/mail/">Gmail for Mobile</a>). که با آن به راحتی می‌توانید ایمیل دریافت و ارسال کنید و با زبان فارسی هم مشکلی ندارد. نسخهٔ جاری آن را از <a href="http://m.google.com/mail/download/binaries/L2/2.0.6/mail_m2.jar">اینجا</a> (که به صورت عادی برای ساکنین ایران کار نمی‌کند) یا از <a href="http://rapidshare.com/files/347775478/mail_m2.jar.html">اینجا</a> دریافت کنید.
</p>
<img src="http://www.gozir.com/logman/wp-content/uploads/2010/02/gmail-mobile.jpg" alt="جی‌میل موبایل" class="centered" />
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
حالا که بحث اینترنت موبایل شد؛ به کمک اینترنت وایرلس شرکت محل کارم، <a href="http://www.opera.com/mini/">اپرا مینی</a> را روی موبایلم (<a href="http://www.gozir.com/1387/12/12/nokia-xm-5800/">نوکیا اکسپرس میوزیک ۵۸۰۰</a>) نصب و امتحان کردم ( ویرایش ۵ را که هنوز نهایی نشده و <em>بتا</em>ست). همچنان که احتمالاً می‌دانید شرکت اپرا این برنامه را با رویکرد کاهش نیازمندیهای پردازشی گوشی موبایل و همینطور کاهش حجم ترافیک رد و بدل شده طراحی کرده. از این رو سرورهای اپرا نقش واسطهٔ کاهش پردازشهای مورد نیاز، کاهش اندازهٔ تصاویر و نهایتاً تبدیل صفحات وب درخواست شده به قالبی فشرده -که OBML خوانده می‌شود- و تحویل آنها به برنامهٔ در حال اجرا بر روی گوشی را برعهده دارند. با این وصف، با تکیه بر واسطه‌گری سرورهای اپرا ;) می‌توان مشکل دسترسی به جی‌میل را نیز حل کرد. جالب آن که با دریافت <a href="http://ompd-proxy.narod.ru">این برنامه</a> می‌توانید از این قابلیت اپرای مینی روی کامپیوتر نیز استفاده کنید.
</p>
<img src="http://www.gozir.com/logman/wp-content/uploads/2010/02/opera-mini-splash.gif" alt="آغازهٔ ابتدایی اپرا مینی" class="centered" />
<img src="http://www.gozir.com/logman/wp-content/uploads/2010/02/opera-mini-url.jpg" alt="تایپ نشانی در اپرا مینی" class="centered" />
<img src="http://www.gozir.com/logman/wp-content/uploads/2010/02/opera-mini-find.gif" alt="جستجو در صفحه با اپرا مینی" class="centered" />
<img src="http://www.gozir.com/logman/wp-content/uploads/2010/02/opera-mini-tab-switch.gif" alt="حرکت بین برگه‌ها در اپرا مینی" class="centered" />
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
مشکل اپرای مینی آن است که بسیاری از قابلیتهای مبتنی بر جاوا اسکریپت صفحات وب از طریق آن در دسترس نیست. برای حل این معضل، در صورتی که یک گوشی هوشمند دارید، می‌توانید <a href="http://www.opera.com/mobile/">اپرای موبایل</a> را بر روی آن نصب کنید. به کمک این برنامه، من به راحتی توانستم جی‌میل و همینطور گوگل‌ریدر را باز کنم و از آنها استفاده کنم. البته در این محصول اپرا قابلیت سرورهای واسطهٔ اپرا مینی در دسترس نیست.
</p>
<img src="http://www.gozir.com/logman/wp-content/uploads/2010/02/opera-mobile.jpg" alt="اپرا موبایل" class="centered" />
<img src="http://www.gozir.com/logman/wp-content/uploads/2010/02/opera-mobile-mail-vu.jpg" alt="اپرا موبایل" class="centered" />]]></content:encoded>
			<wfw:commentRss>http://www.gozir.com/1388/11/19/ff36-opera-etc/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>نوار لغزان با لغزندگی پایین</title>
		<link>http://www.gozir.com/1388/09/20/scroll-autoscrolls-using-arrow-keys/</link>
		<comments>http://www.gozir.com/1388/09/20/scroll-autoscrolls-using-arrow-keys/#comments</comments>
		<pubDate>Fri, 11 Dec 2009 08:52:36 +0000</pubDate>
		<dc:creator>حمیدرضا</dc:creator>
				<category><![CDATA[آموزش]]></category>
		<category><![CDATA[برنامه‌نویسی]]></category>
		<category><![CDATA[نرم‌افزار]]></category>

		<guid isPermaLink="false">http://www.gozir.com/?p=1609</guid>
		<description><![CDATA[
یکی از ایرادهای گزارش شده برای ویرایشهای قدیمی‌تر گنجور رومیزی این بود که نوارهای لغزان آن با کمک کلیدهای جهتی نمی‌لغزد. در واقع اگر ویرایش ۱.۶۳ و پایین‌تر آن را آزمایش بکنید می‌بینید که مثلاً نوار لغزان عمودی آن را، اگر کلید جهتی پایین را همینطور فشار دهید، بعد از سه چهار ثانیه بالاخره تسلیم [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
یکی از ایرادهای گزارش شده برای ویرایشهای قدیمی‌تر <a href="http://ganjoor.sourceforge.net/">گنجور رومیزی</a> این بود که <acronym title="scrollbars">نوارهای لغزان</acronym> آن با کمک کلیدهای جهتی نمی‌لغزد. در واقع اگر ویرایش ۱.۶۳ و پایین‌تر آن را آزمایش بکنید می‌بینید که مثلاً نوار لغزان عمودی آن را، اگر کلید جهتی پایین را همینطور فشار دهید، بعد از سه چهار ثانیه بالاخره تسلیم می‌شود و راه می‌افتد اما خوب! سخت راه می‌افتد (دلیلش از لحاظ برنامه‌نویسی احتمالاً این است که کلید جهتی مزبور در واقع فوکوس را دارد بین کنترلها جابجا می‌کند و به هر کدام چند میلی ثانیه اجازهٔ مالکیت آن را می‌دهد تا آخر سر نوبت به نوار لغزان می‌رسد). توی ویرایش جدیدتر این مشکل را حل کردم.
</p>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
اما «چطورش» شاید به درد برنامه‌نویسهای (احتمالاً تازه‌کار یا کم‌سواد مثل خودم) <acronym title="Windows Forms">ویندوز فرمز</acronym> بخورد (چون راه حلش را با جستجو پیدا نکردم): کنترل اصلی گنجور رومیزی یک User Control ساده است که نشانی شعرها یا دسته‌های شعرها و همینطور شماره بیتها با استفاده از کنترلهای LinkLabel و مصرعها با استفاده از یک کنترل مشتق از Label روی آن تعبیه شده و ویژگی AutoScroll آن فعال است. به این ترتیب، با توجه به جای پایین‌ترین و سمت چپ‌ترین کنترل، نوارهای لغزندهٔ آن به طور خودکار ظاهر می‌شوند. من برای این که بتوانم کلیدهای جهتی را برای حرکت دادن نوارهای لغزان دریافت کنم رویداد PreviewKeyDown را برای این کنترل به صورت زیر نوشتم:
</p>
[code lang="c#"]
private void GanjoorViewer_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
        {
            bool isInputKey = true;
            switch (e.KeyCode)
            {
                case Keys.Down:
                    if (VerticalScroll.Value + VerticalScroll.SmallChange <= VerticalScroll.Maximum)
                        VerticalScroll.Value += VerticalScroll.SmallChange;
                    break;
                case Keys.Up:
                    if (VerticalScroll.Value - VerticalScroll.SmallChange >= VerticalScroll.Minimum)
                        VerticalScroll.Value -= VerticalScroll.SmallChange;
                    break;                    
                case Keys.PageDown:                    
                    for(int i=0; i<2; i++)//!?
                    if (VerticalScroll.Value + VerticalScroll.LargeChange <= VerticalScroll.Maximum)                        
                        VerticalScroll.Value += VerticalScroll.LargeChange;
                    else
                        VerticalScroll.Value = VerticalScroll.Maximum;
                    break;
                case Keys.PageUp:
                    for (int i = 0; i < 2; i++)//!?
                    if (VerticalScroll.Value - VerticalScroll.LargeChange >= VerticalScroll.Minimum)
                        VerticalScroll.Value -= VerticalScroll.LargeChange;
                    else
                        VerticalScroll.Value = VerticalScroll.Minimum;
                    break;                
                case Keys.Right:
                    if (HorizontalScroll.Value + HorizontalScroll.SmallChange <= HorizontalScroll.Maximum)
                        HorizontalScroll.Value += HorizontalScroll.SmallChange;
                    break;
                case Keys.Left:
                    if (HorizontalScroll.Value - HorizontalScroll.SmallChange >= HorizontalScroll.Minimum)
                        HorizontalScroll.Value -= HorizontalScroll.SmallChange;
                    break;
                default:
                    isInputKey = false;
                    break;
            }
            if (isInputKey)
                e.IsInputKey = true;
        }
[/code]
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
در مورد حلقهٔ دوتایی کلیدهای PageDown و PageUp، دلیلش را نمی‌دانم ولی بدون اصرار ;) کار نمی‌کرد! بعد این رویداد را علاوه بر UserControl اصلی، همه جا، پس از ایجاد و اضافه کردن زیرکنترلهایش به آنها هم نسبت دادم:
</p>
[code lang="c#"]
        private void AssignPreviewKeyDownEventToControls()
        {
            foreach (Control ctl in this.Controls)
                ctl.PreviewKeyDown += GanjoorViewer_PreviewKeyDown;
        }
[/code]
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
در هر صورت، راه حل، کمی عجیب و غریب است ولی کار می‌کند. اگر دوستان راه‌حل بهتری سراغ دارند پیشنهاد دهند. کد گنجور رومیزی نیز در دسترس و قابل دریافت است (<a href="http://ganjoor.sourceforge.net/develop/">این صفحه</a> را ببینید). فهرست تغییرات گنجور رومیزی را در <a href="http://ganjoor.sourceforge.net/changelog/">این صفحه</a> می‌توانید ببینید.
</p>]]></content:encoded>
			<wfw:commentRss>http://www.gozir.com/1388/09/20/scroll-autoscrolls-using-arrow-keys/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>نیم‌فاصله‌ی غلط / نیم‌فاصله‌ی درست</title>
		<link>http://www.gozir.com/1388/03/10/half-space/</link>
		<comments>http://www.gozir.com/1388/03/10/half-space/#comments</comments>
		<pubDate>Sun, 31 May 2009 14:11:36 +0000</pubDate>
		<dc:creator>حمیدرضا</dc:creator>
				<category><![CDATA[آموزش]]></category>
		<category><![CDATA[زبان فارسی]]></category>
		<category><![CDATA[نرم‌افزار]]></category>

		<guid isPermaLink="false">http://www.gozir.com/?p=1477</guid>
		<description><![CDATA[
من تا یکی دو سال پیش برای تایپ نیم‌فاصله در ویندوز ایکس‌پی Alt را نگه می‌داشتم و اعداد ۰۱۵۷ را تایپ می‌کردم. بعداً از یکی از دوستان میانبر بهتری یاد گرفتم که سریع‌تر و بهتر به نظر می‌رسید (Ctrl+Shift+4). پیش‌تر متوجه شده بودم که در بعضی از متون نیم‌فاصله‌هایی هست که با این نیم‌فاصله فرق [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
من تا یکی دو سال پیش برای تایپ نیم‌فاصله در ویندوز ایکس‌پی Alt را نگه می‌داشتم و اعداد ۰۱۵۷ را تایپ می‌کردم. بعداً از یکی از دوستان میانبر بهتری یاد گرفتم که سریع‌تر و بهتر به نظر می‌رسید (<del>Ctrl+Shift+4</del>). پیش‌تر متوجه شده بودم که در بعضی از متون نیم‌فاصله‌هایی هست که با این نیم‌فاصله فرق دارند (در پنجره‌ی جستجو نیم‌فاصله‌ی خودم را تایپ می‌کردم، آن نیم‌فاصله‌ها را پیدا نمی‌کرد). همین چند روز پیش متوجه شدم که با کلید ترکیبی Ctrl+Shift+2 هم می‌شود نیم‌فاصله تایپ کرد و اتفاقاً نیم‌فاصله‌ی درست و اصلی همین است نه آن.
</p>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
گفتم بنویسم تا اگر شما هم با <del>Ctrl+Shift+4</del> نیم‌فاصله تایپ می‌کنید بدانید که اشتباه است و باید با Ctrl+Shift+2 تایپش کنید. همین!
</p>]]></content:encoded>
			<wfw:commentRss>http://www.gozir.com/1388/03/10/half-space/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>ماشینهای صاحب‏نظر</title>
		<link>http://www.gozir.com/1387/10/06/spam6/</link>
		<comments>http://www.gozir.com/1387/10/06/spam6/#comments</comments>
		<pubDate>Fri, 26 Dec 2008 16:31:45 +0000</pubDate>
		<dc:creator>حمیدرضا</dc:creator>
				<category><![CDATA[آموزش]]></category>
		<category><![CDATA[ابزارهای آنلاین و وب ۲]]></category>
		<category><![CDATA[سری ها]]></category>

		<guid isPermaLink="false">http://www.gozir.com/?p=1349</guid>
		<description><![CDATA[
قلمرو ناخواسته‌های دنیای اینترنت محدود به نامه‌های الکترونیکی و هرزنامه‌ها نیست. هر نوع فرم الکترونیکی که از طریق سایتهای اینترنتی در دسترس قرار می‌گیرد در معرض حمله‌ی روباتها و برنامه‌های کامپیوتری است. این برنامه‌ها با اهداف مختلف تلاش می‌کنند این فرمها را پر کنند و معمولاً حاصل این تلاشها انبوهی از نظرات هرز در وبلاگها، [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
قلمرو ناخواسته‌های دنیای اینترنت محدود به نامه‌های الکترونیکی و <a href="http://www.gozir.com/1387/09/08/spam5/">هرزنامه‌ها</a> نیست. هر نوع فرم الکترونیکی که از طریق سایتهای اینترنتی در دسترس قرار می‌گیرد در معرض حمله‌ی روباتها و برنامه‌های کامپیوتری است. این برنامه‌ها با اهداف مختلف تلاش می‌کنند این فرمها را پر کنند و معمولاً حاصل این تلاشها انبوهی از نظرات هرز در وبلاگها، از کار افتادن کامپیوترهای میزبان سایتهای اینترنتی و انواع پیامدهای ناخوشایند دیگر است.
</p>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
برای نمونه، هرزنامه‌نگاران می‌دانند که اکثر نرم‌افزارهای مبارزه با هرزنامه‌ها، برای ایمیلهایی که از طریق سرویسهای محبوب ایمیل نظیر یاهو و جیمیل ارسال شده باشد اولویت خاصی قائلند و اگر ایمیل واقعاً از طریق این سرویسها ارسال شده باشد احتمال شناسایی آن به عنوان هرزنامه پایین می‌آید. اما از طرف دیگر همه‌ی سرویسهای ایمیل محبوب سیستمهایی برای تشخیص استفاده‌ی غیرمجاز کاربران دارند. به عنوان نمونه برخی از این سیستمها به محض این که تشخیص دهند یک کاربر در یک بازه‌ی زمانی خاص تعداد زیادی ایمیل فرستاده حساب کاربری او را به عنوان هرزنامه‌نگار موقتاً مسدود می‌کنند. از این رو، هرزنامه‌نگاران سیستمهایی طراحی کرده‌اند که تلاش می‌کنند با پر کردن فرم ثبت نام سرویسهای ایمیل به صورت ماشینی حساب ایمیل بسازند و تا حد مسدود شدن با حساب ایجاد شده هرزنامه بفرستند و به محض مسدود شدن ایمیل، به سراغ ایمیل بعدی بروند!
</p>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
نمونه‌ی دیگر استفاده از فرمها برای ارسال اسپم، بخش نظرات وبلاگهاست. اسپمرها با استفاده از برنامه‌های کامپیوتری تلاش می‌کنند این فرمها را پر کنند و در قالب نظرهای وبلاگی به طور انبوه محصولات خود را تبلیغ کنند. انگیزه‌های دیگری نیز همچون افرایش لینکهای ورودی به سایت هدف و در نتیجه افزایش رتبه‌ی سایت در موتورهای جستجو نیز در انتخاب این روش ارسال اسپم مؤثر است.
</p>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
در نوشته‌ی بعدی به بعضی روشهای مقابله با اسپم در قلمرو فرمهای الکترونیکی اشاره خواهم کرد.
</p>
<blockquote>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
فهرست سری نوشته‌های من درباره‌ی هرزنامه‌ها:
</p>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
قسمت اول: <a href="http://www.gozir.com/1387/09/03/spam1/">ریشه‌ی نام اسپم</a>
</p>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
قسمت دوم: <a href="http://www.gozir.com/1387/09/05/spam2/">هرزنامه‌ها</a>

</p>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
قسمت سوم: <a href="http://www.gozir.com/1387/09/06/spam3/">کدامیک هرزنامه‌های بیشتری می‌گیرند: «علی» یا «زهرا»؟</a></p>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
قسمت چهارم: <a href="http://www.gozir.com/1387/09/07/spam4/">بگذارید «اسپم»ها را آنها بخورند!</a>
</p>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
قسمت پنجم: <a href="http://www.gozir.com/1387/09/08/spam5/">درآمدزایی هرزنامه‌ها</a>
</p>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
قسمت ششم: <em>ماشینهای صاحب‌نظر</em>

</p>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">قسمت هفتم: <a href="http://www.gozir.com/1387/10/20/spam7/">کپچا: «تو آدمی؟!»</a>
</p>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
قسمت هشتم: <a href="http://www.gozir.com/1387/10/23/spam8/">او.سی.آر: قاتل کپچای تصویر متن</a>
</p>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
قسمت نهم: <a href="http://www.gozir.com/1387/11/04/spam9/">صنعت حل کپچای هند و راه‌حلهای مقابله با اسپم با تکیه بر تحلیل محتوی</a>
</p>
</blockquote>]]></content:encoded>
			<wfw:commentRss>http://www.gozir.com/1387/10/06/spam6/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>بگذارید «اسپم»ها را آنها بخورند!</title>
		<link>http://www.gozir.com/1387/09/07/spam4/</link>
		<comments>http://www.gozir.com/1387/09/07/spam4/#comments</comments>
		<pubDate>Thu, 27 Nov 2008 17:29:49 +0000</pubDate>
		<dc:creator>حمیدرضا</dc:creator>
				<category><![CDATA[آموزش]]></category>
		<category><![CDATA[ابزارهای آنلاین و وب ۲]]></category>
		<category><![CDATA[سایت]]></category>
		<category><![CDATA[سری ها]]></category>

		<guid isPermaLink="false">http://www.gozir.com/?p=1249</guid>
		<description><![CDATA[
تولید فهرستهای تقریباً تصادفی از آدرسهای ایمیل -آن طور که در نوشته‌ی قبلی به آن اشاره کردم- هزینه‌ی کاری و زمانی بالایی دارد و با توجه به آن که فقط درصدی از نشانیهای تولید شده معتبر هستند برای هرزنامه‌نگاران کوچک راه‌حل چندان به‌صرفه و مفیدی نیست (البته، هرزنامه‌نگاران با یک ارسال آزمایشی و بررسی پاسخ [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
تولید فهرستهای تقریباً تصادفی از آدرسهای ایمیل -آن طور که در <a href="http://www.gozir.com/1387/09/06/spam3/">نوشته‌ی قبلی</a> به آن اشاره کردم- هزینه‌ی کاری و زمانی بالایی دارد و با توجه به آن که فقط درصدی از نشانیهای تولید شده معتبر هستند برای هرزنامه‌نگاران کوچک راه‌حل چندان به‌صرفه و مفیدی نیست (البته، هرزنامه‌نگاران با یک ارسال آزمایشی و بررسی پاسخ دریافتی از سرورهای پست الکترونیکی، می‌توانند ایمیلهای معتبر را غربال کنند و فهرست خودشان را بهبود دهند، ولی این کار هم هزینه‌ی پردازشی بالایی دارد). راه حل بهتر، استفاده از فهرستهای ایمیلهای واقعی است. اما این فهرستها چگونه پر می‌شوند و اطلاعات آنها چگونه جمع‌آوری می‌شود؟ هرزنامه‌نگاران برنامه‌های کاربردی زیادی در اختیار دارند که به کمک آنها می‌توانند فهرستهای خودشان را با ایمیلهای واقعی پر کنند. آنها برنامه‌هایی در اختیار دارند که همانند رباتهای موتورهای جستجو به صفحات وب سرکشی می‌کنند و در آنها دنبال رشته‌هایی با الگوی نشانی پست الکترونیکی (نام@دامنه.پسوند دامنه) می‌گردند. پس یکی از اولین و بهترین راهها برای جلوگیری از اضافه شدن ایمیلتان به این فهرستها آن است که آن را در صفحات عمومی وب در اختیار بقیه نگذارید. سعی کنید به جای وارد کردن نشانی ایمیلتان در وبلاگ یا سایت شخصیتان صفحه‌ی تماس بسازید و آن را طوری تنظیم کنید که پیام مخاطب را به طور غیرمستقیم به ایمیلتان بفرستد. بسیاری از سیستمهای نظرسنجی سایتها و وبلاگها از شما می‌خواهند که نام، نشانی وب‌سایت و ایمیلتان را وارد کنید. تا زمانی که مطمئن نشده‌اید سیستم سایت یا وبلاگ مذکور ایمیل شما را به صورت عمومی منتشر نمی‌کند از وارد کردن ایمیلهای اصلیتان در این گونه کادرها خودداری کنید (به عنوان نمونه، یکی از سیستمهای پرطرفدار وبلاگنویسی وطنی که <a href="http://shirazi.blogfa.com/post-202.aspx">جهت حفظ حریم خصوصی نظردهندگان در وبلاگها</a> آی.پی آنها را حتی در اختیار صاحب وبلاگی که نظر برای او گذاشته شده نمی‌گذارد -احتمالاً به دلیل این که حق همه است که ایمیل نظردهندگان را بدانند و ببینند- ایمیل نظردهندگان را به صورت عمومی منتشر می‌کند ;) ). برخی از سایتها و تالارهای گفتگو بدون ثبت‌نام، مطالب و مقالات خود را در اختیار بازدیدکننده نمی‌گذارند و شما مجبورید برای دستیابی به مطلب مورد نظرتان در این گونه سایتها ثبت‌نام کنید. مشکل اینجاست که ثبت‌نام در این سایتها معمولاً دریافت نامه‌های ناخواسته را به دنبال دارد و علاوه بر این، برخی از این سایتها اطلاعات کاربران خود را در قالب فهرستهای ایمیل، به هرزنامه‌نگاران می‌فروشند. اگر تنها به یک مطلب یا مقاله از سایت یا تالار گفتگوی مورد نظر نیاز دارید بهتر است ابتدا سعی کنید با استفاده از سایتهایی مانند <a href="http://www.bugmenot.com">bugmenot.com</a> اطلاعات ورود به اشتراک‌گذاشته شده‌ای از سایت مزبور بیابید و با استفاده از آن وارد سایت مورد نظر شوید (برای نمونه، چند نام کاربری و کلمه‌ی عبور برای سایت آفتاب نقطه آر را <a href="http://www.bugmenot.com/view/aftab.ir">اینجا</a> ببینید). در صورتی که به نتیجه نرسیدید و مجبور شدید در سایت مورد نظرتان ثبت‌نام کنید به جای وارد کردن ایمیل واقعیتان از ایمیلهای یک‌بار مصرف استفاده کنید. سایتهایی نظیر <a href="http://www.mailinator.com" title="Mailinator - Let Them Eat Spam!">www.mailinator.com</a> بدون نیاز به ثبت‌نام، نشانیهای ایمیل موقتی در اختیارتان می‌گذارند که پس از پایان فرایندهای ثبت‌نام می‌توانید با خیال راحت آنها را رها کنید و به قول صاحبان این سرویس: «بگذارید <a href="http://www.gozir.com/1387/09/03/spam1/">اسپم</a>ها را آنها بخورند»!
</p>
<p style="text-align:left">ادامه دارد ...</p>
<blockquote>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
فهرست سری نوشته‌های من درباره‌ی هرزنامه‌ها:
</p>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
قسمت اول: <a href="http://www.gozir.com/1387/09/03/spam1/">ریشه‌ی نام اسپم</a>
</p>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
قسمت دوم: <a href="http://www.gozir.com/1387/09/05/spam2/">هرزنامه‌ها</a>
</p>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
قسمت سوم: <a href="http://www.gozir.com/1387/09/06/spam3/">کدامیک هرزنامه‌های بیشتری می‌گیرند: «علی» یا «زهرا»؟</a>

</p>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
قسمت چهارم: <em>بگذارید «اسپم»ها را آنها بخورند!</em>
</p>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
قسمت پنجم: <a href="http://www.gozir.com/1387/09/08/spam5/">درآمدزایی هرزنامه‌ها</a>
</p>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
قسمت ششم: <a href="http://www.gozir.com/1387/10/06/spam6/">ماشینهای صاحب‌نظر</a>
</p>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">

قسمت هفتم: <a href="http://www.gozir.com/1387/10/20/spam7/">کپچا: «تو آدمی؟!»</a>
</p>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
قسمت هشتم: <a href="http://www.gozir.com/1387/10/23/spam8/">او.سی.آر: قاتل کپچای تصویر متن</a>
</p>
<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
قسمت نهم: <a href="http://www.gozir.com/1387/11/04/spam9/">صنعت حل کپچای هند و راه‌حلهای مقابله با اسپم با تکیه بر تحلیل محتوی</a>
</p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.gozir.com/1387/09/07/spam4/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>فعالسازی افزونه‌های ناسازگار در فایرفاکس ۳</title>
		<link>http://www.gozir.com/1387/03/30/enable-ext-ff3/</link>
		<comments>http://www.gozir.com/1387/03/30/enable-ext-ff3/#comments</comments>
		<pubDate>Thu, 19 Jun 2008 12:59:03 +0000</pubDate>
		<dc:creator>حمیدرضا</dc:creator>
				<category><![CDATA[آموزش]]></category>
		<category><![CDATA[نرم‌افزار]]></category>

		<guid isPermaLink="false">http://www.gozir.com/?p=1100</guid>
		<description><![CDATA[
یکی از دوستان توضیحات بیشتری راجع به روش حل مشکل ناسازگاری افزونه‌های فایرفاکس خواسته بود که برای استفاده‌ی ایشان و بقیه راهنمای مصوری برای انجام این ترفند آماده کردم. ببینید:



مشکل اینجاست که افزونه‌های ناسازگار با فایرفاکس ۳ فعال نمی‌شوند



about:config





extensions.checkCompatibility




extensions.checkUpdateSecurity و مقدار آن مانند قبل، بعد فایرفاکس را ببندید و دوباره اجرا کنید، مشکل باید حل [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align:right; direction:rtl; font:normal 12px tahoma;">
یکی از دوستان توضیحات بیشتری راجع به روش حل مشکل ناسازگاری افزونه‌های فایرفاکس خواسته بود که برای استفاده‌ی ایشان و بقیه راهنمای مصوری برای انجام <a href="http://lifehacker.com/355973/make-your-extensions-work-with-the-firefox-3-beta">این ترفند</a> آماده کردم. ببینید:
</p>
<img src="http://www.gozir.com/logman/wp-content/uploads/2008/06/ff-enable-exten-00.gif" alt="مشکل اینجاست که افزونه‌های ناسازگار با فایرفاکس ۳ فعال نمی‌شوند" width="500" height="341" class="centered" />
<div style="margin:auto;text-align:center;">
<p style="text-align:center;margin-top:0px"><small>مشکل اینجاست که افزونه‌های ناسازگار با فایرفاکس ۳ فعال نمی‌شوند</small></p>
</div>
<img src="http://www.gozir.com/logman/wp-content/uploads/2008/06/ff-enable-exten-01.gif" alt="راه حل مشکل ناسازگاری افزونه‌ها در فایرفاکس ۳" title="" width="370" height="36" class="centered" />
<div style="margin:auto;text-align:center;">
<p style="text-align:center;margin-top:0px">about:config</p>
</div>
<img src="http://www.gozir.com/logman/wp-content/uploads/2008/06/ff-enable-exten-02.gif" alt="راه حل مشکل ناسازگاری در فایرفاکس ۳" title="" width="500" height="137" class="centered" />
<img src="http://www.gozir.com/logman/wp-content/uploads/2008/06/ff-enable-exten-03.gif" alt="راه حل مشکل ناسازگاری در فایرفاکس ۳" title="" width="423" height="193" class="centered" />
<img src="http://www.gozir.com/logman/wp-content/uploads/2008/06/ff-enable-exten-04.gif" alt="راه حل مشکل ناسازگاری در فایرفاکس ۳" title="" width="326" height="145" class="centered" />
<div style="margin:auto;text-align:center;">
<p style="text-align:center;margin-top:0px">extensions.checkCompatibility</p>
</div>
<img src="http://www.gozir.com/logman/wp-content/uploads/2008/06/ff-enable-exten-05.gif" alt="راه حل مشکل ناسازگاری افزونه‌ها در فایرفاکس ۳" title="" width="299" height="178" class="centered" />
<img src="http://www.gozir.com/logman/wp-content/uploads/2008/06/ff-enable-exten-06.gif" alt="راه حل مشکل ناسازگاری افزونه‌ها در فایرفاکس ۳" title="" width="326" height="145" class="centered" />
<div style="margin:auto;text-align:center;">
<p style="text-align:center;margin-top:0px">extensions.checkUpdateSecurity<small> و مقدار آن مانند قبل، بعد فایرفاکس را ببندید و دوباره اجرا کنید، مشکل باید حل شده باشد.</small></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.gozir.com/1387/03/30/enable-ext-ff3/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
	</channel>
</rss>

