Japanese, English

Edgeknock

Presented by Takuto YANAGIDA.
Updated: October 13, 2013.

アプリケーションの紹介

EdgeknockはWindows用のアプリケーション・ランチャ(ローンチャ)です.登録したアプリケーションを,「画面の端をコンコンと2回ノックする」(Edgeknockジェスチャと名づけました),「画面の4つ角にカーソルを持っていく」,「登録したホット・キーを押す」のいずれかの方法で起動させることが出来ます.

画面の端をノックする方法で起動させる場合,いちいちメニューが出ることもなく,ボタンを押す必要もありませんので,すばやい起動が可能です.また,4つ角による方法やホットキーによる方法で起動するように登録することで,そのアプリケーションが常駐機能を持っていなくても,常駐しているかのように素早く起動できます.さらにEdgeknock自体も非常にコンパクトに作られています.

バージョン:1.21(2013年10月13日)
動作環境:Windows Vista, 7, 8以降
配布条件:フリーウェア(改変後の配布に制約なし)

使い方

起動すると,画面中央に「Edgeknock」と表示され,すぐに消えます.画面の左縁の上3分の1(角でないところ)をマウス・カーソルでコンコンとノックして(突っついて)下さい.電卓が起動すれば成功です.また,サンプルとして,画面左下角にマウス・カーソルを移動させたとき,Ctrl+Shift+Cキーを押したときも同じく電卓を起動するように設定してあります.

起動するアプリケーションやノックの感度はINIファイルを編集することで行うようにしました.INIファイルの変更を監視しているので,編集後保存すると,自動的に反映されます.このソフトを終了するにはもう一度実行ファイルを開いてください.

前バージョンからの改良点

詳しい解説

ノック・ジェスチャ

スクリーンの四つの辺の特定の位置に一定時間以内にマウス・カーソルを2回連続で移動させる動作をノック・ジェスチャと呼んでいます(図1).このときに,特定のキーやボタンを押している必要はありません.2回連続で移動させることを要求しているので,通常のマウス操作によって誤ってコマンドが実行される恐れは少ないと思われます.Edgeknockはスクリーンの四つの辺をそれぞれ一定数に区切り,その位置ごとにコマンドを割り当てることによって,アプリケーション・ランチャとして実装したものです.位置型のジェスチャでありながら,20程度のコマンドを登録することが出来ます.さらに,位置とコマンドとの対応関係は,パタンとコマンドとの対応関係よりユーザにとって覚えやすいものである可能性があります.


図1 ノック・ジェスチャ(スクリーン左端の場合).

ノック・ジェスチャの利点と欠点はまとめると以下の通りです.

カーソルを画面端まで移動させることを欠点に挙げましたが,実際にはデスクトップ外の無限に広がる平面へ移動させることになるので,特定の領域に移動させるよりも負担は少ないです.

ここで提案しているノック・ジェスチャはアプリケーションを起動する際に用いることによって,実世界におけるドアを叩いて音を鳴らし中にいる人を呼び出す行為であるノックのメタファとなっています.そのため,ジェスチャとアプリケーション・ランチ機能との対応関係を習得しやすいものと考えます.

認識アルゴリズム

ノック・ジェスチャの認識は,常にマウス・カーソルの座標(mouse_x)を監視することによって行われます.なお,ここでは説明を簡略化するため,スクリーン左辺に対するノックのみを扱い,また,カーソルのy座標は無視します.スクリーンの端からの一定幅(0 ≤ x ≤ edge_width)をエッジ領域(E)とします.また,エッジ領域からの一定幅(edge_width < x ≤ no_effect_width)を無効領域(NE)とします.さらにそれ以外の部分(no_effect_width < x)を通常領域(N)とします(図2).ノックは,最初Nに位置していたマウス・カーソルが,一定時間(limit_time)以内に,N→E→N→Eと移動することによって認識されます.この移動をアルゴリズムでは状態遷移とみなし,一定時間以内に最終状態まで到達しなかった場合,ノック・ジェスチャに失敗したとみなし,初期状態に戻ります.


図2 ノック・ジェスチャのパラメタ(スクリーン左端の場合).

素早くノック動作をした時に,端の1ピクセルにカーソルが到達しない場合を想定し,有効範囲をスクリーンの端の1ピクセルよりも広く設定できるようにしました.また,カーソルが震えただけでN→E→N→Eと移動したとみなされることを防ぐため,無効領域を設けました.ジェスチャ認識のアルゴリズムは次の通りです(図3).

get_area()
  if 0 <= mouse_x and mouse_x <= edge_width
    return 1
  if edge_width + disabled_width < mouse_x
    return -2
  return -1

check_kick()
  state := 0
  repeat
    area := get_area()
    if state > 1 and now_time - last_time > interval
      state := 0
    else if state = 0 or state = 2
      if area = -2
        state := state + 1
    else if state = 1
      if area = 1
        state := state + 1
        last_time := now_time
    else if state = 3
      if area = 1
        return true
図3 疑似コードによるノック・ジェスチャ認識アルゴリズム.