تبليغاتX
برنامه نویسی دات نت
 
 
 
   
 
 

منبع:

اگر بخواهیم در یک textbox فقط عدد وارد شود

در رویداد control_keypres  کد زیر را وارد کنید

if (!char.IsNumber(e.KeyChar))

            {

                e.Handled = true;

                MessageBox.Show("insert Number","Error",MessageBoxButtons.OK,MessageBoxIcon.Error);

            }

 

 
 
 |    نوشته شده توسط محسن یزدانی
 
 
   
 
 

طریقه بدست آوردن میزان کارکرد(روشن بودن) سیستم (به دقیقه)

string tic = string.Empty;

tic = Convert.ToString((Environment.TickCount / 1000)/60))

 
 
 |    نوشته شده توسط محسن یزدانی
 
 
   
 
  برای درک معماری دات نت می توانید از کتاب زیر ترجمه ی مهندس سیاوش مرتضوی استفاده کنید.

Microsoft .NET Framwork 2.0 Aplication Development Foundation

این کتاب مرجع کاملی برای آزمون های دات نت ماکروسافت و مدرک MCTS می باشد

 
 
 |    نوشته شده توسط محسن یزدانی
 
 
   
 
 
 

اشاره :
ماژول حافظه DDR3 در طراحي و اصول کار تفاوت زيادي با حافظه DDR نسل پيشين ندارد.


چه چيزي درDDR3 SDRAM جديد است؟

تکنولوژي ماژول‌هاي حافظه DDR3 بر دو برابر کردن پهناي گذرگاه ورودي اطلاعات از هسته DRAM واقعي به بافرهاي ورودي خروجي به نسبت حافظه‌هاي DDR2 بنا گرديده است در نتيجه افزايش مؤثر ميزان انتقال اطلاعات توسط ماژول‌هاي حافظه DDR3 نياز به عمل سريع‌تر هسته حافظه ندارد و فقط بافرهاي خارجي سريع‌تر کار خواهند کرد.


شكل 1‌

بنابراين، حافظه DDR3 مي‌تواند خيلي سريع به فرکانس‌هاي واقعي بالاتري نسبت به ماژول حافظه DDR2 بدون ايجاد هيچگونه تغيير يا بهبود در فرآيند ساخت قطعات نيمه‌ هادي برسد.
در اين نوع حافظه متأسفانه نه تنها پهناي باند بلکه ميزان تأخير حافظه نيز افزايش مي‌يابد در نتيجه، ما نبايد هميشه انتظار داشته باشيم که حافظه DDR3 با وجود فرکانس بالاتر سريع‌تر از حافظه DDR2 کار کند.
آخرين مشخصات ارائه داده شده براي ماژول حافظه DDR3  توسط تکنولوژي JEDEC ، اخيرا تغييرات فرکانس حافظه را از 800MHz تا 1600MHz شرح مي‌دهد. جدول 1 خصوصيات مهم تغييرات فرکانس حافظه را نشان مي دهد:


جدول 1: خصوصيات مهم تغييرات فرکانس در حافظه DDR3

با علم به اينکه ميزان تاخير ماژول حافظه DDR2- 800 با تايمينگ 4-4-4 مساوي با 10ns مي‌باشد، اين موقع ما مي‌توانيم کارايي ماژول حافظه DDR3 را مورد سئوال قرار دهيم.
حافظه DDR3 در تأخير بالا فقط مي تواند با داشتن پهناي باند بيشتر کارايي بالاتري داشته باشد.
متأسفانه حرکت بسوي ماژول حافظه DDR3 تا اندازه‌اي تحميلي است.
 DDR2 تا حد امکان فرکانس خود را مورد استفاده قرار داده است اگرچه ما هنوز مي توانيم با يک سري کارها فرکانس ماژول حافظه‌هاي DDR2 را تا1066MHz افزايش دهيم، اين افزايش فرکانس، توليد محصولات را بطور چشمگيري کاهش مي‌دهد و در نتيجه باعث افزايش قيمت ماژول‌هاي DDR2 مي شود.
به همين دليل تکنولوژي JEDEC ، کار کرد ماژول حافظه DDR2 را با فرکانس بالاتر از 800MHz استاندارد نمي‌داند و حرکت بسوي تکنولوژي DDR3 را پشتيباني مي کند.
به هرحال، ماژول حافظه DDR3 داراي پيشرفت‌هاي ديگري نيز مي‌باشد که نه نتها توليد کنندگان بلکه کاربران را نيز تشويق مي‌کند تا ذهن خود را با تکنولوژي جديد مطابقت دهند. در ميان اين امتيازات ما اول از همه مايليم که به ولتاژ پايين  ماژول حافظه DDR3 اشاره کنيم که در اين نوع ماژول تا 1.5V کاهش يافته است.
اين ولتاژ در مقايسه با کار حافظه DDR2 در سرعت‌هاي کلاک يکسان 20 % پايين‌تر مي‌باشد و سرانجام اين ولتاژ تا 30 % نيز کاهش خواهد يافت. تکنولوژي‌هاي ساخت تراشه‌هاي حافظه نيز به اين تأثير مثبت کمک مي کنند.


شكل 2

با اين اوصاف مي پردازيم به برترين برند در ارائه حافظه براي کاربران حرفه‌اي ، تا ببينيم در زمينه تکنولوژي DDR3 به چه نتايجي دست يافته است:

اخيرا OCZ حافظه‌هاي DDR3 خود را با باس 1800 مگاهرتز در سري Titanium به بازار عرضه نموده است . اين حافظه‌ها که مبتني بر چيپ‌هاي حافظه Micron Z9 مي‌باشند در تست‌هاي مختلف بالاترين راندمان را نسبت به کليه حافظه‌هاي موجود در بازار رايانه از خود نشان مي‌دهند .
 OCZ که در عرضه حافظه‌هاي DDR2 همواره پيشتاز بوده و قوي‌ترين حافظه‌هاي DDR2 را (FLEX XLC ) توليد نموده است که با قابليت Overclocking بسيار بالا بالاترين راندمان را به کاربران حرفه اي ارايه مي داده است ، اکنون نشان مي‌هد که در توليد حافظه‌هاي DDR3 نيز از پيشتازان است . يکي ازآزمايشگاه‌ايي که اين حافظه را مورد بررسي و تست قرار داده است ، Anandtech مي‌باشد . در سايت اينترنتي اين آزمايشگاه ، پس از ارايه توصيفي از شرکت OCZ ، نتايج مقايسه اين حافظه DDR3 1800Mhz با ساير حافظه‌هاي موجود آورده شده است . در شكل 3 يکي از اين نمودارهاي مقايسه‌اي مشاهده مي‌شود . 


شکل 3

همانطور که اشاره شد اين حافظه در سري Titanium ارايه شده است . علاقمندان قدرت در رايانه منتظر ارايه حافظه‌هاي DDR3 Flex باشند . با قدرتي که از حافظه‌هاي DDR2 Flex سراغ داريم ، اين حافظه در سري DDR3  غوغا خواهد کرد .

 
 
 |    نوشته شده توسط محسن یزدانی
 
 
   
 
 
وب2 چيست؟

اشاره :
تا سال 2001 ، وب به صورت انفجاري رشد پيدا کرده بود و کارشناسان و خبرگان فن پيش‌بيني مي‌کردند که سايت‌ها و جاذبه‌هاي اينترنت نتوانند با همان توان به جذب مخاطب و کاربر ادامه دهند و دير يا زود از شتاب اين رشد کاسته خواهد شد. در اجلاسي که ناشر بزرگ کتاب‌هاي کامپيوتري ، O’Reilly Media Inc هم يکي از اعضاي آن بود ، براي اولين بار معاون اين شرکت به نام Dale Dougherty ، عنوان کرد که وب رو به افول نيست و سايت‌ها و سرويس‌هاي جذابي در حال شکل گرفتن هستند که جاي سايت‌ها و رسانه‌ها سنتي‌تر اينترنتي را خواهند گرفت ، وي از واژه «وب2» براي نخستين بار جهت نام‌گذاري مجموعه اين سايت‌ها و سرويس‌هاي اينترنتي استفاده کرد. از آن زمان تا به کنون ، واژه «وب2» يکي از تکيه ‌کلام‌هاي سايت‌هايي شده که به فن‌آوري اطلاعات مي‌پردازند ، حتي بعضي از سايت‌ها و وبلاگ‌هاي برجسته آي‌تي ، صرفا به معرفي سايت‌هاي اصطلاحا وب دويي اقدام مي‌کنند.


