امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
DotNET با طعم Mono !
نویسنده پیام
amirjan آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 1,105
موضوع‌ها: 24
تاریخ عضویت: تير ۱۳۸۳

تشکرها : 348
( 697 تشکر در 251 ارسال )
ارسال: #1
DotNET با طعم Mono !
اخیرا مجموعه «هما» مخصوص ابونتو ۸.۱۰ بدستم رسید ، جاتون خالی بعد از اینکه کلی از بسته هاش رو نصب کردم و حالشونو بردم ، یه بسته تازه توی این مجموعه نظرم رو به خودش جلب کرد . بله ! این بسته همانا mono بود !

پروژه مونو توسط شرکت Novell پشتیبانی میشه که از اهدفش میشه به ساخت کامپایلر #C برای لینوکس و ایجاد محیطی برای طراحی، ساخت و اجرای برنامه های دات نتی در لینوکس اشاره کرد. بهتر بگم ، ساخت CLR لینوکسی ! ... البته این کار رو قبلا مایکروسافت تحت عنوان Rotor انجام داده ، اما چون تحت لیسانس Microsoft Shared Source منتشر شده ، برای جامعه لینوکسی ها بی استفادست . (چون مثل اینکه استفاده تجاری رو مستقیما منع کرده یا یه همچین چیزی ... )

خلاصه ... ما Mono Develop که یه IDE برای محیط گنوم هستش رو نصب کردیم .
در اولین اجرا با پنجره زیر روبرو شدم :
[تصویر:  f18dae3ckhuy91i2mdu9_thumb.png]

همون طور که میبینید محیطی تقریبا شبیه به ویژوال استدیو مایکروسافت داره ،‌منتها یه کم ساده و جم و جور تر ... خوب ، بلافاصله روی Start a New Solution کلیک کردم ، پنجره زیر باز شد :
[تصویر:  z5oo6k2w5tqcl8e1t610_thumb.png]

باز همون طور که معلومه سعی شده محیط شبیه به ویژوال استدیو مایکروسافتی باشه تا کسایی قبلا اونو کار می کردند ، احساس آشنا بودن و راحتی بکنن ...
برای شروع از لیست سمت چپ #C رو انتخاب کردم ، سه تا گزینه اومد سمت راست :
Console Project , Empty Project , GTK# 2.0 Project , Library (این که شد ۴ تا !) ... یکیشون چشمک میزد ! درسته! #GTK . باید میدیدم چی هست و چه فرقی با GTK غیر # داره !
اسم پروژه رو test گذاشتم و رفتم مرحله بعد . توی این قسمت چهار تا چک باکس بود :
- اولی ازم میخواست تا ورژن GTK ای که می خوام استفاده کنم رو مشخص کنم (البته این جا توی پرانتز بگم که GTK ابزاریه برای طراحی ویژگی بصری نرم افزار ها (همون UI خودمون) که توی لینوکس خیلی طرفدار داره ، مخفف GIMP Tool Kit ، گیمپ هم یه نرم افزار پردازش تصویر ...)
- دومی درباره پکیج هایی که می خوام با پروژه بسازه میپرسه ، مثلا اینکه یه پکیچ جدا برای source ها ، یه پکیج جدا برای فایل های binary ...
- سومی درباره زبان هایی که قراره interface برنامه ازش استفاده کنه رو میپرسه
- و چهارمی و آخری بیشتر برای سیستم های UNIX کاربرد داره ، اینکه فایل های launcher و desktop برای پروژه بسازه یا نه ...
بعد از این پنجره به صفحه اصلی مونو برگردونده میشیم :
[تصویر:  wtmizafwsjhntumc2qu3_thumb.png]

