During learn and experience

قابلیت GWT Java to JavaScript Compiler

بمنظور اینکه کدهای جاوا اسکریپت تولید شده توسط GWT Java to JavaScript Compiler برروی تمامی مرورگرها یکسان نمایش داده شود این کامپایلر در هنگام تولید کد جاوا اسکریپت ، درموارد خاصی ، برای مرورگرهای مختلف کد های جاوا اسکریپت جداگانه تولید می کند (بخصوص برای IE 6).
اما امکانی وجود دارد که ما می توانیم با استفاده از آن به کامپایلر اعلام کنیم که فقط برای یک یا چند مرورگر خاص عمل کامپایل را انجام دهد با افزودن تکه کد زیر به فایل GWT Module خود می توانید این کار را انجام دهید.
تکه کد بالا به GWT Java to JavaScript Compiler اعلام می کند که کاربران نرم افزار فقط از IE 6 استفاده می کنند و لزومی ندارد کد جاوا اسکریپت تولید شده با تمامی مرورگرها سازگاری داشته باشد. این کار سبب کاهش حجم فایل جاوا اسکریپت تولید شده می شود.

شاد باشید.
۳۰ اسفند ۸۷ ، ۰۳:۳۵ ۰ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

GWT Java to JavaScript Compiler

GWT Java to JavaScript Compiler یکی از قابلیت های فوق العاده در GWT است که یک کامپایلر در اختیار توسعه دهنده قرار می دهد که کدهای جاوای را به JavaScript کامپایل می کند!!!
از مزیت های اصلی این کامپایلر می توان به موارد زیر اشاره کرد:

- برنامه نویس به زبان برنامه نویسی محبوب جاوا برنامه می نویسد.
- برنامه نویس می تواند از محیط های برنامه نویسی جاوا (مانند: Netbeans ، Eclipse و ...) استفاده کند.
- کد های جاوا اسکریپت کامپایل شده برروی تمامی مرورگرهای موجود به یک شکل اجرا می شود.
- کد جاوا اسکریپت تولید شده نسبت به کدهای جاوا اسکریپتی که توسط برنامه نویس نوشته می شود حجم کمتری دارد.
و...

شاد باشید.
۲۸ اسفند ۸۷ ، ۰۸:۱۹ ۰ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

GWT 1.6 on Netbeans 6.5

Hi
In this post i describe how to develop your gwt application in the Netbeans IDE.
requirement:Netbeans IDE 6.5 , GWT 1.6

1. Choose File > New Project (Ctrl-Shift-N). Under Categories, select Java. Under Projects, select Java Free-Form Project. Click Next.


2. Select the Location of your GWT project , Other fields will fill automatically. Click Next.

3. In the Run Project field select hosted from combo box. Click Next.

4. In the Source Package Folder section select src folder from your GWT project. Click Next.

5.Add your library like, gwt-servlet.jar ,... in the Java Source Classpath section. Click Finish.

have a nice time
۲۰ اسفند ۸۷ ، ۰۸:۱۸ ۱ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

معرفی کتاب Aspectj Cookbook 1St Edition Russ Miles

Aspectj Cookbook 1St Edition Russ Miles
تعداد صفحات: 354
قیمت: £34.50

این کتاب یک راهنمای عملی عالی برای فراگیری Aspectj می باشد و به علاقه مندان به مفاهیم AOP توصیه می شود.


شاد باشید.

۱۵ اسفند ۸۷ ، ۰۸:۴۷ ۰ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

معرفی کتاب Service Oriented Architecture (SOA) Compass IBM Press

Service Oriented Architecture (SOA) Compass IBM Press
تعداد صفحات: 272
قیمت: 44.99$

سری کتابهای IBM Press یکی از فنی ترین و با اعتبارترین سری کتابهای مربوط به کامپیوتر در دنیا می باشد. درکتاب فوق پنج نفر از افراد برجسته در زمینه معماری سرویس گرا به بررسی مفاهیم و مزیت های  معماری سرویس گرا و فرصت هایی که این معماری در اختیار سازمان ها قرار می دهد پرداخته اند. بسیاری از موارد کلیدی در این معماری نو ظهور ، نظیر نحوه پیاده سازی ، امنیت و ... در این کتاب بررسی شده است و برای آنها راهکار ارائه شده است.


شاد باشید.
۱۳ اسفند ۸۷ ، ۰۸:۰۶ ۰ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

NetBeans IDE 6.7 Milestone 2 منتشر شد

پس از تغییر در شماره گذاری که در ارائه نسخه بعدی Netbeans انجام شد (تغییراز 7 به 6.7 یعنی بجای اینکه شماره نسخه بعدی Netbeans 7 باشد 6.7 خواهد بود) نسخه NetBeans IDE 6.7 Milestone 2 ارائه شد.
اصلاحات و قبلیت های بارزاضافه شده در این نسخه عبارتند از:
  • بهبود کارایی(Ergonomic IDE): با اعمال تغییراتی ، از این پس شما می توانید برای استفاده از Netbeans فقط قابلیت هایی را که لازم دارید فعال کنید و در زمان اجرای Netbeans فقط قابلیت هایی که شما خواسته اید در حافظه بارگزاری می شود و سایر قابلیت ها در صورت استفاده از عملیات آن در هنگام کار با محیط بصورت خودکار در حافظه بارگزاری می شود. در گذشته شما هر کدام از قابلیت های Netbeans نظیر SOA ، PHP و... را نصب می کردید در زمان اجرای Netbeans در حافظه بارگزاری می شد و این امر موجب کندی در زمان شروع به کار Netbeans می شد اما با افزودن این قابلیت در زمان اجرای Netbeans فقط هسته اولیه آن در حافظه بارگزاری می شود و این باعث بالا رفتن کارایی می شود (شایان ذکر است که محیط هایی مانند visual studio از همین روش استفاده می کنند و زمان اجرای سریعی دارند) به نظر من این یک تغییر اساسی در Netbeans است که و باعث محبوبتر شدن Netbeans می شود.
  • بهبود در c++: بهبود code assitance و پشتیبانی از کتابخانه و ابزار پر طرفدار Qt.
  • بهبود SVG در Mobility: پشتیبانی کامل از کامپوننت های SVG.
  • و...
لیست کامل اصلاحات و قبلیت های اضافه شده.

شاد باشید.
۰۸ اسفند ۸۷ ، ۲۲:۰۶ ۰ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

Web Browser در جاوا !!!

SWT یک کامپوننت مرورگر وب داره که فوق العاده است ، به راحتی و با سرعت بالا صفحات HTML رو باز می کند و همچنین موتور جاوا اسکریپت هم داره. من Google Reader و Yahoo Mail رو باهاش تست کردم با سرعت بالا و بی نقص کار کرد حتی این پست را هم با برنامه جاوایی نوشتم که با استفاده از همین کامپوننت نوشته بودم !!!
کامپوننت browser نیز مانند سایر کامپوننت های SWT از کتابخانه های بومی سیستم عامل برای انجام عملیات خود استفاده می کند. بصورت پیش فرض این کامپوننت از موتور رندر HTML مخصوص سیستم عامل (مثلا در ویندوز IE) استفاده می کند ولی امکان تغییر این موتور نیز وجود دارد (مثلا در سیستم عامل ویندوز بجای موتور HTML IE از موتور HTML Mozilla استفاده کند).
package testcode;

import org.eclipse.swt.SWT;
import org.eclipse.swt.SWTError;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

/*
* http://www.eclipse.org/swt/snippets/
*/
public class NewMain {

public static void main(String[] args) {
final Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
Browser browser = null;
try {
browser = new Browser(shell, SWT.NONE);
} catch (SWTError e) {
/* The Browser widget throws an SWTError if it fails to
* instantiate properly. Application code should catch
* this SWTError and disable any feature requiring the
* Browser widget.
* Platform requirements for the SWT Browser widget are available
* from the SWT FAQ website.
*/
}
if (browser != null) {
browser.setUrl("http://www.google.com");
}
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
}
برای اجرای برنامه بالا کافی است فایل jar مربوط کتابخانه swt را در classpath برنامه خود داشته باشید.
شاد باشید.
۰۸ اسفند ۸۷ ، ۲۲:۰۰ ۳ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

دو خط کد برای اجرای یک فایل درون برنامه جاوا

Process p = Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler i:/sampleVideo.avi"); 
p.waitFor();

با استفاده از تکه کد بالا شما می توانید یک فایل (exe , pdf , avi , mp3 ,...) را با استفاده از برنامه های نصب شده برروی سیستم عامل خود اجرا کنید.وهمچنین برروی روند اجرای آن مدیریت داشته باشید. البته این تکه کد برای سیستم عامل ویندوز می باشد.

شاد باشید.
۲۶ بهمن ۸۷ ، ۰۸:۲۰ ۰ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

تکنولوژی Java Web Start

بوسیله تکنولوژی Java Web Start کاربران می توانند برنامه های جاوا را با کلیک برروی یک لینک در یک وب سایت اجرا کنند. لینک مورد نظر به یک فایل با فرمت JNLP می باشد.

فایل JNLP  به توسعه دهندگان امکان می دهد برنامه های دسکتاپ خود به راحتی در این فایل تعریف کرده و در وب پخش کنند. برای اجرای فایل JNLP  برروی سیستم کاربر فقط کافی است که کاربر برروی سیستم خود JRE را نصب کرده باشد. پس از دانلود فایل JNLP  و اجرای آن توسط کاربر ، Java Web Start با استفاده از اطلاعاتی که در فایل JNLP  ذکر شده است Jar فایل های مورد نیاز برای اجرای برنامه دسکتاپ جاوا را از وب دانلود کرده و سپس برنامه را اجرا می کند.

مراحل اسقرار (Deploy) برنامه با استفاده از تکنولوژی Java Web Start

  1. راه اندازی سرور وب: قبل از استقرار برنامه خود در وب باید نوع فایل JNLP  را به وب سرور خود بشناسانید. باید وب سرور خود را بنحوی تنظیم کنید که نوع JNLP  MIME را بشناسد برای مثال در سرور آپاچی (Apache) می توانید خط زیر را به فایل mime.types اضافه کنید:  application/x-java-jnlp-file JNLP و یا برای وب سرور (Apache Tomcat) خط زیر را به فایل web.xml اضافه کنید.


         JNLP
         application/x-java-jnlp-file

    برای سایر وب سرورها می توانید به مستندات وب سرور مراجعه کنید.

