Visual Studio 2010 و کارت گرافیکی NVIDIA OPTIMUS

20 04 2011

احتمالا برای برخی از دوستان برنامه نویس که روی سیستم هاشون Visual Studio 2010 نصب هستش و از کارت گرافیکی NVidia OPTIMUS بهره میبرند، پس از Update کردن درایور کارت گرافیکی، Visual Studio هنگام اجرا Crash کرده به صورتی که با بردن ماوس بر روی اکثر قسمت ها و منوی های نرم افزار نمیشه بطور عادی از آنها استفاده کرده حتی زمانی که پروژه ای باز می کنید قلم ها هنگام Scroll دادن کاملا به هم ریخته میشوند. این یکی از مشکلاتی بود که من رو هم چندین وقت درگیر خودش کرد، تا در نهایت موفق به پیدا کردن راهی برای حل این مشکل شدم.

تصویر بالا نمایی از نرم افزار رو نشون میده که هنگام اجرا شدن Freeze شده

راه حل : شما می توانید برای حل این مشکل از منوی Tools گزینه ی Option را انتخاب کرده سپس از برگه Environment روی General رفته و در قسمت Visual Experience تیک Use hardware graphics acceleration if available رو بردارید. پس از انجام این کار خواهید دید که محیط Visual Studio به حالت عادی قبلی برخواهد گشت.





جستجو در جعبه ابزار در Visual Studio 2010

12 06 2010

*- مقدمه :

سلام، این رو مینویسم برای اون دسته از دوستان برنامه نویسی که هنوز از این امکان خبر ندارند.

چند روز پیش بود که داشتیم با دوستانی که قبلا دلفی کار بودن بحث می کردیم که اینبار هم مایکروسافت درنسخه ی جدید ویژوال استادیو، امکان جستجو در Toolbox  و Properties رو نگذاشت. به یکی از همکارا گفتم که به لج مایکروسافتم که شده خودم یک افزونه برای جستجوی جعبه ابزار می نویسم (حالا بماند که اصلا ننوشتم). برخی از کارهای مایکروسافت واقعا عجیبه حداقلش اینه که برای من عجیب به نظر میاد، نمونه ی بارزش اینه که درپروژه های  WPF امکان جستجو در پنجره ی  Properties وجود داره ولی در دیگر پروژه ها از این امکان خبری نیست. نمی دونم تیم های اینا هر کدوم برای خودشون کار می کنند ؟!! شما هم احتمالا با بنده هم نظر هستید که اینگونه امکانات به زبان یا پلتفورم بستگی نداره که بگیم خوب نمیشه که اینو برای پروژه ی WinForm هم گذاشت. همانطور که می دونید ویژوال استادیو یک محیط مجتمع هستش، امکاناتی همانند مثالی که عرض کردم باید در سایر پروژه هایی که با این محیط توسعه ایجاد میشه یکسان باشه. ولی نمی دونم چرا به این نکات ریز (توسط غول نرم افزاری مانند مایکروسافت) توجهی نمیشه، خودش برای من و شاید برای خیلی ها سوال باشه. بگذریم زیادی مقدمه چینی کردم بریم سر اصل مطلب.

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

*-جستجو در جعبه ابزار :

با رفتن برروی جعبه ابزار و فعال کردن آن، کافیست نام کنترل مورد نظر را تایپ کرده و Enter را بزنید تا در فرم مورد نظر قرار داده شود. برای یافتن سایر کنترل های هم نام می توانید با زدن Tab در بین آنها حرکت کنید.

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

منبع

پ.ن: حتما comment هایی که در منبع ذکر شده است را بخوانید.





آشنایی با افزونه های Regex Editor و DPack

8 06 2010

* – افزونه Regex Editor :

همانطور که میدونید کار با Regular Expression به دلیل Syntax ی که داره کار آسونی نیست. تا به حال ابزار های زیادی برای کار با Regex تولید شده که هر کدام ویژگی های خاص خودشان را دارند. این افزونه امکانات جالبی برای برنامه نویسان در حین کد نویسی ارائه میده که عباراتند از :

1- کد نویسی :

در کد نویسی زمانی که شما شیء ای از کلاس Regex ایجاد می کنید، این افزونه به صورت اتوماتیک فرم مربوط به Regex Editor را نشان میده تا برنامه نویس بتونه با استفاده از امکانات موجود الگوی مورد نظر رو طراحی کرده، تست کنه و در صورت گرفتن نتیجه مطلوب این الگوی رو در کد با تایید پنجره ویرایش استفاده کنه. به نظر بنده این یکی از بهترین ویژگی های این ابزار هستش چون برنامه نویس رو درگیر نرم افزار های و ابزار های دیگری نمیکنه.

ویرایشگر افزونه Regex Editor

ویرایشگر افزونه Regex Editor

2- امکان تست عبارت :

فرض کنید می خواهید از صحت عملکرد Pattern نوشته شده مطمئن شوید، این افزونه امکان تست عبارت وارد شده در فیلد Matches را به شما می دهد و نتیجه را در فیلد Result اگر نتیجه مطلوب باشد می توانید با تایید Pattern طراحی شده را در کد مورد استفاده قرار دهید. در این صورت شما نیاز به تست Pattern توسط اجرای کد ندارید.

3- امکان ذخیره سازی الگوها و استفاده آنها در آینده :

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

برای دانلود این افزونه می توانید از آیتم Extension Manager منوی ابزار محیط ویژوال استودیو استفاده کنید.

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

*- افزونه DPack :

این افزونه یکی از محبوب ترین ابزار های ارائه شده برای محیط توسعه ویژوال استودیو می باشد. و شامل امکاناتی برای برنامه نویسان در راستای مدیریت پروژه، نگهداری و دسترسی آسان به Object های موجود در پروژه می باشد. از ویژگی های اصلی این نرم افزار می توان به موارد ذیل اشاره کرد:

فرم CodeBrowser

فرم CodeBrowser

1- Code Browser :

شاید برای شما هم پیش آمده باشه که ای کاش ویژوال استودیو امکانی داشت که فقط دنبال چیزی که من می خوام بگرده و پیدا کنه. خوب شما می گید که ویژوال استودیو Seach داره با اون میشه آیتم مورد نظر رو مورد جستجو قرار داد. خوب این اون چیزی نیست که من دنبالش هستم، من می خوام دنبال کلاس، متد، فیلد و … بگردم که تو Solution تعریف شده، نه جایی که مورد استفاده قرار گرفته، Search ی که ویژوال استودیو ارائه میده واقعا وقت گیره تا تعریف متد یا ایتم مورد نظر رو پیدا کنه، من می خوام امکانی باشه که با تایپ نام خود کلاس که با Enter کردن بر روی آن من رو به کلاس مورد جستجو ببره. در اولین نگاه میگید که ای بابا خوب Solution Explorer را برای همین گذاشتن ولی بهتر می دونید که زمانی که بر روی یک پروژه ی واقعا بزرگ کار میکنید، حداقل برای من سخت که دائما توی فولدر های Solution دنبال آیتم مورد نظر بگردم.

این افزونه واقعا کار رو با کلید های میانبری که داره راحت کرده و به راحتی میشه تعریف آیتم مورد نظر رو پیدا کرد. از دیگر امکاناتی که میشه اسم برد جستجو بر روی فایل هایی هست که در Solution وجود دارند.

2- آمار گیری از پروژه :

امکان دیگر اینه که می تونید به راحتی با استفاده از Solution Statistics آمار کلی از تعداد پروژه های موجود در Solution، تعداد فایل های پروژه، تعداد سطر کدهای نوشته شده، تعداد کامنت های موجود و … را ببینید.

3- پشتیبان گیری :

یکی دیگر از ویژگی های این افزونه فراهم کردن امکان پشتیبان گیری از Solution با یک کلیک است. به راحتی با انتخاب Solution Backup می توانید از پروژه ی مورد نظر در مسیر پیش فرض (مسیر Solution)که قابل تغییر در فرمت های مختلف است پشتیبان تهیه فرمایید.

فرم SolutionBrowser

فرم SolutionBrowser

4- Framework Browser :

امکان دیگری که می توان نام برد Framework Browser می باشد. شما با تایپ نام Object مورد نظر و انتخاب آن در صورت اینکه Reference آن در پروژه موجود نباشد ابتدا آن را اضافه کرده و در Class فعال Namespace مناسب آنرا Include می کند. در صورت استفاده از این افزونه دیگر نیازی نیست به استفاده Object Explorer و Add Reference ویژوال استادیو نمی باشد.

برای دانلود این افزونه می توانید از آیتم Extension Manager منوی ابزار محیط ویژوال استودیو استفاده کنید.

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





Crystal Report و MSDN در ویژوال استادیو 2010

7 06 2010

همانطور که شاهدید در Visual Studio 2010 اثری از Crystal Report Basic و Document Explorer وجود ندارد. بنده ابتدا در نصب متوجه این موضوع نشدم، چون دنبال ویژگی های جدید می گشتم و انتظار اینرا نداشتم که از ویژگی های موجود تا آن زمان چیزی کسر شود !!!!.  تا اینکه مجبور شدم در پروژه ای از Crystal Report استفاده کنم.

زمانی که شما می خواهید فایل CrystalReport را به پروژه بیفزایید با چنین منظره ای مواجه خواهید شد :

راهنمای نصب و دانلود Crystal Report

Crystal Report دیگر بر روی Visual Studio نخواهد بود و باید مستقیما از سایت Business Object دانلود شود.

مورد بعدی این است که دیگر MSDN بر روی Document Explorer سرو نخواهد شد در عوض بر روی هر مرورگری قابل مشاهده است. ظاهرا مایکروسافت شدیدا علاقمند این موضوع است که دیگران برای محصولات وی Extension یا نرم افزار تولید نمایند البته اگرهدف این است خیلی پیش از اینها به خواسته ی خود رسیده است. پس سوال اینجاست که چرا ؟!!! بعضی وقتها که فکر میکنم واقعا سر از کار سیاست های مایکروسافت در نمیارم. چرا ؟

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

برای دانلود مستقیم Crystal Report برای Visual Studio 2010 اینجا رو کلیک کنید.

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

دوست و همکار عزیزم سالار طریقه نصب و استفاده از این ابزار را در این پست توضیح کامل داده است.

موفق باشید.





نرم افزار مترجم با استفاده از Google Translator

7 06 2010

دوستانی که قبلا با وبلاگ بنده آشنا بودن می دونند که معمولا هر پروژه ای که در اینجا به صورت خلاصه آموزش داده میشه حتما یک داستانی داره که چرا این پروژه خواه با ارزش خواه بی ارزش کار شده است. بنده در این مجموعه از مطالب آموزشی اصلا بر روی ارزش واقعی پروژه بحثی نکردم و نخواهم کرد چون اعتقاد دارم مطلب آموزشی ارزش اینگونه مباحث را ندارد.بگذریم و بریم سر اصل داستان و پروژه چند روز پیش دوستی تقاضا کرد که حدودا 50 صفحه مطلب فارسی را برایش ترجمه کنم، بنده هم با کمال خونسردی ابتدا جواب رد بر سینه اش زدم و گفتم وقت برای ترجمه ندارم. این دوست عزیز از جایی شنیده بود که Google Translator می تواند از عهده ی این کار بر آید از این رو گفت که از آن استفاده کنم بنده هم گوش زد های مربوطه را کردم که این ترجمه این سرویس آن چیزی نخواهد بود که تو انتظار داری. خلاصه توافق کردیم که مسئولیتش گردن خودش باشد.

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

از این رو شروع به نوشتن این برنامه کردم که توضیحات مفصل آن در ادامه خواهم داد.

من در این نرم افزار از یک کلاس Abstract به نام Translator استفاده کردم چرا Abstract چون اگه در آینده قرار باشه سرویس های دیگری غیر از Google Translator رو هم پشتیبانی باید اعضای این کلاس Override بشن. کلاسی که من برای ترجمه ی متون ازش استفاده می کنم GoogleTranslator هستش که همونطور که گفتم باید از کلاس Translator ارث ببره.

خوب در بالا هم گفتم که این نرم افزار ابتدا فایل رو باز میکنه و سپس فایل متنی رو به تکه های کوچک تقسیم می کنه و سپس هر chunk رو برای ترجمه کردن به کلاس GoogleTranslator میده .

نکته : چرا فایل رو به تکه تکه می کنیم، ببینید فرمت URL ای که من ازش استفاده میکنم با اون چیزی که شما در Browser مشاهده می کنید فوق می کنه. شما اگه از فرمتی http://translate.google.com/#en|fa|book استفاده کنید، این URL ای هستش که این سرویس از طریق Callback هنگام ترجمه تولید میکنه، اگه در این حالت شما از Firebug استفاده کنید تا ID تگ Result ی که متن ترجمه شده در آن قرار دارد را ببینید به راحتی قابل تشخیص خواهد بود، حال چنانچه این آدرس را از طریق HttpRequest بفرستید خواهید دید که Response برگشتی اصلا شامل چنین تگی نخواهد بود. و اما جواب که چرا فایل رو به خوب همونطور که می دونید در دات نت آدرس از لحاظ تعداد کاراکتر محدودیت داره و اگه بیشتر از اون محدوده ارسال بشه در Response پیغام خطا میده بنابراین چاره ای نیست جز اینکه فایل رو به chunk های کوچکتر تقسیم کنیم.

* – نحوه خواندن و ذخیره کردن در  Queue با استفاده از تابع ReadFile :

public Queue ReadFile()
{
StreamReader fileReader =
new StreamReader(_inputFile, Encoding.UTF8);
if (BeforeReadFile != null)
BeforeReadFile(this, null);
string val;
char[] buffer = new char[128];
lock (this)
{
while (fileReader.Peek() >= 0)
{
fileReader.Read(buffer, 0, 128);
if (char.IsWhiteSpace(buffer[buffer.Length - 1]))
{
val = new String(buffer);
_linesQueue.Enqueue(val);
buffer = new char[128];
}
else
{
for (int i = buffer.Length; i >= 0; i--)
{
if (char.IsWhiteSpace(buffer[i - 1]))
{
val = new String(buffer).Substring(0, i);
_linesQueue.Enqueue(val);
buffer = new char[128];
break;
}
}
}
}
}
if (AfterReadFile != null)
AfterReadFile(this, null);
return _linesQueue;
}

این تابعیست که وضیفه خواندن فایل رو بر عهده داره، چند نکته وجود داره که باید رعایت بشن. بافری که من برای خواندن از فایل اختصاص دادم 128 کاراکتر است، این بدین معنی هستش که زمان خواندن از فایل 128 کاراکتر باید از فایل خونده بشه. خوب همونطور که میبینید بنده برای اینکه مطمئن بشم که آخرین کاراکتری که در بافر قرار داده شده وسط یک کلمه نیست بنده اون رو با متد IsWhiteSpace بررسی کردم. خوب اگر کاراکتر موجود در خانه آخر بافر کاراکتر فضای خالی باشه مشکلی نیست می فهمیم که مشکلی وجود نداره و می تونیم که Chunk Queue اضافه کنیم. حال اگر کاراکتری غیر از فضای خالی بود چه ؟ باید بافر رو به صورت نزولی از آخر به اول بررسی کنید اگر کاراکتر فضای خالی دیدید آنرا به Queue اضافه کنید.

نکته : در انتخاب اندازه بافر دقت کنید چون این عمل تاثیر مستقیم بر روی طول URL داره که محدودیت خاص خودش رو داره.

*- پاس کردن و ترجمه Chunk ها با استفاده از کلاس GoogleTranslator :

قدم بعدی این هستش که تکه های متنی که ازفایل خونده شده رو با استفاده از متد Translate کلاس Translator ترجمه کنیم. همانطور که در تابع ReadFile دیدید مقدار بازگشتی این تابع یک Queue هستش. بنابراین باید هر آیتم رو از این صف به تابع Translate پاس کنیم.


public override string TranslateText(string content)
{
string url = CreateWebURL(content);
HttpWebRequest webRequest = (HttpWebRequest)HttpWebRequest.Create(url);
webRequest.KeepAlive = false;
webRequest.AutomaticDecompression =
DecompressionMethods.GZip | DecompressionMethods.Deflate;
HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
// Get response stream and download all raw html
Stream resStream = webResponse.GetResponseStream();
StreamReader streamReader = new StreamReader(resStream, Encoding.UTF8);
// ---------------------------------------------
string html = streamReader.ReadToEnd();
return ParseContent(html);
}

خوب عملکرد این تابع خیلی ساده است، در این حد که متن را که به عنوان ورودی به تابع پاس شده است را با استفاده از HttpWebRequest و HttpWebResponse ترجمه کرده و با استفاده از تابع GetResponseStream محتویات را که شامل Html می باشد را خوانده و پس از Parse  کردن آن مقدار متن ترجمه شده را بازگرداند.

*- تابع ParseContent :

public override string ParseContent(string html)
{
return HtmlParser.ParseHtml(html);
}

*- تابع  ParseContent از کلاس HtmlParser :


internal static string ParseHtml(string html)
{
int identifierIndex = -1;
int firstSpanIndex = -1;
int spanCloseIndex = -1;
int spanCloseTagIndex = -1;
// Remove all html and text from start to index of result box
identifierIndex = html.IndexOf(ResultBoxIdentifier);
html = html.Remove(0, identifierIndex);
// ----------------------------------------------------------
// Delete all text to index of
firstSpanIndex = html.IndexOf(FirstSpanIdentifier);
html = html.Remove(0, firstSpanIndex);
// -------------------------------------
// -------------------------------------
spanCloseIndex = html.IndexOf(SpanCloseIdentifier);
html = html.Remove(0, spanCloseIndex + 1);
// -------------------------------------
// Delete all remain html data from end of the translated texts
spanCloseTagIndex = html.IndexOf(SpanCloseTagIdentifier);
html = html.Remove(spanCloseTagIndex, html.Length - spanCloseTagIndex);
// ------------------------------------------------------------
return html.Replace("'", "'").Replace("
", "\n");
}

وظیفه ی این دو تابع بالا اینه که تا زمان رسیدن به تگ span با id=»result_box» و بعد از متن ترجمه شده بقیه Html ای که از طریق Response دریافت شده رو حذف کرده و در نهابت متن ترجمه شده را برگردانند.

برای دانلود سورس اینجا رو کلیک کنید.

موفق باشید





دوباره می نویسیم …

7 06 2010

سلام خدمت تمامی دوستان

نمی خوام در مورد اینکه چرا نمی نوشتم بگم و سرتون رو درد بیارم. چند نکته هست که باید خدمت دوستان عزیزی که در طی این یک سال و اندی لطفا کرده و Comment گذاشته بودن عرض کنم امروز سعی کردم تا اونجا که زمان برام اجازه میده همه ی آنها رو جواب بدم. مواردی هم که به بحث ربطی نداشت رو هم برای دوستان ایمیل کردم. اگر هنوز هستند کسانی که مطالب وبلاگ رو دنبال می کنند می توانند جواب مربوط به سوال هاشون رو در پست مناسب پیدا کنند.

انشاءالله از این به بعد سعی خواهم کرد بیشتر در خدمت شما ها باشم.





Delphi و سیر نزولی آن در مقابل محصولات Microsoft

17 02 2009

دلفی، زبانی که روز و روزگاری دلبر اکثر برنامه نویسان با آن IDE و Syntax جذاب خود بود، زبانی که امروزه دیگر نمی تواند مثل سابق خودنمایی کند. زبانی که انعطاف را از vb و قدرت را از زبانهایی همانند c, c++ به ارث برده بود. پدر دلفی زبان پاسکال نیز زمانی به نوبه خود قول و رقیبی سرسخت در مقابل زبان های دیگر محسوب می شد. سیر نزولی دلفی از اواخر سال 2003 برابر با ارائه ی Delphi و رویکرد آن به سوی پلتفورم .Net آغاز شد. به اعتقاد بنده و سایر همکاران و صاحب نظران، شرکت Borland بزرگترین اشتباه قرن خویش را در نیل به سوی .net  انجام داد. زیرا در این پلتفورم هیچگاه نتوانست رقیب Microsoft که پیشرو و علم دار این تکنولوژی بوده و هست شود و هرگز نتوانست اشتباهات خود را جبران کند، که این اشتباهات هزینه گزافی برای Borland به همراه داشت و رفته رفته با قدرت یابی Microsoft و جذب برنامه نویسان باعث از دست دادن مشتریان سابق خود شد. embarcadero

در سال 2007 شرکتی به نام Emabrcadero توانست Code Gear را که زیر مجموعه ای از Borland به حساب می آمد را خریدار کند. این امر شعله ای نه چندان فروزان ولی امید بخشی برای دوستداران دلفی بود، ولی چه سود که هنوز با گذشت چند سال نتوانسته جایگاه همیشگی خود را در بین هوادارانش پیدا کند. Borland نیز با تغییر سیاست های کاری کلا قید Code Gear را زد. کجاست آن بازار کار داغ برنامه نویسان Delphi؟ کجایند آن منابع غنی ؟ کجایند ناشرانی که برای انتشار یک جلد در مورد این محصولات این شرکت (Borland) دست از پا نمی شناختند، چون بازار داغی در انتظار انتشاراتشان بود.

چند روز پیش بر حسب نیاز تیم که با همفکری تصمیم به پیاده سازی پروژه ای به این زبان شد، Code Gear 2009 را نصب کردم، و تکه کد هایی نوشتم احساس خوبی بود. یادی از گذشته و Syntax قدیمی Delphi. هنوز هم رغبتی به صدا زدن آن با نام Code Gear ندارم، آن همان زبان شیرین من یعنی Borland Delphi است.





چند نکته در یادگیری Design Pattern ها

17 02 2009

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

  • آهسته برانید!! نکات زیادی برای یادگیری-ذهنی کوچک برای بخاطر سپردن:
    مطالب را فقط نخوانید، صبر کنید، اندیشه کنید، یادبگیرید. زمانی که سوالی برایتان مطرح می شود، سعی در گریز از آن سوال نکنید، فزض کنید کسی واقعا از شما این سوال را پرسیده است. اگر جواب سوال در انباشته معلوماتتان باشد به آنها رجوع کرده و جواب مناسب را همراه با دلیل ذکر کنید اگر خیر عجله ای در رسیدن به جواب نداشته باشید، سوال را در دفترچه یادداشتی یادداشت کرده تا در آینده با اندوختن دانش در زمینه طراحی بتوانید جوابی برای آن پیدا کنید. این بهترین راه یادگیری در اینگونه از مسائل می باشد که شما به مغزتان فشار آورده تا آنرا به خاطر بسپارید.
Boost Brain

Boosted Brain

  • تمرین کرده یادداشت برداری کنید:
    هیچوقت سعی در کپی برداری از مثالهای آماده این که در منابع و سایتهای مرتبط آورده شده اند نکنید، در اینصورت شما توانایی فکر کردن و یافتن راه حل مسائل را از مغزتان خواهید گرفت. مدادی در دست گرفته و مسائل مرتبط را خود انجام دهید. از انجام عملی که خود قصد یادگیری آنرا دارید، توسط دیگران خودداری نمایید.
  • قبل از خواب مواردی را که یادگرفته اید را مرور کنید:
    بخش اصلی آموزش و یادگیری زمانی شروع خواهد شد که شما منبع یا کتاب را کنار گذاشته اید. مغز شما نیاز دارد تا زمانی را برای انجام پردازش های گوناگون بر روی آموخته ها به خود اختصاص دهد. اگر در بین این مدتی که مغز شما مشغول می باشد، سعی در یادگیری مطلبی جدید نماییدف چیزهایی را که آموخته اید را نیز فراموش خواهید کرد. در نتیجه زمانی را پس از یادگیری اختصاص دهید تا مغز موارد آموخته شده را بازبینی کرده و کاملا ثبت نماید. بهترین زمان قبل از خواب است.
  • آموخته های خود را با صدای بلند تکرار کنید- یا با صدای بلند با خودتان در مورد موارد آموخته شده بحث کنید:
    بحث دیگری که باعث تقویت حافظه در یادگیری مسائل پیچیده ای همانند Design Pattern، صحبت کردن با خود یا اموزش آن مطلب به شخص مجازی یا حقیقی است. سعی نکنید آموخته های خود را برای خود نگه داشته و انباشته کنید زیرا در شرایطی که استفاده نشوند از یاد خواهند رفت، مغز خود را به اشتراک بگذارید و آموخته ها را به نفع خود آموزش دهید.
  • به نیاز های مغز گوش کرده و جوابی مناسب به آن بدهید:
    نکته ی مهمی که در طراحی باید به آن توجه کرد این است که اطلاعات خام مغز شما در مورد چیزی که می خواهید به خاطر آورید کاملا بارگذاری شده است یا خیر؟ اگر جواب منفی است لحظه ای درنگ نکرده به گذشته برگشته موضوع را مجددا بررسی، ابهامات را مرتفع و از یادگیری مجدد ان کاملا مطمئن شوید. در غیر اینصورت نکته ی کوری در این بین خواهد ماند که در آینده باعث بروز مشکل خواهد شد.
  • مسئله را کاملا حس کنید:
    قبل از اینکه تمرینی انجام دهید یا بخواهید Solution ی برای حل یک مسئله اراده دهید مطمئن شوید که کاملا با موضوع آشنا شده و آنرا درک کرده اید، سپس راه حل مناسب را انتخاب کرده و با توجه به موارد آموخته شده حرکت نمایید. هیچوقت سعی در ارائه نظر و پیشنهادی در مورد مسائلی که نسبت به آنها دانشی کسب ننموده اید نکنید چرا که ممکن است این استدلال امروزی شما آموخته های شما را در آینده مرتبط با این بحث تحت تاثیر قرار داده و نتیجه ای نامطلوبی حاصل گردد.
  • مطلب آموخته شده را عملی نمایید:
    سعی کنید چیزی را که می آموزید در یک پروژه و طراحی جدید به کار برید و یا در پروژه های قبلی با رعایت مراحل اعمال نمایید اینکار باعث خواهد شد که شما تجربه ی لازمه را در اعمال مطالب آموخته شده در پروژه های واقعی بدست بیاورید.

مطالب مرتبط:
آشنایی با Design Pattern

توصیه می کنم:
CodeBetter
Head First Design Pattern

منابع :





مدیر غیرفنی = شکست پروژه

16 02 2009

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

Noob Manager

Bad Manager

اینگونه از اشخاص به روحیات افراد تیم اهمیت چندانی نداده و سعی در تحمیل نظرات بر تیم طراحی و پیاده سازی را دارند. تهدید های مکرر در راستای تحویل پروژه هایی که شخص برنامه نویس رغبتی برای کد نویسی آن ندارد، فشار های گوناگون که باعث اعمال تغییراتی به دور از اصول می شوند  و … . این مدیران به علت نداشتن دانش فنی در زمینه فعالیت خود به دنبال راههای گوناگونی جهت مقابله با این شکستهای پی در پی میگردند. در این بین نیز افراد سودجو با دادن نظرات و اطلاعات نادرست به مدیران سعی در استفاده از منافع و منابع شرکت در راستای اهداف خود می کنند (حال اگر مدیر در اینگونه از موارد زیرکتر از فرد سودجو باشد چه خواهد شد ؟ جواب ساده است- مدیر: مسئول تمامی این شکست ها تویی و باید جبران خسارت کنی. من به راهنمایی تو گوش کردم تو گفتی که چنین کنم. فرد سودجو: نه اینطور نیست من هدف دیگری داشتم فلان نامه را بخوان…. و این داستان سالیان سال ادامه خواهد داشت). افرادی که اطلاعات درستی در زمینه نرم افزار و بازار هدف دارند، با دیدن اینگونه مسائل ناخواسته خود را کنار می کشند و چاره ای در نظاره شکست پروژه ها نخواهند داشت (چون ممکن است بلایی که بر سر فرد سودجو آمد بر سر این فرد نیز فرود آید). مدیرانی که نحوه بهره برداری از منابع  انسانی را آموزش ندیده و به پروژه های حساسی چون پروژه های نرم افزاری به دید پروژه های ساختمانی، و به برنامه نویسان و طراحان به دید کارگرانی مینگرد که هر چه سریعتر باید ساختمان را به پایان برسانند چون زمستان در راه است.

Come on, We don't have much time

Come on, We don't have much time

سیاست یک مدیر تاثیر مستقیم بر روابط و ضوابط حاکم بین اعضای تیم دارد. این افراد با اخذ سیاست هایی نادرست و غلط بستری مناسب برای تنش بین اعضای تیم را فراهم می آورند که نتیجه آن عدم اعتماد و اطمینان اعضای تیم به یکدیگر خواهد بود. اینها عوامل شکست در پروژه های نرم افزاری می باشد که مدیران هیچوقت آنها را قبول نداشته و نخواهند داشت چون استدلال و منطق و دید تجاری به بازار هدف نداشته و نخواهند داشت.





FeedDeamon نرم افزار مدیریت فید ها (رایگان)

16 02 2009

اگر به دنبال نرم افزاری جهت مدیریت و خواندن Feed هایتان هستید، مطمئنا FeedDeamon شما را مایوس نخواهد کرد.feeddemon_logoیکی از ویژگیهای این نرم افزار که شما را در پیدا کردن مطالب مورد علاقه بین هزاران Feed یاری خواهد کرد Watch ها می باشند که به راحتی با تعریف Keyword مرتبط با موضوع مورد نظر خواهید توانست آنها را از بین Feed ها پیدا کرده فیلتر کنید و در دسته های گوناگون طبقه بندی نمایید.