بعد از اینکه که یکم ور رفتم باهاش توی لیست solutions روی User Interface کلیک و Main Window رو انتخاب کردم ... اگر شما هم مثل من ناشی باشید ، فوری از توی تول باکس یه دکمه ور میدارید و میندازید توی پنجره تا امتحانی یه کد براش بنویسید ، اما غافل از اینکه قبل از همه این کار ها باید طریقه استفاده از GTK رو بدونید .. کسانی که با GTK برنامه نوشتن میدونن که توی یه پنجره نمیشه یه widget که غیر-ظرف (منظور همون non-container) هست رو بدون اینکه قبلش یه ظرف (یا container) براش تعریف کرده باشن ، استفاده کنن . یعنی در واقع موقعیت مکانی و اندازه یه widget رو container کنترل می کنه . و اگه مثل من گیج بزنید و همینجوری یه دکمه بندازید اون وسط ، یهو میبینید کل پنجرتون شده یه دکمه ساده !!
برای container میتونید مثلا از ویدگت fixed استفاده کنید و بعد دکمه تون رو توی اون قرار بدید .
حالا حتما انتظار دارید روی دکمه دابل کلیک کنید و طبق معمول IDE براتون n خط کد بنویسه و شما فقط کد دکمتون رو وارد کنید ... نه خیر ... از این خبرا نیست ...
هر ویدگت یه سری خصوصیت یا Property داره که مثلا موقعیت مکانی ، visibility و اینا توشه و یه سری پیام یا signal داره که رویداد هایی که ممکنه برای یه ویدگت پیش بیاد رو کنترل می کنن . این سیگنال ها دو دسته هستن ، یکی سیگنال هایی که مربوط به رویداد های بین اون ویدگت و ظرفش ممکنه وجود داشته باشه و دیگری سیگنال هایی که منحصرا برای اون ویدگت وجود داره . مسلما یه سری سیگنال های پیش فرض برای همه ویدگت ها وجود داره ، مثل Clicked و Activated و ... و یه سری سیگنال های خاص هم فقط مخصوص یه ویدگته ، مثلا سیگنال RowCollapse مربوط به ویدگت Tree View هستش ، این که واضحه ...
حالا این سیگنال ها به چه درد می خورن ؟ چجوری میشه ازشون استفاده کرد؟‌ این طوری که هر سیگنال یه سری Handler داره ، که در واقع یه سری توابع مجازی یا virtual هستن . یعنی موقع وقوع یه سیگنال خاص ، Handler های مربوط به اون صدا زده میشه (و البته این توابع مجازی میتونن ورودی هایی هم داشته باشن) .
حالا این چه فایده نسبت به تکنولوژی های قبلی داره ؟ فایدش اینه که زمان وقوع یه سیگنال شما میتونید چندین تابع رو به جای یک تابع صدا بزنید !
خوب حالا که تقریبا یاد گرفتیم باید چی کار کنیم ، برای تمرین یه برنامه «سلام دنیا» کوچولو با هم میسازیم :
از قسمت ToolBox و از قسمت Container دنبال Fixed میگردیم و بعد درگش می کنیم روی فرممون ، بعد هم از قسمت Widgets دنبال Button می گردیم و اون رو هم روی فرممون قرار میدیم . اگه دوست داشتیم میتونیم از قسمت Properties و Button Properties لیبل دکمه رو به Hello تغییر بدیم . بعد از قسمت properties برگه Signals رو انتخاب می کنیم و روی Button Signals کلیک می کنیم ، بعد برای سیگنال Click این دکمه یه handler مثل btn1_clicked تعریف می کنیم . هم زمان که این کار رو انجام میدیم ، خود Mono یه تابع virtual با همین نام توی کلاس MainWindow (و در واقع فایل MainWindow.cs) ایجاد می کنه ، که با رفتن به قسمت Source Code میتونیم اون رو ببینیم ، اینطوری :
[تصویر:  8nfqcut0ra8bfrt75crb_thumb.png]

حالا برای نمونه میتوینم این کد رو توش بنویسیم :

کد:
System.Console.WriteLine("Hello My IranVig Friends!");

که بعد از سیو کردن و زدن کلید F5 (یا همون Project>Run) برنامه رو میتونیم اجرا کنیم . نتیجه رو هم میتونیم توی قسمت Application Output ببینیم ...
من زیاد دات نت کار نکردم ، از دوستان اینکاره خواهشمندیم ، این بسته رو بگیرن ، تست کنن . خیلی چیزا هست که میشه راجع بهش حرف زد ، مهمترینش خروجی ها و در واقع اسمبلی هایی هست که این IDE درست میکنه (که مثلا با .net framework ها ی ویندوزی سازگاری کامل رو داره یا نه ...) .

به قول ویکی پدیا که میگه «این نوشتار خرد است» ! ما هم میگیم «این تاپیک خرد است» ، لطفا با تکمیل آن خود و ما را یاری کنید !

سید امیر حسین حسنینی

Human knowledge belongs to the world ...
(آخرین ویرایش در این ارسال: ۱۶-فروردین-۱۳۸۸, ۰۱:۱۳:۱۳، توسط amirjan.)
۱۶-فروردین-۱۳۸۸, ۰۱:۰۴:۵۶
ارسال‌ها
پاسخ
تشکر شده توسط : hamed_Arfaee, man4toman, t3r!p3000, ajlajlajl, Rink8, ha_60, HoseinVig, sav68, hoax3r, lord_viper, far_222000, Pardazesh-Gar
esmaeily-hosein آفلاین
كاربر دو ستاره
**

