زندگی یک گیک

خاطرات مختصری از علایق یک گیک

زندگی یک گیک

خاطرات مختصری از علایق یک گیک

پیوندهای روزانه

۴۲ مطلب با موضوع «برنامه نویسی» ثبت شده است

  1. اشتیاق آنها به استثنایی بودن باعث میشود عموماً کارهایی را انجام دهند که دیگران سراغشان نمیروند.
  2. درحالی که بسیاری از مردم به طور معتادان از همه چیز لذت میبرند وبه هر قیمتی از درد و ناراحتی اجتناب می کنند،افراد موفق ارزش رسیدن به اهداف از میان مسائل دشواررا درک می کنند.
  3. آنها ارزش و هسته درونی خود را شناسایی کرده اند.(چه چیزهایی برایشان مهم است)و بهترین کار خود را برای زندگی که منعکس کننده ارزش آنهاست انجام می دهند.
  4. تعادل دارند.درحالی که ممکن از نظراقتصادی موفق باشند،میدانند که پول و موفقیت را نمیتوان با هم عوض کرد.آنها میدانند افرادی که فقط از نظراقتصادی موفق هستند را نمی توان افراد موفق نامید.متاسفانه ما در جامعه ای زندگی میکنیم که به ما یاد داده پول برابرموفقیت است.مثل خیلی از چیزهای دیگرپول یک ابزاراست ،مطمئناً پول چیز بدی نیست اما نهایتاً تنها یک وسیله است.متاسفانه خیلی از مردم آن را می پرستند.
  5. آنها اهمیت خودداری ونظم را درک می کنندوقوی هستند.successful people
  6. درامان هستند.درک آنها از ارزش ،دارایی ،جایی که زندگی می کنند و یا  آنچه در ظاهر به نظرمی رسند ،نیست.
  7.  دست  دلباز ومهربان هستند.از کمک کردن به دیگران برای دستیابی به موفقیت لذت میبرند.
  8. فروتن هستند و از پذیرفتن اشتباه و عذرخواهی ناراحت نمی شوند.آنها به توانایی هایشان مطمئن و دلگرم هستند اما مغرور نیستند.با یادگیری از دیگران خوشحال می شوند.
  9. سازگار و تغییرپذیر هستند .آنها با پذیرفتن چیزهای جدید وناشناخته احساس راحتی می کنند.
  10. از نظرفیزیکی مراقب اندام خود هستند،با تمرینات المپیک اشتباه نکنید!اهمیت سلامت جسمانی را درک کرده اند.نگرانی آنها ظاهر نیست بلکه عملکرد و سلامتی است. بدن آنها کسی که آنها هستند نیست،مکانی است که در آن زندگی می کنند.
  11. سخت کار میکنند وتنبل نیستند.
  12. آنها مقاوم و انعطاف پذیرهستند.هنگامی که همه حوله را به کناری پرتاب میکنند،آنها تازه درحال گرم کردن هستند.
  13. خیلی انتقاد پذیر هستند و ممکن است طبق بازخوردها عمل کند.
  14. با افرادبی هدف و بی فایده ارتباط برقرار نمی کنند.
  15. وقت و انرژی خود را برای موضوعاتی که کنترل کافی روی آنها ندارند ،سرمایه گذاری نمی کنند.
  16. آنها از شنا کردن مخالف جهت اقیانوس برای انجام کاری که دیگران انجام نمی دهند،لذت میبرند.خوشنودی و تایید دیگران برایشان اهمیت ندارد.
  17. با همراهانشان راحت تراند.
  18. عالی ترین معیارخود را در نظر می گیرند که باعث ایجاد تعهدات محکم تر و قوی تر،اصول کاری بهتر و البته نتیجه خوب تری میشود.
  19. شکست را توجیه نمی کنند.اگرچه بسیاری درحال سخن گفتن درباره سن،کمردرد،کمبود زمان ،شرایط ژنتیکی نامناسب، بدشانسی،رئیس بداخلاق و کمبود فرصت مناسب (دلایل مناسب برای شکست)،هستند.آنها دنبال پیدا کردن راهی برای روبرویی با چالشها هستند.
  20. می دانند چطور از زندگی لذت ببرند.
  21. حرفه آنها هویتشان نیست ،کارشان است،کسی که هستند نیست،چیزی است که انجام میدهند.
  22. آنها بیشتر به اثر بخشی علاقه مندند تا به راحتی.در حالی که اکثریت در جستجوی سریعترین و آسان ترین روش (میانبر)هستند،آنها دنبال اقداماتی هستند که در زمان طولانی نتیجه خوبی داشته باشد.
  23. کاری را که شروع میکنند به اتمام می رسانند.بسیاری از مردم زندگیشان را صرف شروع کارهایی کرده اند که هرگز تمامشان نکرده اند.اما افراد موفق کار را تمام میکند.حتی اگر هیجان و تازگی آن رنگ ببازد.
  24. چند بعدی هستند .موجودات پیچیده و شگفت انگیزی هستند (مثل همه انسانها).آنها تنها بعد فیزیکی و روحی را در نظر نمیگیرند بلکه متوجه جنبه معنوی و عاطفی خود نیز هستندوبا آگاهی تلاش در سالم نگاه داشتن آنها دارند.
  25. به شعار خود عمل میکنند.درباره فرضیه ها سخنرانی نمی کنند و با حقیقت زندگی میکنند.
منبع:utiletips
  • geek


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

1- DataBase
2- فایل های INI
3- رجیستری ( تنها در برنامه نویسی برای سیستم های ویندوزی کاربرد دارد )



 

استفاده از DataBase : به منظور نگهداری تعداد زیادی از مقادیر ، بهترین گزینه است . همچنین در صورتی که پای امنیت اطلاعات ذخیره شده در میان است ، در انجام این روش شک نکنید . در این روش میتوانید از قابلیت Password Protection که در تمامی بانک های اطلاعاتی وجود دارد ، استفاده کنید .

استفاده از فایل های INI : در بعضی موارد هم میتوان از این روش استفاده کرد . البته این روش همراه با پیچیدگی و امنیت پایین میباشد .

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

اگر موافق باشید ، به سراغ مراحل عملی کار برویم :

یک پروژه ی جدید سی شارپ باز کنید و اسم آن را Registry in CS بگذارید .

حالا وارد قسمت کد نویسی شده و Name Space زیر را در قسمت General تعریف کنید :

using Microsoft.Win32;

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

در قسمت زیر اجزای این کلاس را مورد بررسی قرار خواهیم داد :

1- Registry.ClassesRoot

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

چون متدها به صورت Alphabetic مرتب شده اند ، بنده هم آنها را به ترتیب توضیح میدهم . البته در یک مورد استثنا وجود دارد . آن هم متد OpenSubKey هست که باید در ابتدا توضیح بدهم ، چون تعداد زیادی از متدها به این متد وابستگی دارند .

1-1 : OpenSubKey

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

RegistryKey reg;

reg = Registry.ClassesRoot.OpenSubKey(“GC”,true);

در این کد نکات زیادی وجود دارد .

خط اول : یک متغییر از نوع RegistryKey تعریف کردیم .

خط دوم : مقدار متغییر reg را که در بالا تعریف کرده بودیم ، برابر کلید بازشده ( GC ) قرار دادیم تا بتوانیم عملیات مورد نظر خود را روی کلید باز شده انجام دهیم .

البته اگر خواستید زیر کلیدهای بیشتری را باز کنید ، باید از کد زیر استفاده کنید :

RegistryKey reg;

reg = Registry.ClassesRoot.OpenSubKey(“GCClsid”,true);

 

در همان خط دوم یک کلمه true می بینید . شاید بپرسید این کلمه چه معنایی دارد ؟! این کلمه به برنامه میگوید که کاربر دسترسی به این کلید را تایید میکند ( در بعضی مواقع دسترسی باید تایید شود ) .

1- 2 : Close

این متد کلید قبلی را که توسط متد OpenSubKey باز شده بود ، میبندد . بهتر است بعد از هر بار که متد OpenSubKey را به کار میگیرید ، در پایان کارتان متد Close را اجرا کنید .

1- 3 : CreateSubKey

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

RegistryKey reg;

reg = Registry.ClassesRoot.OpenSubKey(“GC”,true);

reg.CreateSubKey(“NewSubKey”);

 

1- 4 : DeleteSubKey

اگر خواستید یک زیر کلید را حذف کنید ، میتوانید از این متد استفاده کنید . کد زیر همان کلید قبلی را که ساختیم پاک میکند :

RegistryKey reg;

reg = Registry.ClassesRoot.OpenSubKey(“GC”,true);

reg.DeleteSubKey(“NewSubKey”);

 

1- 5 : DeleteSubKeyTree

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

RegistryKey reg;

reg = Registry.ClassesRoot.OpenSubKey(“GC”,true);

reg.DeleteSubKeyTree(“NewSubKey”);

1- 6 : DeleteValue

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

RegistryKey reg;

reg = Registry.ClassesRoot.OpenSubKey(“GC”,true);

reg.DeleteValue(“Your Value”);

1- 7 : Flush

خوب است در هر قسمتی که کارتان با رجیستری تمام شد ، یک بار این متد را فراخوانی کنید . البته متد Close کار این متد ( Flush ) را هم انجام خواهد داد .

Registry.ClassesRoot.Flush();

1- 8 : GetAccessControl

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

1- 9 : GetSubKeyName

با استفاده از این کد میتوانید زیر کلیدهای یک کلید رجیستری را بدست بیاورید . فقط قبل از اینکه کد زیر را اجرا کنید ، یک لیست باکس به فرمتان اضافه کنید و خاصیت Name آن را برابر با listBox قرار دهید :

RegistryKey Reg;

Reg = Registry.CurrentUser.OpenSubKey(“Software”);

//————-

foreach (string strSubKeysName in Reg.GetSubKeyNames())

{

listBox.Items.Add(strSubKeysName);

}

1- 10 : GetValue

این متد میتواند مقدار یک Value را برگرداند . کد زیر را ببینید :

RegistryKey reg;

reg = Registry.ClassesRoot.OpenSubKey(“GC”,true);

MessageBox.Show(reg.GetValue(“Your Value”).ToString());

1- 11 : GetValueKind

با این متد میتوانید نوع یک Value را دریافت کنید .

انواع Value عبارتنداز :

1- String

2- Binary

3- DWORD

4- Multi-String

5- Expandable

به این کد توجه کنید :

RegistryKey reg;

reg = Registry.ClassesRoot.OpenSubKey(“GC”,true);

MessageBox.Show(reg.GetValueKind(“Your Value”).ToString());

 

1- 12 : GetVlaueNames

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

RegistryKey Reg;

Reg = Registry.CurrentUser.OpenSubKey(“SoftwareMy APPSettings”);

//————-

foreach (string strSubKeysName in Reg.GetValueNames())

{

listBox1.Items.Add(strSubKeysName);

}

1- 13 : Name

این یکی هم مسیر جاری رجیستری را برمیگرداند :

RegistryKey reg;

reg = Registry.ClassesRoot.OpenSubKey(“GC”,true);

MessageBox.Show (reg.Name);

1- 14 : SetAccessControl

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

1- 15 : SetValue

بوسیله این متد میتوانید یک مقدار را در رجیستری بنویسید :

RegistryKey Reg;

Reg = Registry.LocalMachine.OpenSubKey(“SOFTWARE”, true);

//————-

Reg.SetValue(“My Value”, “Program”,RegistryValueKind.String);

یک نکته در این کد وجود دارد . در خط سوم کدها آنجا که نوشته شده RegistryValueKind.String ، اینجا نوع متغییر تنظیم شده است . انواع متغیر ها را میتوانید در راهکار 1- 11 مشاهده کنید .

1- 16 : SubKeyCount

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

RegistryKey Reg;

Reg = Registry.LocalMachine.OpenSubKey(“SOFTWARE”, true);

//————-

MessageBox.Show(Reg.SubKeyCount.ToString());

1- 17 : ValueCount

و اما آخرین مورد . بوسیله این تابع میتوانید تعداد متغییرهای داخل یک کلید را بدست بیاورید .

RegistryKey Reg;

Reg = Registry.LocalMachine.OpenSubKey(“SOFTWARE”, true);

//————-

MessageBox.Show(Reg.ValueCount.ToString());

  • geek

در سورس کد زیر خواهید دید که چگونه میشود فایل ها را از سیستم خود کشیده و در لیست باکس فرم خود

رها کنید و فایل ها به آن اضافه شوند :



کد برنامه:

در کد فوق ، در تابع اول ، آدرس یا Filename فایل ها درون یک آرایه String ذخیره میشوند به لیست باکس

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

قبول کن.

در تابع دوم پارامتر DataFormat نوع فایل را برمیگرداند که FileDrop منظور نوع فایل ویندوزی است .


نکته : فقط خاصیت AllowDrop لیست باکس را باید True نمایید.


لینک دانلود سورس

private void listBox1_DragDrop(object sender, DragEventArgs e)
{
	string [] allfiles = (string[])e.Data.GetData(DataFormats.FileDrop,
 false); int n = allfiles.Length; for (int i = 0; i < n; i++) listBox1.Items.Add(allfiles[i]); } private void listBox1_DragEnter(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effect = DragDropEffects.All; else e.Effect = DragDropEffects.None; }
  • geek

پلی مرفیسم (Polymorphism)
یکی دیگر از مفاهیم اولیه ی شیء گرایی پلی مرفیسم ( چند ریختی ) می باشد. پلی مرفیسم به معنای توانایی استفاده کردن از فرم های مختلف یک نوع است بدون توجه به جزئیات آن .
برای مثال هنگامیکه سیگنال تلفنی شما فرستاده می شود ، از نوع تلفنی که در انتهای خط موجود است خبری ندارد. تلفن انتهای خط ، می خواهد یکی از تلفن های عهد عتیق باشد و یا تلفنی با آخرین امکانات روز .
شرکت مخابرات (!) تنها از نوع پایه ای به نام
phone خبر دارد و فرض می کند که هر instance از این نوع می داند که چگونه صدای زنگ تلفن شما را به صدا در آورد. بنابراین شرکت مخابرات از تلفن شما به صورت پلی مرف استفاده می کند.
در عمل پلی مرفیسم هنگامی مفید خواهد بود که بخواهیم گروهی از اشیاء را به یک آرایه نسبت دهیم و سپس متدهای هر یک را فراخوانی کنیم. الزاما این اشیاء از یک نوع نخواهند بود.

نحوه ی ایجاد متدهای پلی مرفیک :
برای ایجاد متدی که نیاز است تا پلی مرفیسم را پشتیبانی نماید ، تنها کافی است آنرا از نوع
virtual در کلاس پایه تعریف کنیم. مثال :
فرض کنید تابع
DrawWindow در کلاس Window تعریف شده است. برای ایجاد قابلیت پلی مرفیسم در آن به صورت زیر عمل می شود :

public virtual void DrawWindow( )

در این حالت هر کلاسی که از Window مشتق شود ، مجاز است نگارش خاص خودش را از DrawWindow ارائه کند. در این صورت در کلاسی که از کلاس پایه ی ما ارث می برد ، تنها کافی است که کلمه ی کلیدی override را قبل از نام تابع مذکور ذکر نماییم.

یک مثال کامل :

using System;

public class DrawingObject
{
public virtual void Draw()
{
Console.WriteLine("I'm just a generic drawing object.");
}
}
public class Line : DrawingObject
{
public override void Draw()
{
Console.WriteLine("I'm a Line.");
}
}

public class Circle : DrawingObject
{
public override void Draw()
{
Console.WriteLine("I'm a Circle.");
}
}

public class Square : DrawingObject
{
public override void Draw()
{
Console.WriteLine("I'm a Square.");
}
}
public class DrawDemo
{
public static int Main(string[ ] args)
{
DrawingObject[ ] dObj = new DrawingObject[4];

dObj[0] = new Line();
dObj[1] = new Circle();
dObj[2] = new Square();
dObj[3] = new DrawingObject();

foreach (DrawingObject drawObj in dObj)
{
drawObj.Draw();
}

return 0;
}
}

کلاس DrawingObject ، کلاسی پایه برای تمام کد ما که از آن به ارث می برد ، می باشد. متد Draw در آن با کلمه ی کلیدی virtual معرفی شده است. یعنی تمام کلاس های فرزند این کلاس والد می توانند این متد را override کنند ( تحریف کردن و یا تحت الشعاع قرار دادن هم ترجمه شده است! ).
در ادامه سه کلاس تعریف شده اند که تمامی آنها از کلاس مبنا ارث می برند و تابع
Draw را تحریف کرده اند (!). با استفاده از کلمه ی کلیدی override می توان تابع مجازی کلاس مبنا را با تعریفی جدید در زمان اجرای برنامه ارائه داد. تحریف شدن تنها زمانی رخ می دهد که کلاس ، توسط ریفرنس کلاس مبنا مورد ارجاع واقع شده باشد.
و در متد
Main برنامه از این کلاس ها در عمل استفاده گردیده است. در متد Main ، آرایه ای از نوع DrawingObject تعریف و مقدار دهی اولیه شده است تا بتواند 4 شیء از نوع این کلاس را در خودش ذخیره کند.
بدلیل رابطه ی ارث بری موجود می توان آرایه ی
dObj را با نوع هایی از کلاس های Line ، Circle و Square مقدار دهی کرد (همانند کدهای بعدی متد Main ) . اگر ارث بری در اینجا وجود نمی داشت می بایست به ازای هر کلاس یک آرایه تعریف می شد.
سپس از حلقه ی زیبای
foreach برای حرکت در بین اعضای این آرایه استفاده گردیده است. در اینجا هر شیء متد خاص خودش را در مورد Draw فراخوانی می کند و نتیجه را روی صفحه نمایش خواهد داد.
خروجی نهایی به صورت زیر خواهد بود :

Output:
I'm a Line.
I'm a Circle.
I'm a Square.
I'm just a generic drawing object

  • geek

کلاس ها ی abstract
کلاس ها را همچنین می توان به صورت
abstract تعریف کرد. از این نوع کلاس ها نمی توان instance ایی را ایجاد نمود. در این کلاس های پایه ، صرفا تعریف متدها و خواص هایی عنوان گردیده و در آینده در کلاس های فرزند توسعه داده خواهند شد. برای مثال :

public abstract class Named
{
public abstract String Name {get; set;} // property
public abstract void PrintName(); // method
}
public class B : Named
{
private String name = "empty";
public override String Name
{
get{return name;}
set{name=value;}
}
public override void PrintName()
{
Console.WriteLine("Name is {0}", name);
}
}

والی که شاید پیش بیاید این است که اگر interface ها صرفا تعریف توابع و خواص را می توانند در خود جای دهند پس چه دلیلی برای بکار بردن آنها و طولانی کردن کار کد نویسی وجود دارد؟
کاربردهای زیادی را می توان برای اینترفیس ها برشمرد. اینترفیس یک رفتار را تعریف می کند. فرض کنید در حال توسعه ی برنامه ایی هستید که بر روی دو کامپیوتر مختلف باید با هم در ارتباط مستقیم بوده و برهم کنش داشته باشند و هر برنامه از ماژولی به نام
CCommObj communication object استفاده می نماید. یکی از متدهای این شیء ، SendData() می باشد که رشته ای را دریافت کرده و به برنامه ی دیگر می فرستد. این فراخوانی از نوع asynchronous است زیرا ما نمی خواهیم اگر خطایی در شبکه رخ داد، برنامه برای همیشه منتظر باقی بماند. اما چگونه برنامه ی A که تابع ذکر شده را فراخوانی کرده است می تواند تشخیص دهد که پیغام به مقصد رسیده است یا خیر و یا آیا خطایی در شبکه مانع رسیدن پیغام گشته است یا خیر؟ جواب بدین صورت است که CCommObj هنگام دریافت پیغام ، رخدادی را سبب خواهد شد و اگر خطایی رخ داده باشد خیر. در این حالت نیاز به یک ماژول logging نیز احساس می گردد تا خطاهای رخ داده را ثبت نماید. یک روش انجام آن این است که CCommObj پیاده سازی این امکان را نیز بعهده گرفته و اگر فردا نیز خواستیم ماژول دیگری را به برنامه اضافه کنیم هر روز باید CCommObj را تغییر دهیم. تمام این کارها را به سادگی می توان در یک اینترفیس مدل کرد. روش آن نیز در ادامه بیان می گردد:
در ابتدا یک اینترفیس ایجاد می کنیم تا لیست تمام امکانات ممکن را "منتشر" کند:

interface ICommObjEvents
{
void OnDataSent();
void OnError();
}

شی ء CCommObj ما از این توابع که بعدا توسعه داده خواهند شد برای با خبر سازی کلاینت ها استفاده می نماید. تمام متدها در یک اینترفیس ذاتا پابلیک هستند بنابراین نیازی به ذکر صریح این مطلب نمی باشد و اگر اینکار را انجام دهید کامپایلر خطای زیر را گوشزد خواهد کرد :

The modifier 'public' is not valid for this item

در ادامه کلاینت CClientApp_A را پیاده سازی خواهیم کرد :

class CClientApp_A:ICommObjEvents
{
public void OnDataSent()
{
Console.WriteLine("OnDataSent");
}
public void OnError()
{
Console.WriteLine("OnError");
}
private CCommObj m_Server;
public void Init(CCommObj theSource)
{
m_Server = theSource;
theSource.Advise (this);
string strAdd = ("N450:1");
m_Server.read (strAdd,10);
}
}

در کد فوق کلاس CClientApp_A از ICommObjEvents ارث برده و تمام متدهای این اینترفیس را پیاده سازی نموده است. هنگامی که CCommObj تابع OnDataSent را فراخوانی می کند این کلاینت پیغام را دریافت خواهد کرد. لازم به ذکر است که کلاس کلاینت ما چون از یک اینترفیس ارث بری می نماید پس باید تمام توابع و خواص کلاس پایه را پیاده سازی کند در غیر اینصورت هر چند برنامه کامپایل خواهد شد اما هنگامی که شیء CCommObj هر کدام از توابع این کلاس را فراخوانی کد ، خطای زمان اجرا رخ خواهد داد.
متد
Init کلاس فوق آرگومانی را از نوع CCommObj دریافت نموده و در یک متغیر private آنرا ذخیره می نماید. همچنین در این متد ، متد Advise از کلاس CCommObj نیز فراخوانی گشته است.

public class CCommObj
{
private int m_nIndex;
public ICommObjEvents [ ] m_arSinkColl;
public CCommObj()
{
m_arSinkColl = new ICommObjEvents[10];
m_nIndex = 0;
}
public int Advise(ICommObjEvents theSink)
{
m_arSinkColl[m_nIndex] = theSink;
int lCookie = m_nIndex;
m_nIndex++;
return lCookie
}
public void SendData(string strData)
{
foreach ( ICommObjEvents theSink in m_arSinkColl)
if(theSink != null )
theSink.OnDataSent ();
}
}

  • geek

مقابله با خطاها در سی شارپ (Exception Handling in C#)
EXCEPTION یک خطای زمان اجر است که بدلیل شرایطی غیرنرمال در برنامه ایجاد می شود. در سی شارپ exeption کلاسی است در فضای نام سیستم. شیء ایی از نوع exception بیانگر شرایطی است که سبب رخ دادن خطا در کد شده است. سی شارپ از exception ها به صورتی بسیار شبیه به جاوا و سی پلاس پلاس استفاده می نماید.

دلایلی که باید در برنامه
exception handling حتما صورت گیرد به شرح زیر است:
- قابل صرفنظر کردن نیستند و اگر کدی این موضوع را در نظر نگیرد با یک خطای زمان اجرا خاتمه پیدا خواهد کرد.
- سبب مشخص شدن خطا در یک نقطه از برنامه شده و ما را به اصلاح آن سوق می دهد.

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

class A {static void Main() {catch {}}}
TEMP.cs(3,5): error CS1003: Syntax error, 'try' expected

class A {static void Main() {finally {}}}
TEMP.cs(3,5): error CS1003: Syntax error, 'try' expected

class A {static void Main() {try {}}}
TEMP.cs(6,3): error CS1524: Expected catch or finally

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

int a, b = 0 ;
Console.WriteLine( "My program starts " ) ;
try
{
a = 10 / b;
}
catch ( Exception e )
{
Console.WriteLine ( e ) ;
}
Console.WriteLine ( "Remaining program" ) ;
The output of the program is:
My program starts
System.DivideByZeroException: Attempted to divide by zero.
at ConsoleApplication4.Class1.Main(String[ ] args) in
d:\dont delete\consoleapplication4\class1.cs:line 51
Remaining program

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

تعدادی از کلاس های
exception در سی شارپ که از کلاس System.Exception ارث برده اند به شرح زیر هستند :

• Exception Class - - Cause
• SystemException - A failed run-time check;used as a base class for other.
• AccessException - Failure to access a type member, such as a method or field.
• ArgumentException - An argument to a method was invalid.
• ArgumentNullException - A null argument was passed to a method that doesn't accept it.
• ArgumentOutOfRangeException - Argument value is out of range.
• ArithmeticException - Arithmetic over - or underflow has occurred.
• ArrayTypeMismatchException - Attempt to store the wrong type of object in an array.
• BadImageFormatException - Image is in the wrong format.
• CoreException - Base class for exceptions thrown by the runtime.
• DivideByZeroException - An attempt was made to divide by zero.
• FormatException - The format of an argument is wrong.
• IndexOutOfRangeException - An array index is out of bounds.
• InvalidCastExpression - An attempt was made to cast to an invalid class.
• InvalidOperationException - A method was called at an invalid time.
• MissingMemberException - An invalid version of a DLL was accessed.
• NotFiniteNumberException - A number is not valid.
• NotSupportedException - Indicates sthat a method is not implemented by a class.
• NullReferenceException - Attempt to use an unassigned reference.
• OutOfMemoryException - Not enough memory to continue execution.
• StackOverflowException - A stack has overflown.

در کد فوق صرفا عمومی ترین نوع از این کلاس ها که شامل تمامی این موارد می شود مورد استفاده قرار گرفت یعنی :

catch ( Exception e )

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

مثالی دیگر: ( در این مثال خطایابی دقیق تر با استفاده از کلاس های فوق و همچنین مفهوم
finally نیز گنجانده شده است )

int a, b = 0 ;
Console.WriteLine( "My program starts" ) ;
try
{
a = 10 / b;
}
catch ( InvalidOperationException e )
{
Console.WriteLine ( e ) ;
}
catch ( DivideByZeroException e)
{
Console.WriteLine ( e ) ;
}
finally
{
Console.WriteLine ( "finally" ) ;
}
Console.WriteLine ( "Remaining program" ) ;
The output here is:
My program starts
System.DivideByZeroException: Attempted to divide by zero.
at ConsoleApplication4.Class1.Main(String[ ] args) in
d:\dont delete\consoleapplication4\class1.cs:line 51
finally
Remaining program

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

int a, b = 0 ;
Console.WriteLine( "My program starts" )
try
{
a = 10 / b;
}
finally
{
Console.WriteLine ( "finally" ) ;
}
Console.WriteLine ( "Remaining program" ) ;
Here the output is
My program starts
Exception occurred: System.DivideByZeroException:
Attempted to divide by zero.at ConsoleApplication4.Class1.
Main(String[ ] args) in d:\dont delete\consoleapplication4
\class1.cs:line 51
finally

قسمت چاپ Remaining program اجرا نشده است.

عبارت
throw :
این عبارت سبب ایجاد یک خطا در برنامه می شود.

مثال :

int a, b = 0 ;
Console.WriteLine( "My program starts" ) ;
try
{
a = 10 / b;
}
catch ( Exception e)
{
throw
}
finally
{
Console.WriteLine ( "finally" ) ;
}

در این حالت قسمت فاینالی اجرا شده و برنامه بلافاصله خاتمه پیدا می کند

  • geek
بدیل متن به گفتار در ویژوال استودیو ۲۰۱۲. سرویس های زیادی تو ویندوز هستند که مایکروسافت تا الان بصورت کاربردی تر از آنها استفاده نکرده، شاید به دلیل اینکه از دید مایکروسافت خیلی هم مهم نبودن یا خیلی ساده بوده اند. اما یکی از مزایای برنامه نویس بودن اینه که هر چی که تو دسترست نیست یا اصلاً وجود نداره رو بتونی اونطوری که دوست داری درستش کنی. و من هم امروز می خوام دقیقاً اونطوری که دوست دارم از یکی از سرویس های ویندوز مایکروسافت استفاده کنم.

این سرویسی که می خوام در موردش صحبت کنم ، سرویس تبدیل متن یا فایل متنی به صداست. برنامه ای به اسم Text To Speech تو کنترل پنل ویندوز وجود داره که وظیفه تبدیل متن به گفتار رو به عهده داره و می تونه متنی رو تلفظ کنه. خیلی از افراد تازه کار هستند که از وجود چنین امکاناتی تو ویندوز خبر ندارن چه برسه به نحوه استفاده از اون.
اگه بخوایم به یکی از مزایای تبدیل متن به گفتار اشاره کنیم همین تلفظ کلمات برای غیر زبان انگلیسی ها می تونه بهترین گزینه باشه. بی اینکه جایی پول بدیم یا فیلم آموزشی نیگا کنیم میشه با این برنامه ای که امروز درست می کنیم یه استاد تلفظ فول تایم برای خودمون استخدام کنیم.

خب بریم سراغ آموزش.

 مرحله ۱

  1. باز کردن نرم افزار ویژوال استودیو ۲۰۱۲
  2. رفتن به مسیر (“File” -> “New” -> “Project”)
  3. انتخاب ( ”Template” -> “Visual C#” -> “Windows Forms Application”)
  4. نام گذاری پروژه (هر اسمی که دوست دارین)

مرحله ۲

در حال حاضر به فرمی مثل فرم زیر نیاز داریم. پس فرمی به شکل زیر طراحی می کنیم:

from design آموزش تبدیل متن
 به گفتار در ویژوال استودیو 2012 + سورس کد

  1. ۵ کنترل Button
  2. یک کنترل Textbox
  3. یک کنترل OpenFileDialog
  4. یک کنترل Label

مرحله۳

باید کتابخانه این سرویس رو به برناممون اضافه کنیم. برای این کار روی نام پروژه راست کلیک و از منوی باز شده گزینه “System.Speech” رو انتخاب کنیم. (مراحل طبق تصاویر زیر):

add reference آموزش تبدیل 
متن به گفتار در ویژوال استودیو 2012 + سورس کد

sppech libaray آموزش تبدیل 
متن به گفتار در ویژوال استودیو 2012 + سورس کد

مرحله۴

فایل Form1.cs را باز می کنیم و کدهای زیر را در آن قرار می دهیم. (توجه کنین که نام کنترل را با کدها یکی کرده باشین!)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Speech.Synthesis ;
using System.IO;

namespace text_to_speech
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
speech = new SpeechSynthesizer();
Pausespeak.Enabled = false;
Resumespeak.Enabled = false;
Stopspeak.Enabled = false;
}
SpeechSynthesizer speech;
private void button6_Click(object sender, EventArgs e)
{
if (textbox1.Text.Length >0)
{
speech = new SpeechSynthesizer();
speech.SpeakAsync(textbox1.Text);
label1.Text = "Speaking";
Pausespeak.Enabled = true;
Stopspeak.Enabled = true;
speech.SpeakCompleted += speech_SpeakCompleted;
}
else
{
MessageBox.Show("Please Enter some text in the textbox", "Message", MessageBoxButtons.OK);
}
}

void speech_SpeakCompleted(object sender, SpeakCompletedEventArgs e)
{
label1.Text = "Ideal";
}
private void Pausespeak_Click(object sender, EventArgs e)
{
if (speech != null)
{
if (speech.State == SynthesizerState.Speaking)
{
speech.Pause();
label1.Text = "Pause";
Resumespeak.Enabled = true;
}
}
}
private void Resumespeak_Click(object sender, EventArgs e)
{
if (speech != null)
{
if (speech.State == SynthesizerState.Paused)
{
speech.Resume();
label1.Text = "speaking";
}
Resumespeak.Enabled = false;
}
}

private void Stopspeak_Click(object sender, EventArgs e)
{
if (speech != null)
{
speech.Dispose();
label1.Text = "Idle";
Pausespeak.Enabled = false;
Resumespeak.Enabled = false;
Stopspeak.Enabled = false;
}
}
private void Loadtextfromfile_Click(object sender, EventArgs e)
{
openFileDialog1.ShowDialog();
}
private void openFileDialog1_FileOk(object sender, CancelEventArgs e)
{
textbox1.Text = File.ReadAllText(openFileDialog1.FileName.ToString());
}
}
}

مرحله۵

حالا می تونیم برنامه رو جهت امتحان کردن اجرا کنیم، مراحل تلفظ به اینصورته که متنی رو داخل کنترل جعبه متن اضافه کنیم، این کار رو می تونیم از طریق صفحه کلید یا بارگذاری فایل متنی از طریق کادر OpenFileDialog و در مرحله آخر کلیک کردن روی دکمه speech text انجام بدیم. سورس کد این برنامه رو می تونید از لینک زیر دریافت کنین!

output of speech app آموزش 
تبدیل متن به گفتار در ویژوال استودیو 2012 + سورس کد

گاهی اوقات کارهای کوچیک می تونن زندگی آدم رو از این رو به اون رو کنن. پس بزرگ فکر کنین!
تا یه آموزش دیگه همتون رو به خدای بزرگ می سپارم. مواظب خودتون باشین.

  • geek

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


پیش گفتار نویسنده

+ بخش اول : معرفی …

فصل اول : معرفی وردپرس

+ بخش دوم : کار با وردپرس …

فصل دوم : نصب وردپرس

فصل سوم : مدیریت حساب های کاربری

فصل چهارم : پیشخوان ( داشبورد )

فصل پنجم : تنظیمات وبلاگ شما

فصل ششم : نوشته ها

فصل هفتم : برگه ها

