HUION 液タブのキャリブレーションを正確に行う方法

amazon サイバーマンデーセールで HUION の液タブを買ったのだが、キャリブレーションが難しく、というかガバガバで設定を詰められない。しかし、ファイルに書き出して直接数値を編集することが可能だった。

「設定エクスポート」を実行すると xml ファイルが書き出される。これをエディタで開き「calibrateFactor」で検索すると冒頭の Preset ノードの他に HUION_ から始まる機種別のノードが見つかる。見つからない場合は一度キャリブレーションを行ってから書き出す。 キャリブレーション設定は calibrateFactor0 から calibrateFactor6 まで、7つの値で保存されている。これを直接書き換えて「設定インポート」することで反映させることができる。

調べた結果これらの値は以下のようになっていた(仮ラベルというのは勝手につけた名前なのでどこにも載っていない)。

キー 仮ラベル 説明
calibrateFactor6  scale-base スケールの基準
calibrateFactor0  scale-X X軸のスケール
calibrateFactor4  scale-Y Y軸のスケール
calibrateFactor2  offset-X X軸の位置補正
calibrateFactor5  offset-Y Y軸の位置補正
calibrateFactor3  tilt-X X軸の傾き補正
calibrateFactor1  tilt-Y Y軸の傾き補正

座標は左上が原点。左利き設定(180度回転)だと左下が原点となる。

スケールで基本的な反応領域を決める。calibrateFactor6 を固定してcalibrateFactor0calibrateFactor4 を変更する。原点を基準にしてポイントされた場所が遠かったら値を減らす、近かったら増やす。

位置補正でオフセットを修正する。正の値なら右か下に、負の値なら左か上にずれる。どのくらいずれるかはスケールによって変わる。13インチでスケールが65,536の場合、128,000,000で約1cmとかなり大きな数値である。

傾き補正は原点から遠くなるにつれて逆軸のオフセットが大きくなる。例えば calibrateFactor3 を設定すると、右に行くにつれて上下のオフセットがだんだん大きくなる。これの使い道はよく分からない。平行線が傾いてしまうような大画面向けか。

補正なしの初期値にするには、スケール3種を全て同じ値にして、他は0にする。スケール値はなんでもよさそうだが、書き出されたファイルは65536が基準になっていたのでそれに倣う。順番を変えたりコメントを挿入しても問題ないので、分かりやすいように書き換えると良い。

<!-- scale-base -->
<calibrateFactor6>65536</calibrateFactor6>
<!-- scale-X -->
<calibrateFactor0>65536</calibrateFactor0>
<!-- scale-Y -->
<calibrateFactor4>65536</calibrateFactor4>
<!-- offset-X -->
<calibrateFactor2>0</calibrateFactor2>
<!-- offset-Y -->
<calibrateFactor5>0</calibrateFactor5>
<!-- tilt-X -->
<calibrateFactor3>0</calibrateFactor3>
<!-- tilt-Y -->
<calibrateFactor1>0</calibrateFactor1>

scale-X を1000減らして offset-X を30000000増やす、すると端がずれてしまうので scale-X を500増やす、などと、編集とインポートを繰り返しながら試行錯誤することになるかもしれないが、あやふやな9点ポイントよりは良い結果が得られるだろう。

注意点としては「設定インポート」した後に「適用」を忘れず押すこと。HUION の液タブを複数機種使っている人は xml ファイルに複数の設定が書き込まれていると思うので間違えないようにすること。

Karabiner-Elements と Hammerspoon を持って Sierra に行こう

完全に出遅れた感のある内容ですが、Karabiner を捨て、Karabiner-Elements と Hammerspoon をインストールし、Sierra に移行しました。

Karabiner
Karabiner-Elements
https://pqrs.org/osx/karabiner/

Hammerspoon
http://www.hammerspoon.org/

追記: Sierra の標準機能でキーリマップする方法があったので Hammerspoon だけ握りしめて Sierra に来ました。
http://qiita.com/hetima/items/b475997008dabd567da0

Karabiner で行っていたカスタマイズは単純なリマップと、「かな」キーをモデファイキーとして使い、空打ちした場合「かな」を出力するというものでした。試しに作ってみた程度で本格的には導入していませんでしたが。

とりあえず空打ち可能なモデファイキーを Hammerspoon で実現することにしました。どうせなら汎用的に使えるようなものにしようとライブラリを作りました。

hyperex
https://github.com/hetima/hammerspoon-hyperex

というわけでこの記事は実質的に hyperex の宣伝です。

僕の init.lua はこんな風になっています。

local KEY_EISU = 0x66; local KEY_KANA = 0x68;
local KEY_LBRA = 30; local KEY_RBRA = 42;
local KEY_ATMARK = 33; local KEY_COLON = 39;

local hyperex = require('hyperex')
local hx = hyperex.new('f18'):setInitialKey(KEY_EISU):setEmptyHitKey(KEY_KANA)
hx:bind(KEY_LBRA):to('8', {'shift'}) --(
hx:bind(KEY_RBRA):to('9', {'shift'}) --)
hx:bind(KEY_ATMARK):to('3', {'shift'}) --#
hx:bind(';'):to('2', {'shift'})
hx:bind(KEY_COLON):to('7', {'shift'})
hx:mod({'cmd'}):to('any')

冒頭でよく使うキーを定数化しています。

local hyperex = require('hyperex')
local hx = hyperex.new('f18')

hyperex.luainit.lua と同じ ~/.hammerspoon に配置して require() で読み込み、new()インスタンスを作ります。
コンストラクタにモデファイキーにしたいキーを渡します。かな キー(PC 用キーボードなので正確には変換キー)を Karabiner-Elements で F18 にリマップしているので、このインスタンスかな キーを押したときに作動します。リマップした理由は後述します。

hx:setInitialKey(KEY_EISU):setEmptyHitKey(KEY_KANA)

コンストラクタに続けてメソッドチェーンで設定をしています。setInitialKey() は基本キーが押されると同時に出力されるキーです。この例では かな を押すとただちに 英数 が出力されます。

setEmptyHitKey() は基本キーを押したけれど何もせずに離した場合に出力されるキーです。いわゆる空打ちです。この例では かな が出力されます。Hammerspoon では hotkey に使ったキーと同じキーを含むイベントを直後に送出できない仕様があります。ここで かな を出力するためには かな 以外のキーを基本キーにしないといけないのでリマップしているというわけです。

これらの設定はもちろん省略可能で、何も設定しなければプレーンなモデファイキーとして動作します。

hx:bind(';'):to('2', {'shift'})

初期設定が終わったらショートカットを登録していきます。例えばこれは基本キーを押しながら ; キーを押したら shift+2 を出力するという設定です。

hx:mod({'cmd'}):to('any')

そして最後のこれは、すべてのキーに cmd モデファイアを付け足して出力するという設定です。基本キー+a などと打ったら cmd+a が出力されます。基本キー+shift+a などと他のモデファイキーも押していたら cmd+shift+a となります。
hotkey に使ったキーと同じキーは使えないと書きましたが、hyperex で hotkey を使っているのは最初に押す基本キーだけで、他は eventtap を使っているのでこういうことが可能です。
対象キーが重複する場合は、先に設定した方を優先します。また、 mod() よりも bind() が常に優先されます。

mod() を活用すれば「矢印キーは cmd+opt+矢印、FKey は cmd+ctl+* その他は cmd+*」というような変則的なモデファイキーも作れます。

hx:mod({'cmd', 'alt'}):to('left', 'right', 'down', 'up')
hx:mod({'cmd', 'ctrl'}):to('fkeys')
hx:mod({'cmd'}):to('any')

追記:モデファイキーを hyperex の基本キーに設定できるようアップデートしました。左右のコマンドキーを空打ちするとそれぞれ 英数かな に変更する設定はわずか2行です。

local hxLCmd = hyperex.new('cmd'):setEmptyHitKey(0x66)
local hxRCmd = hyperex.new('rightcmd'):setEmptyHitKey(0x68)

