<?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>VCL Developer &#187; فارسی</title>
	<atom:link href="http://vcldeveloper.com/tag/%d9%81%d8%a7%d8%b1%d8%b3%db%8c/feed/" rel="self" type="application/rss+xml" />
	<link>http://vcldeveloper.com</link>
	<description>Ali Keshavarz&#039;s Website</description>
	<lastBuildDate>Mon, 26 Jul 2010 00:37:57 +0000</lastBuildDate>
	<language>fa</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=abc</generator>
		<item>
		<title>چرا اختلال در اتصال اینترنت کل کشور به بهانه مقابله با آشوب طلبان؟</title>
		<link>http://vcldeveloper.com/uncategorized/recent-ssl-connections-problem/</link>
		<comments>http://vcldeveloper.com/uncategorized/recent-ssl-connections-problem/#comments</comments>
		<pubDate>Fri, 06 Nov 2009 15:11:19 +0000</pubDate>
		<dc:creator>Ali Keshavarz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ایران]]></category>
		<category><![CDATA[اینترنت]]></category>
		<category><![CDATA[فارسی]]></category>
		<category><![CDATA[نظرات شخصی]]></category>

		<guid isPermaLink="false">http://vcldeveloper.com/?p=217</guid>
		<description><![CDATA[از روز چهارشنبه ۱۳ آبان ۱۳۸۸ اختلالاتی در دسترسی به برخی سرویس های اینترنتی، به طور خاص اتصالات SSL در ایران ایجاد شده، که ظاهرا به منظور جلوگیری از بروز برخی مسائل در صورت بروز اختشاش در راه پیمایی روز مبارزه با استکبار جهانی صورت گرفته. قصد نداشتم در این مورد حرفی بزنم، چون هرگونه [...]]]></description>
			<content:encoded><![CDATA[<div dir="rtl">
<p align="justify">از روز چهارشنبه ۱۳ آبان ۱۳۸۸ اختلالاتی در دسترسی به برخی سرویس های اینترنتی، به طور خاص اتصالات <a title="SSL" href="http://en.wikipedia.org/wiki/Transport_Layer_Security" target="_blank">SSL</a> در ایران ایجاد شده، که ظاهرا به منظور جلوگیری از بروز برخی مسائل در صورت بروز اختشاش در راه پیمایی روز مبارزه با استکبار جهانی صورت گرفته.</p>
<p align="justify">قصد نداشتم در این مورد حرفی بزنم، چون هرگونه اعتراضی به اینگونه مسائل می تواند مورد سوء استفاده عده ایی فرصت طلب قرار گیرد، و من هم این سایت را برای اظهار نظر سیاسی یا اعتراضات اجتماعی و امثالهم ایجاد نکردم؛ اما همانطور که ما دربرابر اقدامات ستیزه جویانه دشمنان در داخل و خارج کشور مسئول هستیم، و مجاز به سکوت نیستیم، درباره اقدامات کم خردانه دوستان نادانی که بارها مقام معظم رهبری از آنها به شکل مستقیم و غیر مستقیم گله کردند، هم مجاز به سکوت نیستیم. با توجه به اینکه اکنون ۲ روز از راه پیمایی ۱۳ آبان می گذرد، و هنوز این اختلالات ادامه دارد، و مشکلات متعددی را حداقل برای من ایجاد کرده، تصمیم گرفتم در این مورد مطلبی بنویسم. البته از اکثر مدیران اجرایی کشور انتظار نمی رود که به اینگونه نوشته ها توجه کنند، یا حتی توضیحی درباره اینگونه اعمال ارائه کنند. ولی شاید اینگونه مطالب به نحوی به گوش آن دسته از مدیران دلسوز، یا ان شاء الله به گوش مقام معظم رهبری (دام الظله) برسد، امید به آنکه ایشان، یا آن دسته از مدیران اجرایی دلسوز، در صورت صلاحدید، توجه ایی به این مسئله کنند، و مانع اینگونه رفتارهای خودسرانه در آینده شوند.</p>
</div>
<p><span id="more-217"></span></p>
<div dir="rtl">
<p align="justify">ما در روز جهانی قدس هم شاهد این نوع از اختلالات اینترنتی بودیم، ولی با توجه به نزدیک تر بودن زمان روز جهانی قدس به درگیری های بعد از انتخابات، و برطرف شدن اختلالات بلافاصله از صبح روز بعد، این اقدام قابل تحمل تر بود.</p>
<p align="justify">در این شیوه از اختلالات عملا اتصالات SSL دچار مشکلات متعددی می شوند، و کاربر امکان استفاده از صفحاتی که از این نوع اتصال استفاده می کنند را نخواهد داشت. اتصال SSL به منظور ایجاد خط ارتباطی امن بین کاربر و سایت به منظور ارسال و دریافت داده های حساس مثل کلمه رمز، شماره حساب بانکی، و سایر اطلاعات شخصی استفاده می شود. معمولا سایت ها برای صفحه ورود (صفحه Login) از این نوع از اتصال استفاده می کنند. اختلال در اتصالات SSL یعنی آنکه عملا کاربر قادر نخواهد بود از بسیاری از سرویس های متداول اینترنتی که توسط سایت های مختلف ارائه می شوند، مثل ارسال و دریافت پست الکترونیکی، خرید اینترنتی، سرویس های الکترونیکی بانکی، و بطور کلی ورود به هر سایتی که برای دریافت نام کاربری و کلمه رمز کاربر از SSL استفاده می کند؛ استفاده کند.</p>
<p align="justify">این اختلالات به معنی آن است که افرادی مثل من که به صورت آنلاین با مشتریان خود در ارتباط هستند، و سفارش پروژه ها را هم بصورت آنلاین دریافت می کنند، یا سایت های فروش آنلاین محصولات باید تا پایان اختلالات کسب و کار خود را متوقف کنند، و البته هرگونه ضرر و زیانی هم که متحمل بشوند، برعهده خودشان است، نه شرکت مخابرات. البته وقتی هم که از طرف مشتریان خود بازخواست می شوند، باید برای حفظ آبروی کشور خود، توجیهات مختلفی ارائه کنند. ظاهرا دیروز که پنجشنبه بوده، و اکثر ادارات دولتی بخصوص در تهران عملا روزهای پنجشنبه کار نمی کنند، یا نیمه وقت کار می کنند. امروز هم که جمعه هست، و همه جا تعطیل است. پس شاید روز شنبه مسئولین مربوطه یادشان بیاید که اختلالاتی در شبکه ایجاد کرده بودند، و مرحمت کنند، و اختلالات را برطرف کنند، تا ما به کار و زندگی مان برسیم!</p>
<p align="justify">در این بین مسئله اصلا برای مردم روشن نشد. اگر مردم بدانند که واقعا اتخاذ همچین تصمیمی برای امنیت کشور و جلوگیری از اختشاشات آن عده محدود اختشاش طلب لازم است، و واقعا راه دیگری برای مقابله با بخشی از اقدامات این عده وجود ندارد، مسلما با کمال میل اینگونه مشکلات را تحمل می کنند، همانطور که در زمان جنگ تحمیلی بسیاری از مشکلات را بخاطر دفاع از اسلام و کشور تحمل کردند، و همانطور که امروز تحریم های مختلف اقتصادی و غیر اقتصادی را تحمل می کنند. اما آیا واقعا برای مقابله با اقدامات آشوبگران راهی بهتر از اختلال در کل شبکه پیدا نمی شد؟! چرا باید در شرایطی که اختشاشات در همچین روزهایی فقط در چند شهر محدود رخ می دهد، شبکه کل کشور دچار اختلال شود؟ منی که در یک شهر کوچک زندگی می کنم، و حتی در اوج درگیری های بعد از انتخابات یک ترقه هم در شهر من منفجر نشده، و راه پیمایی روز ۱۳ آبان آن امسال با حضور مردم با شکوه تر از سال های پیش برگزار شده، چرا باید شاهد اختلال در دسترسی خودم به اینترنت باشم؟ آیا واقعا راهی وجود نداشت که این اختلالات فقط در شهرهای مشخصی اعمال شود؟</p>
<p align="justify">آیا این امکان وجود نداشت که رسانه های کشور بخصوص صدا و سیما با روشنگری و ایجاد جو رسانه ایی مناسب، و آگاهی دهی به مردم، بخش عمده ایی از اقدامات اینترنتی این آشوبگران و تاثیرات آن بر عامه مردم را به حداقل برسانند؟! آیا واقعا رو کردن دست این عده اینقدر سخت و پیچیده بود که لازم بود در کل شبکه داده کشور اخلال ایجاد شود، و تر و خشک با هم سوزانده شوند؟! به عنوان مثال با مراجعه به <a title="Proof: Israeli Effort to Destabilize Iran Via Twitter #IranElection" href="http://www.chartingstocks.net/2009/06/proof-israeli-effort-to-destabilize-iran-via-twitter/" target="_blank">این لینک</a> با مقاله ایی مواجه می شویم که توسط یک نویسنده آمریکایی نوشته شده. در این مقاله، که در جریان شلوغی های بعد از انتخابات ایران نوشته شده، نویسنده با یک بررسی ساده نتیجه گیری کرده که عمده فعالیتی که در سایت اجتماعی <a title="Tweeter" href="http://www.tweeter.com" target="_blank">Tweeter</a> در خصوص انتخابات ایران به اسم ایرانیان انجام می شود، توسط عده ایی محدود با صحنه گردانی اسرائیل صورت می گیرد. در پایان مقاله هم نویسنده که می دانسته بعدها به یهودی ستیزی متهم خواهد شد، اعلام کرده که یکی از والدینش یهودی هستند و مطلب نگاشته شده ربطی به یهودی ستیزی ندارد. نویسنده این مقاله به داده های طبقه بندی شده دسترسی نداشته، بلکه فقط با آوردن بخشی از آمار منتشر شده توسط سایت Tweeter، تیتر برخی از روزنامه های رژیم اشغال گر قدس، و بررسی مطالب ارسال شده درباره انتخابات ایران در این سایت توسط سه کاربری که بیشترین فعالیت را در این زمینه داشتند، به روشنگری پرداخته است. آیا واقعا رسانه های جمهوری اسلامی نمی توانستند اینگونه از روشنگری ها را مطرح کنند، و با اطلاع رسانی درست مانع از پخش شدن بسیاری از شایعات بی پایه و اساس شوند؟! آیا واقعا باید برای مقابله با آشوب طلبان کل شبکه داده کشور را مختل کرد؟!</p>
<p align="justify">برخی از سایت های حامی دولت هم با توجه به <a title="Gmail users lose service all weekend" href="http://www.tgdaily.com/software-features/44500-gmail-users-lose-service-all-weekend" target="_blank">خبر</a> یکی از سایت های خبری خارجی در تاریخ ۱۱ آبان، مبنی بر وجود مشکل در دسترسی به سرویس GMail در برخی نقاط دنیا، این خبر را در روز ۱۳ آبان <a title="اعتبار &quot;Gmail &quot; در خطر است" href="http://khedmat.ir/vdcg.39qrak9wnpr4a.html" target="_blank">منتشر کردند</a>، تا به نحوی مسئولیت اختلالات ایجاد شده را به گردن سایر شرکت ها بیاندازند.</p>
<p align="justify">اینگونه اقدامات نابخردانه تا کی باید ادامه داشته باشد؟ به نظر می رسد که آشوبگران قصد دارند هر یک از مناسبت های انقلابی در جمهوری اسلامی را با برخی رفتارهای حاشیه ایی از مسیر و اهداف اصلی خود منحرف کنند، پس باید شاهد اینگونه رفتارها در آینده هم باشیم؛ اما آیا رفتار نهادهای حکومتی و بطور خاص مخابرات هم به همین شکل ادامه پیدا خواهد کرد؟! آیا در هر مناسبتی ما باید منتظر اختلال در شبکه اینترنتی کشور به بهانه مقابله با اغتشاشگران باشیم؟! اگر فردا اغتشاشگران از سرویس های ارتباطی دیگری برای هماهنگی بین خود یا انتشار شایعه استفاده کردند، نهادهای امنیتی چه برخوردی خواهند داشت؟ آیا اگر مشخص شود این افراد پیام های رمزی از طریق تلفن به هم مخابره می کنند، باید در مناسبت ها شاهد قطع خطوط تلفن کل کشور باشیم؟! اگر مشخص شد از کبوتر نامه رسان استفاده می کنند، باید شاهد تیراندازی به هر پرنده در حال پرواز در آسمان باشیم؟! اگر مشخص شد برای حمل و نقل پیام از نقطه ایی به نقطه دیگر از اتومبیل استفاده می کنند، باید شاهد توقف همه اتومبیل ها در کشور باشیم؟! آیا باید تاوان کم کاری نهادهای حکومتی در تشخیص نیروهای اغتشاش طلب از مردم عادی را مردم عادی بپردازند؟! آیا نهادهای حکومتی باید به دلیل کم تحرکی خود برای برخورد با عده ایی محدود در چند شهر محدود، زندگی را بر همه مردم سخت کنند؟!</p>
<p align="justify">اگر به فرض راهی جز اینگونه اقدام کردن نبود، آیا بهتر نبود بجای سکوت در برابر پرسش مردم، یا انتشار برخی اخبار با دو روز تاخیر، واقعیات موجود با مردم در میان گذاشته می شد، و از مردم خواسته می شد که برای حفظ امنیت، چند روزی با نهادهای حکومتی همکاری بیش از پیش داشته باشند؟ آیا در آن صورت برخورد مردم با اینگونه رفتارها و همکاری آنها با این نهاد ها بهتر نمی بود؟</p>
<p align="justify">تا کی باید نظام جمهوری اسلامی هم از دشمنان سینه چاک خود ضربه بخورد، هم دوستان نادان؟ کی، چه وقت مسئولین ما به این نتیجه خواهند رسید که باید برای حفظ نظام عملا پیرو ولاینت فقیه بود، نه در حرف پیرو ولایت فقیه، و در عمل پبرو اندیشه های نارس خود! آیا بهتر نیست که مسئولین فرهنگی، و ارتباطاتی کشور بجای آنکه در سخنرانی های آقا در جلوی دوربین قلم به دست بگیرند، و تظاهر به نکته برداری از صحبت های ایشان کنند، عملا در حوزه مدیریتی خود فرمایشات ایشان را عمل کنند؟ این همه صحبت از افزایش بصیرت شد[۱] ، ولی همچنان برخی از مسئولین از نبود بصیرت رنج می برند، و بجای آنکه در مسیر تعیین شده توسط مقام معظم رهبری حرکت کنند، خودشان برای خودشان و با تشخیص خودشان تصمیم می گیرند و عمل می کنند. آیا من و شما مامور به عمل بر اساس برداشت شخصی خودمان هستیم، یا مامور به تبعیت از هدایت و ولایت جاری شده از طرف خداوند؟ [۲] چرا با رفتارهای نسنجیده خود دشمن شاد کن می شوید؟! چرا با اینگونه اقدامات نسنجیده خود در جهت توجیه کم کاری خود در حوزه مسئولیت خود بر می آیید؟ اگر اندیشه های امام (ره) و مقام معظم رهبری واقعا از طرف شما پیگیری می شد، همچین فرصتی برای دشمن به وجود می آمد که از آن سوء استفاده کند؟! آیا اگر آدم (ع) از خود عزم مناسبی نشان می داد، ابلیس لعین می توانست به بهشت وی وارد شود و وی را دچار نسیان کند؟ [۳] اگر مسئولین امر واقعا از خود عزم قوی در تبعیت از ولایت نشان می دادند، و واقعا در جهت خواست ولایت حرکت می کردند، این مشکلات بوجود می آمد؟! اگر مسئولین فرهنگی واقعا به تبیین اهداف واقعی انقلاب و اندیشه های امام و رهبری، و تزریق معارف ناب اهل بیت (ع) در جامعه می پرداختند، به این راحتی عده ایی در جامعه تحت تاثیر شایعات و تحلیل های آب دوغ خیاری برخی شبکه های ماهواره ایی قرار می گرفتند؟!</p>
<p align="justify">آیا ما واقعا تصور می کنیم که خداوند با ما نعوذ بالله پیمان خویشاوندی بسته، و ما هر رفتاری چه به عنوان مسئول، و چه به عنوان مردم عادی یک جامعه انجام دهیم، از سوی خداوند نصرت می شویم؟! آیا تصور کردیم که درایت و تدبیر ما در اول انقلاب این انقلاب را نجات داد؟ یا سلاح و تاکتیک های جنگی ما، ما را در جنگ تحمیلی پیروز کرد؟ یا موشک های شهاب ۳ و سجیل ما مانع حمله دشمن به میهن اسلامی مان شد؟ [۴] خیر، پناه بردن به ولایت و پیروی از ولایت، و به تبع آن نصرت الهی باعث شد که ما از این گردنه های خطرناک عبور کنیم. [۵] اگر جامعه از ولایت پیروی نمی کرد، این دستاوردها هم به دست نمی آمد. [۶] وقتی این مسائل برای عامه مردم، بخصوص نسل جوان که در معرض انواع تهاجمات و تبلیغات قرار دارد، درست تبیین نشود، مشخص است که افراد این جامعه با وزش یک نسیم ملایم هم دچار انحراف می شوند، آن وقت مسئولین مربوطه به جای بررسی اشتباهات خود، و تصحیح آنها، به کارهایی دست می زنند که نه تنها به نفع انقلاب اسلامی ایران نیست، بلکه بیشتر مورد استفاده دشمن در جهت انحراف بیشتر برخی از مردم قرار می گیرد. خیلی راحت هم اینگونه رفتارهای نسنجیده خود را به حساب رهبری و جمهوری اسلامی می نویسند، و رهبری و جمهوری اسلامی تاوان این غلط کاری آقایان را می پردازند! آقایان خرابکاری می کنند، رهبری باید خرابکاری آقایان را جمع کنند، و جامعه را از انحراف حفظ کنند.</p>
<p align="justify">چند فتنه مثل فتنه های اخیر باید رخ دهد تا این آقایان متوجه شوند که فقط یک راه برای عبور از این صحنه ها وجود دارد، و آن هم <strong>تبعیت از ولایت </strong>است؟! چند فتنه مثل این فتنه ها باید رخ دهد تا خدای نکرده، خداوند متعال ما را به حال خود رها کند، تا مثل بسیاری از اقوام گذشته، دچار سقوط های سهمگین و غیر قابل برگشت شویم؟! یعنی حزب الله لبنان کیلومترها آن طرفتر از مملکت ما می تواند این درس را بگیرد، و پیوسته در خط ولایت حرکت کند، ولی مسئولین ما در داخل کشور، در حضور ولی فقیه، نمی توانند این درس را بگیرند، و بجای رفتارهای بچگانه، با بصیرت رفتار کنند؟!</p>
<p align="justify">
<h2>پاورقی</h2>
<p>[۱]: <a href="http://farsi.khamenei.ir/news-content?id=8174" target="_blank">دیدار با مردم چالوس در ورزشگاه شهدای هفتم تیر</a>:</p>
<p>“حضرت آیت الله خامنه ای با تبیین نکاتی درباره برخی مسائل کلی کشور و انقلاب، بصیرت را نیاز اصلی جامعه خواندند و خاطرنشان کردند: بصیرت، اجازه نمی دهد «غبار آلودگی فتنه»، کسی را گمراه کند.”</p>
<p>“اگر بصیرت نباشد، انسان حتی با نیت خوب، ممکن است گمراه شود و در راه بد قدم بگذارد.”</p>
<p>[۲]: قُلْنَا اهْبِطُوا مِنْها جَمیعاً فَإِمَّا یَأْتِیَنَّکُمْ مِنِّی هُدىً فَمَنْ تَبِعَ هُدایَ فَلا خَوْفٌ عَلَیْهِمْ وَ لا هُمْ یَحْزَنُونَ (بقره ۳۸)<br />
فرمودیم: «جملگى از آن فرود آیید. پس اگر از جانب من شما را هدایتى رسد، آنان که هدایتم را پیروى کنند بر ایشان بیمى نیست و غمگین نخواهند شد. (۳۸)</p>
<p>یا أَیُّهَا الَّذینَ آمَنُوا أَطیعُوا اللَّهَ وَ أَطیعُوا الرَّسُولَ وَ أُولِی الْأَمْرِ مِنْکُمْ فَإِنْ تَنازَعْتُمْ فی‏ شَیْ‏ءٍ فَرُدُّوهُ إِلَى اللَّهِ وَ الرَّسُولِ إِنْ کُنْتُمْ تُؤْمِنُونَ بِاللَّهِ وَ الْیَوْمِ الْآخِرِ ذلِکَ خَیْرٌ وَ أَحْسَنُ تَأْویلاً (نساء ۵۹)<br />
اى کسانى که ایمان آورده‏اید، خدا را اطاعت کنید و پیامبر و اولیاى امر خود را [نیز] اطاعت کنید پس هر گاه در امرى [دینى‏] اختلاف نظر یافتید، اگر به خدا و روز بازپسین ایمان دارید، آن را به [کتاب‏] خدا و [سنت‏] پیامبر [او] عرضه بدارید، این بهتر و نیک‏فرجام‏تر است. (۵۹)</p>
<p>[۳]:  وَ لَقَدْ عَهِدْنا إِلى‏ آدَمَ مِنْ قَبْلُ فَنَسِیَ وَ لَمْ نَجِدْ لَهُ عَزْماً (طه  ۱۱۵)<br />
و به یقین پیش از این با آدم پیمان بستیم، و [لى آن را] فراموش کرد، و براى او عزمى [استوار] نیافتیم. (۱۱۵)</p>
<p>الکافی ۱: ۳۴۴/ ۲۲٫ -  محمد بن یعقوب: عن عدة من أصحابنا، عن أحمد بن محمد، عن علی بن الحکم عن مفضل ابن صالح، عن جابر، عن أبی جعفر (علیه السلام) فی قول الله عز و جل: وَ لَقَدْ عَهِدْنا إِلى آدَمَ مِنْ قَبْلُ فَنَسِیَ وَ لَمْ نَجِدْ لَهُ عَزْماً.<br />
قال: «عهدنا إلیه فی محمد (صلى الله علیه و آله) و الأئمة (علیهم السلام) من بعده فترک و لم یکن له عزم أنهم هکذا، و إنما سمی اولوا العزم لأنه عهد إلیهم فی محمد (صلى الله علیه و آله) و الأوصیاء من بعده و المهدی و سیرته و اجتمع عزمهم على أن ذلک کذلک، و الإقرار به».</p>
<p>[۴]: قُلْ مَنْ ذَا الَّذی یَعْصِمُکُمْ مِنَ اللَّهِ إِنْ أَرادَ بِکُمْ سُوءاً أَوْ أَرادَ بِکُمْ رَحْمَةً وَ لا یَجِدُونَ لَهُمْ مِنْ دُونِ اللَّهِ وَلِیًّا وَ لا نَصیراً (احزاب  ۱۷)<br />
بگو: «چه کسى مى‏تواند در برابر خدا از شما حمایت کند اگر او بخواهد براى شما بد بیاورد یا بخواهد شما را رحمت کند؟ و غیر از خدا براى خود یار و یاورى نخواهند یافت.» (۱۷)</p>
<p>[۵]: وَ جاهِدُوا فِی اللَّهِ حَقَّ جِهادِهِ هُوَ اجْتَباکُمْ وَ ما جَعَلَ عَلَیْکُمْ فِی الدِّینِ مِنْ حَرَجٍ مِلَّةَ أَبیکُمْ إِبْراهیمَ هُوَ سَمَّاکُمُ الْمُسْلِمینَ مِنْ قَبْلُ وَ فی‏ هذا لِیَکُونَ الرَّسُولُ شَهیداً عَلَیْکُمْ وَ تَکُونُوا شُهَداءَ عَلَى النَّاسِ فَأَقیمُوا الصَّلاةَ وَ آتُوا الزَّکاةَ وَ اعْتَصِمُوا بِاللَّهِ هُوَ مَوْلاکُمْ فَنِعْمَ الْمَوْلى‏ وَ نِعْمَ النَّصیرُ (حج  ۷۸)<br />
و در راه خدا چنان که حق جهاد [در راه‏] اوست جهاد کنید، اوست که شما را [براى خود] برگزیده و در دین بر شما سختى قرار نداده است. آیین پدرتان ابراهیم [نیز چنین بوده است‏] او بود که قبلًا شما را مسلمان نامید، و در این [قرآن نیز همین مطلب آمده است‏] تا این پیامبر بر شما گواه باشد و شما بر مردم گواه باشید. پس نماز را برپا دارید و زکات بدهید و به پناه خدا روید. او مولاى شماست چه نیکو مولایى و چه نیکو یاورى. (۷۸)</p>
<p>[۶]: إِنَّ اللَّهَ لَهُ مُلْکُ السَّماواتِ وَ الْأَرْضِ یُحْیی‏ وَ یُمیتُ وَ ما لَکُمْ مِنْ دُونِ اللَّهِ مِنْ وَلِیٍّ وَ لا نَصیرٍ (توبه ۱۱۶)<br />
در حقیقت، فرمانروایى آسمانها و زمین از آنِ خداست. زنده مى‏کند و مى‏میراند، و براى شما جز خدا یار و یاورى نیست. (۱۱۶)</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://vcldeveloper.com/uncategorized/recent-ssl-connections-problem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>اینترفیس ها در دلفی</title>
		<link>http://vcldeveloper.com/articles/interfaces_in_delphi/</link>
		<comments>http://vcldeveloper.com/articles/interfaces_in_delphi/#comments</comments>
		<pubDate>Tue, 17 Mar 2009 22:04:45 +0000</pubDate>
		<dc:creator>Ali Keshavarz</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Article]]></category>
		<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Farsi]]></category>
		<category><![CDATA[Interfaces]]></category>
		<category><![CDATA[اینترفیس]]></category>
		<category><![CDATA[دلفی]]></category>
		<category><![CDATA[رابط]]></category>
		<category><![CDATA[فارسی]]></category>
		<category><![CDATA[مقاله]]></category>

		<guid isPermaLink="false">http://vcldeveloper.com/?p=64</guid>
		<description><![CDATA[در این مقاله تعریف مختصری از مفهوم Interface و Abstract Class در طراحی نرم افزار ارائه می کنیم، و سپس به قابلیت های نوع Interface در دلفی و برخی کاربردهای آن، با ذکر مثال، می پردازیم.]]></description>
			<content:encoded><![CDATA[<div dir="rtl">
<p>در این مقاله تعریف مختصری از مفهوم Interface و Abstract Class در طراحی نرم افزار ارائه می کنیم، و سپس به قابلیت های نوع Interface در دلفی و برخی کاربردهای آن، با ذکر مثال، می پردازیم.</p>
<h2>مقدمه</h2>
<p>نوع Interface از نسخه ۳ به دلفی اضافه شد تا پشتیبانی از تکنولوژی COM شرکت مایکروسافت در دلفی فراهم شود. Interface علاوه بر پشتیبانی از COM، قابلیت های جالبی برای برنامه نویسان دلفی به ارمغان آورد که کمتر از آن استفاده می شود. متاسفانه به دلیل آنکه چارچوب اصلی VCL و بخصوص کامپوننت های کار با بانک اطلاعاتی دلفی مدت ها قبل از آن (از نسخه اول دلفی) ایجاد شده بودند، استفاده چندانی از Interfaceها در  VCL صورت نگرفت.</p>
<p>برای درک بهتر interface ها، و قبل از آنکه به تعریف Interface و کاربردهای آن بپردازیم، ابتدا به مفهوم کلاس های Abstract و تعریف آنها اشاره ایی خواهیم داشت؛ زیرا مشابهت هایی در کاربرد این دو مفهوم وجود دارد، و شناخت مفهوم کلاس های Abstract درک مفهوم Interfaceها را ساده تر می کند.
</p></div>
<p><span id="more-64"></span></p>
<div dir="rtl">
<h2>کلاس های Abstract</h2>
<p>در دلفی، کلاسی که حداقل یکی از متدهای آن با استفاده از رهنمود abstract تعریف شده باشد، کلاس Abstract نامیده می شود.[۱]<br />
متدهای abstract متدهایی هستند که توسط یک کلاس والد (parent) تعریف می شوند، اما پیاده سازی نمی شوند. پیاده سازی اینگونه متدها بر عهده کلاس های فرزند (child) می باشد.<br />
در صورتی که یک نمونه (instance) [ یک شی (object) ]  از یک کلاس abstract ایجاد کنید، با هشدار کامپایل مواجه خواهید شد و در صورتی که یکی از متدهای abstract آن شی را فراخوانی کنید، برنامه شما با یک استثنای EAbstractError&#8221;" متوقف خواهد شد.</p>
<p>در اینجا این سوال ممکن است مطرح شود که اصلا کلاس یا متدی که هیچ پیاده سازیی ندارد و نمی توان از آن یک نمونه شی ایجاد کرد، چه استفاده ایی ممکن است داشته باشد؟<br />
کلاس های Abstract در ساختار یک نرم افزار موجب می شوند که برنامه نویسی که پیاده سازی کلاس های فرزند را برعهده دارد، ملزم به پیاده سازی یکسری رفتارهای معین در هر یک از کلاس های خود شود؛ در غیر این صورت، با هشدارهای کامپایلر مواجه می شود. به این ترتیب احتمال اشتباه برنامه نویس (بخصوص در پروژه های بزرگ) کاهش می یابد.<br />
<span style="text-decoration: underline;">مثال :</span><br />
فرض کنید قصد داریم دو نوع پنجره طراحی کنیم (پنجره بیضوی و پنجره مستطیلی). هر دو این پنجره رفتارهای استانداردی مثل Minimize, Restore و غیره دارند. هر دو این پنجره ها باید ترسیم شوند، اما نحوه ترسیم هر یک از آنها فرق می کند. برای طراحی آنها می توانیم رفتارهای مشترک آنها را در کلاس TBaseWindow قرار دهیم و کلاس های دیگر از همین کلاس پایه، مشتق شوند. برای تعریف کلاس TBaseWindow دو روش می توانیم بکار بریم.</p>
<p>روش اول:</p>
<div dir=ltr>
<pre class="brush: delphi;">
TBaseWindow = class
private
  AField  : TSomeType;
public
  procedure Draw; virtual;
  procedure Minimize;
  procedure Maximize;
  procedure Restore;
end;
</pre>
</div>
<p>متد Draw در کلاس پایه به صورت virtual تعریف شده است، در نتیجه کلاس های TOvalWindow و TRectangularWindow (دو کلاس فرضی برای رسم پنجره بیضوی و مستطیلی، مشتق شده از کلاس پایه TBaseWindow) می توانند این متد را override کرده و پیاده سازی خود را اعمال کنند. اگر برنامه نویسان این کلاس ها فراموش کنند که متد Draw را Override کنند، تا زمان اجرای برنامه مشکلی بوجود نخواهد آمد؛ اما در زمان اجرا با فراخوانی متد Draw پنجره ایی رسم نخواهد شد!</p>
<p>روش دوم:</p>
<div dir=ltr>
<pre class="brush: delphi;">
TBaseWindow = class
private
  AField  : TSomeType;
public
  procedure Draw; virtual; abstract;
  procedure Minimize;
  procedure Maximize;
  procedure Restore;
end;
</pre>
</div>
<p>متد Draw در کلاس پایه بصورت abstract تعریف شده است. اگر برنامه نویسی که کلاس های TOvalWindow و TRectangularWindow را ایجاد می کند، فراموش کند که متد Draw را پیاده سازی کند؛ با فراخوانی متد Draw هشدار زیر را دریافت می کند:</p>
<div dir=ltr>
<p>OvalWindow.Draw;</p>
<p>Constructing instance of TOvalWindow contains abstract method TBaseWindow.Draw</p>
</div>
<h2>Interfaces</h2>
<p>اینترفیس ها نوعی قرارداد بین دو یا چند کلاس محسوب می شوند که در آن یک کلاس پیاده سازی تمامی متدهای مشخص شده در قرار داد را برای استفاده سایر کلاس ها یا کاربر تضمین می کند. پیاده سازی این متدها از دید کلاس های استفاده کننده و کاربر پنهان است. اینترفیس ها شبیه به کلاسی هستند که تمامی متد های آن abstract باشد و هیچ فیلدی برای ذخیره اطلاعات نداشته باشد.</p>
<p>اما اینترفیس ها ویژگی هایی دارند که آنها را از کلاس های Abstract جدا می کند:</p>
<p>۱-	اینترفیس ها  کلاس نیستند، بلکه یک نوع (Type) مستقل در زبان مربوطه (در اینجا Object Pascal) محسوب می شوند.<br />
۲-	اینترفیس ها از TObject مشتق نمی شوند. IUnknown در نسخه های قبلی دلفی (قبل از دلفی ۵) بعنوان والد تمام اینترفیس ها محسوب می شد، اما از نسخه ۵ به بعد، همه اینترفیس ها از IInterface مشتق می شوند.  IUnknown و IInterface یکسان هستند. از IUnknown در برنامه های مبتنی بر تکنولوژی COM مایکروسافت استفاده می شود.<br />
۳-	اگر پیدا سازی نکردن یک متد از کلاس abstract ،در کلاس های فرزند، موجب ایجاد هشدار کامپایلر می شد؛ پیاده سازی نکردن هر یک از متدهای یک اینترفیس، توسط کلاسی که آن اینترفیس را پشتیبانی می کند، موجب کامپایل نشدن برنامه می شود.<br />
۴-	یک کلاس می تواند از چندین اینترفیس بطور همزمان پشتیبانی کند.<br />
۵-	اینترفیس ها در دلفی قابلیت Reference-counting (شمارش مرجع) دارند.</p>
<p><span style="text-decoration: underline;">نکته</span>: از اینترفیس ها هم مثل کلاس های abstract نمی توان یک نمونه (شی) ایجاد کرد.</p>
<p>اینترفیس ها این امکان را به شما می دهند که خارج از ساختار سلسله مراتبی کلاس ها، قابلیت هایی را به برخی از کلاس های خود اضافه کنید. برای مثال فرض کنید شما کلاسی بنام TCar (برای تعریف یک اتومبیل) دارید که کلاس هایی مثل  TSUV, TTruck, TSedan, TVan و غیره (برای تعریف انواع اتومبیل) از آن مشتق شده اند. اگر شما قصد اضافه کردن قابلیت ۴WD (تقسیم نیروی محرکه بر روی هر چهار چرخ) به ماشین های SUV و Van داشته باشید، نمی توانید این قابلیت را در کلاس TCar پیاده سازی کنید، چون در این صورت تمامی ماشین ها از آن بهره خواهند برد. البته می توان این قابلیت را در هر یک ار این کلاس ها بصورت مستقل تعریف و پیاده سازی کرد، اما در صورت استفاده از اینترفیس (در اینجا I4wd)، هم می توانید از یک واسط مشترک استفاده کنید و هم از قابلیت های Polymorphic (چند ریختی) اینترفیس ها بهره ببرید:</p>
<div dir=ltr>
<pre class="brush: delphi;">
I4wd = interface
   ['{C2816773-A5DF-4136-AC86-27E6231DB4A9}']
   procedure Initialize4WD;
end;

TCar = class(TInterfacedObject)
public
   procedure SomeCommonBehavior;
   procedure StartEngine; virtual;
end;

TSedan = class(TCar)
public
  procedure SomeSpecificBehavior;
  procedure StartEngine; override;
end;

TSUV = class(TCar, I4wd)
public
   procedure SomeSpecificBehavior;
   procedure StartEngine; override;
   procedure Initialize4WD;
end;

TVan = class(TCar, I4wd)
public
  procedure SomeSpecificBehavior;
  procedure Initialize4WD;
end;

{نحوه استفاده}

procedure Drive4WD(A4WDCar : I4WD);
begin
  if Assigned(A4WDCar) then
  begin
     A4WDCar.Initialize4WD;
    {Add Code for driving the car here}
  end;
end;
</pre>
</div>
<p>با استفاده از رویه Drive4WD شما می توانید هر ماشینی را که از اینترفیس I4WD پشتیبانی می کند، برانید. البته هر ماشین متد Initialize4WD مربوط به خود را فراخوانی می کند. برای مثال:</p>
<div dir=ltr>Drive4WD(TVan.Create);</div>
<p>نگران آزاد کردن حافظه اشغال شده توسط TVan.Create نباشید، شی ایجاد شده بصورت خودکار آزاد خواهد شد.</p>
<div dir=rtl text-align=left>
<h3>Globally Unique Identifier (GUID)</h3>
</div>
<p>عبارت  {C2816773-A5DF-4136-AC86-27E6231DB4A9}در تعریف اینترفیس بالا، یک GUID نامیده می شود. GUID عددی ۱۲۸ بیتی است (در مبنای ۱۶) که با تقریب بالایی منحصر به فرد می باشد [ تعداد کل GUID هایی که می توان ساخت ۲ به توان ۱۲۸ است و عملا احتمال اینکه دو GUID یکسان تولید شود بسیار کم است.]</p>
<p>استفاده از GUID در تعریف یک اینترفیس موجب منحصر به فرد شدن آن اینترفیس می شود، به عبارت دیگر، حتی اگر چند اینترفیس در یک سیستم با نام مشابه وجود داشته باشند، مشکلی در استفاده از آنها بوجود نمی آید. استفاده از GUID در یک اینترفیس  اجباری  نیست، اما وجود آن برای استفاده از عملگر as، متد GetInterface، تابع Supports و متد QueryInterface  (بطور کلی (Interface Querying الزامی است. اشیاء COM، اینترفیس ها و Type Library  آنها نیز باید هر کدام دارای GUID باشند.</p>
<p>برای ساخت GUID در Editor دلفی می توانید از ترکیب سه کلید Ctrl+Shift+G استفاده کنید تا دلفی برای شما یک GUID ایجاد کند.</p>
<p>نکته: هیچگاه GUID یک اینترفیس را در یک اینترفیس دیگر استفاده نکنید.</p>
<h3>استخراج یک Interface از داخل یک Class</h3>
<p>فرد متاهلی را در نظر بگرید که ریس یک شرکت می باشد. این فرد در رابطه با کارمندان خود نقش ریس، در رابطه با همسر خود نقش شوهر و در رابطه با فرزندان خود نقش پدر را ایفا می کند. در واقع این فرد در رابطه با هر گروه از افراد مذکور طبق یک رسم یا توافق مشترک، عمل می کند. هر یک از این گروه ها نیز بر اساس همان توافق یا رسم با این فرد ارتباط برقرار می کند و فقط به نقش مربوط به خود نیاز دارد (مثلا یک کارمند نیازی به دانستن رابطه ریس خود با همسر و فرزندانش ندارد). در دنیای نرم افزار هم یک کلاس می تواند با پیاده سازی اینترفیس های مختلف، نقش های مختلفی را در ارتباط با دنیای خارج بر عهده بگیرد.</p>
<p>حال، فرد فوق را بعنوان یک کلاس و توافق او با هر یک از گروه های فوق را به عنوان یک اینترفیس در نظر می گیریم:<br />
هر گروه (درخواست کننده؛ هر شی در دنیای خارج از آن کلاس) باید ابتدا بررسی کند که آیا فرد  (کلاس پیاده سازی کننده )  مذکور به رسومات و توافق مشخص شده (اینترفیس)  پایبند هست یا نه، اگر آن کلاس از اینترفیس مشخص شده پشتیبانی کند، درخواست کننده می تواند، بر اساس همان اینترفیس، درخواست خود را به آن کلاس ارائه دهد و جواب دریافت کند (استخراج یک اینترفیس از کلاسی که آن را پیاده سازی می کند).</p>
<p>در دلفی برای بررسی پشتیبانی کردن یک کلاس از یک اینترفیس خاص و استخراج آن اینترفیس می توان از تابع Supports در یونیت SysUtils، متد QueryInterface از هر کلاسی که IInterface را پشتیبانی می کند (مثل TInterfaceObject)  ، عملگر as، یا متد GetInterface در کلاس TObject استفاده کرد.[۲]</p>
<p>به روش های مختلف استخراج اینترفیس I4WD از کلاس TSUV در مثال زیر توجه کنید:</p>
<div dir=ltr>
<pre class="brush: delphi;">
var
SUV : TSUV;
A4wdInterface : I4WD;
begin
  {If TSuv implements I4WD (supports it), extract the interface.}
  if Supports(TSUV.Create,I4WD,A4wdInterface) then
  {Invoke Initialize4WD from returned interface.}
  A4wdInterface.Initialize4WD;

  //----------------------------------
  {Just check if TSuv supports I4WD, no interface is returned.}
  if Supports(TSuv,I4WD) then
  ShowMessage('TSuv supports I4WD interface');

  //----------------------------------
  SUV := TSUV.Create;
  {If you are sure than SUV supports I4WD, use as operator to extract
  the interface and invoke Initialize4WD.
  If SUV does not support I4WD, an exception will be thrown.}
  (SUV as I4wd).Initialize4WD;

  //----------------------------------
  SUV := TSUV.Create;
  {If Suv implements I4WD (supports it), extract the interface.}
  if SUV.GetInterface(I4WD,A4wdInterface) then
  A4wdInterface.Initialize4WD;

  //----------------------------------
  {TSUV supports I4WD, so you can assign an instance of it to a variable of type I4WD.}
  A4wdInterface := TSuv.Create;
  A4wdInterface.Initialize4WD;
end;
</pre>
</div>
<p>* تمامی توابع و عملگرهای فوق در راهنمای دلفی توضیح داده شده اند.</p>
<h3>Multiple Inheritance (وراثت چندگانه)</h3>
<p>در زبانهایی مثل دلفی، C#، و جاوا وراثت چندگانه امکان پذیر نیست &#8211; یعنی یک کلاس نمی تواند مثل C++ از چند کلاس والد مشتق شود. اما در این زبان ها امکان پیاده سازی چند اینترفیس توسط یک کلاس وجود دارد و می تواند به نوعی این خلاء را پر کند. مثلا کلاس TMyMobile (یک کلاس فرضی مربوط به گوشی موبایل) می تواند بطور همزمان اینترفیس های IInfraRed و IBlueTooth را پیاده سازی کند:</p>
<div dir=ltr>
<pre class="brush: delphi;">
TMyMobile = class(TInterfaceObject, IInfraRed, IBlueTooth)
  {TMobile's fields and methods + IInfraRed's methods + IBlueThoot's methods}
end;
</pre>
</div>
<h3>Reference counting (شمارش مرجع)</h3>
<p>یکی از ویژگی های مهم اینترفیس ها در دلفی (همچنین در COM) خصوصیت Reference Counting آنها ست. با استفاده از این قابلیت اشیاء ایجاد شده بصورت خودکار مدیریت می شوند و در صورتی که نیازی به آنها نباشد، بطور خودکار آزاد می شوند. متدهای مربوط به این قابلیت در اینترفیس IInterface تعریف شده اند.<br />
هر بار که اینترفیسی از یک کلاس استخراج می شود یا نمونه ایی از یک کلاس به متغیری از یک اینترفیس اختصاص داده می شود، دلفی متد _AddRef از اینترفیس IInterface را فراخوانی می کند. هر زمان که آن متغیر نا معتبر شود (با اختصاص مقدار nil به آن یا خارج شدن از محدوده تعریف آن متغیر)، دلفی متد _Release را فراخوانی می کند. شما به عنوان برنامه نویس وظیفه دارید که متغیری در کلاس خود تعریف کرده (برای ذخیره شماره مرجع) و این متد ها را پیاده سازی کنید. با اجرای _AddRef باید یک واحد به شماره مرجع اضافه شود. با اجرای _Release باید یک واحد از شماره مرجع کم شود، اگر شماره مرجع به صفر رسید، _Release وظیفه آزاد کردن شی ایجاد شده را بر عهده دارد.</p>
<p>در صورتی که تمایلی به پیاده سازی متدهای فوق ندارید، می توانید کلاس خود را از کلاس TInterfacedObject مشتق بگیرید. در این صورت کلاس TInterfacedObject قابلیت شمارش مرجع را برای کلاس شما پیاده سازی خواهد کرد. TInterfacedObject در یونیت System تعریف شده است. بهتر است کد آن را مطالعه نمایید.</p>
<p>به مثال های زیر در رابطه با کاربرد Reference Counting توجه کنید:</p>
<div dir=ltr>
<pre class="brush: delphi;">
procedure TForm1.Button3Click(Sender: TObject);
var
  SUV : TSUV;
  Van : TVan;
  AnInterface,
  AnotherInterface : I4WD;
begin
  Memo1.Clear;
  SUV := TSuv.Create;
  //SUV.RefCount = 0
  AnInterface := SUV;
  //SUV.RefCount = 1
  AnotherInterface := SUV;
  //SUV.RefCount = 2

  Van := TVan.Create;
  //Van.RefCount = 0;
  AnInterface := Van;
  //SUV.RefCount = 1
  //Van.RefCount = 1
end;
//&quot; AnInterface&quot; is out of scope: SUV.RefCount = 0
//SUV is destroyed
//AnotherInterface is out of scope: Van.RefCount = 0
//Van is destroyed
</pre>
</div>
<p>در مثال بالا به تغییرات RefCount توجه کنید:<br />
زمانی که SUV به یک اینترفیس اختصاص داده می شود، یک واحد به شمارشگر مرجع آن افزوده می شود.<br />
با اختصاص SUV به اینترفیس بعدی (AnotherInterface)، شمارشگر مرجع آن به ۲ می رسد.<br />
با اختصاص  Vanبه اینترفیس AnInterface ، شمارشگر مرجع این شی یک واحد افزایش پیدا می کند، ولی شمارشگر مرجع شی SUV که قبلا به AnInterface اختصاص داده شده بود، یک واحد کاهش پیدا می کند.<br />
در پایان این متد، هیچ کدی برای آزاد سازی متغیرهای SUV و Van وجود ندارد؛ اما با پایان یافتن کد Form1.Button3Click، متغیرهای AnInterface و AnotherInterface که بصورت محلی تعریف شده اند، نامعتبر می شوند و با نامعتبر شدن هر یک از آنها، یک واحد از شمارشگر مرجع هر یک از اشیاء اختصاص یافته به آنها کاهش میابد. با صفر شدن شمارشگر مرجع هر شی، آن شی آزاد می شود.</p>
<p>Malcome Groves در مقاله Interfaces: Off the Beaten Track مثالی از پیاده سازی قابلیت Garbage Collection با استفاده از اینترفیس ارائه کرده است[۳] :</p>
<div dir=ltr>
<pre class="brush: delphi;">
unit mtReaper;

interface

type
ImtReaper = interface
  ['{1B321324-975F-4026-B742-E7B3AD486BB5}']
end;

TmtReaper = class(TInterfacedObject, ImtReaper)
private
  FObject : TObject;
public
  constructor Create(AObject : TObject);
  destructor Destroy; override;
end;

implementation

uses SysUtils;

constructor TmtReaper.Create(AObject: TObject);
begin
  FObject := AObject;
end;

destructor TmtReaper.Destroy;
begin
  FreeAndNil(FObject);
  inherited;
end;

end.
</pre>
</div>
<p>در این کد کلاس ساده ایی ((TmtReaper تعریف شده که Garbage Collection را برای شما انجام می دهد. با ارسال یک شی به متد Create این کلاس، شی مورد نظر در زمان مقتضی آزاد خواهد شد و نیازی نیست که شما شخصا آن شی را آزاد کنید:</p>
<div dir=ltr>
<pre class="brush: delphi;">
var
  List : TStringList;
  mtReaper : ImtReaper;
begin
  List := TStringList.Create;
  mtReaper := TmtReaper.Create(List);

  //Use List in your code
  List.LoadFromFile('A File Name');
  List.Sort;
end;
//List will be destroyed automatically by mtReaper
</pre>
</div>
<p>در دلفی ۲۰۰۹ می توان این قابلیت را با استفاده از مفهوم Smart Pointers به شکل مناسب تری پیاده سازی کرد.</p>
<p>۲۷ مهر ۱۳۸۴  (بازنگری: ۱۳ اسفند ۱۳۸۷)</p>
<hr /></hr>
<h2>پاورقی</h2>
<p>[۱] &#8211; در دلفی ۲۰۰۶ و نسخه های بعد از آن می توان با اضافه کردن رهنمود abstract به تعریف کلاس، کل متدهای آن را بصورت abstract تعریف کرد، و لزومی ندارد عبارت abstract را به تعریف تک تک متدها اضافه کنیم:<br />
TPureAbstract = class abstract</p>
<p>[2] &#8211; در واقع تمامی روش های ذکر شده در داخل خود به نوعی از متد GetInterface استفاده می کنند.</p>
<p>[۳] &#8211; Delphi Magazine شماره ۸۰٫</p></div>
]]></content:encoded>
			<wfw:commentRss>http://vcldeveloper.com/articles/interfaces_in_delphi/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
