هوا بدجوری بوی پاییز میدهد. دوباره یاد پاییز و مهر و مدرسه افتادهام، به خصوص شهید قدوسی و سال آخرش!
یاد اتاق SQR و ربات و ماجراهایش…
هوا بدجوری بوی پاییز میدهد. دوباره یاد پاییز و مهر و مدرسه افتادهام، به خصوص شهید قدوسی و سال آخرش!
یاد اتاق SQR و ربات و ماجراهایش…
الهی لیت شعری اناظر الی فی خلواتی ام معرض عنی…
همانطور که میدانید سیشارپ مفهومی به نام Queue یا صف دارد که میتوان آن را برای انواع متغیرها ساخت، در آن مورد جدیدی Enqueue کرد و سپس در یک چرخه تک تک Dequeue کرده و استفاده کرد؛ ساختار آن به صورت FIFO است.
در یکی از پروژهها نیاز داشتم تا اگر کاربر کاری را انجام داد تعدادی دستور یکی پس از دیگری انجام شود. ممکن بود کاربر پشت سر هم آن کار را انجام دهد و در این حالت نرم افزار تا پایان پردازش تمام دستورات قفل میکرد. در فکر این بودم که چقدر خوب بود اگر میشد به جای متغیر، دستورات یا همان متدها را وارد یک صف میکردیم تا یکی یکی اجرا شوند؛ کمی در موردش جستجو کردم که آیا میشود؟ و میشد 🙂
یکی از انواع متغیر در سیشارپ Action است. در توضیح آن آمده:
Encapsulates a method that has no parameters and does not return a value
یک متدی که پارامتری ندارد و مقداری را برنمیگرداند را در خود ذخیره میکند
حقیقا از اینکه دیدم سیشارپ چنین قابلیتی دارد هم به شدت تعجب کردم هم خوشحال شدم (سی یاد بگیر! با تو باید const char* رو هم دستی به char* تبدیل کنم! 😐). با کمی تلاش این فرمول به دست آمد:
1 |
Queue<Action> myQueue = new Queue<Action>(); |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
var myBW = new BackgroundWorker(); myBW.DoWork += (s, o) => { while (true) { if (myQueue.Count > 0) { Action action = myQueue.Dequeue(); // Get last action action(); // Calls that action } } }; myBW.RunWorkerAsync(); |
1 2 3 4 |
myQueue.Enqueue(() => { System.Threading.Thread.Sleep(1200); }); |
أَشَدُّ مِنْ يُتْمِ الْيَتِيمِ الَّذِي انْقَطَعَ عَنْ أُمِّهِ وَ أَبِيهِ يُتْمُ يَتِيمٍ انْقَطَعَ عَنْ إِمَامِهِ وَ لَا يَقْدِرُ عَلَى الْوُصُولِ إِلَيْهِ وَ لَا يَدْرِي كَيْفَ حُكْمُهُ فِيمَا يُبْتَلَى بِهِ مِنْ شَرَائِعِ دِينِهِ
سخت تر از یتیم جدا شده از مادر و پدر، یتیمی است که از امامش جدا شده و توانایی دستیابی به وی را ندارد. و حکم امامش را درباره مسائل دینی مورد ابتلا نمیداند…
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(); |
از ذخیره شدن تنظیمات مطمئن شوید.
شل کن سفت کن همیشه روش خوبی برای انجام کاریه که بقیه قبول نمیکنند. پیچ و مهرهی زنگ زده رو که خوب باز میکند؛ مغزهای زنگ زده رو هم…
یکی از سرگرمیهای من، گشتن در بین آثار باستانی(!) به جا مانده از نرم افزارها و سیستم عاملهای قدیمی و بررسی امکانات و رابط کاربری آنهاست. در این بین گاهی چیزهایی پیدا میکنم که برایم بسیار جالب است. به طور مثال چند سال پیش چند نسخه سیستمعامل فارسی شده پیدا کردم که برای حدود 25 سال پیش هستند و در مورد نسخههای فارسی مک او اس کلاسیک که روی شبیهساز نصب کردم اینجا و اینجا نوشتم.
مدتی بود که یک نسخه از ویندوز 3.1 فارسی را پیدا کرده بودم؛ برای منی که نسخهی قدیمیتر از پارسا 99 (که غیر رسمی هم هست) ندیده بودم جالب بود و تصمیم گرفتم تا آن را روی QEMU نصب کنم. ادامهی مطلب
دستگاههای الکترونیکی هر روز در حال پیشرفت بیشتر هستند و بهکارگیری آنها در عرصههای مختلف زندگی، رویای ارتباط خودکار دستگاههای مختلف با یکدیگر در بستر اینترنت اشیاء را روز به روز به واقعیت نزدیکتر میکند. امروزه فعالیتهای مختلف مانند مشاغل و فرایندهای کنترلی، تولیدی، پایش و خدمات با استفاده از اینترنت اشیاء در حال متحول شدن است.
اینترنت اشیاء مفهومی در دنیای فناوری است که بر مبنای آن دستگاهها و اجزاء زندگی انسان، به طور هوشمندانه و بدون دخالت انسان اطلاعات موردنیاز برای فعالیت بهتر را از دستگاههای دیگر در شبکه دریافت کرده و با آنها به اشتراک میگذارد.
امروزه برنامهنویسی برای کامپیوتر فعالیتی بسیار شیرین است و دلیل آن این است که هر فرد مشتاقی میتواند با زبانها و محیطهای توسعه نرمافزار مختلف به سرعت برنامهای نوشته و اجرا کند؛ اما اوضاع در دنیای الکترونیک متفاوت است.
اجرای یک برنامه روی سختافزار ابتدا نیازمند انتخاب و خرید قطعاتی مانند پردازنده، صرف زمان برای ساخت مدار الکترونیکی و سپس برنامهنویسی با زبان مشخص آن پردازنده است.
اما آردوینو، یک پروژه سختافزاری و نرمافزاریِ رایگان است که به علاقهمندان الکترونیک کمک میکند تا در زمانی بسیار کوتاه ایدههای خود را به اجرا در بیاورند. آردوینو از یک محیط توسعه نرم افزار مناسب و مدارهای الکترونیکی آمادهبهکار تشکیل شده است.
آردوینو برای شما مدارهای آماده به کاری ساخته که میتوانید با زبانی مشترک روی همهشان برنامه بنویسید و از پایههای دیجیتالی میکروکنترلرهای آنها برای کارهای مختلفی استفاده کنید. علاوه بر این، ثبت برنامهها روی پردازنده دیگر نیازمند خرید دستگاههای پروگرمر نیست و این فرایند به سادگی توسط خودِ آردوینو انجام میگردد.
شروع به یادگیری، ساخت و توسعه ایدهها و حتی ساخت دستگاههای تجاری با آردوینو بسیار شیرینتر است 🙂
از آنجایی که آردوینو پروژهای آزاد است، هر کسی میتواند آردوینو را به دلخواه خودش سفارشیسازی کرده و یا حتی آردوینوی خودش را بسازد! آردوینو در حال حاضر پرطرفدارترین بُرد توسعهی الکترونیکی دنیاست و میلیونها کاربر از سراسر دنیا از استفادهی آن لذت میبرند و از نظر سختافزاری و نرمافزاری آن را توسعه میدهند.
بیش از 7 سال از شروع فعالیت من در دنیای الکترونیک میگذرد. در طی این سالها پروژههای مختلفی را برای مشتریان طراحی کردم و نسخه پیشتولید (پروتوتایپ) بعضی از آنها را در وبسایتم برای شما به اشتراک گذاشتهام. یادگیری من در این سالها از طریق منابع مختلف و معتبری مانند Adafruit و Sparkfun انجام شده و در حین ساخت پروژهها تجربیات زیادی را هنگام بروزرسانی و ارتقای دستگاههایم کسب کردم.
بسیاری از دوستان را دیدهام که قصد شروع یادگیری الکترونیک با آردوینو را دارند یا دنبال منبع آموزشیای هستند تا دانش خود را در رابطه با اینترنت اشیاء و انواع روشهای ساخت این دستگاهها افزایش دهند. این افراد از نبود منبعی مطمئن و جامع برای یادگیری اینترنت اشیاء و آردوینو در بین منابع فارسی گله دارند. این مسئله باعث شد تا در طی یک سال گذشته تجربیات خودم را در یک مجموعه آموزشی 20 قسمتی با عنوان «مجموعه آموزشی اینترنت اشیاء با محوریت آردوینو» آماده و به شما دوستان عرضه کنم: