|
1 2 3 |
Properties.Settings.Default[settingName] = Properties.Settings.Default.Properties[settingName].DefaultValue; Properties.Settings.Default.Save(); |
|
1 2 3 |
Properties.Settings.Default[settingName] = Properties.Settings.Default.Properties[settingName].DefaultValue; Properties.Settings.Default.Save(); |
در حالت عادی یک سرور به گونهای تنظیم شده است که ارتباطات عادی HTTP را روی پورت 80 و HTTPS را روی پورت 443 ارائه دهد؛ مرورگرهای وب هم با همین پیشفرض کار میکنند و به همین دلیل اغلب اوقات آدرس وبسایتها چیزی شبیه به example.ir دیده میشود، نه example.ir:80 و نه https://example.ir:443 (در حالی که هر دو به یک آدرس اشاره دارند).
اما گاهی نیاز داریم تا از چند پورت در کنار هم استفاده کنیم و پورت HTTPS ما غیر از 443 باشد؛ در این صورت میتوانیم به صورت زیر عمل کنیم (سرور Ubuntu 22.04 LTS – آپاچی 2.4 و LetsEncrypt-CertBot):
ابتدا تنظیمات سایت در آپاچی را باز میکنیم:
|
1 |
sudo nano /etc/apache2/sites-enabled/000-default.conf |
حالا این بخش را به تنظیمات فعلی اضافه میکنیم:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
... <IfModule mod_ssl.c> <VirtualHost *:446> ServerName example.ir DocumentRoot /var/www/html SSLEngine on SSLCertificateFile /etc/letsencrypt/live/example.ir/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.ir/privkey.pem </VirtualHost> </IfModule> ... |
سپس تنظیمات پورتها را باز میکنیم:
|
1 |
sudo nano /etc/apache2/ports.conf |
پورت دلخواهمان را در آن قرار میدهیم:
|
1 2 3 4 5 6 7 8 9 |
Listen 80 #Our Normal Port <IfModule ssl_module> Listen 470 </IfModule> <IfModule mod_gnutls.c> Listen 470 </IfModule> |
در انتها آپاچی را ریاستارت میکنیم:
|
1 |
sudo service apache2 restart |
تنظیمات یا Settings در پروژههای سیشارپ لیستی از متغیرها هستند که علاوه بر تنظیم اولیه، در صورت تغییر در حین برنامه به صورت ماندگار ذخیره میشوند و با بستن برنامه از بین نمیروند؛ به همین دلیل روشی سریع و آسان برای ذخیره تنظیمات کوچک برنامه هستند.
گاهی اوقات لازم است در (مثلا یک فرم ثبتنام) برنامه چند TextBox را طوری نمایش دهیم که چند متغیر در آنها دیده شود و کاربر بتواند آنها را ویرایش کند. همانطور که میدانید در رابط گرافیکی WPF مفهومی به نام BIND یا متصل کردن وجود دارد که به کمک آن بدون کدنویسی اضافه میتوان متغیرهایی را به عنوان محتوای یک عنصر قرار داد؛ برای اینکه یک Setting را در عنصر قرار دهیم کافیست این ویژگی را به Window اضافه کنیم:
|
1 |
xmlns:properties="clr-namespace:NAMESPC.Properties" |
دقت کنید که به جای NAMESPC نام namespace پروژه خودتان را قرار دهید.
حالا یک Source به نام properties:Settings.Default داریم که میتوانیم آن را bind کنیم؛ مثلا:
|
1 |
<TextBox x:Name="txt_address" Text="{Binding Source={x:Static properties:Settings.Default}, Path=set_serverAddress, Mode=TwoWay}"/> |
در Path نام تنظیم و در Mode حالت ارتباطی (که TwoWay یعنی اگر کاربر متن را تغییر داد آن تنظیم هم تغییر کند) قرار میگیرد.
دقت کنید که در صورتی که ارتباط دو طرفه استفاده میکنید حتما با دستور:
|
1 |
Properties.Settings.Default.Save(); |
از ذخیره شدن تنظیمات مطمئن شوید.
اگر مثل من حال و حوصله طراحی مدار منطقی ندارید، با استفاده از سایت www.32×8.com میتوانید با وارد کردن جدول صحت متغیرها یا جدول کارنو، معادله مربوطه و مدار منطقی PAL آن را با استفاده از گیتهای AND و OR مشاهده کنید.

