خطای انتقال دیتابیس به سرور دیگر SQL Server 2005
by vahid on Wed Aug 27, 2008 7:02 pm
معمولا بعد از نصب دیتابیس روی یک سیستم جدید جهت مشاهده دیاگرام بانک اطلاعاتی با خطایی مشابه خطای زیر روبروی می شویم :

Database diagram support objects cannot be installed because this database does not have a valid owner. To continue, first use the Files page of the Database Properties dialog box or the ALTER AUTHORIZATION statement to set the database owner to a valid login, then add the database diagram support objects.


از متن خطا پیداست که بانک با مشکل مواجه شده است . متن خطا بیانگر آن است که شما اجازه ادامه کار برای مشاهده دیاگرام بانک را ندارید . برای این کار باید یک صاحب owner برای بانک مورد نظر معرفی کنید .
برای انجام این کار روی بانک مربوطه کلیک راست می کنیم و properties را انتخاب می کنیم . در فرم باز شده برای ما باید از ستون سمت چپ گزینه Files و در ستون سمت راست owner را معادل نام مربوطه قرار می دهیم .
البته انجام دادن کارهای فوق در شرایطی به جواب می رسد که مطمئن باشید بانک شما تحت نسخه 2005 عمل می کند برای حصول اطمینان از این موضوع می توانید روی بانک کلیک راست کنیدو properties را انتخاب کنید و در ستون سمت چپ options گزینه compatibility level را به SQL Server 2005(90) تغییر دهید .
در صورتیکه مشکل فوق با عملیاتی که در بالا ذکر شد به موفقیت نیانجامید . می توانید query زیر را روی بانک تان اجرا کنید : جهت اجرای دستورات زیر کافیست روی بانکتان کلیک راست کنید و
گزینه query را بزنید . و در آنجا کد زیر را بچسبانید .


EXEC sp_dbcmptlevel 'DBACC', '90';
go
ALTER AUTHORIZATION ON DATABASE::DBACC TO "vahid"
go
use DBACC
go
EXECUTE AS USER = N'dbo' REVERT
go


دستورات فوق حاکی از آن است که در ابتدای امر فرمت بانک را به فورمت SQL Server 2005 تغییر می دهد . بعد از آن طبق پیام خطا اختیارات بانک DBACC را به کاربری به نام vahid می دهد بعد از آن بانک را مورد استفاده قرار می دهد و عملیات با موفقیت به سرانجام می رسد .
زبانهاي برنامه سازي (مديريت حافظه)
by vahid on Sun Jul 06, 2008 11:17 am
مديريت حافظه :

1. Code segment for translated user program .
2. System run time program .
3. User define data structure and constants .
4. Subprogram return point .
5. Referencing environment .
6. Temporaries in expression evaluation .
7. Temporaries in parameter transition .
8. Input/Output buffers.
9. Miscellaneous System data .
10.Subprogram call and returns operation .
11.Data structure creation and destruction operation .
12. Components insertion and deletion operation .
طراحي و پياده سازي زبانهاي برنامه سازي
by vahid on Sat Jul 05, 2008 8:08 am
ويژگيهاي يك زبان خوب :
1. Clarity, Simplicity, Unity
2. وضوح در syntax برنامه
3. طبيعي بودن كاربرد برنامه براي زبان
4. پشتيباني از تجريد
5. سادگي تغيير دادن برنامه
6. محيط برنامه سازي
7. انتقال پذيري برنامه
8. هزينه استفاده ‌{اجرا - ترجمه - ايجادوتست - پشتيباني}
الگو دهی خط در OpenGL
by vahid on Tue Apr 22, 2008 10:11 pm
الگو دهی خط در OpenGL :
در OpenGL می توان برای رسم خط از خطوطی که پیوسته هم نیستند استفاده کرد . چطور خطوط نقطه چین را روی کاغذ رسم می کنیم در اوپنجی ال هم می توان خطوط نقطه چین رسم کرد . برای رسم باید یک الگو داشته باشیم . یعنی نحوه قطعه قطعه کردن خط را توسط یک الگو مشخص کنیم تا اوپنجی ال بتواند بر اساس آن خط را نقطه چین کند . برای تعیین الگو باید از یک پارامتر از نوع صحیح بدون علامت استفاده کرد .
برای این کار باید از تابع زیر استفاده کنید :
glLineStipple(Glint sfactor,GLushort pattern)
پارامترهای این تابع بصورت زیر است :
Pattern : در این الگو 1 یعنی خط را بکش و 0 یعنی خط را نکش .
Sfactor: یک فاکتور برای مقیاس گیری از الگو هست که تعداد 0 ها و 1 ها را می توانیم با این فاکتور مشخص کنیم .
برای استفاده از تابع فوق قبل از glBegin() خط زیر را اضافه کنید :
glLineStipple(Glint sfactor,GLushort pattern);
glEnable(GL_LINE_STIPPLE);

مثلا اگر pattern را 7939 بگیرید این الگو خط را بصورت 0001 1111 0000 0011 زیر رسم می کند یعنی بجای صفر ها خالی و بجای یک ها خط می گذارد برای سادگی می توانید از کد مبنای 16 آن هم استفاده کنید . 1F03 اما اگر خیلی دیگر ساده می خواهید کار کنید ماشین حساب ویندوز رو باز کنید و در آن در محیط scientific در محیط bin صفر ویک ها را وارد کنید .
برای فهم کار کد زیر را یک بار بنویسید :
   glLineStipple(1,7939);
   glEnable(GL_LINE_STIPPLE);
بعد از اینکه خوب متوجه شدید . پارامتر sfactor را به 3 تغییر دهید متوجه می شوید که چه اتفاقی می افتد . الگوی شما باندازه 3 برابر روی خط ظاهر می شود .
   glLineStipple(3,7939);
   glEnable(GL_LINE_STIPPLE);
حذف nokia pc suite از systray
by vahid on Sun Dec 09, 2007 10:02 pm
براي حذف اين آيكون بيخود از system tray منظور ( taskbar گوشه سمت چپ پايين ) مي باشد مي توانيد دو كار بكنيد :
اول اينكه توي run بنويسيد msconfig و بعد توي زبانه startup گزينه PCSuiteTrayApplication يا LaunchApplication رو پيدا كنيد يا براي بعضي ديگر گزينه هاي ديگري است كه ويژگي همه اين گزينه ها دستور command آنهاست كه به شرح C:\PROGRA~1\Nokia\NOKIAP~1\LAUNCH~1.EXE -onlytray يا چيزي مشابه مي باشد است كه تيك را بر ميداريد .
يا اينكه روش دوم استفاده از رجيستري است در Run بزنيد regedit و بعد آدرس HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run برويد و گزينه مربوط به nokia رو delete كنيد كه ديگه از اين كارا نكنه .
يا براي بعضي از نسخه ها بصورت خيلي مودبانه مي توانيد از منوي file خود pc suite گزينه invoke at startup رو برداريد .
اين كار رو براي آيكونهاي ديگر هم مي توانيد انجام دهيد حتي ياهو ، البته يادتان باشد اين كار را براي آيكون آنتي ويروس نكنيد كه من مسئوليت قبول نمي كنم . Wink
يك قفل سخت افزاري بسازيم
by vahid on Sat Oct 13, 2007 1:50 pm
يك قفل سخت افزاري بسازيم . :
پورت موازي Parallel يكي از مفيدترين و پركاربردترين پورتهاي كامپيوتر است كه كاربران و طراحان براي متصل كردن مداراتي كه طراحي كرده اند از آن استفاده ميكنند . در اين مقاله سعي بر ان ميكنم كه نحوه استفاده از اين پورت را فرا بگيريد . جالب است بدانيد كه حتي ميتوانيد با اين پورت يك ربات را نيز كنترل كنيد . اما در اينجا مبناي كار را در طراحي يك قفل سخت افزاري ميگذاريم .
حتما شده است كه قفلهاي سخت افزاري نرم افزارهاي مختلف را در هنگام خريد نرم افزار نيز خريده باشيد . شايد برايتان جالب باشد بدانيد اين قفل چگونه طراحي شده است و اساس كار ان چيست ؟
اگر اين مقاله را بخوانيد بزودي متوجه خواهيد شد كه درون تراشه اي كه به شما بعنوان قفل سخت افزاري داده شده است چيزي چندان پيچيده نخواهد بود ...
در ابتدا چند تذكر ميدهم اينكه :‌
پورت موازي PC ها بسيار حساس هستند كافيست با كمي اشتباه در كار كردن با اين پورت كل اين پورت را از بين ببريد . اكثرا هم تعمير اين پورت پرهزينه است و شايد بصرفه تر باشد تا يك مادربرد جديد بخريد . بنابراين پيشنهاد ميكنم اگر از صحت عملكرد خود و يا مداري كه قرار است به اين پورت متصل شود اطمينان نداريد يك كارت I/O بخريد و با ان پورت كار كنيد . كه اگر هم قرار شد ان را خراب كنيد . فقط همان كارت را تعويض كنيد . اين كارت شما ميتواند روي اسلات PCI/ISA باشد .
تشريح پورت موازي Parallel
يك پورت موازي 25 پين ماده دارد كه عموما براي اتصال پرينتر به كامپيوتر مورد استفاده قرار ميگيرد . اما خيلي از سخت افزار ها ميتوانند از اين پورت اتصال برقرار كنند .
تمام اين 25 پين هميشه مورد استفاده نيستند . شايد گاهي تنها يك پين را بخواهيد استفاده كنيد . parsx
ابتدا به معرفي پين هاي اين پورت ميپردازيم :

در شكل فوق شمايي از يك پورت موازي را ميبينيد كه اصولا اين پينها از راست به چپ و از بالا به پايين شماره گذاري ميشوند . يعني بالايي ترين و سمت راست ترين پين ، پين شماره 1 و سمت چپ ترين و بالاترين پين شماره 13 و پايين ترين و سمت چپ ترين پين شماره 25 است .
اين 25 پين به چهار گروه تقسيم بندي ميشوند :

دوازده پين از 25 پين فوق نقش خروجي را دارند و اطلاعات را از كامپيوتر به خارج ميفرستند . كه هشت پين از اين دوازده پين از پين شماره 2 تا 9 هستند كه روي هم يك بايت را تشكيل ميدهند و به اين هشت پين پينهاي Data گويند.
پين هاي 18 تا 25 كه در شكل سبز رنگ هستند پينهاي GND زمين هستند . از لحاظ منطقي مقدار ارزشي صفر و از لحاظ مفهومي انگار كه به زمين متصل هستند .كه در اين مبحث كاري به آنها نداريم .
پينهاي 10 و 11 و 12 و 13 و 15 كه به رنگ قرمز رنگ هستند به عنوان ورودي كاربرد دارند . كه مقادير پيشفرض آنها يك است و پين شماره 11 مقدار پيشفرض صفر دارد. بنابراين بايت ورودي كه متشكل از پينهاي 10 تا 15 هست ( در شكل با S7 تا S3 نمايش داده شده اند) مقدار پيشفرض 127 دارد كه معادل دودويي آن 01111111 مي باشد .
پينهاي شماره 1 و 14 و 16 و 17 نيز بيتهاي خروجي هستند كه به اين چهار پين پينهاي STATUS گويند ، كه در اين مبحث كاري با اين پين ها نداريم .parsx
بنابراين نتيجه مي گيريم اگر قرار باشد اين پورت به پرينتر متصل باشد از طريق پين هاي شماره 2 تا 9 اطلاعات را به پرينتر مي فرستد . و اگر قرار باشد اطلاعاتي را به كامپيوتر از طريق اين پورت وارد كنيم م تنها از طريق پينهاي شماره 10 تا 13 و 15 مي توانيم اين كار را انجام دهيم .


حال كه با پورت Parallel آشنا شديد نوبت به مقدار دهي پين هاي اين پورت ميرسد . همانطور كه گفتيم براي قفلمان تنها از دو قسمت ورودي و خروجي اين پورت استفاده مي كنيم .
عملكرد يك قفل سخت افزاري به اين صورت ميتواند باشد كه هرلحظه يا در زمان معيني برنامه شما ورودي پورت Parallel را چك كند اگر برابر مقداريست كه شما در برنامه خود تعيين كرده ايد انگاه قفل به پورت متصل است . اما اگر قفل شما به پورت متصل نيست يعني قفل از پورت جدا شده است يا اتفاقي افتاده است كه قفل درست كار نميكند .
پس بايد بتوانيم مقدار را از پورت بخوانيم . (پينهاي ورودي) اما چطور مي توان اطلاعات را به اين پورت وارد كرد . براي انجام اين كار ميتوانيد از قسمت خروجي پورت استفاده كنيد . در ساده ترين حالت يعني مقداري را به خروجي بفرستيد و آنگاه همان مقدار را در ورودي بخوانيد . اگر اين اتفاق ساده در طول اجراي برنامه بيفتد قفل درست كار مي كند .
بنابراين بايد پينهاي خروجي را به پين هاي ورودي متصل كنيد . يك رشته سيم تلفن را برداريد و پين شماره 2 را به پين شماره 15 متصل كنيد . بنابراين از اين پس هروقت ما پين شماره 2 را صفر كنيم پين شماره 15 هم بصورت خودكار 0 مي شود و اگر اين سيم را قطع كنيم اين پين همان مقدار پيشفرض خود يعني يك باقي مي ماند . كه در اين مثال اين مقدار را صفر مي كنيم در نتيجه خروجي ما به صورت 01110111 در مي آيد كه معادل 119 مي باشد .
در اين مثال ساده ترين حالت ممكن را بيان كرديم مي توانيد از 5 رشته سيم هم براي ارتباط پين هاي خروجي به ورودي هم استفاده كنيد . مثلا پينهاي شماره 2و4و5و6و7 را به پينهاي شماره 11و12و13و15و10 متصل كنيد يا ميتوانيد پينهاي شماره 9و8و2و3و4 را به پين هاي شماره 12و13و11و10و15 متصل كنيد . و صدها حالت مختلف ديگر . اين بستگي به سليقه خود شما دارد . چرا كه مهم اين است كه در ورودي چه مقداري مي خوانيد . همانطور كه مي بينيد مي توانيد از يك رشته سيم يا حداكثر از 5 رشته سيم ( چون حداكثر 5 پين ورودي داريم ) براي ارتباط پين ها استفاده كنيد .
پس از ارتباط پين ها مي توانيد باز هم به دلخواه خودتان هركدام را كه مي خواهيد روشن يا خاموش كنيد ( يعني مقدار 1 يا 0 بدهيد ) . براي خاموش يا روشن كردن اين پين ها بايد فرآيندي را طي كنيد به اين صورت كه هر مقدار دلخواه بين 0 تا 255 ( چون تنها هشت بيت خروجي داريم پس مي توانيم تنها يك بايت اطلاعات بفرستيم ) را به خروجي بفرستيد و آنگاه ببينيد در ورودي چه مقداري حاصل مي شود كه اين مقدار ورودي دقيقا بستگي به اين دارد كه چه تعداد از پينهاي خروجي را به پين هاي ورودي متصل كرده ايد ؟ آيا مثل ما از يك رشته سيم استفاده كرده ايد يا 3 رشته يا از هر 5 رشته استفاده كرده ايد ؟ آيا پين شماره 2 را به پين شماره 10 متصل كرده ايد يا به پين شماره 11 ؟‌
همانطور كه مي بينيد مقدار ورودي شما بستگي به اين دارد كه پين ها را چگونه به هم متصل كرده ايد و هم اينكه چه مقداري را در خروجي فرستاده ايد .
براي اينكه متوجه شويم چه مقداري در ورودي خوانده شده است بايد برنامه اي بنويسيد كه اين مقدار ورودي را به شما نمايش دهد . يااگر كمي مهارت در trace كردن برنامه داشته باشيد مي توانيد بدون نوشتن اين برنامه اضافي براي خواندن پورت مقدار خوانده شده از پورت ورودي را بخوانيد .


ارتباط Visual Basic با پورت موازي :
Microsoft Visual Basic6 را از آن جهت انتخاب كرديم كه يادگيري آن نسبت به باقي نرم افزارهاي برنامه نويسي ساده ترو همچنين در بين كاربران عمومي تر مي باشد . ضمنا بحث هاي پيچيده سخت افزاري را نيز ندارد .
اما Visual Basic از انجايي كه سطح بالاست . قدرت ارتباط با سخت افزار كامپيوتر را مانند زبانهاي برنامه نويسي C و مخصوصا اسمبلي را ندارد . هرچند QBasic اين قابليت را دارد !!!
اما اين نقطه ضعف اين نرم افزار نيست بلكه اين برنامه با استفاده از Dynamic Linked Library يا DLL ها ميتواند اين نقصان را برطرف كند .
بنابراين براي ارتباط با پورت موازي يا هر قطعه سخت افزاري شما ميتوانيد با زبان برنامه نويسي ديگري برنامه اي بصورت DLL بنويسيد و انرا وارد VB كنيد .
بنابراين براي نوشتن اين قفل به يك فايل Dll نياز داريم تا بتوانيم با قفل ارتباط برقرار كنيم . اين فايل را مي توانيد به راحتي با جستجوي iodll در اينترنت به صورت رايگان دانلود كنيد .
پس از دانلود فايل io.dll آن را در شاخه سيستم خود كپي كنيد :
%systemroot%\system32


براي استفاده از فايل در پروژه بايد انرا در بخش module استفاده كنيد تا براي كل پروژه قابل تعريف شده باشد . ( براي اضافه كردن ماژول به پروژه روي نام پروژه در پنجره project كليك راست كنيد و گزينه add module را انتخاب كنيد . )
بنابراين در ماژول يك كد زير را وارد كنيد :

Public Declare Sub PortOut Lib "io.dll" (ByVal Port As Integer, ByVal value As Byte)
Public Declare Function PortIn Lib "io.dll" (ByVal Port As Integer) As Byte
دكلريشن اولي براي ساب پراسيجر portout ‌ ميباشد . كه دو ارگومان دارد اولي ادرس پورت است بصورت int كه ادرس انرا بايد از systeminfo يا از device manager پيدا كنيد . اما بيشتر در اكثر كامپيوتر ها ادرسهاي 378H براي بخش خروجي پورت پرينتر LPT1 و ادرس 379H براي ورودي مي باشد .
كه براي استفاده انها در portout برنامه ما بايد انها رابه دسيمال تبديل كنيد يعني بترتيب 888 ، 889 در اين قسمت مقدار 888 را ميفرستيد . پس آدرس پورت موازي ما طبق استاندارد گفته شده براي قسمت خروجي 888 مي باشد . اما آرگومان دوم PortOut مقداريست كه به خروجي مي فرستيد . اين مقدار همانطور كه قبلا هم گفتيم مي تواند بين 0 تا 255 باشد . ما بدلخواه عدد 0 را مي فرستيم .
در تابع PortIn ادرس پورت ورودي را وارد ميكنيد 889 . اين تابع مقدار خوانده شده از پين هاي ورودي را بر مي گرداند .
همانطور كه گفتيم ما در قفلمان پين شماره 2 را به پين شماره 15 توسط تنها يك رشته متصل مي كنيم. آنگاه عدد دلخواهمان كه 0 بود را به خروجي مي فرستيم . حال بايد ببينيم در ورودي چه مقداري خوانده مي شود .
از يك برنامه كمكي براي خواندن مقدار ورودي استفاده مي كنيم بنابراين برنامه ديگري موقتا مي نويسيم و در آن با تعريف ماژول گفته شده مقدار ورودي را چاپ مي كنيم . تا بدانيم در برنامه اصلي كه قرار است قفل براي آن باشد چه مقداري خوانده شود .
يك دكمه در فرم برنامه موقتتان قرار دهيد و در كد دكمه كد زير را وارد كنيد :

Call PortOut(888,0)
lckTemp = PortIn(889)
 label1.text = lckTemp

در label1 كه در فرم برنامه تان قرار داده ايد مقدار خوانده شده چاپ مي شود . كه در مثال ما عدد 119 خوانده مي شود .
حال كه مقدار ورودي را مي دانيم شروع به نوشتن برنامه اصلي مي كنيم .

