عملکرد دستگاه نوبت‌دهی بی‌سیم

دستگاه نوبت‌دهی بی‌سیم تحت شبکه

  • شبکه تماما بی‌سیم (امکان نوبت‌دهی حتی برای چند مکان پراکنده از طریق شبکه اینترنت)
  • امکان توسعه و افزودن باجه‌ها و ایستگاه‌های نوبت‌دهی
  • نمایشگر باجه: تابلو روان P5 تمام رنگی
  • ایستگاه نوبت‌دهی: نمایشگر لمسی و چاپگر حرارتی (امکان شخصی‌سازی گسترده)

 

پاییز

هوا بدجوری بوی پاییز می‌دهد. دوباره یاد پاییز و مهر و مدرسه افتاده‌ام، به خصوص شهید قدوسی و سال آخرش!

یاد اتاق SQR و ربات و ماجراهایش…

نمی‌دانم چرا غیر از یکی دو صحنه که از دستم در حال کدنویسی گرفتم صحنه‌ی دیگری از خودم در این فیلم ضبط نکردم 😐

چطور در سی‌شارپ صف اجرای دستورات بسازیم؟

همانطور که می‌دانید سی‌شارپ مفهومی به نام Queue یا صف دارد که می‌توان آن را برای انواع متغیرها ساخت، در آن مورد جدیدی Enqueue کرد و سپس در یک چرخه تک تک Dequeue کرده و استفاده کرد؛ ساختار آن به صورت FIFO است.

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

یکی از انواع متغیر در سی‌شارپ Action است. در توضیح آن آمده:

Encapsulates a method that has no parameters and does not return a value

یک متدی که پارامتری ندارد و مقداری را برنمی‌گرداند را در خود ذخیره می‌کند

حقیقا از اینکه دیدم سی‌شارپ چنین قابلیتی دارد هم به شدت تعجب کردم هم خوشحال شدم (سی یاد بگیر! با تو باید const char*‎ رو هم دستی به char*‎ تبدیل کنم! 😒). با کمی تلاش این فرمول به دست آمد:

  1. اول یک صف از نوع Action بسازید:
  2. یک BackgroundWorker می‌سازیم تا همیشه بررسی کند که آیا دستوری در صف وجود دارد؟ و اگر وجود داشت اجرا کند:
  3. حالا هرجا لازم شد اینطوری دستورات را به صف اضافه می‌کنیم:

    می‌بینید که دستورات یک به یک اجرا می‌شوند.

سخت‌تر از یتیمی…

أَشَدُّ مِنْ يُتْمِ الْيَتِيمِ الَّذِي انْقَطَعَ عَنْ أُمِّهِ وَ أَبِيهِ يُتْمُ يَتِيمٍ انْقَطَعَ عَنْ إِمَامِهِ وَ لَا يَقْدِرُ عَلَى الْوُصُولِ إِلَيْهِ وَ لَا يَدْرِي كَيْفَ حُكْمُهُ فِيمَا يُبْتَلَى بِهِ مِنْ شَرَائِعِ دِينِهِ

سخت تر از یتیم جدا شده از مادر و پدر، یتیمی است که از امامش جدا شده و توانایی دستیابی به وی را ندارد. و حکم امامش را درباره مسائل دینی مورد ابتلا نمی‌داند…

چگونه در Apache روی یک پورت متفاوت SSL را فعال کنیم؟

در حالت عادی یک سرور به گونه‌ای تنظیم شده است که ارتباطات عادی HTTP را روی پورت 80 و HTTPS را روی پورت 443 ارائه دهد؛ مرورگرهای وب هم با همین پیش‌فرض کار می‌کنند و به همین دلیل اغلب اوقات آدرس وبسایت‌ها چیزی شبیه به example.ir دیده می‌شود، نه example.ir:80 و نه https://example.ir:443 (در حالی که هر دو به یک آدرس اشاره دارند).

اما گاهی نیاز داریم تا از چند پورت در کنار هم استفاده کنیم و پورت HTTPS ما غیر از 443 باشد؛ در این صورت می‌توانیم به صورت زیر عمل کنیم (سرور Ubuntu 22.04 LTS – آپاچی 2.4 و LetsEncrypt-CertBot):

ابتدا تنظیمات سایت در آپاچی را باز می‌کنیم:

حالا این بخش را به تنظیمات فعلی اضافه می‌کنیم:

 

سپس تنظیمات پورت‌ها را باز می‌کنیم:

پورت دلخواهمان را در آن قرار می‌دهیم:

 

در انتها آپاچی را ری‌استارت می‌کنیم:

چگونه یک Setting را در عنصر WPF نمایش دهیم (Bind)؟

تنظیمات یا Settings در پروژه‌های سی‌شارپ لیستی از متغیرها هستند که علاوه بر تنظیم اولیه، در صورت تغییر در حین برنامه به صورت ماندگار ذخیره می‌شوند و با بستن برنامه از بین نمی‌روند؛ به همین دلیل روشی سریع و آسان برای ذخیره تنظیمات کوچک برنامه هستند.

گاهی اوقات لازم است در (مثلا یک فرم ثبت‌نام) برنامه چند TextBox را طوری نمایش دهیم که چند متغیر در آن‌ها دیده شود و کاربر بتواند آن‌ها را ویرایش کند. همانطور که می‌دانید در رابط گرافیکی WPF مفهومی به نام BIND یا متصل کردن وجود دارد که به کمک آن بدون کدنویسی اضافه می‌توان متغیرهایی را به عنوان محتوای یک عنصر قرار داد؛ برای اینکه یک Setting را در عنصر قرار دهیم کافیست این ویژگی را به Window اضافه کنیم:

دقت کنید که به جای NAMESPC نام namespace پروژه خودتان را قرار دهید.

حالا یک Source به نام properties:Settings.Default داریم که می‌توانیم آن را bind کنیم؛ مثلا:

در Path نام تنظیم و در Mode حالت ارتباطی (که TwoWay یعنی اگر کاربر متن را تغییر داد آن تنظیم هم تغییر کند) قرار می‌گیرد.

دقت کنید که در صورتی که ارتباط دو طرفه استفاده می‌کنید حتما با دستور:

از ذخیره شدن تنظیمات مطمئن شوید.

 

ویندوز 3.1 فارسی!

یکی از سرگرمی‌های من، گشتن در بین آثار باستانی(!) به جا مانده از نرم افزارها و سیستم عامل‌های قدیمی و بررسی امکانات و رابط کاربری آن‌هاست. در این بین گاهی چیزهایی پیدا می‌کنم که برایم بسیار جالب است. به طور مثال چند سال پیش چند نسخه سیستم‌عامل فارسی شده پیدا کردم که برای حدود 25 سال پیش هستند و در مورد نسخه‌های فارسی مک او اس کلاسیک که روی شبیه‌ساز نصب کردم اینجا و اینجا نوشتم.

مدتی بود که یک نسخه از ویندوز 3.1 فارسی را پیدا کرده بودم؛ برای منی که نسخه‌ی قدیمی‌تر از پارسا 99 (که غیر رسمی هم هست) ندیده بودم جالب بود و تصمیم گرفتم تا آن را روی QEMU نصب کنم. ادامه‌ی مطلب