at_pictureのタグ付けを分担できるようオンラインで共有するためのツールを作った

at_pictureのタグ付けを分担することが出来ると楽になるはず

説明を色々書くより動作を見た方がわかりやすいと思うので以下参照。

※元画像はここ
この画像に対してat_picture上でタグ付けをしようとすることを想定します。付けたいタグは、「マリ」「エヴァ」「iPod風」「アニメ」「お気に入り」とします。自分が使うタグについては、あらかじめ.tagsファイルに次のように記述しておくとします(起動後に追加するやり方は後述)。

mari : マリ
ipod : iPod
eva : エヴァ
anime : アニメ
kokaku : 攻殻機動隊
kabegami : 壁紙
okini : お気に入り

最初のローマ字は読み仮名として内部的に利用されるだけなので、全部丁寧に書く必要は無いけど、重複している場合は何のエラーも出さずに解釈するので注意が必要です。さらに、「マリ」は「エヴァ」に含まれ、「エヴァ」は「アニメ」に含まれる等のタグ同士の内包関係がある場合、.tagsファイルに次のように記述しておきます。

マリ < エヴァ
エヴァ < アニメ
タチコマ < 攻殻機動隊
攻殻機動隊 < アニメ

picdb.exeを起動すると画面右下あたりにこんな感じのボックスが出るはず。

ここでおもむろに「i」を押すと、上記の定義上、iで始まるタグ名はこれしかないので自動的に「iPod風」が選択されます。

もしここで「k」を押した場合、複数ありうるので次のように表示されます。

この候補順は選択された回数が多いほど下に表示されるようになっており、複数表示されているこの状態で「Enter」を押すと自動的に一番下の候補が選択されます。
「m」を押すと、同様に定義上、「マリ」しか該当しないので「マリ」が選択され、さらに「マリ」に関しては内包関係が定義されているので、マリを内包する「エヴァ」、エヴァを内包する「アニメ」がタグとして自動的に選択されます。これにより、今回であればキーストローク2回で4つのタグを選択できたことになります。

こんな感じ(ちなみに間違えた場合はテキストボックスが空欄状態で「BackSpace」を押すと、最後に選択したタグとその内包関係にあるタグが消えます)。この状態で「Enter」を押すと、at_picture側へタグ情報を書き戻します。

ちなみにこのとき、内部的にはキーボードショートカットをメッセージ送信してクリップボード経由で送りつけているので、パフォーマンスの悪いPCやなにか重い処理をしているとメッセージが届かず失敗することがありえます。もちろん、クリップボードになにか大切なデータがある場合も消えてしまうので要注意。さらに、このタグの書き戻しのタイミングでPicDBのネットワークDBへ「画像のハッシュ」と「付けたタグ」の情報が自動送信されます。
一方、例えば「お気に入り」というタグは個人的なものなので共有する意味がない(or共有したくない)場合は、次のように.tagsへ記述しておくことでネットワークDBへは自動送信されません。

お気に入り -

登録すると、自動的に次の画像に遷移し、その画像のハッシュ情報を取得してタグ情報があるかをネットワーク上へ問い合わせます。

※元画像はここ
ここでは、さっきの画像へタグを付けている間に、この画像へ誰か別の人がタグ付けをしてくれていたと想定します。つまり、ネットワーク上のpicdbに当該画像のハッシュ情報とそれに付与されたタグ情報(ここでは「iPod風」と「タチコマ」)がある場合、picdbは最初からその二つのタグを選択状態にして表示します。ただ、「タチコマ」というタグの読み方は自分の環境では定義されていないため、次のように読み方の定義を要求されます。

「Escape」か「キャンセル」か空白のまま「OK」でそのタグの登録処理は飛ばされます。このとき、こちらでは既にタチコマは読み方の定義はされていなかったものの、「攻殻機動隊」や「アニメ」に内包されている、という定義はあるため、オンライン上のDBのタグ情報にそれらを付与してタグの選択状態を構成します。

この場合、「Enter」を押すだけで「iPod風」「タチコマ」「攻殻機動隊」「アニメ」が登録されることになります。

以上が基本的な処理の流れになります。
以下はその他のポイントについて。

今at_pictureで表示されている情報をpicdbに把握させる場合は、F5を押すことでat_pictureと同期し、当該画像のハッシュ値にひもづくタグ情報を取得します。

一括で自動処理したい場合、空欄状態で「F9」を押すことで、数秒間隔で自動的に画像を遷移し、ネットワーク上のタグ情報をロードする自動モードに入ります(もう一度「F9」を押すことで止まります)。ある程度このツールのユーザが増えてきて、そこそこの確率でタグ情報が取得できて、しかも自分の手持ちの画像枚数が数百枚あったりするとき、寝る前にこれを押しておくと、朝には一定枚数が自動的にタグ付けされている、ということが可能になります。そういう風になると便利だよなぁ、と思って作ったものなので、基本的に誰かが付けたタグ情報は自動的に共有されるような仕組みになっています。少なくとも現時点では鯖側では誰がなんの画像になんのタグを付けたかはログ採ってない(といっても本当にそうなっているかは証明できないからアレだけど)です。

その場でタグ定義を追加したい場合、テキストボックス内に

!yomikata : 読み方

という形式(:の前後に半角スペースを1つ)で入力して「Enter」で登録されます(.tagsファイルにも自動的に追加されます)。タグの内包関係は.tagsファイルに書く必要があります。

課題

  1. at_pictureとのデータのやりとりはクリップボードを介してキーイベントをたたき込んでショートカットでやっているため、画面がチラつくし、パフォーマンスの悪いPCだと正常に動作しない可能性が高い。要するにパフォーマンスが悪い。at_picture側でプロセス間通信あたりを実装してもらえると楽になるけど(DLLを介してやろうと思えば自作はたぶん可能)、やっぱりDLLの仕様がよく把握できなかったので現状ではこんな感じ。
  2. 意図しないタグ付けミスや意図的な嘘タグ登録などへの対策は一切採っていない(イタズラされるほどユーザ増えないだろうと想定)上、無料のレン鯖なのでおおよそ2〜3万枚のタグ情報で容量を使い切ると思う。もしそれなりに有効活用されるようならその時にどうするか考えます。
  3. いちいち読み仮名登録めんどくさいしmigemo実装した方が楽、と思って実装はしたけど無茶苦茶重くてちゃんとキャッシュ機構を作らないと使い物にならないことが分かってあとから意図的に外したので、現状ではmigemo対応はしない予定。

インストール方法

  1. ここから落とす
  2. .tagsをメモ帳かエディタで開いて好きに編集する(文字コードSJIS限定)
  3. picdb.exeを起動する
  4. at_picture.exeを起動する

アンインストール方法

  1. picdb.exeと.tagsと.tags.cache(自動生成されるキャッシュ)を削除する
  2. レジストリは使っていません