ارسال‌ها: 232
موضوع‌ها: 12
تاریخ عضویت: دى ۱۳۸۴

تشکرها : 6
( 91 تشکر در 46 ارسال )
ارسال: #2
RE: DotNET با طعم Mono !
mono project یکی از بزرگترین پروژه های open source که تو سراسر دنیا هم خیلی طرفداره و هدفش ساخت framework برای محیط های مختلف مثل linux ، mac os,... میباشد .
زبان پایه رو به عنوان C# در نظر گرفت و جالبتر معماری .net آن برای اکثر برنامه ها خیلی معروفه
مثلیکه الان داره رو vb هم کار میکنه . دنیای .Net روز به روز در حال بزرگ شدن میباشد که این یکی از نمونه هاش میباشد .
اینم سایتش : mono-project.com

هر چی روش خوبه توش خوب نیست!
۱۶-فروردین-۱۳۸۸, ۰۹:۲۷:۴۷
ارسال‌ها
پاسخ
تشکر شده توسط : amirjan, HoseinVig, t3r!p3000, sav68, Pardazesh-Gar
ajlajlajl آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 2,192
موضوع‌ها: 70
تاریخ عضویت: مهر ۱۳۸۴

تشکرها : 932
( 2618 تشکر در 1020 ارسال )
ارسال: #3
RE: DotNET با طعم Mono !
الان runtime رو که میشه گفت کامل پشتیبانی میکنه. ( یعنی توی ویندوز کمپایل کنید تو لینوکس اجرا و بلعکس + سه چهار تا سیستم عام دیگه. ARM هم داره ).
فقط کمپایلرش هست که C# رو مثل این که کامل پشتیبانی میکنه. vb رو هم تا ورژن 2 فعلا. البته یه وعده هایی داده. هر چند زیاد کاریش نداریم. خوب VS2008 به این خوبی که هست.راستی توی کتابخونش هم چیزای جالبی اضافه داره.
این gtk هم من هنوز نگرفتم دقیق چیه.
دارم الان نسخه ویندوزشو میگیرم هنوز. این IDE ش نسخه ویندوز نداره؟

میزان رای دشمن است!
[تصویر:  cff100.png]
۱۶-فروردین-۱۳۸۸, ۱۴:۴۸:۱۸
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : t3r!p3000
amirjan آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 1,105
موضوع‌ها: 24
تاریخ عضویت: تير ۱۳۸۳

تشکرها : 348
( 697 تشکر در 251 ارسال )
ارسال: #4
RE: DotNET با طعم Mono !
نقل قول: این gtk هم من هنوز نگرفتم دقیق چیه.

ببین توی یه جمله میشه : ابزاریه برای طراحی اینترفیس برنامه !
چه طوریه که توی VS از Windows Forms برای طراحی اینترفیس استفاده می کنی ، که بتونی به عناصری که توی سیستم عامل ویندوز وجود داره دسترسی داشته باشی (مثل پنجره (و انواعش) ، دکمه ، چک باکس ، اسکرول بار ... ، api های مربوط به اینا .. ) ، توی لینوکس با توجه به اینکه هسته سیستم عامل توش توابع گرافیکی وجود نداره (بر خلاف ویندوز ، مثلا لینوکس غیر گرافیکی داریم (فقط ترمینال باشه) ، ولی ویندوز غیر گرافیکی نداریم) ، یه واسط تحت عنوان X Window System وجود داره که کارای گرافیکی رو هندل کنه . حالا این gtk در واقع مجموعه ابزار و api هایی هستن (اصطلاحا toolkit) که اجازه میدن از اون امکانات و عناصری که مربوط X Window System هست ، برنامه نویسا و توسع دهنده های نرم افزار استفاده کنن .

البته نه اینکه از gtk توی ویندوز نشه استفاده کرد یا اینکه از windows forms توی لینوکس نشه استفاده کرد . sdk ها و runtime های مربوط به هر کودوم که نصب باشه میشه ازش استفاده کرد .

البته این چیزیه که من فهمیدم ، اگر اشتباهه دوستان تصحیح کنن.


نقل قول: دارم الان نسخه ویندوزشو میگیرم هنوز. این IDE ش نسخه ویندوز نداره؟