فصل هشتم : پیوندها

فصل نهم : دیدگاه ها

فصل دهم : به روز رسانی

فصل یازدهم : پشتیبان گیری

فصل دوازدهم : کوچ به وردپرس

فصل سیزدهم : شبکه وردپرس

+ بخش سوم : قالب ها …

فصل چهاردهم : پیدا کردن و نصب قالب ها

فصل پانزدهم : ابزارک ها

فصل شانزدهم : فهرست ها

فصل هفدهم : طراحی قالب وردپرس

+ بخش چهارم : افزونه ها …

فصل هجدهم : ۱۰ افزونه پر کاربرد وردپرس

دریافت
حجم: 4.3 مگابایت

  • geek
مهمترین مشکل دانش آموزان و دانشجویان تو رشته کامپیوتر درس برنامه نویسیه و همیشه به این درس مثل یه غول بی شاخ و دوم نگاه می‌کنن و فکر می‌‌کنن هیچ وقت این مسئله حل نمیشه ،شاید حتما باید مخ کامپیوتر باشن تا بتونن این درس و پاس کنن ، خیلی موقع‌ها قبل از امتحان دست به دامن این و اون میشن که قبل امتحان یه نفر پیدا بشه و معجزه کنه یه دفعه همه چیزمثل برق بره تو مخشون .بعد از امتحانم دست به دامن استاد میشن که یه نمره ای به ما بده تا این درسو پاس کنیم ، اما نمی دونن عاقبت این کار جز پشیمونی تو آینده چیزیو به ارمغان نمیاره . منم یکی مثل شما بودم که تو دبیرستان با حفظ کردن برنامه رفتم سر جلسه وآرزو می‌کردم غیر سوالای کتاب چیزی طرح نشده باشه،اما وقتی وارد دانشگاه شدم تو اولین روز با کسی آشنا شدم که دید منو نسبت به برنامه نویسی عوض کرد وتموم فکر و ذکر منو با برنامه نویسی ساخت ، از اون روز به بعد من عاشق برنامه نویسی شدم و تو طول تحصیلی انقد پیشرفت کردم که استاد منو با خودش به شرکت برنامه نویسیش برد و من شدم یه برنامه نویس …


دریافت
حجم: 2.12 مگابایت
  • geek
یکی از مهم‌ترین نوآوری‌های کامپیوتر اینترنت است. داشتن یک سایت در اینترنت از حضور در آن مهم‌تر است چون طبق آمارهای گرفته شده در ایران حدود ۳۰ میلیون ایرانی در فضای اینترنت حضور دارند و این میزان بستر مناسبی را برای ارائه‌ی خدمات، تبلیغات و غیره فراهم آورده است. طراحی سایت ممکن است برای بسیاری‌ها دشوار به نظر برسد ولی این‌طور نیست. البته می‌توان گفت که این حرف تا چند سال پیش صحت داشت. چرا که مدیر سایت می‌بایست با کدنویسی آشنا بوده و با محیط خسته‌کننده‌ای سروکار داشته باشد. ولی امروزه با نصب نرم‌افزارهایی که به سیستم مدیریت محتوا شهرت دارند می‌توان به آسانی و بدون روبه‌رو شدن با محیط پیچیده‌ای یک سایت راه‌اندازی کرد. شاید بتوان گفت که کار با سیستم مدیریت محتوا از کار با سیستم‌عامل ویندوز هم آسان‌تر است. این نرم‌افزارها در تمام سیستم‌عامل‌ها قابل اجرا هستند و از طریق مرورگر می‌توان به آن‌ها دسترسی داشت. اگر در حال حاضر هاست ندارید بعد از خواندن بخش سوم به بخش پنجم بروید (بخش چهارم را نخوانید!). امیدوارم که از خواندن این کتاب لذت ببرید.
  • geek