نحوه عملكرد برنامه در ارتباط با قفل :
قرار بر اين است كه برنامه به شرطي اجرا شود كه اين قفل ساده ما (يك رشته سيم گفته شده ) به پورت متصل باشد بنابراين مداما در طول اجراي برنامه بايد مقدار ورودي پورت موازي را با عددي كه در برنامه فوق بدست آورديم چك كنيم . عدد بدست آمده در برنامه گفته شده مقدار 119 بود .
در ويژوال بيسيك كنترلي به نام تايمر ميتواند بصورت مداوم عمليات مورد نظر شما را تكرار كند . عمليات مورد نظر ما خواندن مقدار پورت موازي و چك كردن مقدار آن با مقدار مورد نظرمان كه 119 مي باشد است . در صورتيكه اين مقدار خوانده نشود برنامه بايد از كار بيفتد يا حداقل با پيغامي به كاربر بگويد كه قفل را سر جايش قرار دهيد .
حال مي خواهيم توسط يك تايمر هميشه اين مقدار ورودي را چك كنيم . بمحض اينكه اين مقدار تغيير كند يا از بين برود ( قفل از جايش در بيايد )‌ برنامه بحالت معلق در بيايد و درخواست قفل كند .
كد تايمر شما مي تواند به اين صورت باشد :
Private Sub lcktmr_Timer()
Dim lckTemp As Integer
Call PortOut(888, 0)
lckTemp = PortIn(889)
If lckTemp <> 119 Then
 Call MsgBox("Insert Hardware-Lock in Parallel Port" _
    , vbOKCancel, "Warning...")
End
   End If
تشريح كد :
Call PortOut(888, 0)
lckTemp = PortIn(889)

در اين خط عدد 0 را به خروجي ارسال كرده ايم كه پينهاي 2 تا 9 را مقدار دهي ميكند .

If lckTemp <> 119 Then

در اينجاست كه بودن يا نبودن قفل مشخص ميشود . چون مقدار 0 را ارسال كرده ايم انتظار داريم مقدار 119 خوانده شود وگرنه قفل يا خراب است يا نيست . بنابراين مقدار خوانده شده در lckTemp چك ميشود كه مخالف 119 است .

Call MsgBox("Insert Hardware-Lock in Parallel Port" _
    , vbOKCancel, "Warning...")
End

پس بعد از دادن اخطار از برنامه خارج مي شود .


همانطور كه مشاهده كرديد به همين راحتي مي توانيد يك قفل سخت افزاري طراحي كنيد . اما خوب قفل هاي سخت افزاري موجود در بازار هم درست است كه از اين منطق استفاده مي كنند . اما بهرحال با استفاده از چيپ هايي كه در پشت قفل قرار مي دهند روند كار را پيچيده تر مي كنند .
جزوه هاي پارسه و جزوه دكتر قدسي
by vahid on Thu Oct 11, 2007 12:26 pm
سلام .
من يه پك كامل جزوه هاي پارسه مال سال 83 رو كه مال يكي از دوستامه دارم . جزوه دكتر قدسي رو هم دارم .
هر كي خواست بهم ايميل بزنه status@gmail.com
فارسی نویسی در visual basic 6 vb
by vahid on Sun Aug 26, 2007 8:00 pm
بعد از نصب نرم افزار براي تنظيم فارسي نويسي در ويژوال بيسيك بايد مسير هاي زير را درست كنيد :

Control Panel > Regional and language options > Advanced
>
قسمت select a language to match the language version of the non-Unicode programs ‌ را به farsi تغيير دهيد . آنگاه باحتمال زياد از شما سي دي xp را مي خواهد كه اين كار را انجام مي دهيد .
سپس به زبانه languages برويد و دكمه Details را انتخاب كنيد در زبانه Advanced ‌ تيك Extended supprt of advanced text services to all programs را بگذاريد .
كامپيوتر را reset كنيد .
vb6 را اجرا كنيد . از منوي tools گزينه options را انتخاب كنيد آنگاه زبانه editor format ‌ را انتخاب كنيد و آنگاه فونت را به Courier new (Arabic) تغيير دهيد .
از اين پس هر وقت كنترلي خواستيد كه در برنامه قرار دهيد خاصيت font انرا به فونتي كه فارسي را پشتيباني مي كند انتخاب كنيد و سپس منوي پايين افتادني script را در همان منوي font ‌ به Arabic تغيير دهيد .
http://computer.parsx.com/about1580.html
نصب و راه اندازي IIS بعد از نصب Visual Studio .NET
by vahid on Tue Jul 17, 2007 8:54 am
يكي از اشتباهاتي كه اكثر كاربران و برنامه نويسان ASP.NET مي كنند اين است كه گاهي اوقات يادشان مي رود قبل از نصب .NET ابتدا IIS را نصب كنند .
و اشتباه ديگر ان است كه به اشتباه گفته مي شود راهي براي تنظيم IIS بعد از نصب .NET جهت اجراي ASP.NET وجود ندارد و ويندوز دوباره بايد نصب شود Exclamation
اما براي اينكه IIS خود را براي تنظيمات ASP.NET اماده كنيد . كافيست در Command prompt به شاخه %WindowsDir%\Microsoft.NET\Framework\vx.y.zzzz\ برويد و دستور aspnet_regiis -i را بزنيد . بعد از چند ثانيه asp.net شما روي iis نصب مي شود .
بعد از انجام عمليات فوق سي دي update ويژوال استوديو را در درايو قرار دهيد و آنگاه دستور زير را استفاده كنيد :

f:\dotNetFramework\dotnetfx.exe /t:c:\temp /c:"msiexec.exe /fvecms c:\temp\netfx.msi
موفق باشيد .
آرايه انجمني $GLOBALS و دستور foreach
by vahid on Wed Jul 11, 2007 12:38 pm
يكي از روش هاي دستيابي به متغيرهاي عمومي استفاده از آرايه انجمني $GLOBALS مي باشد . براي دسترسي به متغيري عمومي به نام $parsx در يك تابع مي توان با بازخواني $GLOBALS[parsx] به آن دسترسي پيدا كرد .
يكي از روشهاي پيمايش آرايه استفاده از دستور foreach ‌ مي باشد كه در PHP4 پياده سازي شده است .
foreach($array as $temp ) {
//statements
}

كه در آن $array آرايه و $temp يك متغير موقتي است كه مقدار هر المان آرايه را در خود نگه مي دارد .
مثلا در مثال زير :
$users = array( "arash","amir","vahid");
foreach($users as $val)
{
Print "$val<br>";
}

اما براي دسترسي به انديس آرايه بايد دستور Foreach ‌را كمي تغيير دهيد .
foreach($array as $key => $value )
{
//…
}

مثلا :
$character = array (    Name=>"parsx",
         Occupation=> ".com",
         Age=>30,
         "special powe"=>"x-ray vision ");
foreach($character as $key=>$val){
   Print "$key = $val";
}

مثالي براي نمايش متغيرهاي عمومي :
$value1="parsx";
$value2="vahid";
$value3="mohammad";

foreach($GLOBALS as $key =>$val){
   Print " \$GLOBALS[\"$key\"]==$val<br>";}
ساختن پروژه در Microsoft Visual C++ 6
by vahid on Wed Jul 11, 2007 12:34 pm
پس از باز كردن Microsoft Visual C++ 6 پنجره tips را ببنديد و از منوي file گزينه new را انتخاب كنيد .
پس از باز شدن پنجره new اگر در زبانه projects نيستيد به آن زبانه برويد ( بصورت پيشفرض در اين زبانه بايد باشيد ) .
آنگاه گزينه MFC AppWizard(exe) را انتخاب كنيد . سمت راست همين پنجره در project name نام پروژه مورد نظر را بنويسيد . مثلا parsx .
دكمه ok را بزنيد . آنگاه پنجره Appwizard مقابل شما باز مي شود . اين ويزارد ازشما اطلاعاتي راجع به پروژه اي كه مي خواهيد بسازيد مي گيرد .
1. در مرحله اول از Appwizard گزينه Dialog-based را انتخاب كنيد و دكمه next ‌ را بزنيد .
2. در اين مرحله گزينه هاي اضافي همچون ActiveX controls ‌ را برداريد . در پايينترين قسمت مي توانيد يك عنوان براي پروژه تان در نظر بگيريد . مثلا In the name of Allah . سپس دكمه next را بزنيد تا به مرحله بعد برويم .
3. در اين مرحله كاري به گزينه ها نداشته باشيد و دكمه next را بزنيد .
4. در اين مرحله كه مرحله پاياني مي باشد . دكمه finish را بزنيد كه بعد از زدن اين دكمه منوي ديگري در مورد پروژه شما اطلاعاتي مي دهد كه با زدن دكمه ok پروژه شما درست مي شود .
حال از منوي build گزينه build parsx.exe ‌را انتخاب كنيد .
پس از ساخت پروژه براي اجراي آن از منوي build گزينه execute parsx.exe را انتخاب كنيد .
فرم باز شده در مقابل شما پروژه شماست با زدن هر يك از دكمه هاي ok يا cancel ‌ مي توانيد از برنامه خارج شويد .
براي تغيير خواص كنترلها كه در اين پروژه دكمه ها و يك Textbox وجود دارد مي توانيد با كليك راست بروي آنها و انتخاب گزينه properties خواص آنها را تغيير دهيد .
براي تعويض عمليات دكمه ok ‌ روي آن كليك راست كنيد و از منوي باز شده گزينه ClassWizard ‌ را انتخاب كنيد .
در پنجره باز شده MFC ClassWizard سمت چپ در ليست Object IDs بايد گزينه IDOK انتخاب شده باشد . درليست سمت راست ليست Messages گزينه BN_CLICKED را انتخاب كنيد .
آنگاه در دكمه هاي سمت راست دكمه Add Function را انتخاب كنيد . با زدن دكمه پنجره اي براي تعيين نام تابع باز مي شود كه مي توانيد نام آن را عوض كنيد يا از همان نام پيشنهادي استفاده كنيد . نام پيشنهادي OnOk مي باشد كه دكمه ok ‌ را مي زنيد . بعد از زدن دكمه در ليست Member Functions گزينه OnOk اضافه و انتخاب شده است .
حال دكمه Edit code ‌ را كه سمت راست پنجره است كليك كنيد .
در پنجره باز شده كد زير قرار دارد :
void CParsxDlg::OnOK()
{
   // TODO: Add extra validation here
   
   CDialog::OnOK();
}

جدا از خط توضيح خط CDialog::OnOk() قرار دارد كه با حذف آن و اجراي دوباره پروژه متوجه مي شويد كه عملكرد دكمه ok از كار افتاده است چرا كه قبلا پنجره را مي بست ولي اكنون ديگر كاري انجام نمي دهد .
پس از حذف خط مذكور خط زير را اضافه كنيد :

MessageBox("salam khobi ?");

حال پروژه را اجرا كنيد . با زدن دكمه ok پنجره messagebox باز مي شود .
اين اولين پروژه ساخته شده ما بود .
دكتر يوسف رمضاني نژاد درگذشت
by vahid on Mon May 07, 2007 5:58 pm
سلام .
ديروز شنيدم كه دكتر رمضاني درگذشت . اولش باورم نشد و گفتم باز از اون شوخي هاي مسخره بچه هاست . ولي بعدش كه موبايلش رو گرفتم و خاموش بود يه آن تو دلم خالي شد . تا اينكه تا آخر شب هي گرفتمش و هي مي گفت the mobile set is off .
ديگه شكم به يقين تبديل شد .
دكتر درگذشت . مثله اينكه تو حادثه رانندگي فوت كرد . دكتر علاوه بر اينكه هوش مصنوعي مي خوند پزشك هم بود .
به هر حال من خيلي دوسش داشتم .
گفتم شما هم بدونين .
خدا همه رو بيامرزه .
كامپيوتر چگونه شطرنج بازي مي كند ؟
by vahid on Thu Feb 15, 2007 1:48 pm