  2. ساخت فایل JNLP: مرحله کلیدی اجرای یک برنامه با Java Web Start فایل JNLP(Java Network Launching Protocol)است. فایل JNLPیک فایل XML است که حاوی عناصری و خصوصیاتی است که چگونگی اجرای برنامه را برای Java Web Start شرح می دهد. برای مثال فایل زیر را مشاهده کنید (برای اطلاعات بیشتر به لینک زیر مراجعه کنید http://java.sun.com/javase/6/docs/technotes/guides/javaws/developersguide/syntax.html).




    codebase="http://java.sun.com/docs/books/tutorialJWS/deployment/webstart/examples/"
    href="Notepad.jnlp">

    Notepad Demo
    The Java(tm) Tutorial: Sun Microsystems, Inc.
    Notepad Demo

    ClickMeApp uses 3 custom classes plus several
    standard ones




    href="http://java.sun.com/products/autodl/j2se"/>


  3. قرار دادن برنامه برروی وب سرور: مرحله بعدی قرار دادن تمامی Jar فایل های برنامه بهمراه فایل JNLP برروی وب سرور است.
  4. ساخت یک صفحه وب: در آخرین مرحله یک صفحه وب درست کرده و لینک فایل JNLP را درون آن قرار دهید.

    اطلاعات بیشتر: http://java.sun.com/javase/6/docs/technotes/guides/javaws/developersguide/contents.html

    شاد باشید.

۲۳ بهمن ۸۷ ، ۱۱:۳۴ ۱ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

دو خط کد برای قرار دادن JFrame در وسط صفحه

java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
setBounds((screenSize.width - 600) / 2, (screenSize.height - 400) / 2, 600, 400);

مطالب مرتبط:

شاد باشید
۲۱ بهمن ۸۷ ، ۰۸:۲۷ ۰ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

انتشار GWT 1.6 Milestone 1

سلام
گوگل با عرضه GWT 1.6 توسعه دهندگان رو وارد مرحله جدیدی در توسعه web application با GWT خواهد کرد. همانطور که تمرکز در ارائه نسخه 1.5 بر روی قدرتمندتر کردن GWT بود (به نسبت نسخه 1.4) در نسخه 1.6 تمرکز برروی ساده سازی و سریعتر کردن فرایند تولید web application با GWT است.
البته برای نسخه 1.6 فعلا نسخه نهایی ارائه نشده ولی در زیر توضیحاتی کلی در مورد تغییرات این نسخه با نسخه 1.5 آورده شده است:
  1. ساختار جدید پروژه: خروجی قدیمی تولید شده توسط ابزارهای GWT در نسخه های قدیمی جای خود را با ساختار استاندارد web application ها در جاوا یعنی war فایل تعویض کرده اند و ساختار دایرکتوری یک پروژه GWT تغییر کرده است (البته از ساختار نسخه های قبلی کماکان پشتیبانی می شود). ساختار جدید پروژه به شما این امکان را می دهد که علاوه بر Eclipse از سایر محیط های توسعه جاوا مانند Netbeans بدون نصب هیچ پلاگ استفاده کنید (در حالی که در نسخه قبلی فقط ساختار پروژه بصورت رسمی توسط Eclipse باز می شد و در سایر محیط ها با نصب پلاگ این امکان پذیر بود.) 
  2. پروژه هایی که از امکان RPC در GWT استفاده می کنند از این به بعد باید تنظیمات خودشون رو در فایل web.xml که در ساختار جدید پروژه وجود دارد قرار دهدند.(/war/WEB-INF/web.xml)
  3. صفحات HTML host  می تواند در شاخه public پروژه قرار نگیرد.
  4. بهبود hosted mode: علاوه بر پشتیبانی از GWTShell قدیمی که از نسخه سرور tomcat بصورت توکار استفاده میکرد hosted mode جدید از سرور jetty برای بالا بردن کارایی استفاده می کند و همچنین دکمه Restart Server نیز به محیط hosted mode اضافه شده است که باعث restart شدن سرور jetty می شود.
  5. سیستم جدید مدیریت رویدادها با جایگزینی EventHandler ها با Listener ها.
  6. کامپوننت های جدید مانند DataPicker و LazyPanel
در کل به نظر می رسد گوگل از تمام بازخورد های نسخه های 1.4 و 1.5 استفاده کرده و به سرعت نسخه 1.6 را عرضه کرده (گوگل برای نسخه 1.4 حدود 62 عرضه ارائه کرد و سپس نسخه 1.5 را ارئه کرد در حالی که هم اکنون نسخه 1.5 فقط 3 عرضه داشته گوگل نسخه 1.6 رو عرضه کرده که این نشان دهنده ضرورت ساده سازی بوده است).

تنها مشکلی که وجود دارد محدودیت دانلود این ابزار قدرتمند برای ایرانی ها است که امیدوارم به زودی حل بشه.

مطالب مرتبط:

شاد باشید.
۲۰ بهمن ۸۷ ، ۰۹:۲۳ ۰ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

دو خط کد برای تغییر Look & Feel در Swing

UIManager.setLookAndFeel(new WindowsLookAndFeel());
SwingUtilities.updateComponentTreeUI( this );


شاد باشید
۱۲ بهمن ۸۷ ، ۰۸:۵۸ ۱ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

چگونگی راه اندازی سرور Subversion و استفاده از آن در Netbeans IDE

سیستمهای version control بمنظور مدیریت نسخه های مختلف هر گونه واحد اطلاعاتی جزو اساسی ترین ابزارها برای توسعه نرم افزار می باشد.
Subversion یکی از قوی ترین و محبوبترین سیستمهای version control می باشد. برای راه اندازی یک سیستم version control در محیط توسعه خود احتیاج به یک نسخه سرور و یک نسخه کلاینت subversion دارید و همچنین یک نرم افزار در سمت کلاینت که بتواند با استفاده از دستورات و کتابخانه های نسخه کلاینت subversion با نسخه سرور subversion تحت پروتکل های مختلف (در اینجا ما از پروتکل HTTP استفاده می کنیم) ارتباط برقرار کند.
مراحل راه اندازی :
  1. دانلود نسخه سرور VisualSVN از سایت http://www.visualsvn.com/server/ و نصب آن برروی سرور. این توزیع subversion یک محیط ویژوال برای تعریف repository ، role ، user در اختیار شما قرار می دهد و کار با آن فوق العاده آسان می باشد.
  2. اگر شما محیط توسعه یک نفره دارید و سرور Subversion برروی همان سیستمی که Netbeans نصب است نصب شده است نیازی به نصب CollabNet Subversion Command-Line Clientرا ندارید در غیر اینصورت آن را از سایت http://www.collab.net/downloads/subversion/ دانلود کنید و بروی سیستم خود نصب کنید.
  3. در محیط Netbeans از منوی Tools گزینه Options را انتخاب کنید سپس در زبانه Miscellaneous زبانه versioning را انتخاب کنید در قسمت Subversion در جعبه متن Path to the executable file شاخه bin دایرکتوری نصب CollabNet Subversion Command-Line Client را وارد کنید (اگر محیط توسعه شما تک کاربره است و CollabNet Subversion Command-Line Client را نصب نکرده اید شاخه bin دایرکتوری نصب VisualSVN را بدهید)
به همین راحتی شما صاحب یک سیستم version control شده اید پس از تعریف repository در VisualSVN می توانید در محیط Netbeans و با استفاده از منوی versioning/subversion ازمزایای سیستم version control بهره ببرید.

نکته: برنامه نویسان .Net که از محیط visual studio استفاده می کنند با دانلود نسخه کلاینت VisualSVN می توانند از مزایای سیستم version control در محیط visual studio بهره ببرید.

شاد باشید.
۰۶ بهمن ۸۷ ، ۰۹:۵۳ ۱ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

دانلود بروزرسانی های netbeans و نصب آن بصورت offline

سلام
در ایران بدلیل تحریم های موجود امکان بروزرسانی Netbeans با استفاده از ابزار درون محیط Netbeans امکان پذیر نمی باشد حتی در صورت استفاده از پ-ر-و-ک-س-ی هم باز در آخرین مراحل کامل شدن بروزرسانی پیغام های عجیب و غریب داده می شود.
اما یکی از راه های عملی تر دانلود فایل های hbm از اینترنت (با استفاده از پ-ر-و-ک-س-ی)و نصب آنها بصورت offline می باشد برای این کار دو را وجود دارد :
  1. دانلود فایل zip حاوی تمام hbm های جدید از سایت SunSolve . برای انجام این کار در صفحات wiki در سایت Netbeans به ازای هر نسخه Netbeans یک صفحه با نام patches info وجود دارد که لینک دانلود فایل zip در سایت SunSolveدر این صفحه وجود دارد برای مثال لینک صفحه patches info برای نسخه Netbeans 6.5 بصورت زیر است : http://wiki.netbeans.org/NetBeans6.5PatchesInfo یا برای نسخه 6.1 بصورت زیر است : http://wiki.netbeans.org/NetBeans6.1PatchesInfo لینک تمامی patches info ها در لینک زیر قرار دارد : http://wiki.netbeans.org/NetBeansPatchesInfo
  2. دانلود تک تک فایل های hbm مورد نیازاز سایت Netbeans Update Center
به امید پایان تحریم ها که ضررش فقط برای عامه مردم است.
۲۰ دی ۸۷ ، ۱۰:۵۹ ۱ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

نگاشت زبان های برنامه نویسی به ادیان و مذاهب !!!

سلام
یکی از دوستان مطلب زیر رو برام share کرده بود واقعا جالبه . البته من با همش موافق نیستم ولی در کل کار جلبیه یه نگاهی بیاندازید.

۰۸ دی ۸۷ ، ۱۱:۳۶ ۰ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

امکانات جدید در Java SE 6

سلام
در زیر لینک هایی آورده شده که شامل مثالهایی از امکانات جدید Java SE در نسخه 6 می باشد :

Dialog Box
Draggable Applet
System Tray


New feature
۰۲ دی ۸۷ ، ۱۷:۵۷ ۰ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

لینک مثال های کاربردی CSS

این سایت مثال های متنوع و خوبی از CSS به همراه کد داره :

۱۳ آذر ۸۷ ، ۱۱:۴۸ ۰ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

دانلود آخربن نسخه JDK و Netbeans برای ایرانی ها

سلام

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

سایت جاوافا (http://www.javafa.com/) با در نظر گرفتن نیاز توسعه دهندگان فارسی زبان، به یک مرجع خبری و آموزشی در زمینه زبان برنامه نویسی جاوا راه اندازی شده است.

می توانید بدون محدودیت از لینک زیر JDK (32 و 64 بیتی برای لینوکس و ویندوز) را دانلود کنید:

دانلود JDK

مطالب مرتبط:
دانلود Netbeans 6.5.1
۱۲ آذر ۸۷ ، ۰۸:۴۸ ۲ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

سازنده (constructor) بدون پارامتر برای کلاس های serializable در GWT

امروز به این error که توسط کامپایلر GWT صادر شد برخوردم :
Error: Type ‘com.saeed.SampleClass’ was not serializable and has no concrete serializable subtypes

درحالی کلاس SampleClass بصورت زیر تعریف شده بود :
public SampleClass  implements IsSerializable {
public String myStr;
public SampleClass(String str)
{

this.myStr = str;
}
}
در حالی که کلاس زیر بدون مشکل کامپایل شد :
public SampleClass  implements IsSerializable {
public String myStr;
}
بعد از کلی جستجو به این نکته برخوردم که : کلاسهای serializable در GWT باید سازنده (constructor) بدون پارامتر داشته باشند :
public SampleClass  implements IsSerializable {
public String myStr;
public SampleClass(String str){} public SampleClass(String str)
{

this.myStr = str;
}
}

شاد باشید

۱۰ آذر ۸۷ ، ۱۵:۴۸ ۰ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

هفته نامه شهروند امروز توقیف شد !!!

سلام

امروز با شنیدن خبر توقیف هفته نامه شهروند امروز خیلی ضد حال خوردم . البته جای شکرش باقی بود که از هفته دیگه پخش نمیشه (شماره این هفته منتشر شده) .
من بعنوان خواننده این نشریه فوق العاده ، به اندازه یک دانشگاه از این هفته نامه مطالب جامعه شناسی ، فرهنگی ، سینمایی و ... یاد گرفتم هفته نامه ای که به اندازه 50000 تومان مطلب داره ولی قیمتش 1500 تومان بود .
امیدوارم بروبچ شهروند امروز (همون بروبچ روزنامه شرق) نا امید نشن و بتونن به هر طریقی شده دوباره کار خودشونو ادامه بدن .

برای شما (بروبچ شهروند امروز) بهترین هارو آرزو می کنم و همیشه دعای خیر من پشت سرتونه (می دونم در برابر زحمات شما ناچیز) .
۱۸ آبان ۸۷ ، ۱۱:۳۲ ۰ نظر موافقین ۰ مخالفین ۰
سعید زرین فام