زندگی یک گیک

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

زندگی یک گیک

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

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

۵ مطلب با کلمه‌ی کلیدی «سی شارپ» ثبت شده است

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

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

۱- ارتباطات
به سختی می‌توان شغلی را یافت که در آن به مهارت‌های ارتباطی نیازی نباشد. ارتباط می‌تواند گفتاری و یا نوشتاری باشد که شامل مهارت شنیدن نیز می‌شود. داشتن مهارت‌های ارتباطی به شما این امکان را می‌دهد که از توانایی‌های خود به طور موفقیت‌آمیزی استفاده کنید. به هنگام انجام کار نیاز دارید که با افراد مختلفی در مورد موضوعات متفاوتی ارتباط داشته باشید. عدم ارتباط فاجعه بزرگی است.

“برای ارتباط مؤثر باید بدانیم که درک همگی ما در رویارویی با جهان متفاوت است و باید از این موضوع به عنوان راهنمایی برای برقراری ارتباط با دیگران بهره ببریم.” -تونی رابینز

۲- مهارت‌های ارائه
این مهارت بسیار مرتبط با مهارت ارتباط است، اگرچه به توجه جداگانه‌ای نیازمند است چرا که ارائه ایده یا داستان موفقیت کسب‌وکار که بتواند توجه مخاطبین را جلب و آنان را مجذوب کند، به تنهایی موفقیت محسوب می‌شود. هر چه مؤثرتر برای خود یا شرکت خود بازاریابی کنید، محبوبیت بیشتری کسب خواهید کرد و مورد توجه عموم قرار خواهید گرفت.

۳- استدلال
این مورد اهمیت بسیاری دارد. در رویارویی با مشکلات، باید آن را ریشه‌یابی کنید و این راهی مؤثر برای کنترل مشکلات است. اگر دارای مهارت‌های استدلالی باشید و در انجام آن خوب عمل کنید، به نوعی دارایی شرکت محسوب می‌شوید.

۴- سواد تکنولوژیکی
اکثر مشاغل نیازمند این مورد برای کارمندان خود هستند. برخی از مشاغل کاملا بر اساس تکنولوژی بنا شده‌اند در حالیکه تعدادی تنها برای مدیریت کارهایشان نیازمند آن هستند. در هر صورت هر کسب‌وکاری از کامپیوتر استفاده می‌کند. بنابراین مهم است مقدماتی را در مورد کامپیوتر و تکنولوژی بدانید که بدون آن پیدا کردن شغل در محیط کسب‌وکار سخت خواهد بود.

۵- تحلیل
مهارت‌های تحلیلی برای سنجیدن موقعیت و عمل کردن بر اساس آن مورد نیاز هستند. این مهارت‌های تحقیقی به شما این امکان را می‌دهند که از زوایای مختلفی به موقعیت نگاه کنید، در مورد مشکل بیشتر بدانید و بفهمید چگونه می‌توانید آن را حل کنید. به عبارت دیگر شما می‌توانید موضوع را تشخیص دهید، تحلیل کنید، توسعه دهید و ساده کنید.

۶- رهبری
این مورد برای هر شغلی مورد نیاز نیست، اما شخصیت شما را ارتقاء می‌دهد. داشتن مهارت‌های رهبری به شما این امکان را می‌دهد که همکارانتان را مدیریت کنید. مهارت‌های رهبری، محیطی بهره‌ور را ایجاد می‌کند که برای انگیزه‌بخشی و هدایت کارمندان به منظور رسیدن به اهداف سازمان مهم هستند.

۷- انعطاف‌پذیری
سازگاری به معنای مدیریت محیط‌های کاری مختلف و تعامل با وظایف و شرایط متفاوت است. انعطاف‌پذیر بودن به این معناست که شما به هنگام تغییر یا افزایش مسئولیت‌ها می‌توانید به خوبی آن‌ها را مدیریت کنید.

۸- مهارت میان فردی
حتی اگر شغل شما به ارتباط با مشتری نیاز نداشته باشد، باید مهارت‌های میان فردی را برای ارتباط با همکاران فرابگیرید. مهم است که در محیط کار روابط سالم ایجاد کنید و قادر باشید در میان مجادلات بین همکاران به کار خود بپردازید.

۹- مدیریت خشم
لازم است که به خاطر خودتان و نه تنها برای شرکت و همکارانتان بدانید چگونه خشم‌تان را مدیریت کنید. فرض کنید که کارمندی با کم‌کاری یا اختلال در نظم محیط کاری و یا هر دلیل دیگری شما را عصبی کند. نباید دچار استرس شوید یا فریاد بکشید. برای سلامتی‌تان خوب نیست، از طرف دیگر شما مسئول به هم زدن جو محیط کار هستید که مطلوب هیچکس نیست.

“نگه داشتن عصبانیت مانند گرفتن یک ذغال داغ و پرت کردن آن به سمت شخصی دیگر است؛ شما کسی هستید که خواهید سوخت.” -بودا

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

  • 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

مقابله با خطاها در سی شارپ (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
Skype نرم افزاری قدرتمند ساخته شده توسط Niklas Zennström و Janus Friis در سال 2003 می باشد . Skype یک سرویس انتقال صدا و تصویر از طریق اینترنت می باشد که از سال 2011 توسط مایکروسافت خریداری شده است. این سرویس به کاربران امکان برقراری ارتباط ویدئویی و صوتی و ارسال پیام کوتاه را می دهد.
امکانات نرم افزار Skype v6.0.32.120 :
- می دانید که هزینه تماس های خارج از کشور بسیار گران است. تماس با دیگران در سراسر دنیا در صورتی که فرد مورد نظر شما از Skype استفاده کند، رایگان می باشد. بدین ترتیب می توانید تمامی دوستان، آشنایان و همکلاسی های خود را روی Skype اضافه کنید و به راحتی با آنها ارتباط برقرار کنید.
- تماس با موبایل و خط های زمینی در هر جای دنیا از طریق Skype بسیار ارزان می باشد.
- تماس با افراد متعدد به صورت رایگان از طریق Skype ممکن است. برای تماس با تلفن افراد باید از اعتبار خریداری شده استفاده کنید و یا با ثبت نام بدون هزینه به این امکان دسترسی داشته باشید.
- جدیدترین نسخه Skype دارای با کیفیت ترین تماس ویدئویی با قابلیت نمایش HD می باشد. البته اگر کسی که تماس می گیرد دارای وبکم با کیفیت HD باشد.
- به اشتراک گذاری صفحه نمایش با دیگران در Skype به صورت رایگان یا اشتراک گذاری یا یک گروه از افراد در Skype Premium.
- ارسال اسناد ، عکس و پرزنتیشن در هر سایز به صورت رایگان.

لینک دانلود
http://download.skype.com/msi/SkypeSetup_6.0.0.120.msi

  • geek