how a computer play chess
كامپيوتر چگونه شطرنج بازي مي كند ؟
اگر تا بحال شطرنج بازي كرده باشيد احتمالا اولين روزهايي كه بازي شطرنج رو ياد گرفتيد به خاطر مياوريد . اگر هم به خاطر نمي آوريد حتما تابحال نحوه يادگيري بازي شطرنج يك نفر را ديده ايد .
براي يادگيري ابتدا نام مهره ها ، بعد نحوه حركت و نحوه حمله مهره ها و در آخربعد از اينكه كاملا با مهره ها آشنا شديد شروع به بازي مي كنيد . ابتدا مهره سفيد شروع به بازي مي كند و بعد هم مهره سياه اما نهايتا به راحتي مي باختيد و بعد از هر باخت يا بعد از هر از دست دادن مهره با جملاتي از قبيل "واي ! اصلا حواسم نبود " يا " عجب ! چه جالب " و جملاتي از اين قبيل هيجان خودتون رو از اين بازي نشون مي داديد.
مغز انسان به گونه اي طراحي شده كه با تمرين و ادامه كار مخصوصا در بازي شطرنج به مهارت ويژه اي مي رسد . يعني شما اگر يك هفته است كه شطرنج بازي مي كنيد . بازي شما با روز اول قابل مقايسه نيست . چون مدام تكنيك هاي جديدي با هر بازي ياد گرفته ايد . شايد هم انقدر مشتاق شده ايد كه شروع به خواندن كتابهاي شطرنج باز هاي حرفه اي كرده ايد و تكنيك هاي حرفه اي تري ياد گرفته ايد .
از جملات بالا نتيجه مي گيريم كه بازي شطرنج براي انسان به ميزان زيادي از تفكر و تجزيه و تحليل آن هم در سطح بالا نياز دارد . اما نكته جالب اينجاست كه كامپيوتر براي بازي شطرنج هيچ يك از اعمال فوق را انجام نمي دهد . شايد بعضي به اشتباه فكر كنند كه كسي كه بازي شطرنج كامپيوتري را نوشته است خود يك شطرنج باز حرفه ايست . اما بايد بدانيد كه بهيچ وجه اينگونه نيست .
ظاهرا بازي شطرنج از آن دسته بازي هايي است كه بسيار زياد نياز به تفكر و تجزيه و تحليل و در نهايت تصميم دارد و ظاهرا منحصر به بشر است . اين درحاليستكه كامپيوتر بدون قدرت فكر كردن و تجزيه و تحليل به قدري در بازي شطرنج مهارت دارد كه بزرگترين شطرنج باز هاي دنيا هم از بردن آن عاجز هستند .
دراين مقاله متوجه مي شويم كه كامپيوترها بهيچ وجه مشابه بشر شطرنج بازي نمي كنند . يعني براي بازي شطرنج اصلا فكر نمي كنند . بلكه با كمك توابع و فرمول هاي رياضي شروع به انجام يك سري محاسبات مي كنند و در نتيجه مهره مورد نظر را حركت مي دهند . حال هر چه سرعت كامپيوتر در انجام اين گونه محاسبات بيشتر باشد قدرت كامپيوتر براي بازي كردن نيز بيشتر مي شود . در اين مقاله اشاره اي جهت آشنايي با يكي از الگوريتم هاي معروف و پركاربرد بازي شطرنج مي كنيم تا متوجه شويد كه چه فرآيندي در پيروزي كامپيوتردرمقابل بشر موثر است .
براي شروع به يك تخته بازي با ابعاد 8*8 نياز داريم . هر يك از طرفين 16 مهره در اختيار دارند . فرض را بر اين بگيريم كه مهره هاي سفيد براي كامپيوتر و مهره هاي سياه براي ما باشد .
همانطور كه مي دانيد شروع بازي با مهره سفيد است ، بنابراين كامپيوتر اقدام به حركت مهره سفيد مي كند . اما اينكه كدام مهره را حركت دهد جاي بحث دارد . مي دانيم كه مهره سفيد يا سياه براي شروع بازي هر كدام مي توانند 20 حركت انجام دهند :
• 8 حركت براي سربازها اگر يك خانه به جلو بروند ، 8 حركت ديگر اگر همان سربازها دو خانه به جلو بروند .
• دو حركت براي هر يك از اسب ها (دو اسب) كه در جمع 4 حركت مي شود .
بنابراين هر مهره سفيد يا سياه براي شروع مي تواند يكي از 20 حركت ممكن را انتخاب كند .
حال فرض كنيم كامپيوتر بدون توجه به ارزش حركات ؛ يكي از اين 20 حركت را انتخاب مي كند و بازي را شروع مي كند . بعد از اين حركت نوبت به مهره مشكي مي رسد ، مهره مشكي هم مي تواند يكي از 20 حركت مورد نظر خود را انجام دهد .
دوباره نوبت به كامپيوتر مي رسد تا مهره دوم خود را حركت دهد . اما اينبار بسته به اينكه كدام يك از مهره ها را در حركت قبل حركت داده است مي تواند به تعداد 20 حركت يا كمتر يا بيشتر را انتخاب نمايد . و دوباره مهره مشكي هم بسته به حركت قبلي خودش مي تواند مهره ها را تكان دهد .
نكته كار اينجاست كه كامپيوتر از كجا بداند كدام يك از اين 20 حركت يا كمتر يا بيشتر را انجام دهد . كامپيوتر براي حل اين مساله با درست كردن درختي در حافظه خود تمامي حركات ممكن را انجام مي دهد تا بهترين نتيجه را بدست بياورد . فرض مي كنيم به اين ترتيب باشد كه براي حركت اول براي هر كدام از 20 حركت يك بار بازي را تمام مي كند باين ترتيب كه بعد از حركت دادن مهره در حافظه خود فرض را بر اين مي گيرد كه طرف مقابل كدام مهره را حركت خواهد داد و اگر حركت داد خودش كدام مهره را حركت بدهد تا در نهايت بازي را ببرد . يعني اگر در مرحله اول امكان 20 انتخاب را دارد مهره مشكي مي تواند بسته به حركت مهره سفيد 20*20 حركت انجام دهد . بنابراين در حركت دوم خود مي تواند 400*20 حركت را انتخاب كند و دوباره مشكي 8000*20 انتخاب و به همين ترتيب اين تعداد حركات ممكن پيش بيني مي شود تا بازي تمام شود . عدد حاصل عدد يك بهمراه 120 عدد صفر در جلوي آن خواهد بود . اين عدد 10120 در مقابل عددي مانند تعداد كل اتم هاي دنيا كه معادل 1075 مي باشد بسيار بزرگ است . بنابراين متوجه مي شويد كه بازي شطرنج تا چه حد مي تواند پيچيده باشد .
اما واقعيت اينستكه هيچ كامپيوتري نمي تواند كل درخت مورد نظر را ايجاد كند . و تمام 10120 حركت ممكن را انجام دهد . بلكه كامپيوتر به جاي تمام كردن كل بازي مي تواند 3 يا 5 يا حتي 10 تا 20 حركت بعدي را انجام دهد (‌پيش بيني كند) . اگر فرض را بر اين بگيريم كه براي هر حركت مهره در بازي تنها 20 انتخاب داريم براي ايجاد يك درخت 5 مرحله اي كه بتواند 5 حركت جلوتر را پيش بيني كند 320000 حركت ممكن بايد بررسي شود . همچنين اگر بتوان يك درخت 10 مرحله اي ايجاد كرد بنابراين مي توان 10000000000000 ( 10 تريليون) حركت ممكن را بررسي كرد . بنابراين در اينجاست كه سرعت كامپيوتر براي بازي شطرنج مشخص مي شود . هرقدر سرعت كامپيوتر براي بازي بيشتر باشد حركات اينده بهتري در نتيجه با قدرت بيشتري پيش بيني مي شود . اما واقعيت اينجاست كه پرسرعتترين كامپيوتر شطرنج باز دنيا تنها مي تواند تا چند ميليون حركت را در هر ثانيه پيش بيني كند .
اما كار به همين جا تمام نمي شود پس از توليد درخت كامپيوتر بايد به ارزيابي موقعيت هاي درست شده بپردازد و اينكه تشخيص دهد كه كدام حركت را انجام دهد تا بهترين حركت ممكن باشد .
اولين گام براي ارزيابي تعداد مهره هايي ست كه كامپيوتر در صفحه شطرنج خواهد داشت . براي انجام اين كار به كمك يك تابع ارزيابي مي تواند تعداد مهره هايي كه هر يك از طرفين بعد از حركت مهره خواهند داشت را محاسبه كند . به كمك تابع ارزيابي مي تواند تشخيص دهد كه حركتي كه انجام دهد "خوب" است يا "بد" . اگر خوب است مهره را حركت مي دهد و اگر بد حركت ديگري را انتخاب مي كند . مثلا اگر كامپيوتر در انتهاي حركت 11 مهره خواهد داشت و حريف 9 مهره در نهايت دو مهره( 2=9-11 ) بيشترخواهد داشت كه اين نتيجه "خوب" دارد .
البته تابع فوق براي بازي شطرنج بسيار ساده است و تنها ملاك براي بازي تعداد مهره ها نيست . همانطور كه همه مي دانيم هر كدام از مهره ها براي خود ارزشي دارند . موقعيت و محل مهره ها نيز قابل توجه است . اينكه آيا شاه ما در خطر كيش هست يا خير . وزير ما در خطر از دست رفتن مي باشد يا خير و موارد ديگر . اينجا وظيفه برنامه نويس است كه فرضا با ارزش گذاري روي مهره ها با اعداد بتواند ارزش مهره ها را مشخص كند مثلا قلعه معادل 5 سرباز است . فارغ از اينكه تابع ما چه پيچيدگي هاي ديگري مي تواند داشته باشد . مهم اينستكه تابع ما در نهايت چه عددي بر مي گرداند . كه اين تابع نشانگر ميزان خوب يا بد بودن حركتي است كه قرار است انجام شود .
براي تشريح بيشتر مساله سعي مي كنيم يك درخت سه مرحله اي كه قابليت درست كردن سه حركت آينده را دارد را بكشيم و مساله را روي آن دنبال كنيم .
فرض را براين مي گيريم كه در هر حالت هر يك از مهره ها مي توانند تنها سه حركت انجام دهند .



كامپيوتر مهره سفيد است و مي تواند يكي از سه حركت ممكن را انجام دهد . اگر هر يك از سه حركت ممكن را انجام دهد مهره گردان مشكي هم ميتواند سه حركت انجام دهد ( در عمل تعداد حركات بيشتر است كه بدليل بزرگ شدن درخت از كشيدن تمامي حالات صرف نظر مي كنيم ) . بعد از حركت مهره هاي سياه مهره هاي سفيد هم ميتوانند دو حركت انجام دهند . (پايين ترين مرحله درخت ) . parsx
اما براي تحليل درخت كامپيوتر از پايين ترين گره ( برگ) شروع به محاسبه مي كند از سمت چپ پايين عدد بين دو برگي كه ارزش 8 و 2 دارند عدد 8 انتخاب مي شود اين بآن دليل است كه از آنجايي كه مهره سياه حريف است بايد پرارزشترين حركت را انتخاب كرد ( مهره سياه = ماكسيمم) از بين برگ هاي 4 و 8 هم 8 را انتخاب مي كند و بهمين ترتيب تا درخت به شكل زير در مي آيد :


حال كه به انتخاب حركت مشكي رسيديم بايد مقادير مينيمم را در مرحله دوم يعني عمق 3 ( مهره هاي مشكي ) انتخاب كنيم يعني بصورت قراردادي حركات مهره هاي سفيد كه خودش مي باشد بايد كمترين ارزش را داشته باشند بنابراين از سمت چپ بين سه عدد 887 عدد 7 براي مهره سفيد سمت راستي قرار مي گيرد و براي بعدي عدد 5 و بعدي عدد 4 بنابراين شكل درخت به شكل زير در مي آيد :


همانطور كه از شكل پيداست نوبت به انتخاب براي حركات سفيد است بنابراين بايد دوباره ماكسيموم مقادير را انتخاب كنيم . اكنون كامپيوتر آماده انتخاب مقدار ماكسيموم از بين سه عدد 754 مي باشد بنابراين كامپيوتر حركتي كه ارزش 7 دارد را انتخاب مي كند ( ماكسيموم) . parsx
الگوريتم حل اين مساله به الگوريتم minimax مشهور است كه در اين مساله ما مهره هاي سفيد را ماكسيموم و مهره هاي سياه را مينيموم ناميديم و به صورت يك در ميان از بين اعداد به ترتيب اعداد ماكسيموم و مينيموم را انتخاب مي كنيم .
بعد از آنكه كامپيوتر حركت به ارزش 7 را انجام داد . منتظر مي ماند تا مهره سياه نيز حركت خود را انجام دهد . پس از آن دوباره درختي به شكل فوق درست مي كند و به ادامه بازي مي پردازد . البته اين الگوريتم با روشهايي چون هرس آلفا بتا قابليت هاي بالاتري از لحاظ سرعت و حجم حافظه مصرفي پيدا مي كند كه از تشريح جزئيات بيشتر خودداري مي كنيم .
بنابراين به اين نتيجه رسيديم كه كامپيوتر براي بازي شطرنج بهيچ وجه راجع به برد يا باخت فكرنمي كند بلكه با انجام عمليات محاسباتي از طريق تابعي كه تشريح كرديم به حل مساله مي پردازد . تا اينكه صفحه شطرنج را به نفع خودش در حالت "خوب" يا "بد" برساند . در اين بين الگوريتم هاي ديگري نيز براي حل مساله صفحات شطرنج وجود دارند كه علاقمندان مي توانند براي اطلاعات بيشتر به جستجو در اين زمينه بپردازند .
وحيد آقامحمدي .
مبارزه با اسپمر هاي phpbb
by vahid on Sat Feb 10, 2007 10:39 am
يكي از مشكلاتي كه اكثر مديران فروم هاي اينترنتي پيدا مي كنند اينه كه بعد از مدتي موتورهاي جستجوي اسپمر ها اون فروم ها رو پيدا كرده و مورد حمله خودشون قرار مي دهند .
و با ثبت نام هاي بيهوده و پست هاي غيرمجاز كه اكثرا لينك هاي تبليغاتي هستند فروم رو از حالت عادي خارج مي كنند .
خود phpbb براي مبارزه با اين spammer ها روش هايي رو براي ثبت نام مثله وارد كردن كد امنيتي تصويري يا مثلا فعال كردن عضويت از طريق ايميل و غيره رو دارند . كه متاسفانه اين روش ها هم در برابر اين اسپمر ها چندان كار ساز نيستند هرچند از ورود تعداد زيادي ديگر از اين دسته اسپمر جلوگيري مي كنند .
من بعد از مدتي كه اين مشكل رو ديدم به اين نتيجه رسيدم كه بجاي استفاده از روش هاي متعددي كه آموزش داده شده خيلي راحت مي شه از ورود اين دسته كرم ها جلوگيري كرد. براي اين كار كافيه فرضا فيلدي مثله فيلد ICQ را براي ثبت نام فعال كنيد .
باين ترتيب كه كاربر مثلا عدد دويست و پنجاه و پنج را وارد كند تا بتواند ثبت نام كند . منتهي اين پيام را به زبان فارسي مي نويسيم تا در آينده انشالله اين كرم ها نتوانند به كلك ما پي ببرند .
براي اضافه كردن چنين محدوديتي بايد در شاخه includes در فايل usercp_register چنين خطي را بعد از خط

i f ( e m p t y ( $ u s e r n a m e )

يك شرط ديگر به اين صورت اضافه كنيد :
i f ( $ i c q ! = 225 )  {$error = TRUE;$error_msg .='code <b>ICQ</b> ra <font color=red><b>Devisto Pangaho Pang</b></font> vared konid';}


اميدوارم استفاده لازم رو برده باشيد .
انتقال اطلاعات توسط ASP.Net ما بین صفحه های آن
by arash on Fri Oct 20, 2006 1:19 am
انتقال اطلاعات در ASP.Net ما بین صفحه های آن به چندین شکل صورت می گیرد
1) به وسیله QueryString و استفاده از متد get:
این شکل یکی از ساده ترین راه های انتقال اطلاعات ما بین دو صفحه است .برای انتقال اطلاعات ابتدا یک صفحه به نام parsx1.aspx ساخته و دو کنترل TextBox و یک کنترل Button روی صفحه می گزارید. ID تکس باکس ها را به ترتیب txtUser و txtPas قرار می دهیم و البته به خواص دگمه یک خاصیت "PostBackUrl="~/pasx2.aspx اضافه کنید.
به تگ فرم نیز دو خاصیت روبرو را اضافه می کنیم : "action="pasx2.aspx" method="get . سپس صفحه pasx2.aspx را ساخته و در قسمت page_load کد زیر را وارد می کنیم
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Response.Write("<b>User name : </b>" & Request.QueryString("txtName") & "<br>" _
                       & "<b>&nbsp;&nbsp;Password : </b>" & Request.QueryString("txtPas"))
    End Sub

حال صفحه parsx1.aspx را اجرا کنید.همان طور که مشاهده می کنید اگر در صفحه اول مقداری وارد کنید در صفحه دوم می توانید آنرا ببنید.
نکته Exclamation:
در ASP.Net بر خلاف تکنولوژی های پیشین( از جمله asp ) حتی در روش فرستادن اطلاعات از یک صفحه به صفحه دیگر با استفاده از QueryString اطلاعات مخفی می ماند. یعنی ASP.Net به طور خودکار اطلاعات را کد گزاری کرده سپس ارسال می کند و در آنسو نیز اطلاعات کد گزاری شده را دی کد می کند.
نکته Exclamation:
یکی از مهمترین محدودیت های ارسال اطلاعات به این روش اینست که مقدار اطلاعات مبادله شده در این روش کمتر از مقدار اطلاعات تبادل شده در روش های دیگر است.
نکته Exclamation:
کاربر شما با وارد کردن همان آدرس سایت (URL ) نتایج یکسانی با دفعات پیش خواهد گرفت
2) با استفاده از متد post :
تکنولوژی ASP.Net طور طراحی شده است که به شکل پیش فرض اطلاعات را به این شکل ما بین صفحه های خود انتقال دهد .همان صفحه parsx1.aspx را که در آموزش فوق ساختید باز کرده و در تگ form خاصیت method="get" را پاک کنید . با این کار به صورت پیش فرض "method="post خواهد شد.سپس به صفحه Pasrx2.aspx رفته و قسمت page_load کد زیر را وارد کنید:

Response.Write("<b>User name : </b>" & Request.Form("txtName") & "<br>" _
                       & "<b>&nbsp;&nbsp;Password : </b>" & Request.Form("txtPas"))

نکته 2.1Exclamation:
در متد پست شما نمی توانید به طور مستقیم مقدار متغییر ها را ببینید اما بهتر است خودتان متغییر ها را کد کنید چون بعضی از افراد می توانند با استفاده از یک سایت دیگر محتویات متغییر های شما را مشاهده یا دستکاری کنند

3) روش بعدی استفاده از Session است :
در این روش شما یک متغییر از نوع Session تعریف کرده و از آن مثل متغییر های دیگر استفاده می کنید. متغییرهای Session با هر بار اجرای سایت بروی کامپیوتر های کلاینت ایجاد می شوند و زمانی که کاربر مرورگر خود را می بندد از بین می روند. در صفحه parsx1.aspx خاصیت PostBackUrl="~/pasx2.aspx" دگمه را پاک کنید و سپس بروی آن دوبار کلیک کنید و کد زیر را بنویسید :
Session("user") = txtName.Text
        Session.Add("pas", txtPas.Text)
        Response.Redirect("pasx2.aspx")

سپس در قسمت page_load صفحه parsx2.aspx کد زیر را وارد کنید
 Try
            Response.Write("<b>User name : </b>" & Session("user") & "<br>" _
                       & "<b>&nbsp;&nbsp;Password : </b>" & Request.Form("Pas"))
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

نکته Exclamation:
علت استفاده از try احتمال به وجود آمد خطای احتمالی است. این خطا در صورتی رخ می دهد که صفحه parsx2.aspx به طور مستقیم فراخانی شود و در این صورت متغییر های Session قبل از تعریف و مقداردهی استفاده شوند
نکته Exclamation:
در مورد متغییرهای Session نیز نکته 2.1 برقرار است.
4) متغییرهای Application :
این نوع متغییر ها کاملا شبیه متغییرهای Session هستند .ولی با آنها یک تفاوت دارند و آن اینکه تا زمانی که Server شما در حال اجرا باشند متغییرهای از نوع Application از بین نخواهند رفت. بدین ترتیب در صورتی که تعداد متغییرهای از نوع Application زیاد باشد فشار زیادی به سرور خواهد آمد. این متغییر ها فقط و فقط در داخل سرور بوده و کاربر نمی تواند به هیچ شکلی آنها را مشاهده کند.قطعه کد زیر را به قسمت کد کلید مثال قبل اضافه کنید :
Application("user") = txtName.Text
        Application.Add("pas", txtPas.Text)
        Response.Redirect("pasx2.aspx")

حال در قسمت page_load صفحه parsx2.aspx قطعه کد زیر را اضافه کنید
        Try
            Response.Write("<b>User name : </b>" & Application("user").ToString & "<br>" _
                       & "<b>&nbsp;&nbsp;Password : </b>" & Application("Pas").ToString)
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

نکته Exclamation:
برای اینکه در زمان تغییر دادن مقدار متغییرهایی از نوع Application مشکل تصادم بین کاربران پیش نیاید ( تغییر هم زمان مقدار متغییری از نوع Application توسط دو کاربر متفاوت ) می توان از متد lock و unlock به شکل زیر استفاده کرد.
Application.Lock()
        Application("user") = txtName.Text
        Application.Add("pas", txtPas.Text)
        Application.UnLock()
        Response.Redirect("pasx2.aspx")


5) و آخرین روش استفاده از Cache است :
کاشه یا همون Cache در واقع فقط برای ذخیره سازی اطلاعات به مدت مشخص است. نحوه استفاده از آن مانند Session است و فرق آن اینست که می توان برای آن مدت زمان تعیین کرد تا از منابع سرور کمتر استفاده شود. هر جا که می توانید از کاشه استفاده کنید چون باعث می شود منابع سیستم کمتر به هدر رود .کش را با استفاده از متد insert درج می کند تا بتوانیم برای آن زمان تعیین کنیم.مثال :

Dim date1 As String
        If Cache("date") Is Nothing Then
            Dim clsDate As New clsShamsi2Hejri()
            date1 = clsDate.ConverToShamsi(Now.ToLongDateString)
            Cache.Insert("date", date1, Nothing, DateTime.Now.AddHours(1), Cache.NoSlidingExpiration)
        Else
            date1 = Cache("date")
        End If

با استفاده از متد DateTime.Now.AddHours(1) برای حذف این کاشه وقت تعیین می کنیم و دو گزینه اول نام و سپس مقدار کاشه است
چگونه به وسیله ASP.NET به دیگران ایمیل (Email) بزنیم
شروع آموزش Visual Studio 2005 و ASP.NET 2.0 و Visual C#
توابع مهم مربوط به دست كاري رشته ها در SQL
view all blog entries...

Powered by phpBB Blog.