During learn and experience

فرمول موفقیت در اهداف

این هفته در مجله موفقیت (شماره 167) یک مطلبی تحت عنوان "فرمول موفقیت چیست ؟" خوندم ، نکته های جالبی در این مطلب بود که فکر می کنم برای مدیریت هر پروژه ای مفید است. به نظر من اعضای یک تیم پروژه با رعایت تمامی موارد ذکر شده می توانند یک پروژه را با موفقیت شروع کرده و به اتمام برسانند.
اما این مراحل عبارتند از:
  1. تصمیم
  2. دانایی
  3. نقشه راه
  4. عمل
  5. پشتکار
  6. پایداری
  7. احتیاط
البته به نظر بنده بهتر است این مراحل را بصورت تکراری (iterative ) انجام دهیم ، بدین معنی که وقتی یک بار از مرحله اول به مرحله آخر رسیدیم مجددا از مرحله اول شروع کنیم و به بازبینی و اصلاح بپردازیم.

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

اندر مزایای طراحی



همانطور که می دانیم یک تحلیل خوب لازمه تولید یک نرم افزار خوب است. یک طراحی خوب نیز لازمه یک برنامه نویسی (پیاده سازی) خوب است. یک مهندس عمران بدلیل هزینه های بالا و پیچیدگی ساخت ساختمان هیچ وقت از ابتدا بیل و کلنگ در دست نمی گیرد و از ابتدا شروع به عملیات فیزیکی ساخت ساختمان نمی کند بلکه ابتدا یک طراحی خوب از ساختمانی که قرار است ساخته شود درست می کند (براساس نیازمندی ها) و سپس بر اساس آن طراحی ساختمان مورد نظر خود را می سازد.
طراحی نرم افزار نیز به همین صورت پیاده سازی نرم افزار توسط زبان های برنامه نویسی را ساده تر می سازد و به تولید کنندگان نرم افزار اجازه می دهد قبل از صرف هزینه برای برنامه نویسی و پیاده سازی نرم افزار به یک دید کلی از نرم افزاری که قرار است تولید شود برسند و بتوانند تخمینی از هزینه های تولید نرم افزار بزنند.
فرایند رسیدن به یک طراحی خوب فرایند دشواری است یکی از زمانبرترین فعالیت ها در این فرایند اصلاح طراحی (Refine Design) است. ما هیچ وقت از طراحی اولیه بصورت عملیاتی استفاده نمی کنیم بلکه چندین بار آن را تست می کنیم و فرایند اصلاح طراحی (Refine Design) را انجام می دهیم تا به یک طراحی پایدار که تمام نیازمندی های پیاده سازی را در خود دارد برسیم.
فرایند اصلاح طراحی (Refine Design) در حقیقت مانند چکش کاری یک ظرف فلزی است ، استاد کار آنقدر ظرف را چکش کاری می کند که ظرف شکل دلخواه را پیدا کند.

شاد باشید.

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

چرا گوگل Eclipse را بعنوان محیط توسعه برنامه های GWT پیشنهاد می کند ؟

پس از چندین سال که گوگل هیچ محصولی را بصورت رسمی برای توسعه برنامه های GWT معرفی نکرده بود ، بلاخره با تولید یک plugin برای Eclipse بصورت رسمی Eclipse را به توسعه دهندگان GWT پیشنهاد می کند.


از بین IDE های مشهور جاوا (Intellij , Eclipse , Netbeans) اولین IDE که بصورت رسمی از پروژه های GWT پشتیبانی کرد Intellij بود اما با این وجود باز هم گوگل محصول خود را تولید کرد.

نکته قابل توجه این است که گوگل استفاده از plugin خود را فقط پیشنهاد می کند و به همراه آن با قرار دادن یک Ant build فایل در کنار پروژه های تولید شده این امکان را به توسعه دهندگان می دهد که از هر کدام از IDE های دلخواه خود استفاده کنند.(توسعه برنامه های GWT با Netbeans)

اما از میان این IDE های محبوب جاوا چرا گوگل Eclipse را انتخاب کرد ؟
به نظر من دلیل این کار تفاوتی است که در ساختار و فلسفه وجودی پروژه متن باز Eclipse در برابر با Netbeans و Intellij وجود دارد می باشد. پروژه متن باز Eclipse یک پلتفرم تولید نرم افزارهای Desktop می باشد (نه یک محصول) به همین دلیل است که در حال حاضر تجاری ترین و محبوبترین IDE جاوا است. Eclipse از لحاظ جایگاه مانند Kernel Linux است ، یعنی توسط یک تیم minimal نیازمندی های یک محیط توسعه داده می شود سپس توزیع کنندگان برروی این بستر محصولات خود را ارئه می دهند. (Netbeans هم چنین رویه ای را دارد ولی تمرکز تیم توسعه بیشتر برروی محصول بودن است).
از طرف دیگر از زمانی که بنیاد Eclipse (در سال 2001) توسط IBM شکل گرفت ، این بنیاد بصورت مستقل اداره می شود و به همین دلیل از همان زمان شرکت های زیادی محصولات خود را بر پایه Eclipse تولید کرده اند.
گوگل نیز به دلیل فراگیر بودن Eclipse و مواردی که در بالا ذکر شد Eclipse را بعنوان IDE پیشنهادی خود برگزیده است.

بهرحال این اقدام گوگل یک قدم رو به جلو برای GWT و استفاده کنندگان آن به حساب می آید.

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

نکاتی ارزشمند درباره ساختن کامپوننت (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 دو برابر شده است) .

شاد باشید.

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

دانلود JDK بدون استفاده از ...

سلام
با استفاده از لینک زیر می توانید آخرین نسخه JDK را به راحتی دانلود کنید.

همین الان دانلود کنید (لینک بزودی فعال می شود)

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

دانلود Google Web Toolkit بدون استفاده از ...

سلام
با استفاده از لینک زیر می توانید آخرین نسخه GWT را به راحتی دانلود کنید.

همین الان دانلود کنید

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

دانلود NetBeans IDE بدون استفاده از ...

سلام
با استفاده از لینک زیر می توانید NetBeans IDE را به راحتی دانلود کنید.

همین الان دانلود کنید

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

درباره ماهیگیری و آب گل آلود

وقتی تعدادی ماهیگیر می خواهد از یک دریاچه ماهیگری کنند طبیعتا زمانی که آب ساکن است (گل آلود نیست) هرماهیگیر بسته به تبهر و مهارت خود در امر ماهیگیری تعدادی ماهی صید می کند و هر ماهی گیری که مهارت بالاتر و تجربه بیشتری داشته باشد تعداد ماهی بیشتری بدست خواهد آورد.

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

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

معماری Oracle ADF

Oracle ADF برپایه بهترین تجربه های عملی بنا شده است. نرم افزار هایی که شما با استفاده از Oracle ADF می سازید به یک تفکیک آشکار در business logic ، page navigation و رابط کاربری با پیروی از معماری model-view-controller دست پیدا می کنند. همانطور که در شکل زیر نمایش داده شده است در معماری MVC لایه بندی ها و تقسیم وظایف بصورت زیر است:

• لایه مدل بیان کننده مقادیر داده ای مرتبط با صفحه جاری است.
• لایه view شامل صفحات رابط کاربری است که بمنظور مشاهده و ویرایش داده های لایه مدل استفاده می شود.
• لایه controller ورودی های کاربر را پردازش کرده و ناوبری صفحات (page navigation) را تعیین می کند .
• لایه business service دسترسی به داده ها و کپسوله سازی منطق کاری سیستم را رسیدگی می کند.

شکل بعدی مکان مناسب هر کدام از ماژول های ADF درون معماری نرم افزار برنامه نشان می دهد. ماژول اصلی در این چهارچوب Oracle ADF Model است ، مکان اتصال (binding) اعلانی (declarative) داده ها که مشخصه JSR-227 را پیاده سازی می کند. این خصوصیت یک API برای دستیابی به فراداده (metadata) اعلانی (declarative) داده ها محیا می کند. لایه مدل Oracle ADF یک روش یکپارچه برای اتصال هر نوع رابط کاربری به هر نوع business service را بدون احتیاج به نوشتن کد در اختیار قرار می دهد. سایر ماژول ها که در این مجموعه قرار دارند عبارتند از:
• کامپوننت های Oracle ADF Business که ساختن business service ها را آسان می کند.
• Oracle ADF Faces که یک کتابخانه توانمند از کامپوننت های رابط کاربری با قابلیت AJAX برای ساخت برنامه های تحت وب با استفاده از JSF را ارائه می دهد.
• Oracle ADF Controller، صفحات JSF را با Oracle ADF Model یکپارچه می کند. Oracle ADF Controller مفاهیم استاندارد JSF controller را از طریق فراهم کردن قابلیت های بیشتر توسعه داده است ، قابلیت هایی نظیر جریان های کاری با قابلیت استفاده مجدد که نه تنها کنترل صفحات را بین یکدیگر انتقال می دهد بلکه بین سایر فعالیت هانیز این کار را انجام می دهد ، برای مثال فراخوانی متد یا سایر جریان های کاری .

نکته: علاوه بر ADF Faces ، همچنین از استفاده از تکنولوژی های Swing ، JSP و JSF استاندارد در لایه view پشتیبانی می کند.

شاد باشید.


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

معرفی Oracle ADF

چهارچوب (Framework) توسعه برنامه های کاربردی اراکل (Oracle ADF) یک چهارچوب نرم افزار یکپارچه است که برپایه استانداردهای Java EE و تکنولوژی های متن باز بنا شده است. این چهارچوب (Framework) برای ساده سازی و سرعت بخشیدن به پیاده سازی نرم افزارهای مبتنی بر معماری سرویس گرا می باشد. اگر شما راه حل های سازمانی توسعه می دهید که از طریق وب ، شبکه های بی سیم ، دسکتاپ ، یا سرویس های وب داده ها را نمایش می دهد ،جستجو ، ایجاد ، ویرایش و اعتبارسنجی می کند ، Oracle ADF کارهای شما را ساده تر می کند. استفاده توامان از Oracle JDeveloper 11g و Oracle ADF محیطی را به شما می دهد که چرخه توسعه کامل از مرحله طراحی تا استقرار ، را پوشش می دهد. علاوه بر این امکاناتی مانند اتصال (binding) داده با استفاده از drag-and-drop ، طراحی visual رابط کاربری و قابلیت های توسعه تیمی بصورت توکار در اختیار شما قرار می دهد.


ADF = Application Development Framework

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

GWT 1.6 و دوستان!

گوگل طی یک اقدام ناگهانی دیروزGWT نسخه 1.6 را release نهایی کرد. دلیل این کار پشتیبانی سرویس Google App Engine از جاوا می باشد (تا قبل از این Google App Engine فقط از Python پشتیبانی می کرد) ، گوگل با این کار به توسعه دهندگان GWT این امکان را داد که برنامه های GWT خود را (با ساختار جدید در نسخه 1.6) و با استفاده از پلاگ این Google Plugin for Eclipse ، به راحتی برروی سرویس Google App Engine قرار دهند!
سرویس Google App Engine با پشتیبانی از جاوا بطور قطع از محبوبیت بیشتری برخوردار خواهد شد و درامد بیشتری را برای گوگل به همراه خواهد داشت ، Google Plugin for Eclipse نیز باعث راحتی استفاده از GWT (و...)می شود.

GWT (Google Web Toolkit): ابزار توسعه برنامه های وب بر پایه AJAX با استفاده از زبان برنامه نویسی جاوا.
Google App Engine: سرویس محاسبات ابری (cloud computing) گوگل که به توسعه دهندگان این امکان را می دهد برنامه های تحت وب خود رابا نام دومین (domain) دلخواه خود برروی زیرساخت های گوگل مستقر کنند (به عبارت دیگراز زیرساخت های گوگل بعنوان host استفاده کنند).

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

کاربرد اصلی GWT

تا به حال مطالب زیادی در باره معماری ، ساختار و مزایای GWT پست کرده ام ، امروز قصد دارم یک نکته در مورد کاربرد GWT ذکر کنم که هم می تواند جزو معایب این Framework و هم مزایای آن باشد.
موتورهای جستجو (Google ، Yahoo و...) نمی توانند برنامه های وب تولید شده توسط GWT را برای عملیات جستجو ایندکس گذاری کنند.
برای توضیح این امر ذکر یک نکته ضروری است که GWT یک Framework برای تولید برنامه های تحت وب می باشد نه برای تولید وب سایت.
برنامه های تولید شده توسط GWT با جاوااسکریپت و ساختار DOM مرورگر کار می کنند در حالی که موتورهای جستجو قابلیت ایندکس کردن برنامه های جاوا اسکریپت را ندارند.
از طرف دیگرهمانطور که ما از موتورهای جستجو انتظار نداریم برنامه های وب Flash یا Applet را ایندکس کنند نباید انتظار داشته باشیم بتوانند برنامه های GWT که ساختار اسکریپتی دارند را برای جستجو ایندکس کنند.

نتیجه: تمرکز GWT برای تولید برنامه های تحت وب (مانند: Gmail ، Yahoo Mail ، Google Reader و...) است و به عبارت دیگر GWT یک Framework خاص منظور برای تولید برنامه های تحت وب است نه وب سایت. که این را می توان ضعف GWT نامید اگر بگوییم چرا این Framework همه منظوره نیست و یا می توان قدرت آن نامید اگر به این نکته توجه کنیم که در یک زمینه خاص (تولید برنامه های Full Ajax تحت وب) تمرکز کرده است.

شاد باشید.

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

مشکل دنیا

یکی از مشکلات اساسی دنیا این است که انسان های نادان فکر می کنند بهتربن راه را می روند و برروی آن پافشاری و فکر می کنند راه بهتری وجود ندارد ولی انسانهای دانا راه پیش روی خویش را به چالش می کشند و در صورت پی بردن به اشتباه خویش با شجاعت آن را می پذیرند و تغییر مسیر می دهدند.

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

UML چیست؟

یکی از ابزارهای مهم در مهندسی نرم افزار در دنیا UML می باشد که در شرکت های نرم افزاری و محافل علمی استفاده زیادی دارد. اما متاسفانه در کشور ما استفاده وسیعی از این ابزار قدرتمند نمی شود.
UML یک زبان مدلسازی استاندارد و همه منظوره گرافیکی برای تولید یک مدل انتزاعی از یک سیستم است. 
UML روشی استاندارد برای تهیه Blueprint (نقشه پیش ساخته-طرح اولیه قبل از پیاده سازی) سیستم است.
UML یک روش باز (open) برای مشخص کردن ، بصری کردن (visualise) ، ساختن و مستند کردن محصولات (artifact) یک نرم افزار شئ گرای دردست ساخت است.

مزایای استفاده از UML:
- یک زبان قدرتمند است و تمامی عناصر این زبان معانی قدرتمند و کاملی دارند.
- مختصر و موجز است بدین معنی که این زبان فقط شامل اشکال ساده گرافیکی قابل فهم است.
- جامع است یعنی تمامی جنبه های مهم یک سیستم را شرح می دهد.
- مقیاس پذیر (scalable) است یعنی برای پروژه ها در تمامی سطوح (بزرگ ، متوسط و کوچک) قابل استفاده است.
- بر پایه برترین تجربه های انجمن های شئ گرا در 20 سال گذشته بنا شده است.
- استاندارد است.

البته به نظر می رسد در کشور ما ابتدا باید در مورد لزوم استفاده از ابزارهای مدلسازی برای توسعه یک سیستم نرم افزاری صحبت کرد. استفاده از ابزارهای مدلسازی باعث کاهش هزینه های تولید ، بالا رفتن کیفیت نرم افزار تولید شده ، کاهش هزینه های نگهداری و پشتیبانی از نرم افزار و... می شود.
یکی از مزیت های مهم استفاده از UML برای مدلسازی سیستم های نرم افزاری امکان تولید کد برنامه با استفاده از مدل تولید شده توسط UML است.

در حال حاضر آخرین نسخه UML ، نسخه 2.2 می باشد.

شاد باشید.

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

رابطه حیوانات و سال های خورشیدی

امسال سال گاو است.
در لینک زیر به راحتی می توانید معادل حیوان سال خورشیدی مورد نظر خود را بدست آورید:

http://weblog.mjm3d.com/tag/%D8%B3%D8%A7%D9%84-%DA%AF%D8%A7%D9%88/
۰۴ فروردين ۸۸ ، ۰۳:۳۵ ۰ نظر موافقین ۰ مخالفین ۰
سعید زرین فام