これまで Lua には触れたことがなく多少の不安がありましたが、変態的で面白い言語ですね。

追記:ターミナル.app の「キーボード入力のセキュリティを保護」をオンにしていると、Hammerspoon の eventtap 監視機能が無効になるようです(keyStroke や hotkey は使えます)。hyperex はこの影響を受けます。保護オンにしたまま回避するのは難しいと思われます。

一人で Slack を始めてみた

チームチャット系の web サービス、存在は知りつつも使う機会に恵まれず傍観していたのだけど、HipChat が無料化されたのを機に Slack に登録してみました。一人で。HipChat も一応アカウント取ったんだけど、Slack の方がなんかオシャレだったので。

とりあえず一人で使ってみると、どこにも発信されない独り言をぼそぼそ呟いているだけで悲しくなれます。Slack には最初から bot がいるので多少寂しさは紛れます。URL を貼ると要約を自動で展開してくれるので賑やかです。twitter integration を使って自分の tweet を流し込んでみたり、一人でもいろいろ活用する術はあるのではないでしょうか。短いメモを断続的に記録していく Day One 的な使い方が適していると思われます。
日本語の検索は問題なくできるのですが、上記の URL を貼って自動で展開される要約部分はヒットしません。twitter integration で流し込まれる本文も同じ扱いなので検索できません。非常に惜しいところです。

f:id:hetima:20140529224457j:plain

日々のメモをため込んでおくくらいなら無料プランでもじゅうぶん使えますが、有料プランにすると、5個しか使えない integration が無制限になったり、検索できる過去ログの件数もやっぱり無制限になったりと便利なのですが月8ドル、1年分一括でも80ドルとかなり高いです。有料プランを検討するなら月2ドルの HipChat の方が有利です。ただし、Slack は紹介リンクで100ドル、登録途中のアンケートに答えると100ドル、合計200ドルのクレジットがアカウントにチャージされるので、一人なら約2年間無料で使えます。このクレジットは60日で期限が切れる模様ですが、期限が切れる前に有料プランにすると全額使い切るまで有効だと FAQ に書いてありました。どうせ失効するなら使わないと損ですが、有料プランに移行するときにクレジットカードの登録が必要です。チャージされているクレジットが初回支払い額より多ければカードから引き落としはされません。登録後すぐにカード情報を削除しても問題ありません。

このリンク から登録すると紹介リンクボーナス100ドル貰えます。

最初は100ドル単位でばらまいて採算取れるのか不思議でしたが、これはユーザーに対してではなくチームに対してチャージされるものなので、10人参加しても100ドルx10にはならず、多人数のチームであればわりとすぐに100ドル消費してしまいます。逆に一人であれば100ドルでかなりの期間遊べるというわけです。

既にどこかのチームに所属している人もトップページから登録すると自分が管理者になるチームを作れます。同じメールアドレスを使ってもチームごとに別アカウント扱いです。自分が管理者になる新規チームを作るときには紹介リンクやアンケートが使えるので200ドルチャージされます。プライベートな場所、あるいは Slack の動作確認などに活用できるかと思われます。

WWDC 2014 予想 #expectWWDC

はてなのエンジニアもWWDC 2014に参加します!皆さんもWWDCの予想をしてみませんか!! #expectWWDC - Hatena Developer Blog

Shift キーを12個増やす

KeyRemap4MacBook を使います。private.xml を開いて、以下のような item を追加して ReloadXML。

単独で押すと普通に FKEY の挙動。押したまま他のキーを押すと Shift を押しながら〜の挙動になり FKEY は発動しません。 これで Shift キーから遠い上段の記号類のすぐ上に巨大な Shift バーが追加されたようなもの。片手で楽々入力できます。

この設定を施して1年ほど経ちますが、体に覚え込ませるまではならず、結局 Shift キー押すことの方が多いです。FKEY 遠いですもんね。

FKEY の判定がキーアップ時になってしまうため、困る場合は適宜 autogen タグを減らしましょう。