من که ندیدم .. برای ویندوز فکر کنم باید از همون vs استفاده کرد . (و مثلا sdk های gtk# رو نصب کرد)

سید امیر حسین حسنینی

Human knowledge belongs to the world ...
۱۶-فروردین-۱۳۸۸, ۱۵:۳۴:۳۷
ارسال‌ها
پاسخ
تشکر شده توسط : ajlajlajl, esmaeily-hosein, HoseinVig, t3r!p3000, sav68, lord_viper
ilius آفلاین
تازه وارد

ارسال‌ها: 11
موضوع‌ها: 0
تاریخ عضویت: فروردین ۱۳۸۸

تشکرها : 3
( 20 تشکر در 10 ارسال )
ارسال: #5
RE: DotNET با طعم Mono !
دستت درد نکنه امیرجان.

اینجا لیست نرم‌افزارهایی که با مونو شده رو می‌تونید ببینید:
http://mono-project.com/Software
توی اون لیست تنها برنامه‌ای که برام آشنا بود و ازش استفاده کردم برنامهٔ معروف F-spot بود که یه برنامهٔ خیلی خوب و تقریباً کامل برای مدیریت تصاویر در لینوکس هست (راستی تازه فهمیدم که توسعه‌دهنده‌ش خود ناول هست)

در ضمن GTK یک کتابخانه(Library) برای تولید رابط گرافیکی کاربر(GUI) هست. میشه گفت یه معادل آزاد برای Win32 API هست.
یه معادل دیگه Qt هست(با تلفظ کیوت) که جدیداً شرکت نوکیا خریدتش و تحت مجوز LGPL قرار داده و از لحاظ مجوز شبیه GTK شده (از این پس برای نوشتن برنامه غیر‌اوپن‌سورس با Qt هم لازم نیست پول بدید). تازه داره رقابت بین GTK و QT (و نتیجه بین GNOME و KDE) بیشتر میشه! همین الآن یه بحثی توی تکنوتاکس درگرفته که بیا و ببین! البته نکات فنی خوبی از این بحثا در میاد.
http://www.technotux.org/html/modules.ph...646#124646
در ضمن همین رقابت‌ها(مثلاً بین Qt و GTK یا بین گنوم و KDE) یکی از عوامل پیشرفت هست. در ضمن تا حد خیلی زیادی هم سلیقه‌ای هست.
راستی یه چیزی هم هست به اسم wxGTK که ظاهرا بر اساس GTK هست ولی به اندازهٔ GTK کامل نیست.

همین GTK خودش مشتقات دیگه‌ای هم داره! اصلش که با C هست، یه GTKmm هست که با ++C و مثلاً همین #GTK که با #C هست. PyGTK که برای پایتون و ... حتی توی جاوا، PHP ، Perl ، پاسکال و حتی فرترن (و شاید چند تا زبون دیگه) هم میشه از GTK استفاده کرد!! اینم از خاصیت‌های نرم‌افزار آزاد!

من که فعلاً دارم با PyGTK زندگی می‌کنم(همونطور که ماهی با آب زندگی می‌کنه!)
(آخرین ویرایش در این ارسال: ۲۴-فروردین-۱۳۸۸, ۰۵:۰۴:۰۳، توسط ilius.)
۲۴-فروردین-۱۳۸۸, ۰۴:۵۴:۴۳
ارسال‌ها
پاسخ
تشکر شده توسط : amirjan, t3r!p3000, ajlajlajl
amirjan آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 1,105
موضوع‌ها: 24
تاریخ عضویت: تير ۱۳۸۳

تشکرها : 348
( 697 تشکر در 251 ارسال )
ارسال: #6
RE: DotNET با طعم Mono !
(۲۴-فروردین-۱۳۸۸, ۰۴:۵۴:۴۳)ilius نوشته است: اینجا لیست نرم‌افزارهایی که با مونو شده رو می‌تونید ببینید:
http://mono-project.com/Software
توی اون لیست تنها برنامه‌ای که برام آشنا بود و ازش استفاده کردم برنامهٔ معروف F-spot بود که یه برنامهٔ خیلی خوب و تقریباً کامل برای مدیریت تصاویر در لینوکس هست (راستی تازه فهمیدم که توسعه‌دهنده‌ش خود ناول هست)

آقا سعید یه دنیا ممنون.

یه چند سیستم معروف دیگه هم هستن که از مونو استفاده می کنن :

- بخش توسعه سایت موزیلا (developer.mozilla.org) از سیستم مدیریت محتوای Deki استفاده می کنه که بر پایه mono هستش . (البته front-end ش رو با PHP نوشتن)

- بخش سرچ و در کل index کردن سایت WikiPedia بر اساس برنامه های بر پایه mono مدیریت میشه .

- ...

بقیه ش رو اینجا ببینید : http://mono-project.com/Companies_Using_Mono

سید امیر حسین حسنینی

Human knowledge belongs to the world ...
۲۴-فروردین-۱۳۸۸, ۱۱:۳۱:۱۹
ارسال‌ها
پاسخ
تشکر شده توسط : t3r!p3000, ajlajlajl, esmaeily-hosein


پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS