During learn and experience

۶ مطلب در ارديبهشت ۱۳۸۸ ثبت شده است

نکاتی ارزشمند درباره ساختن کامپوننت (component) در GWT (قسمت 2)

ادامه از (قسمت 1)

2.
بازسازی و استفاه مجدد از کامپوننت ها (Recycle and reuse): زمانی که یک کامپوننت مکررا در برنامه شما (درون فرم ها و سایر کامپوننت ها) مورد استفاده قرار می گیرد ، از نوشتن کدهای تکراری پرهیز کنید. در این موقعیت بهتر است کامپوننت جدید خود را از کامپوننت های قابل استفاده مجدد کوچکتری که تولید می کنید بسازید. شما با این روش پیچیدگی کامپوننت خود را کاهش می دهید و عملیات تست را ساده تر می کنید (البته باید coupling and cohesion را رعایت کنید) و علاوه بر این ها قابلیت استفاده مجدد کامپوننت ها را نیز بالا می برید.
برای مثال در تکه کدهای زیر برای ساختن یک فرم ورود کاربران (Login Panel) بجای اینکه Login Panel را یک کامپوننت در نظر بگیریم ، یک کامپوننت کوچکتر دیگر (LabeledTextBox ) طراحی می کنیم و از این کامپوننت کوچکتر درون Login Panel استفاده می کنیم.

public class LoginPanel extends Composite {

private final VerticalPanel container;

private final LabeledTextBox usernameTextBox;
private final LabeledTextBox passwordTextBox;

private final Button loginButton;

public LoginPanel() {
container =
new VerticalPanel();
initWidget(container);

usernameTextBox =
new LabeledTextBox("Username");
container.add(usernameTextBox);

passwordTextBox =
new LabeledTextBox("Password", true);
container.add(passwordTextBox);

loginButton =
new Button("Login");
container.add(loginButton);
}

@Override
protected void onLoad() {
super.onLoad();
usernameTextBox.setFocus(
true);
}
}

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

نکاتی ارزشمند درباره ساختن کامپوننت (component) در GWT (قسمت 1)

شاید برای کسایی که تازه کار با GWT رو شروع کردن این سوال پیش بیاد که بهترین روش برای تولید یک کامپوننت رابط کاربری (GUI) جدید در GWT چیست؟
در این مطلب (و مطالب آینده) به ذکر چند نکته برجسته در این باره می پردازیم:
  1. همیشه composition (ترکیب) را به وراثت ارجحیت دهید. همانطور که در تکه کدهای زیر مشاهده می کنید ، در تکه کد اول بمنظور تولید کامپوننت OverExtendedWidget که خصوصیات و رفتارهایی شبیه HorizontalPanel دارد ، بصورت مستقیم کلاس OverExtendedWidget از کلاس HorizontalPanelارث برده است. با این روش شما با جزئیات پیاده سازی HorizontalPanel درگیر می شوید و در صورتی که بخواهید برای توسعه قابلیت های کامپوننت خود (OverExtendedWidget ) یکی از متدهای HorizontalPanel را override کنید ممکن است این کار به عملیات درونی HorizontalPanel آسیب برساند و در نهایت عملیات کلی کامپوننت شما را مختل کند. اما با استفاده از تکه کد دوم که روش پیشنهادی GWT است شما با جزئیات پیاده سازی HorizontalPanel درگیر نمی شوید و در عین حال به راحتی می توانید از متدهای public کلاس HorizontalPanel در کامپوننت خود استفاده کنید و درکنار این ها می توانید بدون نگرانی از تداخل ، قابلیت های جدید به کامپوننت خود اضافه کنید.
تکه کد اول:


public class OverExtendedWidget extends HorizontalPanel {

public OverExtendedWidget() {

//...
}
}


تکه کد دوم:


class ConservativeWidget extends Composite {

private final HorizontalPanel panel;

public ConservativeWidget() {
panel =
new HorizontalPanel();
initWidget(panel);

// ...
}
}



ادامه دارد (قسمت2).
شاد باشید.
۲۰ ارديبهشت ۸۸ ، ۰۸:۲۵ ۰ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

آموزش کار با JSmooth

در مطلب ساختن فایل exe یا windows service در جاوا (java) که قبلا تنظیم کرده بودم یکی از دوستان comment گذاشتن که نحوه کار با این نرم افزار هم توضیح داده بشود.
کار با این نرم افزار فوق العاده ساده است. با اینحال در این مطلب نحوه ساختن فایل exe برای یک jar فایل رو مرحله به مرحله ذکر می کنم البته این یک مطلب ساده است که نحوه کار کلی با JSmooth را برای شما تشریح می کنند:(برای مشاهده عکس ها در سایز بزرکتر برروی آنها کلیک کنید)
همانطور که در شکل زیر مشاهده می کنید پس از اجرای برنامه JSmooth صفحه welcome این برنامه نمایش داده می شود.



در پنل سمت چپ برنامه ، مراحل کار به ترتیب از بالا به پایین آورده شده است. با کلیک برروی هر مرحله (ترجیحا به ترتیب از بالا به پایین) می توانید به مرحله بعد بروید.
برروی دومین دکمه در پنل سمت با نام Skeleton کلیک کنید. همانطور که در شکل زیر مشاهده می کنید در این صفحه می توانید نوع پروژه خود را انتخاب کنید. ما از combo box گزینه Windowed Wrapper را انتخاب می کنیم.



پس از انتخاب این گزینه می توانید یکسری تنظیمات اولیه برای فایل exe خود انجام دهید مانند:
  • تعیین پیغامی که در صورت نصب نبودن JVM به کاربر داده شود.
  • تعیین سایتی که بصورت خودکار برای دانلود JVM برای کاربر باز شود.
  • تعیین اینکه از برنامه فقط یک نمونه بتواند اجرا شود.
  • تعیین اینکه آیا از کلاس های JSmooth استفاده می کنید.
  • و...
برروی سومین دکمه در پنل سمت با نام Executable کلیک کنید.در این مرحله شما می توانید تنظیمات زیر را انجام می دهید:
  • تعیین نام فایل exe و آیکون آن.
  • تعیین دایرکتوری جاری فایل exe که معمولا منابع برنامه (نظیر عکس ها ، فایل های متنی که برنامه در آنها اطلاعات ذخیره می کند و...)


برروی چهارمین دکمه در پنل سمت با نام Application کلیک کنید. در این مرحله شما باید کلاس main فایل jar خود را تعیین کنید علاوه بر آن در قسمت Classpath ، فایل jar برنامه خود را اضافه کنید (اگر از کتابخانه های خاصی در برنامه خودتان استفاده کردید jar فایل های آن کتایخانه ها را نیز باید در قسمت Classpath اضافه کنید).


دو مرحله آخر تنظیمات پیشرفته مربوط به JVM در زمان اجرای فایل exe است که معمولا مقادیر پیش فرض مشخص شده در JSmooth کافی می باشد (البته در صورتی که احتیاج دارید مقادیر جدیدی تنظیم کنید با استفاده از راهنمای JSmooth به راحتی می توانید این کار را انجام دهید)

پس از ذخیره سازی پروژه JSmooth می توانید با استفاده از عملیات Compile که در منوی Project قرار دارد فایل exe را تولید کنید علاوه براین همچنین می توانید با استفاده از عملیات Run the exe که در همان منو قرار دارد برای تست فایل exe تولید شده را اجرا کنید.

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

use case slice در AO = Aspect Oriented

در توسعه نرم افزار با روش Aspect Oriented مفهومی با نام use case slice وجود دارد که به توسعه دهندگان کمک می کند که پیاده سازی use case ها را از یکدیگر جدا کنند و با این کار use case های درون سیستم با یکدیگر overlap نداشته باشند. بمنظور روشنتر شدن مطلب یک مثال عملی می آوریم:

در روش های (use case driven development) توسعه نرم افزار براساس use case مانند RUP فعالیت های زیر برای رسیدن به یک محصول خوب انجام می شود:
1. پیدا کردن use case ها و مشخص کردن جزئیات هر کدام از آنها.
2. طراحی هر کدام از use case.
3. طراحی و پیاده سازی هر کدام از کلاس ها.
4. آزمایش هر کدام از use case.

در شکل زیر دیاگرام use case سیستم فرضی رزرو هتل را مشاهده می کنید:


 

نکته: برای مشاهده عکس ها در سایز بزرکتر برروی آنها کلیک کنید.
در شکل بعدی مراحل و چگونگی رسیدن به کلاس های سیستم را با استفاده از روش های (use case driven development) توسعه نرم افزار براساس use case مشاهده می کنید:
 

 

نکته: برای مشاهده عکس ها در سایز بزرکتر برروی آنها کلیک کنید.
همانطور که در شکل بالا مشاهده می کنید پس از پایان مرحله سوم و پیاده سازی کلاس های سیستم ، مشاهده می کنیم که کلاس های سیستم overlap زیادی دارند بدین معنی که مثلا پیاده سازی یک use case مانند Reserve Room در چهار کلاس مختلف پخش شده است که این امر Modularity سیستم را پایین می آورد و اصلاح سیستم در آینده را دشوار می سازد.
اما در توسعه نرم افزار با روش Aspect Oriented پس از پیدا کردن use case های سیستم و Realize کردن آنها ، با استفاده از مفهوم use case slice و AOP = Aspect Oriented Programming ، جداسازی use case در زمان پیاده سازی بطور کامل رعایت می شود. برای روشنتر شدن مطلب به شکل زیر توجه کنید:

 

 

نکته: برای مشاهده عکس ها در سایز بزرکتر برروی آنها کلیک کنید.
همانطور که در شکل بالا مشاهده می کنید در واقع use case slice ها همان تکه های طراحی یک use case هستند که در کلاس های مختلف پخش شده بودند.
حال با استفاده از مفهوم aspect در AOP = Aspect Oriented Programming (مثال زیر با AspectJ است) که معادل با use case slice است ، هر کدام از use case slice های بدست آمده در مرحله قبل را پیاده سازی می کنیم.

 

 
نکته: برای مشاهده عکس ها در سایز بزرکتر برروی آنها کلیک کنید.
البته برای درک بهتر تکه کد بالا شما نیاز به اطلاعات ابتدایی در باره برنامه نویسی AspectJ دارید.
این یکی از مزیت های توسعه نرم افزار با استفاده از Aspect Oriented است که در حال حاضر بسیاری از شرکت های بزرگ برای تولید نرم افزارهای خود از آن استفاده می کنند (برای مثال : IBM برای تولید IBM WebSphere و Apple برای تولید Mac OS)
برای اطلاعات بیشتر کتاب Aspect-Oriented Software Development with Use Cases یک کتاب عالی در این زمینه می باشد که نویسندگان آن Ivar Jacobson, Pan-Wei Ng می باشند .


منبع:

شاد باشید.

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

مرتب سازی فیلد های varchar در MySQL که حاوی "گچ پژ" هستند


شاید تیتر این پست یه کم شفاف نباشد ولی الان براتون توضیح می دهم.
فرض کنید درون پایگاه داده MySQL شما یک table با یک فیلد از نوع varchar دارید و نام دانش آموزان را در آن ذخیره می کنید (charset جدول شما utf8 است). حال می خواهید یک پرسجو (query) داشته باشید که بر اساس این فیلد مرتب باشد (قاعدتا از order by استفاده می کنید) اما پس از اجرای پرسجو مشاهده می کنید که عملیات مرتب سازی اشتباه انجام می شود و متن هایی که با حروف "گچ پژ" شروع می شون اشتباه مرتب شده اند.
برای رفع این مشکل کافی است collation جدول مورد نظر و همچنین فیلد مورد نظر را به utf8_persian_ci تغییر دهید.

دانلود سرور MySQL (بدون محدودیت دانلود برای ایرانی ها)
دانلود ابزار گرافیکی MySQL (بدون محدودیت دانلود برای ایرانی ها)

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

آیا سان ( Sun Microsystems) به آخر خط رسیده است ؟


امروز خبری مبنی بر اینکه امکان خریده شرکت سان ( Sun Microsystems) توسط Oracle وجود دارد را در خبرگزاری reuters خوندم.
البته این خبر زیاد هم تعجب برانگیز نبود. Sun Microsystems پس از تغییراتی در ساختار مدیریتی و سازمانی و همچنین open source کردن بسیاری از محصولات نرم افزاری خود ، به یک شرکت رو به رشد تبدیل شد و قیمت سهام این شرکت تا حول و حوش 25 دلار (Market Capture ~ 20b) هم بالا آمد ولی از اواسط سال 2007 بود که Sun Microsystems دوباره رو به افول گذاشت و تقریبا در سال 2008 بود که قیمت شهام این شرکت یک رقمی شد (Market Capture ~4b) از آن هنگام بود که زمزمه هایی در مورد خریده شدن Sun Microsystems توسط شرکت های دیگر شروع شد. اولین شرکتی که شایعه هایی در این مورد برایش بوجود آمد Fujitsu بود که به دلیل overlap نداشتن (کمترین overlap) محصولاتی که این دو شرکت تولید می کنند به نظر بهترین گزینه می رسید ولی حتی این خبر بصورت رسمی هم اعلام نشد. اولین شرکتی که بصورت رسمی درخواستی برای خرید Sun Microsystems داد شرکت IBM بود که همه را متعجب کرد ، بدلیل اینکه محصولات تولیدی این دو شرکت overlap بسیار زیادی دارند (چه از لحاظ نرم افزاری و چه سخت افزاری) که در نهایت طرفین تا این لحظه که این مطلب را تایپ می کنم به توافقی دست نیافتند و تقریبا قضیه کنسل شده است.
اما خبر امروز (پیشنهاد Oracle به Sun Microsystems) نشان می دهد Sun Microsystems ارزش خریدن را دارد چون قیمت پیشنهادی Oracle از قیمت IBM بیشتر است و این بیانگر بوجود آمدن یک رقابت است.
به نظر من در این پیشنهاد هم overlap زیادی وجود دارد:
  • Oracle Database و MySQL
  • Oracle Linux و Solaris
  • JDeveloper و Netbeans
  • Weblogic و Glassfish
  • و...
البته overlap محصولات Oracle و Sun Microsystems بیشتر نرم افزاری است و تا حدوددی کمتر از overlap محصولات Sun Microsystems و IBM است.
Oracle در خرید شرکت های رقیب و ادغام موفقیت آمیز آنها شهره است و در حالت کلی بنظر می رسد از بین دو گزینه موجود بهتر از IBM است ولی آینده یکسری از محصولات محبوب دنیای نرم افزار مانند MySQL در پرده ای از ابهام قرار می گیرد.

به نظر من Sun Microsystems دیگر به آخر خط رسیده و تقریبا ثابت شده است که مدل تجاری این شرکت در عمل سود ده نیست اما برای فروش نباید عجله کند شرکت های دیگری هستند که Sun Microsystems بهتر می تواند با آنها ادغام شود برای مثال Google می تواند یک گزینه مناسب باشد.
محصولات و سرویس های Google کمترین overlap را با محصولات Sun Microsystems دارند و از همه مهمتر اینکه Google می تواند از بسیاری از محصولات Sun Microsystems در زیر ساخت های خود استفاده کند و همچنین خود را وارد قسمت های دیگر بازار نرم افزار و سخت افزار کند.

در نهایت فقط باید نشست و مشاهده کرد که یکی از غول های نرم افزاری و سخت افزاری قدیم (که قیمت سهامش در مواردی تا مرز 300 دلار هم رسید) توسط چه شرکتی بلعیده می شود و یا اینکه این فقط یک بازی تبلیغاتی است ! (قیمت سهام Sun Microsystems از زمان اعلام پیشنهادهای IBM و Oracle دو برابر شده است) .

شاد باشید.

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