Finder のリスト表示に特別な項目を表示する

さっき気付いたんですけど Finder のリスト表示に音楽ファイルのアルバムとか画像の大きさとか表示することができるようです。

特定の名前がついたフォルダ、またはそのサブフォルダをリスト表示にしていると、表示できる項目が増えます。ヘッダのコンテクストメニューから追加することができます。

フォルダ名と追加される項目の対応は以下の通り。他にもあるかもしれません。

Music : アルバム、作成者、再生時間、年、ジャンル、レート、タイトル、トラック番号
Image Pictures : 大きさ、解像度
Movies : 大きさ、再生時間、タイトル、コーデック

これはホームフォルダにある Music、Pictures、Movies 用の特別なオプションなのだろうと推察されますが、ホームフォルダ直下に限らずどこに置いていても、フォルダ名さえ一致していればこのオプションが使えます。
1文字目は大文字である必要があり、小文字の「music」は認識されません。「Musics」「ImageFiles」というように該当の単語で始まっていれば認識されます。

Dropbox から Copy に乗り換えた話と同期がとれなくなったときの対処

Dropbox が一時不安定になったのをきっかけに同種サービスの Copy に乗り換えてみようと思った。サーバに接続できないトラブルはどちらにしても起こりえるし、Dropbox はほぼ復旧済みのようだが、単純に Copy の方が容量が多いという理由。

実際使ってみると、クライアントアプリケーションの使い勝手はほぼ同じ。同期するフォルダは1箇所しか指定できないが、項目ごとに同期を外せるのが便利だったので、しばらくは Copy で行こうと思う。

「項目ごとに同期を外せる」利便性をひとつ挙げると、同期はしたくないがバックアップはしておきたいていうフォルダを作って同期をオフにしておけばクラウド上にのみ保存されるバックアップになる。web ブラウザからアップロード/ダウンロードする手間があるけれど。まとめてダウンロードしたくなったら同期をオンにすれば勝手に全部降ってくる。

f:id:hetima:20140113211615j:plain

Windows マシンにあるいくつかのフォルダを Mac に保存したいという目的があった。同期するフォルダは1箇所しか指定できないが、Windows 側でショートカットを Copy フォルダ内に作れば複数の場所を集約できる。
まず同期フォルダのトップに「Windows」というフォルダを作ってこれを Windows との同期専用にする。Windows 上ではこのフォルダ以外の同期チェックを外しておく。「Windows」フォルダの中に同期させたいフォルダのショートカットを入れる。きちんとフォルダとして同期されるし、オリジナルのフォルダに Copy 管理下に置かれている印が付く。Mac 側ではもちろん普通のフォルダとして扱われる。ただしショートカットであるため名前に .lnk の拡張子が付いている。これを変更すると Windows のショートカットが壊れてしまうので危険。シンボリックリンクかジャンクションにしておいた方がよさそう。
それから Copy フォルダのトップに新たなフォルダを作るとすべてのデバイスで同期する設定になっているので、同期させたくないデバイスではその都度同期を外す必要がある。

環境を構築している時に乱暴な構成変更などをやって、同期がうまく降ってこないことが何度かあった。そんな時は項目ごとに同期を外せる機能を利用して、対象フォルダの同期オフ→同期オンを行うとうまく行くことが多い。同期オフにするときローカルファイルを削除するかどうかを選べる。クラウド上が最新でフォルダの容量が大きすぎない場合は一旦削除した方がスムーズに再同期できるんじゃないかな。

というわけで今のところサブ Windows のファイルをメイン Mac に吸い上げるという目的でしか使っていないが、デバイスごとに同期する項目を選択できるのが非常に便利だった。容量も無料で15GB、紹介リンク経由で登録すれば +5GB で 20GB とかなり多いのでおすすめ(私の紹介リンクはこちらです https://copy.com?r=NA1tE1)。このリンク経由で登録した後、MacWindows かモバイルアプリをインストールしてアプリからログインすると 5GB 増える。