وب2 چيست؟
اما وب2 چيست و وقتي سايتي را وب دويي مي‌ناميم ، منظورمان کدام ويژگي‌ها و خصايص سايت است؟
شايد نگاهي به جدول 1 ، بتواند شما را تا حدي با مفهوم کلي وب2 آشنا کند:

                                                  جدول 1

وب2 به عنوان يک پلتفرم
مانند بسياري از مفاهيم ديگر ، وب2 يک گستره يا طيف است. به عبارت ديگر مي‌توان مجموعه‌اي از اصول و ويژگي‌ها را براي وب2 تعريف کرد و بعد بر حسب اينکه کدام سايت‌ها از همگي يا تعدادي از اين اصول پيروي کنند ، آنها را وب دويي دانست.

                              شکل 1 : لوگوي بعضي سايت‌هاي وب2

• نت اسكيپ در مقابل گوگل :
اگر نت‌اسكيپ را نماد وب1 بدانيم ، بي‌شک مي‌توان گوگل را نماد شاخص وب2 دانست. محصول اصلي شرکت نت‌اسکيپ يک نرم‌افزار مرورگر بود و اين شرکت قصد داشت با استفاده از محبوبيت اين مرورگر ، مقدمات فروش محصولات مربوط به سرورهاي پربها را فراهم نمايد. در مقابل شرکت گوگل از روز اول روي برنامه‌هاي تحت وب فعاليت مي‌کرد. محصولات اين شرکت به صورت بسته‌هاي نرم افزاري فروخته نمي‌شوند ،بلکه به صورت سرويس‌هاي آنلاين ارائه مي‌شوند ، محصولاتي که مشتريان به صورت مستقيم يا غيرمستقيم به آن پول مي‌دهند. در واقع گوگل مجموعه اي از بسته‌هاي نرم‌افزاري نيست ، بلکه يک پايگاه داده تخصصي است.

سايت DoubleClick در مقابل Overture و AdSense  :
علت اصلي موفقيت Overture و آگهي‌هاي متني گوگل را بايد در ديد و برداشت اين دو شرکت دانست. در حالي که «DoubleClick» باور داشت آگهي‌‌دهندگان صاحب اختيارند، نه مصرف‌كنندگان ، اين دو شرکت اعتقاد دارند که وب مشارکت است و نه انتشار.
استفاده از خدمات سايت DoubleClick نياز به ‌امضاي يك قرارداد رسمي دارد كه موجب محدود‌شدن بازار ‌اين شركت به‌ صرفا چند هزار سايت بزرگ شده است. Overture و گوگل دريافته‌اند كه چگونه مي‌‌توان تبليغات را تقريبا روي هر صفحه اينترنتي قرار داد. از آن مهم‌تر، اين شركت‌ها‌ فرمت‌هاي تبليغاتي مورد علاقه ناشران و آژانس‌هاي تبليغاتي، مثل بنر و آگهي‌هاي Pop-up را كنار گذاشتند و به‌جاي آن از تبليغات متني استفاده مي‌‌كنند كه آزاردهنده نيستند، به ‌محتواي صفحه حساسند و بيشتر با توجه بازديدکنندگان همراه هستند.
جاي شگفتي نيست که سرويس‌هاي اينترنتي موفق ديگر هم رفتاري مشابه از خود نشان مي‌دهند ، eBay معاملات کوچک چند دلاري را بين افراد مختلف ممکن مي‌سازد و نپستر هم با تبديل سيستم هر کاربر به يک سرور کوچک ، مبادله فايل‌هاي صوتي را امکانپذير مي‌کرد.

Akamai در مقايسه با BitTorrent :
Akamai براي بهتر كردن خدمات خود بايد تعداد سرورهايش را افزايش دهد ولي BitTorrent مانند ساير سرويس‌هاي مبادله پاياپاي داده P2P ، قصد تمرکز زدايي از وب را دارد.اين سرويس هر كلاينت را مبدل به يک سرور مي‌کند.فايل‌ها به‌ قطعات كوچكي تقسيم مي‌‌شوند كه از چندين محل ارسال مي‌‌شوند و به‌اين‌ترتيب يک شبكه از سيستم‌هاي داراي فايل براي ساير كاربران پهناي باند و داده فراهم‌مي‌كند. به اين ترتيب هرچه يک فايل پرطرفدارتر باشد، سرعت انتشار آن بيشتر خواهد شد ، چون كاربران بيشتري پهناي باند آن را فراهم مي‌کنند.
هرچه تعداد كاربران يك سرويس بيشتر باشد، كيفيت آن بهتر خواهد شد ، اين يکي از اصول اساسي وب2 است.

استفاده از خرد جمعي و ويکي‌ها:
سرويس‌هاي شاخص وب 1 مانند ياهو بيشتر به دنبال پديد آوردن دايرکتوري‌ها و پورتال‌هاي اينترنتي بودند ، اين دايرکتوري‌ها و پورتال‌ها با استفاده از دانش و سليقه گروه بسيار محدودي از مديران ، صفحات را ارزشيابي مي‌کردند و به آنها لينک مي‌دادند.
اما در وب2 ، همگان به پردازش اطلاعات مي‌پردازند. در سايت eBay هزاران کاربر در مورد کيفيت محصولات ابراز نظر مي‌کنند؛سرويس‌هاي و ابزارهاي متنوعي به همگي امکان مي‌دهند ، صفحات و فايل‌هاي چند رسانه‌اي را برچسب‌گذاري کنند.
يکي از شاخص‌ترين سايت‌هاي وب2 ، wikipedia ، همه کاربرانش را مبدل به نويسندگان بزرگ‌ترين دانشنامه آنلاين جهان کرده است.

            شکل 2 : سايت دانشنامه آنلاين Wikipedia يكي از نمونه‌هاي وب2

وبلاگ‌نويسي و خرد توده‌ها:
وبلاگ‌ها و سرويس‌هايي که وبلاگ‌نويسي را آسان مي‌کنند ، بي‌شک يکي از مظاهر وب2 هستند. اما وبلاگ‌ها چه تفاوتي با سايت‌هاي قديمي شخصي دارند که در آنها هم ممکن بود نوشته‌هاي شخصي را بخوانيم؟تفاوت را بيشتر مي‌توان در چند چيز خلاصه کرد:
توالي زماني عرضه نوشته‌ها يکي از تفاوت‌هاي موجود است. به علاوه امکان تعامل خوانندگان و بازديدکنندگان وبلاگ‌ها را با صاحب وبلاگ و نوشته‌هايش را مي‌توان تحولي ديگر فرض کرد. اين تعامل از راه‌هاي مختلفي مانند گذاشتن کامنت و Trackback صورت مي‌گيرد.
وبلاگستان يک جريان دائمي و سيال افکار است. وبلاگ‌نويس‌ها علاوه بر اينکه توليدکننده محتوي هستند يک گروه بزرگ پردازش‌کننده اطلاعات وب هم محسوب مي‌شوند،آنها به عنوان گروهي که بيشتر از ساير مردم وب را رصد مي‌کنند ، با دادن لينک چه به صورت ساده در وبلاگ‌هايشان و چه در سرويس‌هاي لينک‌دهي جمعي و برچسب‌گذاري روي صفحه‌هاي وب ، صفحات وب را ارزشيابي کنند.

Feed وRSS :
feed وسيله‌اي براي انتشار همزمان و ساده اطلاعات است. از طريق آن کاربران مي‌تواند به جاي مشاهده و مراجعه ساده به صفحات اينترنتي ، مشترک آنها شوند و به محض به روز‌رساني يک صفحه ، از آخرين تغييرات آن آگاه شوند. در حال حاضر برنامه‌هاي آنلاين و دسک‌تاپ زيادي براي مطالعه فيدها وجود دارد.

مشارکت همگان در توليد محتوا :
اين روزها در وب کمتر از صحبت مالکيت ديتا مي‌شود. ديگر ، توليدکننده‌هاي انواع محتوا ، از متن و عکس گرفته تا ويدئو ، به چند سايت بزرگ با توانايي مالي زياد محدود نمي‌شود. هر کسي مي‌تواند به راحتي با استفاده از يکي از سايت‌هاي رايگان همچون flickr، Youtube ، wikipedia ، odeo ، سرويس‌هاي متنوع وبلاگ‌نويسي ، يک توليدکننده محتوا باشد.

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

رفع محدوديت سخت‌افزاري:
وب2 ، ديگر صرفا وسيله‌اي براي اتصال کامپيوترهاي شخصي به هم نيست ، وب2 مي‌کوشد همه اسباب و لوازم الکترونيکي را به هم متصل کند. iPodها ، گوشي‌هاي موبايل ، تلويزيون‌هاي اينترنتي و دوربين‌هاي ديجيتالي همه و همه در دنياي وب2 مي‌توانند بدون واسطه با اينترنت ارتباط برقرار کنند ، داده بگيرند و خود بر غناي محتواي آن بيفزايند.

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

سخن پاياني:
گرچه معيارها و مثال‌هاي زيادي در اين نوشته براي تعريف وب و تمايز آن با نسخه قبلي وب ، زده شد. اما وب2 را مي‌توان تنها در يک کلمه خلاصه کرد : مشارکت!
مشارکت همگان در توليد ، ارائه و پردازش اطلاعات. در واقع همه سرويس‌ها و برنامه‌هاي آنلاين تنها ظرفي براي اين مشارکت فراهم مي‌آورند.

 
 
 |    نوشته شده توسط محسن یزدانی
 
 
   
 
 

بدست آوردن پورت های سیستم با استفاده از سی شارپ :

foreach (string portName in System.IO.Ports.SerialPort.GetPortName())

{

                                    }                 System.Windows.Forms.MessageBox.Show(portName);

 

 
 
 |    نوشته شده توسط محسن یزدانی
 
 
   
 
 
آشنایی با خطای سخت افزاری سیستم

یکی از اصلی ترین عملیات کامپیوتر در هنگام روشن شدن عملیات POST یا Power On Self Test میباشد. که تمامی نرم افزارها و قطعات سخت افزاری لازم برای بوت سیستم را تست کرده و آماده به کار میکند و در واقع کامپیوتر شما بعد از فشردن کلید Pwoer توسط شما، در ابتدا تمامی فرمانها را از بایوس کامپیوتر دریافت می کند. از اینرو بایوس وظیفه دارد که مشکلات سخت افزاری را به شما گوشزد کند. همه بایوس ها در هنگام درست بوت شدن سیستم یک بوق کوتاه در شروع کارد میزنند که این بوق به معنی درست و کامل کار کردن تمامی نرمافزارها و سخت افزارهای اصلی سیستم است، اما گاهی نیز اتفاق می افتد که یک یا چندی از برنامه ها یا قطعات معیوب شده یا به عللی از انجام وظیفه باز می مانند، اینجاست که بایوس با تنها راه ارتباطی مستقیم با کاربر ( بوق ) شما را آگاه می سازد. کدهای بوقی بایوس AWARD : بایوس آوارد عمدتا به پیامهای خطا برای آگاه کردن کاربران از وجود مسئله اتکا دارد، اما چند کد بوقی مشهور وجود دارد که این تراشه بایوس تولید میکند: تعداد بوقها در عملیات Post مفهوم بوق نا محدود (تکرار شوند) خطای حافظه سیستم یک بوق بلند پس از دو بوق کوتاه خطای کارت گرافیک یک بوق باند پس از سه بوق کوتاه خطای گرافیک یا حفظه گرافیک بوقهای با ارتفاع بالای نا محدود (تکرار شونده) خطای داغ شدن پردازنده بوقهای با ارتفاع بالا ،با ارتفاع پایین ( تکرار شونده) خطای پرازنده کدهای بوقی بایوس AMIBIOS : بایوس AMIBIOS محصول شرکت American Megatrends یکی از بایوسهای متداول است و آخرین نگارش تعدادی کد بوقی دارد که اشکالات زمان بوت شدن را به کاربران می گوید: تعدا بو قها در زمان راه اندازی (پیش از POST) مفهوم بوقها 1 دیسکت را در دیسکران A: قرار دهید 2 فایل AMIBOOT.ROM بر روی دیسکت بوت شدنی نیست 3 خطای حافظه سیستمی 4 عملیات روز آمد سازی بایوس موفقیت آمیز بوده است 5 خطای خواندن دیسک 6 خرابی فرمان صفحه کلید 7 حافظه فلش بایوس تشخیص داده نشده است 8 خرابی کنترل کننده دیسکت ران 9 خطای مجموع بررسی (checksum) بایوس 10 خطای پاک کردن حافظه فلش 11 خطای برنامه سازی حافظه فلش 12 اندازه فایل AMIBOOT.ROM درست نیست ( یا حضور ویروس) 13 نا همسانی تصویر BIOS ( فایل ROM دقیقا همان نسخه درون بایوس نیست) تعداد بوقها در زمان POST 1 خطای Timer احیای حافظه سیستم 2 خطای پریتی حافظه سیستم 3 خطای آزمایش خواندن / نوشتن حافظه سیستم 4 زمان دار تخته مدار مادر کار نمیکند 5 خطای پردازنده 6 کامپیوتر نمی تواند به حافظه حالت حفاظت شده برود 7 خطای استثنای عمومی (مربوط به پردازنده) 8 خطای حافظه نمایش ( مربوط به کارت ویدئویی) 9 خطای مجموع بررسی AMIBIOS ROM 10 خطای خواندن / نوشتن رجیستر CMOS 11 اشکال آزمایش حافظه نهانگاهی (cache) نکته : اگر موقع عملیات POST یک ، دو یا سه بوق بشنوید، تعویض کارتهای RAM را در نظر بگیرید یا دست کم آنها را بررسی کنید تا اطمینان یابید که درست نصب شده اند. اگر در عملیات POST هشت بوق بشنوید اطمینان یابید که کارت ویدئویی درست نصب شده است، ممکن است لازم باشد که آن را عوض کنید. اگر موقع عملیات POST تعداد بوقها با آنچه گفته شد متفاوت بود ( چهار تا هفت یا 9 تا یازده بوق)، ممکن است یک مسئله جدی در تخته مدار مادر یا قطعات دیگر وجود داشته باشد، کامپیوتر را به یک تعمیرگاه تخصصی ببرید.

 
 
 |    نوشته شده توسط محسن یزدانی
 
 
   
 
 

دستورات Run :

ترفند های ویندوز XP ،دستورات زیر را می توانید در منوی Run Box و بهتر است در cmd اجرا شوند.

Driverquery : فهرست کردن تمامی راه اندازهای (ِDRIVER) نصب شده بر روی سستم

DISKPART : انجام پارتیشن بندی دیسک

DEFRAG: انجام عمل یکپارچه سازی دیسک

BOOTCFG: نمایش محتویات فایل BOOT.INI

IPCONFIG : نمایش جزیات پیکره بندی

PAGEFILECONFIG : تنظیم حافظه مجازی

SYSTEMINFO: نمایش اطلاعات سیستم

TASKKILL: پایان دادن و حذف کردن یک یا چند وظیفه در TASK

TASKLIST: فهرست وظایف

HOSTNAME : دریافت نام میزبان

NETSTAT : پیاده سازی TCP/IP NETSTAT

RSH : پیاده سازی TCP/IP RSH

NSLOOKUP : انجام فرمان LOOKUP (نمایش نام سرویس دهنده و آی پی و ...)

MSCONFIG : انجام مدیریت برنامه های STARTUP و سرویس ها

SFC /SCANNOW : تعمیر ویندوز

 
 
 |    نوشته شده توسط محسن یزدانی
 
 
   
 
 

بر گرفته از وب گروه غیر متعهد ها

مقدمه ای بر WPF 

مقدمه

هنگامی­که NET. برای اولین بار پا به عرصه ظهور گذاشت، تکنولوژی­های جدیدی را در زمینه برنامه­نویسی معرفی نمود. به عنوان مثال می­توان به موارد زیر اشاره کرد:

یک روش کاملاً جدید برای ایجاد برنامه­های تحت وب (ASP.NET).

یک روش کاملاً جدید برای اتصال به پایگاه­های داده (ADO.NET).

زبان­های نوع­امن جدید (#C و VB.NET).

مدیریت برنامه­ها در زمان اجرا (CLR).

در میان این تکنولوژی­ها فرم­های ویندوز، که در واقع کتابخانه­ای از کلاس­های موجود برای ایجاد برنامه­های ویندوزی می­باشد، بیشتر مورد استفاده قرار می­گیرد. هر چند فرم­های ویندوز، ابزاری کامل و با تمام خصوصیات برای ایجاد برنامه­های ویندوزی می­باشند، اما وابستگی شدیدی به اساس کار ویندوز دارند که برای بیش از یک دهه تغییرات زیادی در آن اعمال نشده است.

            بیشترین وابستگی فرم­های ویندوز، مربوط به استفاده از APIهای ویندوز به منظور ایجاد یک نمای بصری برای برنامه­های کاربر می­باشد. در این مورد می­توان به APIهایی که برای ایجاد دکمه، جعبه متن و ... استفاده می­شود اشاره کرد. بالنتیجه نمی­توان در کنترل­هایی که با استفاده از این روش ایجاد می­شوند، تغییرات زیادی اعمال کرد (تا قبل از پیدایش WPF اکثر کاربران از همین روش برای ایجاد کنترل­های استاندارد و مورد نظرشان استفاده می­نمودند). به عنوان مثالی در این مورد، اگر بخواهید یک دکمه با متن درخشان و شیک ایجاد کنید، دیگر نمی­توانید از توابع API که برای ایجاد کنترل Button در نظر گرفته شده­اند استفاده کنید. برای این منظور باید ابتدا یک UserControl ایجاد کنید و سپس عملیات ترسیمی مربوط به جنبه­های مختلف دکمه را با استفاده از مدل طراحی سطح پایین انجام دهید.

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

(از اینجاش جدیده)

            اساس نمایشی ویندوز (WPF) برای حل این معضلات یک ساختار کاری کاملاً جدید را معرفی کرده است. البته WPF از کلیه کنترل­های استانداردی که تاکنون از آنها استفاده می­نمودید، پشتیبانی می­کند؛ اما برای ایجاد یک کنترل کلیه ترسیمات مربوط به متن، حاشیه و پس زمینه را خودش(WPF) انجام می­دهد. با این تفاصیل، WPF می­تواند با ارئه ویژگی­های قدرتمندتری به برنامه نویس اجازه دگرگون کردن روشی که محتوای هر قسمت از صفحه نمایش رندر می­شود را بدهد. با استفاده از این ویژگی­ها می­توانید سبک کنترل­های عمومی موجود مانند دکمه را بدون نوشتن کد دوباره طراحی کنید. به شیوه مشابه­ای می­توانید با استفاده از اشیاء تبدیل، هر چیزی که بر روی واسط نمایشی برنامه قرار دارد را دستخوش تغییرات کنید. این تغییرات عبارتند از:

چرخش

کشیدن

بزرگ­نمایی

انحراف (کج کردن)


نکته: البته برای انجام تغییرات ذکر شده درست قبل از ارائه به کاربر می­توانید از سیستم پویانمایی bake-in که از ابزارهای WPF می­باشد، استفاده کنید.

            ساختار ویژگی­های جدید در WPF، در واقع یک ساختار جدید و قدرتمند که براساس DirectX و APIهایِ گرافیکی سریعِ سخت افزاری، که معمولاً در اکثر بازی­های کامپیوتری مدرن استفاده می­شوند، پایه­گذاری شده است. این بدان معناست که برنامه­نویس می­تواند از Effectهای گرافیکی جالب، بدون توجه سربار اجرایی که به دلیل استفاده از فرم­های ویندوزی ممکن است به وجود آید، استفاده کند. در حقیقت می­توانید از ویژگی­های پیشرفته­ای مانند پشتیبانی از فایل­های ویدئویی و محتویات 3D در فرم­های ویندوزی استفاده کنید.

            با به کارگیری این ویژگی­ها( به همراه یک ابزار طراحی مناسب) امکان ایجاد واسط­های کاربری تحریک کننده چشم و Effectهای بصری ویژه وجود خواهد داشت. البته باید مجدداً خاطرنشان کنیم که انجام چنین کار­هایی با استفاده از فرم­های ویندوزی تقریباً غیرممکن است.

            با توجه به اینکه ویژگی­های مربوط به پویانمایی، 3D و فایل­های ویدئویی بیشترین توجه در WPF را معطوف خود می­کند، باید توجه داشته باشید که با استفاده از WPF می­توانید برنامه­های ویندوزی معمولی را با استفاده از خصوصیات بصری ساده (قدیمی) نیز ایجاد کنید. به عبارت دیگر استفاده از کنترل­های معمولی تا هنگامی که WPF در فرم­های ویندوزی کار می­کند به سادگی امکان پذیر است. حتی می­توان این طور بیان کرد که WPF ویژگی­هایی که مستقیماً به توسعه دهندگان تجاری می­شود را تسهیل بخشیده است. این ویژگی­ها به طور گسترده­ای شامل مدل انقیاد داده­ها، یک مجموعه جدید از کلاس­ها برای چاپ محتویات و مدیریت صف­های چاپ و یک مشخصه متنی برای نشان دادن متن­های بزرگ قالبدار می­شوند.

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

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

 WPF یک چارچوب نمایشی کاملاً جدید است که توانایی­های بسیاری از چارچوب­های قبلی را مانند  GDI+، GDI، User و HTML با یکدیگر ترکیب کرده است و توانایی تاثیر گزاری بر روی ابزارهای ایجاد پویانمایی در وب مانند Flash را نیز دارد. البته بر روی برنامه­های ویندوزی مانند Microsoft Word نیز تاثیرگذار است.

 

معرفی WPF

اساس نمایشی ویندوز یک سیستم نمایش گرافیکی جدید برای سیستم عامل ویندوز می­باشد. این تکنولوژی برای NET. طراحی شده است و همچنین تاثیر زیادی بر تکنولوژی­های نمایشی جدیدی مانند HTML و Flash داشته و باعث بهینه سازی سرعت سخت افزار می­گردد. WPF شامل تغییرات بنیادینی در زمینه واسط­ گرافیکی ویندوز از زمان Windows 95 می­باشد.

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

 

درک گرافیک ویندوز

درک مزایای مهیج و زیبای WPF بدون پی بردن به این نکته که چگونه برنامه نویسان ویندوز از تکنولوژی­های نمایشی مشابه و یکسان برای بیش از 10 سال استفاده می­کردند واقعاً سخت است.

   یک برنامه ویندوزی جدید که با زبان #C و یا VB.NET نوشته می­شود، به صورت غیر مستقیم به دو بخش اصلی سیستم­عامل ویندوز  برای ایجاد واسط گرافیکی­اش وابسته است:

User32: این قسمت عهده­دار فراهم آوردن نمایی شبیه ویندوز برای برنامه است و با عناصری مانند فرم­ها، دکمه­ها، جعبه­های متن و ... سر و کار دارد.

GDI/GDI+: این قسمت پشتیبان ترسیمی برای ایجاد اشکال، متن­ها و تصاویر در قبال هزینۀ پیچیدگی­های اضافی در برنامه می­باشد (البته معمولا عملکرد آن بی زرق و برق است).

 

هر دو تکنولوژی در سال­های متمادی مورد بازبینی­های متعدد قرار گرفتند و APIهایی که برای تعامل برنامه نویسان با آنها در نظر گرفته شده بودند نیز تغییرات چشمگیری داشته اند. اما هنگامی که برنامه نویسان قصد داشتند در برنامه ای (چه با #C و NET 2.0 و یا زبان­های قدیمی­تر مانند VB6 و حتی کدهای برپایه  ++MFC C) اقدام به ایجاد تصاویر دستی کنند قسمت­های یکسانی از سیستم عامل ویندوز در پشت پرده در حال کار بودند. Frameworkهای جدیدتر روش­های بهتری برای تعامل با User32 و همچنین +GDI/GDI ارائه کردند. این روش­ها بهبودهای زیادی در کارآیی برنامه، کاهش پیچیدگی برنامه به همراه داشتند. البته این روش­ها ویژگی­هایی نیز اضافه می­کردند که با استفاده از آنها برنامه نویس نیازی به کدنویسی زیاد نداشت. اما این روش­ها نیز نتوانستند محدودیت­های اساسیِ اجزای اصلی سیستم که بیش از یک دهه از طراحی آن می­گذشت را حذف کنند.

نکته: اساسی­ترین تقسیم وظایف میان User32 و +GDI/GDI حدود ۱۵ سال پیش ارائه شده بود و برای Windows 3.0 دارای ساختاری مناسب بودند. البته در آن زمان User32 در واقع با نام User معرفی گردید زیرا هنوز سیستم­های 32 بیتی ایجاد نشده بودند.

 

DirectX: موتور گرافیکی جدید

مایکروسافت برای رهایی از محدودیت­های موجود در کتابخانه­های User32 و +GDI/GDI تکنولوژی جدیدی را مورد استفاده قرار داد. این تکنولوژی در واقع همان DirectX می­باشد. DirectX به عنوان یک ابزار مستعد خطا و متحد برای ایجاد بازی های کامپیوتری بر روی پلتفرم ویندوز کار خود را آغاز کرد.

            هدف اصلی در طراحی DirectX افزایش سرعت بود؛ از اینرو مایکروسافت به تعمال نزدیکی با سازندگان کارت­های ویدئویی به منظور فراهم کردن شتاب سخت افزاری لازم که برای الگوهای گرافیکی پیچیده لازم بودند و همچنین effectهای ویژه ای مانند شفافیت و گرافیک سه بعدی پرداخت.

            این تکنولوژی در طول سال­های بعد از اولین انتشارش (مدتی بعد از Windows 95) رشد­های قابل ملاحظه­ای داشته است و هم اکنون یکی از اجزای لاینفک در سیستم عامل ویندوز می­باشد که از تمامی کارت­های ویدئویی پشتیبانی می­کند. اگرچه APIهای برنامه نویسیِ DirectX هنوز هم اساس کار آن را به عنوان ابزاری برای توسعه بازی معرفی می­کنند، اما به علت پیچدیگی زیاد کار با آنها، از DirectX تقریباً در هیچ یک از برنامه­های ویندوزی (مانند برنامه­های تجاری)استفاده نمی­شود.

            WPF تمامی این مشکلات را برطرف کرده است. در WPF از تکنولوژی­های +GDI/GDI به عنوان پایه کار استفاده نمی­شود. در عوض از DirectX استفاده می­شود. در برنامه­های WPF بدون توجه به اینکه برنامه نویس چه واسط کاربری را ایجاد می­کند از DirectX استفاده می­شود. این بدان معناست که اگر شما بخواهید یک طرح گرافیکی پیچیده و سه بعدی ایجاد کنید و یا یک دکمه به همراه متنی آشکار ایجاد کنید، تمامی کار­های ترسیمی از طریق DirectX انجام می­شود. بالنتیجه، می­توانید در تمامی برنامه­های تجاری می­توانید به سادگی از effectهای غنی را بدون هیچ مشکلی به کار برید. همچنین می­توانید از مزایایِ شتاب­دهنده سخت­افزاری نیز بهره­مند شوید. این بدان معناست که DirectX به کارهایِ زیادی که به GPU مرتبط است دخالت نمی­کند و به انجام کارهای دیگری می­پردازد.

 نکته: GPU یک پردازشگر مجزا است که بر روی کارت­های ویدئویی نصب می­شود.          

نکته: DirectX نسبت به +GDI/GDI کارآیی بهتری دارد؛ زیرا درک دقیقی از عوامل سطح بالا مانند گرادیان­ها (شیب) و همچنین الگوها را که می­توانند مستقیماً توسط کارت ویدئویی انجام شوند را دارد اما +GDI/GDI از این مزیت بی­بهره­اند. از اینرو برای انجام چنین کار­هایی توسط +GDI/GDI باید دستورات مربوطه را به دستورات پیکسل به پیکسل تبدیل کرده و سپس اجرا کنید. بدیهی است که این عمل مدت زمانی طولانی­تری را به خود اختصاص می­دهد و بسیار کند عمل می­کند.

   تنها عنصری که هنوز در صحنه حاضر است User32 (با کمی محدودیت) می­باشد. این امر بدان دلیل است که WPF هنوز از User32 برای انجام سرویس­های خاصی مانند اجرای دریافت ورودی­ها ودسته­بندی اینکه هر برنامه دربردارنده چه قسمتی از صفحه نمایش می­باشد. با این حال کلیه عملیات ترسیمی توسط DirectX انجام می­پذیرد.

نکته: باید توجه داشته باشید که WPF یک روپوش جدید برای +GDI/GDI نیست؛ بلکه یک جایگزین برای آنها می­باشد. (یک لایه جدید که با DirectX کار می کند)

نکته: در پشتیبانی نرم­افزاری WPF یک حالت استثناء وجود دارد. به علت پشتیبانی ضعیف راه­اندازها، WPF فقط هنگامی عمل خوشنماسازی را برای ترسیمات 3D انجام می­دهد که برنامه بر روی ویندوز Vista اجرا گردد (همچنین باید یک راه­انداز محلی در ویندوز ویستا برای کارت ویدئویی نیز داشته باشید). این بدان معناست که اگر تصویر سه بعدی را بر روی سیستم عامل Windows XP رسم کنید، احتمالاً با لبه­هایی دندانه­دار در انتها تصویر مواجه خواهید شد. اما اگر همان تصویر را در Windows Vista اجرا کنید لبه­های تصویر روان و سلیس خواهند بود. خوشنماسازی برای ترسیمات 2D بدون در نظر گرفتن سیستم عامل پیاده­سازی شده است.

 نکته: با داشتن یک کارت ویدئویی قدرتمند، تضمینی برای داشتن سرعت و کیفیت در WPF وجود ندارد. نرم­افزار­ها در این مورد نیز نقش مهمی را ایفا می­کنند.

نکته: هدف اصلی WPF پردازش کارهای گرافیکی توسط GPU برای می­باشد. به جای استفاده از CPU اصلی کامپیوتر برای پردازش روتین­های گرافیکی پیچیده از GPU که بر روی کارت گرافیکی به صورت مجزا وجود دارد استفاده می­شود. با این کار CPU برای انجام فعالیت­های دیگر آزاد باقی می­ماند و از کارت ویدئویی استفاده مناسب و حداکثر صورت خواهد گرفت.

 درجه بندی­های WPF

کارت­های ویدئویی بسیار با یکدیگر متفاوت می­باشند. هنگامی که WPF یک کارت ویدئویی را مورد دسترسی قرار می­دهد، فاکتورهای مهمی را مد نظر قرار می­دهد:

میزان حافظه RAM در آن کارت.

پشتیبانی از پیسکل­های سایه­دار.

پشتیبانی از vertexهای سایه دار.

....

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

Rendering Tier 0: کارت­های ویدئویی با این درجه، از هیچگونه شتاب (بهینگی) سخت­افزاری پشتیبانی نمی­کنند. این درجه معادل استفاده از نسخه­های  DirectX 7.0 به پایین می­باشد.

Rendering Tier 1: کارت­های ویدئویی این دسته قسمتی از خصوصیات شتاب سخت­افزاری را پشتیبانی می­کنند. این درجه معادل استفاده از  DirectX 7.0 تا DirectX 9.0 می باشد.

Rendering Tier 2: کارت­های این قسمت، از تمامی ویژگی­های شتاب سخت­افزاری حمایت می­کنند. این دسته معادل استفاده از DirectX 9.0 به بالا می باشد.

 

ممکن است بخواهید درجه­ای که برای کارت گرافیکی شما در نظر گرفته شده است را مشاهده کنید. برای این کار می­بایست مقدار خصوصیت Tier که در کلاس System.Windows.Media.RenderCapability وجود دارد را بازیابی کنید. برای تطبیق این مقدار با درجه بندی­های فوق می­بایست مقدار خصوصیت Tier را 16 بیت به سمت راست شیفت دهید. در زیر نمونه این کد آورده شده است:

int  renderingTier = (RenderCapability.Tier >> 16);

 

نکته: برای استفاده از کلاس­های موجود در فضانام فوق می­بایست اسمبلی PresentationCore را به Referenceها اضافه کنید.

 

WPF: یک API با سطح بالاتر

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

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

یک مدل ترسیماتی غنی: در WPF به جای رسم کردن پیکسل­ها با چند مورد از اشکال پایه­ای و ابتدایی، بلوک­های متنی و عناصر گرافیکی دیگر سروکار خواهیم داشت. البته در میان مزایای فوق نباید پشتیبانی ذاتی از ترسیمات 3D را از یاد برد.

نکته: پشتیبانی از ترسمیات از ترسمیات 3-D در WPF قدرت برابری با OpenGL و یا Direct3D را ندارد. اگر قصد دارید که برنامه­ای که ترسیمات سه بعدی سنگینی را در بردارد پیاده­سازی کنید (مانند بازی­های امروزی) WPF 1.0 احتمالاً جوابگوی کار شما نخواهد بود.

 یک مدل متنی غنی: سال­ها پس از نشان دادن متن­ها در کنترل­های ضعیفی مانند Labelها، WPF برای برنامه­های ویندوز قابلیت نشان دادن متن­ها با سلیقه­های مختلف در هر نقطه از واسط کاربری را به ارمغان آورده است.

پویانمایی به عنوان بهترین مفهوم برنامه نویسی: تاکنون می­تواستید با استفاده از زمان­سنج فرم برنامه را مجبور به دوباره­سازی خودش کنید. اما در WPF، پویانمایی یک جز طبیعی و ذاتی در Framework می­باشد. برای این منظور ابتدا انیمیشن­ها را با استفاده از تگ­های اعلانی تعیین می­کنیم و سپس WPF آنها را در دستور کار قرار می­دهد.

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

 سبک­ها و قالب­ها: با استفاده از قالب­ها و سبک­ها می­توانید نحوه رندر شدن عناصر برنامه و ... را به صورت دلخواه تغییر دهید.

دستورات: برای بسیاری از کاربران انجام یک کار چه از طریق منوها با نوار ابزار فرقی ندارد؛ زیرا نتیجه هر دو یکسان است. به همین منظور با استفاده از WPF می توان دستورات را در جایی قرار داد و به آنها اشاره کرد.

 واسط کاربری اعلانی: هر چند برنامه نویسان می­توانند پنجره­های WPF را با استفاده کدنویسی ایجاد کنند، اما VS.NET از روش دیگری استفاده می­کند. VS.NET هر عنصر در پنجره را به صورت تگ­های XML در XAML ایجاد می­کند. مزیت این کار جداسازی کدهای اصلی برنامه از کدهای مربوط به واسط کاربری می­باشد. همچنین update کردن واسط با استفاده از ابزار­هایی که برای این منظور در نظر گرفته شده است بسیار راحت تر خواهد بود.

برنامه های براساس صفحه: با استفاده از WPF، می توانید برنامه­هایی مانند مرورگر­ها ایجاد کنید. این برنامه­ها به شما اجازه می­دهند در مجموعه صفحات حرکت کنید، اطلاعات را کامل کنید و با استفاده از دکمه­ها foreward/backward به صفحه­های بعد و قبل حرکت کنید.

 

ساختار ارتباطی WPF

با یک نگاه به تصویر زیر معماری WPF را درک خواهید کرد.

WPF

 

 
 
 |    نوشته شده توسط محسن یزدانی
 
 
   
 
  بر گرفته از وبلاگ گروه غیر متعهد ها

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

هفت گناه نابخشودني راهبر لينوكس

به منظور كنترل دسترسي‌ها و ساير مسائل امنيتي در زمينه كامپيوتر بعضي از مسئولين سايت‌ها و ساير عوامل ذينفع، هزينه‌هاي بسيار گزافي را صرف تهيه و خريد نرم‌افزار و سخت‌افزار مي‌نمايند. ولي غافل از اينكه از كنار مسائل بسيار ساده و پيش افتاده امنيتي جهت محفوظ نگه داشتن اطلاعات مي‌گذرند.

در اين مقاله كوتاه سعي شده كه به 7 مطلب ساده و پيش پاافتاده در زمينه حفاظت اطلاعات پرداخته شود. 7 مطلب ساده و پيش پاافتاده‌اي كه با عدم رعايت آنها امكان به خطر افتادن سيستم اطلاعاتي يك سازمان وجود دارد.


خطاهاي هفتگانه

1-      انتخاب اسم رمز ساده و يا اسامي رمز پيش فرض

2-      باز گذاشتن درگاه‌هاي(port) شبكه

3-      استفاده از نرم‌افزارهاي قديمي

4-      استفاده از برنامه‌هاي نا‌امن و يا پيكربندي شده به‌صورت نادرست

5-      ناكافي بودن منابع و يا نامناسب بودن ارجحيت‌ها

6-      نگهداري UserIDهاي قديمي و غيرلازم و تهيه شناسه‌هاي عمومي

7-      به تعويق انداختن فعاليت‌هاي مهم در زمينه ايجاد امنيت

 

انتخاب اسم رمز ساده و يا اسامي رمز پيش فرض

با توجه به سريع شدن پردازنده‌ها و امكان دسترسي به نرم‌افزارهايي كه اسامي رمز را كشف مي‌نمايند، حتي با انتخاب اسامي رمز پيچيده نيز، رمز مي‌تواند شكسته شود.

با استفاده از ابزارهايي كه در سيستم‌عامل Unix/Linux پيش‌بيني شده است مسئول سيستم مي‌تواند اجازه توليد اسامي رمز و ساير مسائل مرتبط را كنترل نمايد.

در بعضي از سيستم‌عامل‌هاي يونيكس فايلي با نام passwd تحت /etc/default وجود دارد كه راهبر يونيكس مي‌تواند با ايجاد تغييراتي در آن به كاربر اجازه ندهد كه اسامي رمز ساده را انتخاب نمايد. اما در لينوكس به اندازه كافي كنترل‌ بر روي اسم رمز انجام مي‌گردد و مي‌توان تا حدي مطمئن بود كه كاربر نمي‌تواند اسامي رمز ساده انتخاب نمايد.

فراموش نگردد كه مسئول سايت (راهبر سيستم) اين اختيار را دارد كه اسامي رمز ساده‌اي را براي كاربران تهيه نمايد، كه اين كار خطاي مسلم راهبر مي‌باشد. چرا كه هر اسم رمز ساده دروازه‌اي براي ورود افراد مهاجم بوده و فرد مهاجم پس از وارد شدن به سيستم مي‌تواند با استفاده از نقاط ضعف ديگر احتمالي و به‌وجود آوردن سر ريز بافر(Buffer Overflow) كنترل سيستم را در ‌دست بگيرد. در بسياري از سيستم‌هاي فعلي Unix/Linux مجموعه امكانات PAM(Pluggable Authentication Modules) نصب بوده و توصيه اكيد مي‌گردد كه مجموعه زير را براي بالا بردن امنيت سيستم تحت /etc/pam.d و در فايل passwd قرار گيرد.


passwd password requisite usr/lib/security/pamcraklib.so retry=3

passwd password required /usr/lib/security/pam_pwdb.so use_authtok



در زمان اجراي برنامه passwd، كتابخانه‌هاي پويا(Dynamic) با نام‌هاي pamcraklib.so و pam_pwdb.so به برنامه متصل شده و كنترل‌هاي لازم را انجام خواهند داد.

مجموعه نرم‌افزارهاي craklib اين امكان را به سيستم اضافه مي‌نمايد تا كنترل نمايد كه آيا اسم رمز تهيه شده توسط كاربر شكستني است يا خير. فراموش نگردد كه فرمان passwd تابع راهبر سيستم بوده و راهبر سيستم مي‌تواند اسم رمز ساده را انتخاب نمايد و اين عمل گناهي نابخشودني را براي مسئول سيستم ثبت خواهد نمود. در مورد اسامي رمز پيش فرض كه در نصب بعضي سوئيچ‌ها و مسيرياب‌ها وجود دارد، راهبر سيستم مي‌بايست در اسرع وقت (زمان نصب) اسامي رمز از پيش تعيين شده را تعويض نمايد.


 باز گذاشتن درگاه‌هاي شبكه

هر درگاه باز در TCP/IP مي‌تواند يك دروازه ورودي براي مهاجمين باشد. باز گذاشتن درگاه‌هايي كه محافظت نشده و يا بدون استفاده مي‌باشند، به مهاجمين اجازه مي‌دهد به‌ نحوي وارد سيستم شده و امنيت سيستم را مخدوش نمايند. فرمان‌هاي زيادي مانند finger وrwho و غيره وجود دارند كه افراد مهاجم مي‌توانند با اجراي آنها در شبكه و قرار دادن آدرس كامپيوتر مقصد، اسامي كاربران و تعداد زيادي از قلم‌هاي اطلاعاتي مربوط به كاربران را به‌دست آورده و با حدس زدن اسم رمز وارد سيستم گردند. به‌ وسيله‌ي ابزارهاييي كه در سيستم‌عامل Unix/Linux وجود دارد مي‌توان درگاه‌هاي باز را پيدا نموده و تمهيدات لازم را انجام داد. يكي از اين فرمان‌ها nmap است كه با اجراي اين فرمان و قرار دادن optionهاي لازم و وارد نمودن آدرس IP، درگاه‌هاي كامپيوتر مورد نظر را پيدا نموده و فعاليت‌‌هاي اخلال گونه را انجام داد. راهبر سيستم با اجراي فرمان netstat –atuv مي‌تواند سرويس‌هايي كه در حال اجرا هستند را مشخص نموده و به‌ وسيله انواع روش‌هايي كه وجود دارد سرويس را غير فعال نمايد و شايد يك روش مناسب پاك كردن برنامه هاي سرويس دهنده و يا تغيير مجوز آن به 000(به‌وسيله فرمان chmod) باشد. در هرحال مي‌توان با فرمان chkconfig اجراي بعضي از سرويس‌ها را در زمان بالا آمدن سيستم متوقف نمود. به‌ عنوان مثال با فرمان chkconfigg –del portmap مي‌توان سرويس portmap را غيرفعال نمود.


 استفاده از نرم‌افزارهاي قديمي

توصيه مي‌شود كه از نرم‌افزارهايي كه نسخه‌هاي جديد آن به دليل وجود اشكالات امنيتي در نسخه‌هاي قديمي روانه بازار شده است، استفاده شود و گناهي بس نابخشودني است كه راهبر سيستم با استفاده از نرم‌افزارهاي قديمي راه را براي سوء‌استفاده كننده‌گان باز بگذارد.

به عنوان مثال فرمان ls داراي مشكلي بوده كه با قرار دادن آرگوماني خاص مي‌توان سرريز بافر به‌ وجود آورده و كنترل سيستم را به‌دست گرفت. شايد در ماه گذشته بود كه مجموعه نرم‌افزار مربوط به نمايش اسامي فايل‌ها و شاخه‌ها(ls , lx , lr ,….) در سايت‌هاي مهم قرار داده شد تا استفاده كننده‌گان لينوكس آن را بر روي سيستم خود نصب نمايند.


 استفاده ازبرنامه‌هاي ناامن و يا پيكربندي شده به ‌صورت نادرست

به‌ دليل مسائل خاصي بعضي از سيستم‌ها نياز به مجوزهاي خاص داشته و اعمال مجوزها مي‌تواند مسائل غيرقابل پيش‌بيني را به‌وجود آورد و ضمناً با پيكربندي نامناسب نرم‌افزار، راه براي سوءاستفاده كنند‌گان باز خواهد شد.

به‌ عنوان مثال نرم‌افزارهايي وجود دارد كه براي اجرا شدن، مجوز s (Set UserID) را لازم داشته و اين مجوز در حالتي كه صاحب فايل اجرايي root باشد، بسيار خطرناك است. فرماني كه اين اجازه را دارد با اجراي فراخوان‌هاي سيستم(System call) مانندsetid تغيير مالكيت داده و قدرتroot را كسب مي‌نمايد و راهبر سيستم مي‌بايست تاوان اين گناه نابخشودني را نيز بدهد.

به عنوان مثال استفاده از FTP و telnet كه اطلاعات را عيناً بر روي شبكه منتقل مي‌نمايند، مي‌تواند نگراني‌هايي را براي مسئول سايت به‌ وجود آورده و شايد راه‌اندازيsshd(secure shell daemon) بتواند كمي از گناهان مسئول سيستم بكاهد و در مورد پيكربندي نادرست فايل‌ها بتوان نامي از فايل .rhosts برد كه مجوز نادرست مي‌تواند باعث لو رفتن اسم رمز گردد. بد نيست به‌ وسيله فرمان find اسامي فايل‌هايي كه مجوز s را داشته كنترل نموده تا خداي ناكرده برنامه اجرايي با مجوز s در سيستم اضافه نگردد.

ضمناً مسئول سيستم در اجراي دستور mount نيز مي‌بايست دقت فراوان داشته باشد تا برنامه‌هايي كه مجوز s بر روي سي‌دي و فلاپي وجود دارد، اجرا نگردد.


 ناكافي بودن منابع و يا اختصاص دادن ارجحيت نامناسب

كم نمودن هزينه‌هاي مربوط به امنيت و عدم آموزش‌هاي لازم و تهيه ننمودن نرم‌افزارهاي بازدارنده مي‌تواند تعدادي مسائل غيرقابل پيش‌بيني به وجود آورد. مخصوصاً جابجايي اولويت‌هاي هزيه نمودن اعتبارات مي‌تواند امنيت سيستم را خدشته‌دار نمايد. لازم به يادآوري است كه اين مطلب فني نبوده و مديريتي مي‌باشد ولي راهبر سيستم مي‌بايست مرتباً نكات لازم را در اين زمينه به مقامات مسئول گوشزد نمايد تا مديريت ارشد سازمان بيش از بيش به اهميتِ امنيت پي برده و هزينه‌هاي لازم را تامين نمايند. عدم اطلاع رساني مسؤول سايت دراين زمينه به مديريت‌هاي مافوق كه احتمالاً در اين زمينه نيز تخصصي ندارند، گناهي نابخشودني است.

 

نگهداري UserIDهاي قديمي و غيرلازم و تهيه شناسه‌هاي عمومي

نگهداري UserIDهاي قديمي و شناسه‌هايي مانند TEST مي‌تواند معضلات زيادي را به وجود آورده و امكان سوء استفاده را بالا برد. تهيه‌ي شناسه‌هاي عمومي نيز به دليل نامشخص بودن هويت اصلي كاربر مي‌تواند مشكل‌زا باشد.

مسؤول سايت مي‌بايست رويه‌اي را براي كشف UserID هاي غير فعال اتخاذ نمايد و به‌ وسيله‌ي هر روشي كه صلاح مي‌داند پس از تهيه فايل پشتيبان لازم، UserIDهاي غيرفعال را در مقاطع معيني متوقف نمايد و شايد يكي از بهترين روش‌ها براي اين كار عوض نمودن اسم رمز باشد. به عنوان مثال به وسيله دستور زير مي‌توان UserID با نام someone را غير فعال نمود:


chmod 000 /home/someone


توليد UserID هاي عمومي مانند test و guest و غيره كه مورد علاقه بسياري از مهاجمين است، يكي از گناهان غيرقابل بخشش راهبر سيستم مي‌باشد.


 به تعويق انداختن فعاليت‌هاي مهم در زمينه ايجاد امنيت

با كم اهميت دادن مسائل حفاظتي از جمله عدم نصب ترميم‌ها(Patch) و عدم تهيه فايل‌هاي پشتيبان، مي‌توان گفت كه مسئول سيستم تير خلاص را به كامپيوتر تحت الحفظ خود شليك نموده است و چنان گناهكار خواهد بود كه بخشش جايز نمي‌باشد.

 
 
 |    نوشته شده توسط محسن یزدانی
 
 
   
 
 

تجزیه یک آدرس اینترنتی (Uri parsing)

با استفاده از اين ابع شما مي توانيد يك آدرس اينترنتي را تجزيه كنيد

چند نكته :‌

1-      اين كد فقط در .net 3  جواب خواهد داد

2-      فضاي نام system.net.uri  بايد اضافه شود

 

public static void ParseUri(Uri uri)

        {

            try

            {

                // System.Net.Uri class constructor has parsed it for us.

                // new Uri("http://user:password@localhost:8080/www.abc.com/

                // home%20page.htm?item=1233#stuff")

                StringBuilder uriParts = new StringBuilder();

                uriParts.AppendFormat("AbsoluteURI: {0}{1}",

            uri.AbsoluteUri, Environment.NewLine);

                uriParts.AppendFormat("AbsolutePath: {0}{1}",

                uri.AbsolutePath, Environment.NewLine);

                uriParts.AppendFormat("Scheme: {0}{1}",

                uri.Scheme, Environment.NewLine);

                uriParts.AppendFormat("UserInfo: {0}{1}",

                uri.UserInfo, Environment.NewLine);

                uriParts.AppendFormat("Authority: {0}{1}",

                uri.Authority, Environment.NewLine);

                uriParts.AppendFormat("DnsSafeHost: {0}{1}",

            uri.DnsSafeHost, Environment.NewLine);

                uriParts.AppendFormat("Host: {0}{1}",

                uri.Host, Environment.NewLine);

                uriParts.AppendFormat("HostNameType: {0}{1}",

                uri.HostNameType.ToString(), Environment.NewLine);

                uriParts.AppendFormat("Port: {0}{1}", uri.Port, Environment.NewLine);

                uriParts.AppendFormat("Path: {0}{1}", uri.LocalPath, Environment.NewLine);

                uriParts.AppendFormat("QueryString: {0}{1}", uri.Query, Environment.NewLine);

                uriParts.AppendFormat("Path and QueryString: {0}{1}",

                uri.PathAndQuery, Environment.NewLine);

                uriParts.AppendFormat("Fragment: {0}{1}", uri.Fragment, Environment.NewLine);

                uriParts.AppendFormat("Original String: {0}{1}",

                uri.OriginalString, Environment.NewLine);

                uriParts.AppendFormat("Segments: {0}", Environment.NewLine);

                for (int i = 0; i < uri.Segments.Length; i++)

                    uriParts.AppendFormat(" Segment {0}:{1}{2}",

                    i, uri.Segments[i], Environment.NewLine);

                // GetComponents can be used to get commonly used combinations

                // of URI information.

                uriParts.AppendFormat("GetComponents for specialized combinations: {0}",

                Environment.NewLine);

                uriParts.AppendFormat("Host and Port (unescaped): {0}{1}",

                uri.GetComponents(UriComponents.HostAndPort,

                UriFormat.Unescaped), Environment.NewLine);

                UriParts.AppendFormat("HttpRequestUrl (unescaped): {0}{1}",

                uri.GetComponents(UriComponents.HttpRequestUrl,

                UriFormat.Unescaped), Environment.NewLine);

                UriParts.AppendFormat("HttpRequestUrl (escaped): {0}{1}",

                uri.GetComponents(UriComponents.HttpRequestUrl,

                UriFormat.UriEscaped), Environment.NewLine);

                UriParts.AppendFormat("HttpRequestUrl (safeunescaped): {0}{1}",

                uri.GetComponents(UriComponents.HttpRequestUrl,

                UriFormat.SafeUnescaped), Environment.NewLine);

                UriParts.AppendFormat("Scheme And Server (unescaped): {0}{1}",

                uri.GetComponents(UriComponents.SchemeAndServer,

                UriFormat.Unescaped), Environment.NewLine);

                UriParts.AppendFormat("SerializationInfo String (unescaped): {0}{1}",

                uri.GetComponents(UriComponents.SerializationInfoString,

                UriFormat.Unescaped), Environment.NewLine);

                UriParts.AppendFormat("StrongAuthority (unescaped): {0}{1}",

                uri.GetComponents(UriComponents.StrongAuthority,

                UriFormat.Unescaped), Environment.NewLine);

                UriParts.AppendFormat("StrongPort (unescaped): {0}{1}",

                uri.GetComponents(UriComponents.StrongPort,

                UriFormat.Unescaped), Environment.NewLine);

                Console.WriteLine(UriParts.ToString());

            }

            catch (ArgumentNullException e)

            {

                Console.WriteLine("Uri string object is a null reference: {0}", e);

            }

            catch (UriFormatException e)

            {

                Console.WriteLine("Uri formatting error: {0}", e);

            }

        }

 

 

 
 
 |    نوشته شده توسط محسن یزدانی
 
 
   
 
 

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

در بعضی موارد لازم است که به انتخاب یک سلول از جدول DataGridView به محتویات سلول انتخابی دسترسی داشته باشیم ، برای انجام این کار از کد زیر استفاده می کنیم :

 

object selectCustomerID=(object)dataGridView1.SelectCell[0].OwningRow.Cell["CustomerID"].Value;

DataView dataView1=new DataView();

dataView1.Sort="CustomerID";

DataRowView selectRow=dataView1[dataView1.Find("selectCustomerID")];

MessageBox.Show(selectRow["CustomerID"].ToString());

 

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

 

DataView dataView2=selectRow.CreateChildView(dataSet1.Relations["relationsName"]);

dataGridView2.DataSource=dataView2;

 

 

 
 
 |    نوشته شده توسط محسن یزدانی
 
 
   
 
 

ایجاد کردن یک جدول به دیتابیس در زمان اجرا (برنامه نویسی سی شارپ)

در برنامه های کاربردی از به خصوص در برنامه های حسابداری ایجاد یک جدول در زمان اجرا لازم و حیاتی است (در برنامه های حسابداری مثلا ایجاد جدول سال مالی جدید).

چنانچه در زمان اجرا ، نیاز به ایجاد جدول (Table) در دیتابیس (SQL Server) احساس شود می توان از روش زیر استفاده کرد:

 یک پروژه Windows Application ایجاد کرده و به فرم یک button اضافه کرده و در رویداد کلیک آن کد زیر را وارد کنید:

SqlConnection connection;

SqlCommand command;

string connectionStrings = "data source=(local);Initial catalog=TestDb;Integrated security=sspi";

connection = new SqlConnection( connectionStrings );

connection.Open( );

 

string createEmpTableSQL =

        "CREATE TABLE emp " +

            "(" +

               "empno INT PRIMARY KEY NOT NULL, " +

               "name VARCHAR(10) NOT NULL, " +

               "job VARCHAR(9) NOT NULL, " +

               "mgr INT, " +

               "hiredate DATETIME NOT NULL, " +

               "sal NUMERIC(7,2) NOT NULL, " +

               "comm NUMERIC(7,2), " +

               "dept INT NOT NULL" +

              ")";

command = new SqlCommand( createEmpTableSQL , connection );

int result = command.ExecuteNonQuery( );

                         

if ( result != 0 )

{

     // " insert new table"

}

else

{

     // Not insert new table

}

پس از اجرای برنامه یک جدول با نام emp در دیتابیس TestDb ایجاد می شود(تذکر دیتابیس TestDb از قبل بر روی سرور موجود می باشد).

 

 
 
 |    نوشته شده توسط محسن یزدانی
 
 
   
 
 

چگونه محتویات یک فایل را به خوانیم ؟ (برنامه نویسی سی شارپ)

باز کردن فایل یکی از متداول ترین کارها در برنامه نویسی است. در ساده ترین حالت باز کردن یک فایل بصورت زیر است : با تعیین مسیر یک فایل، از کلاس فایل بخواهید تا یک stream را باز کند. زمانی که می خواهید یک فایل را بخوانید ، از تنظیمات FileMode.Open برای باز کردن فایل و FileAccess.Read برای خواندن فایل استفاده کنید. کد زیر چنین کاری را انجام می دهد :

System.IO.FileStream theFile =

                    System.IO.File.Open( @"D:\book.txt" , System.IO.FileMode.Open , System.IO.FileAccess.Read );

برای ساده تر شدن خوتندن فایل ها ، سیستم I/O از کلاسهای StreamReader و StreamWriter پشتیبانی می کند تا عمل خواندن و نوشتن ساده تر انجام شود. برای خواندن فایلها ، شما می توانید به سادگی یک شی StreamReader جدید را ایجاد کنید که یک FileStream را درون خود جای دهید ، کد زیر روش کار را نشان می دهد :

System.IO.StreamReader reader = new System.IO.StreamReader( theFile );

Console.WriteLine( reader.ReadToEnd( ) );

reader.Close( );

theFile.Close( );

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

System.IO.StreamReader reader = System.IO.File.OpenText( @"book.txt" );

                // Search through the stream until we the end

                while ( !reader.EndOfStream )

                {

                    string line = reader.ReadLine( );

                    if ( line.Contains( "book" ) )

                    {

                        // if we find the word book, we notify

                        // the user and stop reading the file.

                        Console.WriteLine( "Find book : " );

                        Console.WriteLine( line );

                        break;

                    }

                }

                // Clean Up

                reader.Close( );

توجه کنید که کد بالا خطی که رشته مورد جستجو در آن موجود باشد را بر می گرداند.

 

 
 
 |    نوشته شده توسط محسن یزدانی
 
 
   
 
 

ایجاد پشتیبان از پایگاه داده متصل به سرور (SQL Server 2005) :

برای ایجاد پشتیبان از یک پایگاه داده ها در SQL Server ابتدا باید اسمبلی Interop.SQLDMO یا  SQLDMOرا به پروژه افزود (برای این کار باید ایتدا بر روی نام پروژه در داخل Solution Explorer راست کلیک کرد و بعد Add References را انتخاب کرد. در پنجره باز شده قسمت COM را انتخاب کرده و فایل Microsoft SQLDMO Object Library را انتخاب کنید. )

ابتدا متغیر های زیر را تعریف می کنیم :

 private SQLDMO.Database2 dtBase;

 private SQLDMO.SQLServer2Class server;

 private SQLDMO.Backup2 backup;

و سپس در رویداد ی برای انجام عمل پشتیبان گیری در نظر گرفته شده (مثلا کلیک بر روی دکمه) کد زیر را وارد می کنیم :

this.server = new SQLDMO.SQLServer2Class( );

this.backup = new SQLDMO.Backup2( );

this.server.LoginSecure = true;

this.server.Connect( "(local)" , System.Reflection.Missing.Value , System.Reflection.Missing.Value );

dtBase = ( SQLDMO.Database2 ) server.Databases.Item( "Northwind" , System.Reflection.Missing.Value );

backup.Database = dtBase.Name;

backup.Files = @"d:\Northwind.bak";

backup.SQLBackup( server );

server.DisConnect( );

backup = null;

server = null;

 

 

 
 
 |    نوشته شده توسط محسن یزدانی