همچنین سایت tma.main.jp تمامی این فعالیتها را همراه با چند قابلیت دیگر (مثل تبدیل تابع به جمع مینترم یا ضرب ماکسترم) انجام میدهد.
گاهی اوقات نیاز داریم تا بدانیم پرونده php ای که در حال اجراست از کجا دارد اجرا میشود؟ یا میخواهیم یکی از پروندهها را باز کنیم و باید آدرس مطلق (Absolute) وارد کنیم نه نسبی (Relative)؛ به کمک دستور dirname(__FILE__) میتوانیم آدرس پوشه فعلی را در یک String تحویل بگیریم. مثلا اینجا نیاز داشتم تا آدرس یک فونت را داشته باشم تا در تابع imagettftext استفاده کنم:
|
1 2 |
// Set Path to Font File $font_path = dirname(__FILE__) . '/BTitrBd.ttf'; |
چند روز پیش برای مستقیم سازی مالکیت سهام عدالت در سامانه سجام ثبت نام کردم؛ برای احراز هویت اطلاعات نیاز به مراجعه حضوری به دفاتر منتخب بود. با توجه به اوضاع کرونایی جهان فرصت نمی شد تا برای احراز هویت اقدام کنم اما امروز فرصت شد. بد نیست به صورت خلاصه نگاهی به فرآیند دریافت کد بورسی بیندازیم:
1- قدم اول این است که در سامانه سجام ثبت نام کنید. به sejam.ir مراجعه کنید و ثبت نام را بزنید. به طور کلی آماده ورود هرگونه اطلاعات بی ربط و با ربطی باشید ?? (احتمالا هدف از دریافت اینهمه اطلاعات غیرضروری مثل کد و نام شعبه و نوع حساب بانکیتان مبارزه با پولشویی است! اما ما که در سامانه های مهم تر از این با اطلاعات کمتری ثبت نام کردیم و اتفاقی نیفتاد…)
در نهایت پس از پرداخت هزینه ۱۰ هزار تومانی، یک کد پیگیری برای شما پیامک می شود که باید آن را برای مرحله ۲ استفاده کنید:
مرتضی رستگار گرامی، كد پيگيري شما در سامانه سجام
xxxxxxxxxx مي باشد، لطفا با همراه داشتن مدارك شناسايي به مراكز منتخب احراز هويت سجام مراجعه و فرايند سجامي شدن خود را تكميل نماييد.
www.sejam.ir
شرکت سپرده گذاری مرکزی
گاهی اوقات تابعی (یا همان متد = method) از داخل تابعهای مختلفی اجرا میشود و در هنگام خطاگیری آدم میماند که این تابع اصلا از کجا الان صدا زده شد؟!
با استفاده از کد زیر میتوانید بفهمید که اسم تابعی که تابع را صدا زده چیست:
|
1 2 3 4 5 6 |
using System.Diagnostics; . . . StackTrace stackTrace = new StackTrace(); MessageBox.Show(stackTrace.GetFrame(1).GetMethod().Name); |
پسرم!
اگر بخواهم نتیجه چند سال فعالیت در زمینه الکترونیک (مشخصا این یک سال و خورده ای) را در یک جمله به تو بگویم، این است که: “منبع تغذیه (آداپتور) ارزان نخر پشیمان میشوی!”
فرض کنید داخل پرونده Xaml تان دو SolidColorBrush تنظیم کرده اید و قصد دارید در طول برنامه سی شارپتان رنگ پس زمینه یک عنصر را بین آن دو جابجا کنید؛ اگر در اینترنت مقداری بگردید، اکثرا این کد را به شما پیشنهاد می کنند:
|
1 |
myElement.Background = this.Resource[key]; |
اما این کد باعث می گردد تا مقدار آن SolidColorBrush تنها در لحظه محاسبه شده و تنظیم گردد؛ در حالی که ما نیاز داریم تا اگر مقدار SolidColorBrush را تغییر دادیم رنگ اجزای استفاده کننده از آن نیز به صورت خودکار تغییر کنند.
پس از مقداری جستجو به کد های زیر رسیدم:
در XAML:
|
1 |
<Grid x:Name="myElement" Background="{DynamicResource key}"/> |
در C#:
|
1 2 |
myElement.SetResourceReference(Grid.BackgroundProperty, "key"); // Grid صفت عنصر ماست (Border,Button,...) |
گاهی اوقات قصد داریم تا پرونده ای را از یک نشانی خشک فراخوانی کنیم (مثل C:/Folder/File.jpg)؛ گاهی اوقات پرونده ما در کنار فایل exe برنامه قرار گرفته که آن هم روش خودش را دارد اما گاهی اوقات می خواهیم از پرونده هایی که در خود سلوشن قرار داده ایم استفاده کنیم.
کد زیر را چندین بار به دست آورده بودم اما فراموش می کردم؛ با شما به اشتراک می گذارم تا خودم هم فراموش نکنم:
|
1 2 |
myImage = new BitmapImage(new Uri(@"pack://application:,,,/" + Assembly.GetCallingAssembly().GetName().Name + ";component/" + "pics/bahar.jpg", UriKind.Absolute)); img_sidebar.ImageSource = myImage; |
ویرایش ۲۳ خرداد ۱۴۰۱: اگر در اسم پروژه از فاصله استفاده شده باشد آن GetName کار نمیکند! فعلا اسم پروژه را دستی وارد کردم…