سه شنبه 30 مهر 1398 |  عضویت / ورود

محصولات ما: Linga (لینگا)؛ برنامه‌ای برای پیشگیری و درمان تایپ اشتباه به زبان دوم کیبورد


ما ده سال پیش در مطلب «برنامه‌ای کوچک برای دردسری بزرگ! (رفع دردسر تایپ حروف انگلیسی به جای حروف فارسی)» برنامه کوچکی که با نام MagicFa ساخته بودیم را معرفی کردیم.

این برنامه، در حقیقت یک درمان برای یک معضل بزرگ بود؛ معضلی که اگر مثل من دائم در حال تایپ و کدنویسی باشید و البته سرعت تایپتان از سرعت فکر کردنتان بیشتر شده باشد، می‌فهمید چه اعصابی از انسان خرد می‌کند! تصور کنید، یک خط طولانی را تایپ می‌کنید و ناگهان به صفحه نمایش نگاه می‌کنید و می‌بینید که با زبان دوم کیبورد تایپ کرده بودید! مثل همین چند دقیقه پیش:

سثف لمخذشم اخف نثغ بخق حقخلقشپ هد ز٫

چقدر پاک کردن و نوشتن این متون در این مواقع سخت است!

در سال‌های اخیر، ده‌ها برنامه برای درمان این درد توسط برنامه‌نویسان کشورهای غیرانگلیسی‌زبان نوشته شده است؛ مانند Ochepyatka یا LangOver و... که می‌توانید لیست کامل آن‌ها را در آدرس زیر ببینید:

https://alternativeto.net/software/langover

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

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

از طرفی، در این ده سال، هر بار که من اشتباه تایپ می‌کردم، به این فکر فرو می‌رفتم که آیا می‌شود راهی برای «پیشگیری» از این مشکل پیدا کرد؟

به دلیل این مشکل فکر کردم: اکثر مواقع دلیل این مشکل این است که کاربر به جای نگاه به مانیتور، به کیبورد نگاه می‌کند (و یا در فکر است و به جای دیگری خیره شده).

بنابراین به این نتیجه رسیدم که اگر بتوانیم روی کیبورد یک نشانه قرار دهیم که کاربر با نگاه به آن بفهمد الان چه زبانی فعال است (مثلاً فارسی یا انگلیسی) به احتمال زیاد، کاربر متوجه می‌شود که زبان مورد انتظارش فعال نیست و باید زبان را تغییر دهد.

فکر خوبی بود اما چه نشانه‌ای روی کیبورد؟ مثلاً به ذهنم رسید که (۱)کیبورد را موقع تایپ به زبان انگلیسی بلرزانیم! (اما این نیاز به تعریف یک استاندارد جدید برای کیبورد داشت! کیبوردهای قدیمی را چه کار کنیم!؟) به ذهنم رسید که (۲)یک لامپ LED با USB به سیستم وصل شود (کیبورد من یک خروجی USB در کنارش دارد و اتفاقاً روی کیبورد یک لامپ شبیه لامپ مطالعه هم هست که مثلاً در شب روی کیبورد بتابد) را موقعی که زبان انگلیسی است روشن کنیم. (این هم ایده خوبی نبود چون کاربر باید برای این معضل یک قطعه جدید می‌خرید).

از کیبورد ناامید شدم. به ذهنم رسید که (۳)صفحه نمایش هنگامی که به زبان انگلیسی شروع به تایپ می‌کنیم چشمک بزند. این هم ایده خوبی نبود چون کاربر را اذیت خواهد کرد. مگر اینکه تشخیص دهیم که کاربر دارد اشتباه تایپ می‌کند که این خودش یک کدنویسی پیچیده نیاز دارد و در بسیاری مواقع تشخیص اشتباه در کاراکترهای اول ممکن نیست.

به سراغ اطلاع‌رسانی از طریق صدا رفتم. تصمیم بر این شد که (۴)وقتی کاربر شروع به تایپ می‌کند، اگر زبان انگلیسی بود، یک صدا از اسپیکر و یا (۵)بازر (بوق مادربورد) شنیده شود. این ایده، ایده عالی‌ای بود و هست اما بررسی صدرالدین (qwerty13) نشان داد که چالش‌های زیادی در این زمینه داریم؛ ایمیل او:

از ماه قبل که در مورد مجیکفای جدید گفتید در مورد بخشای مختلفش گشتم. یک کد کاربردی برای پخش بیپ با بازر مادربرد پیدا کردم و مقداری کد برای فهمیدن اسم برنامه ای که الان کاربر روشه دیدم؛ اما کلی چالش در طراحی این نرم افزار هم به ذهنم رسید. مثلا اینکه چطور تشخیص بدیم کاربر در حال تایپ هست که بهترین روش همونی هست که شما گفتید یعنی اولین باری که در یک پنجره کلیدی زده میشه اما چالش اینجا این هست که چطور به سبکترین حالت ممکن تغییر پنجره رو تشخیص بدیم چون کد هایی که دیدم با تغییر focus کار نمیکنن بلکه با هربار درخواست اسم برنامه رو برمیگردونن که یعنی باید تایمر تنظیم بشه و این رم میبره... (یک چیزی هم الان به ذهنم اومد. داخل نرم افزار هایی مثل ورد اگر بین پنجره هاش جابجا بشیم خودش خودکار زبان عوض میکنه و اگر با این روش مجیکفا ساخته بشه روی ورد تشخیص نمیتونه بده)
چالش دوم نحوه ی اطلاع رسانی هستش. اگر مانیتور چشمک بزنه (یک کدی هم پیدا کردم که باهاش میشه نور صفحه رو بالا برد تا بیشتر جلب توجه کنه) خوبه ولی همه جا جوابگو نیست. اگر صدا از بلندگو پخش بشه ممکنه کاربر ها مثل شما و من صدا رو خیلی کم یا بسته باشن و اگر با کد صدا رو زیاد کنیم ممکنه اتفاقات بدی بیفته.
در نهایت رفتم سراغ اینکه بازر مادربرد رو به صدا در بیارم. یک کتابخانه ای به نام InpOut32 هست که باهاش میشه پایه های IO کامپیوتر رو دستکاری کرد و پایه های بازر هم جزو همین دسته هست؛ کتابخونه رو نصب کردم و کد های آماده ش رو امتحان کردم اما کار نکرد. بین نسخه ۳۲ و ۶۴ بیتی هم جابجا شدم باز کار نکرد بعد دیدم ای دل غافل این لپ تاپ ها که اصلا بازر ندارن همه اعلان هاشون هم شبیه بازره فقط (حتی وقتی دکمه شیفت چپ رو چندبار پشت هم فشار میدید صدا از بلندگو پخش میشه و با بستن صدا اون هم بسته میشه)...
هیچی دیگه خلاصه الان با این شرایط درمان بهتر از پیشگیری هست و حتی خیلی سریع تر...

به این هم فکر کردم که می‌تواند در نسخه‌های بعدی در نظر گرفته شود: نمایش آیکون زبان به صورت بزرگ‌تر یا نمایش بزرگ در لحظه شروع به تایپ.

به هر حال، در حالی که یک روز به کیبورد خیره شده بودم تا ببینم چطور می‌توان این معضل را رفع کرد، نگاهم به یک چراغ روی کیبورد افتاد که ما بعد از DOS، هیچ وقت از آن استفاده نکرده‌ایم! چراغ Scroll Lock !

ناگهان چشمانم گرد شد! چرا از این چراغ برای هشدار استفاده نکنیم!؟ آن هم وقتی که در کیبوردهای حرفه‌ای، این LED دقیقاً زیر Space و مقابل چشم کاربر است:

https://img.aftab.cc/news/98/keyboard_leds.jpg

 

به هر حال، تصمیم بر همین شد و اینکه مجیکفا نیز با این ایده ادغام شود.

با محصول جدید ما آشنا شوید:

لینگا (Linga)

https://img.aftab.cc/news/98/linga.png

 لینگا در مورد معضل تایپ اشتباه به زبان دیگرِ کیبورد، دو کار انجام می‌دهد:

۱- پیشگیری:

لینگا، هنگامی که زبان فعال شما انگلیسی است، چراغ Scroll Lock را برای شما روشن می‌کند (و البته می‌توانید در کیبوردهایی مثل کیبورد لپ‌تاپ‌ها که Scroll Lock ندارد، تنظیم کنید که مثلاً اگر زبان فارسی شد، چراغ CAPS Lock روشن شود. با توجه به اینکه در حالت فارسی، CAPS Lock هیچ کاربردی نخواهد داشت، این کاربرد می‌تواند برای این چراغ در نظر گرفته شود)

۲- درمان:

اگر باز هم با وجود روشن بودن چراغ، متنی را اشتباه تایپ کردید، کافی‌ست آن را انتخاب کنید و کلیدهای Ctrl+Alt+X را بزنید تا آن متن به زبان دیگر تبدیل شود! (همانطور که در تصویر این برنامه مشخص است، می‌توانید این کلیدها را نیز به دلخواه تغییر دهید) (فراموش نکنید که اگر یک خط متن را تایپ کردید، با فشردن کلیدهای Shift+Home در ویندوز می‌توانید به سرعت آن خط را انتخاب کنید)

لینگا برای همه زبان‌ها و همه کیبوردها با چینش حروف مختلف

ابتکار مهمی که در لینگا به کار برده شده این است که می‌توانید چینش حروف را مطابق میل خود تغییر دهید. فقط کافی‌ست از منوی Tools گزینه Change Dictionary را بزنید و در ستون سمت چپ تمام حروف کیبورد به زبان اول (ابتدا بدون Shift و سپس با Shift) را زیر هم تایپ کنید و در ستون سمت راست، تمام حروف به زبان دوم. همین! لینگا دیگر مطابق میل شما عمل خواهد کرد. (به طور پیشفرض لینگا بر اساس کیبورد Persian (Standard) در ویندوز ۸ به بعد کار می‌کند. (راهنمای تغییر کیبورد به حالت استاندارد در ویندوز ۸ و ۱۰)

با توجه به این امکان و با توجه به اینکه آن را به زبان انگلیسی طراحی کردیم، لینگا را یک نرم‌افزار بین‌المللی می‌دانیم.

دانلود لینگا

برای دانلود این برنامه کم‌حجم که نیازی هم به نصب ندارد، روی لینک زیر کلیک کنید:

Download Linga

 

 

چالش‌های طراحی (برای برنامه‌نویس‌ها)

در طراحی این برنامه ساده، چالش‌های زیر که برخی ساعت‌ها نیاز به جستجو و آزمون و خطا داشت باید حل می‌شد:

۱- مقیم کردن برنامه در حافظه

۲- شنود دائم کیبورد فعال

۳- روشن کردن LEDها

۴- شناسایی کیبورد فعال ویندوز

۵- نوشتن در ریجستری و خواندن آن برای ثبت تغییرات کاربر

۶- تعریف کلیدهای میان‌بر برای برنامه در سراسر ویندوز (Global HotKey)

۷- امکان تغییر کلیدهای میان‌بر توسط کاربر

۸- اجرای برنامه در شروع ویندوز

۹- دسترسی برنامه به متن انتخاب شده در همه برنامه‌ها

۱۰- اصلاح متن اشتباه

۱۱- شنود کلیدهای میان‌بر و Paste کردن در برنامه مورد نظر

۱۲- تعریف دیکشنری در برنامه‌نویسی و یافتن حروف جایگزین به صورت دو-طرفه

و...

 

اگر پیشنهادی در مورد رفع این چالش به ذهن شما رسید بیان کنید تا اگر جالب بود، در نسخه‌های بعد در نظر بگیریم.

موفق باشید؛
حمید رضا نیرومند


[ارسال شده در مورخه : سه شنبه، 22 مرداد، 1398 توسط Hamid]
[ #اطلاعیه‌های آفتابگردان]



بازدیدها از این مطلب: 1903 بار   امتیاز متوسط : 0  تعداد آراء: 0   امتیاز دهید:

نظرات طرح شده

نام: [ کاربر جدید ]
ایمیل:

نظر:


اجازه استفاده از تگهای HTML را ندارید


جمع عدد 5 با 13 را در كادر زیر وارد نمایید:
(این كار برای جلوگیری از فعالیت موتورهای اسپمر است)


* توجه: نظر شما بعد از بررسی، نمایش داده خواهد شد.

aminsoltsni                توسط aminsoltsni در مورخه : سه شنبه، 22 مرداد، 1398(لینک نظر)
سلام مهندس
توی ویژوال بیسیک یک دستور هست راحت میشه صدای بلندگوی مادربرد را دراورد
به نظرم این برنامه های کوچک بهتر است با ویبی نوشته شوند


[ ارسال جوابیه ]


aminsoltsni                توسط aminsoltsni در مورخه : سه شنبه، 22 مرداد، 1398(لینک نظر)
یک پیشنهاد
اگر نرم افزار مگنیفایر گلاس را دیده باشید
یک کادر همراه ماوس حرکت میکند برای بزرگنمایی
حالا شما در نظر بگیرید وقتی متنی تشخیص داده شد که اشتباه تایپ شده
یک کادر با متن درست در یک پنجره روی ان متن نمایش داده بشه
با کلیپ بورد هم بشه جایگزین متن اشتباه کرد.حالا اگر این پنجره چشمک بزنه دورش
یا صدایی هم داشتع باشه بهتر
استفاده از سخت افزار ممکنه رو بعضی سیستم ها جواب نده
بارها برای من اتفاق افتاده تو استفاده از اسکی های کیبرد مشکلاتی داشتم
کیبرد با کیبرد شاید فرق کند
بهتره قضیه رو نرم افزاری حل کنید


[ ارسال جوابیه ]

    qwerty13 (امتیاز : 1)
    توسط qwerty13 در مورخه : چهارشنبه، 23 مرداد، 1398
    سلام،
    این که گفتید یک کادر بیاد در کنار متن در حال تایپ خودش یکی از چالش ها هست. چطور تشخیص بدیم که تکست باکس کجاست و نشانگر چشمک زن داخلِ تکست باکس کجاست تا کادر رو در کنارش قرار بدیم؟


    [ ارسال جوابیه ]

      aminsoltsni (امتیاز : 0)
      توسط کاربر مهمان در مورخه : چهارشنبه، 23 مرداد، 1398
      درود دوباره
      بله تشخیص این موضوع سخت هست
      البته راه حل هایی هست
      مثلا بتوانید هوک هر پنجره را بدست بیاورید و وقتی نشانه گر ماوس رو حالت تایپ قرار گرفت یعنی اینکه کاربر در حال تایپ هست. یعنی متد تشخیص را بگذارید روی ایکون ماوس و بعد بگویید اگر ماوس روحالت تایپ بود برنامه اماده کار شود. راحت هم هست. مشکل این است که بقول شما چشمک زن کجا قرار میگیرد, خب قضیه پیچیدع می شود
      به نظرم بجای قرار گرفتن پنجره بالای کادرهای تایپ همان کنار ماوس ظاهرشود
      حتی حرکت ناگهانی ماوس باعث میشود در دیدتر هم باشد


      [ ارسال جوابیه ]


محمدرضا (امتیاز : 0)(لینک نظر)
توسط محمدرضا در مورخه : شنبه، 26 مرداد، 1398
سلام

۱- شاید بشود یک کیبورد برای ویندوز طراحی کرد که این مشکل را حل کند. به جای کیبوردهای فارسی و انگلیسی پیشفرض خود ویندوز.

۲- راه حل اصلی اینه که از ابتدا (مدارس یا ترم ۱ دانشگاه) به افراد تایپ ۱۰ انگشتی حرفه‌ای آموزش داده بشه که نیازی به نگاه کردن به کیبورد هنگام تایپ نباشه


[ ارسال جوابیه ]


a_computing_engineer                توسط a_computing_engineer در مورخه : یکشنبه، 27 مرداد، 1398(لینک نظر)
سلام. دوستان توجه داشته باشید که بیشتر آنتی ویروس ها به قطعه کدی که فشرده شدن کلید روی فرم نرم افزارهای دیگر را مانیتور می کند، گیر می دهند و به چنین نرم افزاری به چشم Spyware نگاه می کنند ...
آیا شما گجتتان را از این لحاظ تست کرده اید؟


[ ارسال جوابیه ]

    Hamid (امتیاز : 1)
    توسط Hamid در مورخه : دوشنبه، 28 مرداد، 1398
    سلام.
    آنتی‌ویروس ویندوز ۱۰ که فعلاً ایرادی نگرفته...
    اگر از کسی ایراد گرفت اطلاع بده.


    [ ارسال جوابیه ]

      a_computing_engineer (امتیاز : 1)
      توسط a_computing_engineer در مورخه : سه شنبه، 29 مرداد، 1398
      سلام مجدد.
      نرم افزار را با Avira تست کردم و مشکلی نشان نداد. ویدئوی مراحل تست هم خدمت شما:
      https://www.aparat.com/v/kpQjn

      من قبلا وقتی داشتم با کد، از داخل یک نرم افزار، اجرا بودن یا نبودن یک نرم افزار دیگر را چک می کردم (هر دو نرم افزار مربوط به یکی از پروژه های خودم بودند و می خواستم کپی غیر مجاز از برنامه ام را تشخیص بدهم) با گیر دادن آنتی ویروس مواجه شدم. یادم نیست اما فکر می کنم Eset smart internet security بود. فکر می کنم همین آنتی ویروس برای نرم افزار شما هم گیر بده. من چون روی سیستمم Installer آنتی ویروس Avira داشتم دیگه Eset Smart را امتحان نکردم. وقت کردید خودتون یک تستی بکنید...

      اصولا باید گیر بده چون فرض کنید یک هکر بخواهد اطلاعات کارت بانکی افراد را بدست بیاورد. از همین روش باید استفاده کند. یعنی یک برنامه مقیم در حافظه که زده شدن دکمه های صفحه کلید را روی برنامه های دیگر از جمله مرورگر اینترنت مانیتور می کند...

      لازم به ذکر هست که این بحث را از جنبه ی ریزه کاری های حرفه ای میان کشیدم و امیدوارم سوء تفاهم پیش نیاید. موفق باشید.


      [ ارسال جوابیه ]

        AminSoltani (امتیاز : 1)
        توسط AminSoltani در مورخه : چهارشنبه، 30 مرداد، 1398
        سلام
        دوست عزیز الگوریتم تشخیص اسپایور که انتی ویروسها دارند به این سادگی نیست که برنامه ای ترند برنامه دیگر را پیگیری کرد به عنوان اسپایور شناخته شود. چندین عامل باید وجود داشته باشد از جمله ارسال, ذخیره سازی و ... به منابع ناشناخته


        [ ارسال جوابیه ]

          a_computing_engineer (امتیاز : 1)
          توسط a_computing_engineer در مورخه : چهارشنبه، 30 مرداد، 1398
          سلام.
          کاملا درست می فرمایید چون مطلب را خلاصه نوشتم، منظورم را نتونستم برسونم.
          ببینید مهندس، هدف چک کردن مشخصات ظاهری برنامه نبود بلکه می خواستم ببینم کدهای برنامه ی مدنظر همان هایی است که من خودم نوشته ام یا نه اون برنامه توسط فرد دیگری نوشته شده. فرض کنید برنامه ای به نام A درخواست سرویسی به وب سرویس خاصی ارسال می کند. قرار بود سرویس فقط به کپی های نرم افزار خودمان داده شود و اگر نرم افزار های دیگری که توسط ما نوشته نشده اند درخواست سرویس بدهند، پاسخ داده نشود.
          برای این منظور برنامه ای پشتیبان به نام B باید بایت به بایت برنامه ی در حال اجرای A را از روی دیسک می خواند و به وب سرور ارسال می کرد تا در آنجا چک شود آیا نرم افزار A که درخواست فلان وب سرویس را داده، را خودمان نوشته ایم یا نه. فکر می کنم آنتی ویروس Eset Smart Internet Security روی سیستمم نصب بود که برنامه ی B را به محض اجرا شدن متوقف می کرد. البته این اتفاق برای چندین سال پیش بود و صد در صد جزئیات پروژه را فراموش کرده ام.
          با تشکر.


          [ ارسال جوابیه ]